Это старая версия документа!


Эксперимент 1. Привет, Мир!

После установки среды программирования, драйвера и подключения Лаборатории IoT к компьютеру, наконец, можно приступить к первому эксперименту.

Когда программисты впервые знакомятся с новым языком программирования, то первым делом они пишут программу «Hello, World!» (Привет, Мир!). Все, что она делает— это выводит эту приветственную надпись на экран. Никакой полезной функции такая программа, казалось бы, не несет, но это заблуждение. Главная задача этой программы— убедиться, что все настроено верно, и что всё работает. Только после этого можно двигаться дальше, к более сложным программам.

Приступим

Классическим «Hello, World!» в мире программирования микроконтроллеров является мигание светодиодом. Именно это и будет наш первый эксперимент. Ниже представлен листинг программы первого эксперимента:

Exp1.ino
  1. void setup() {
  2. pinMode(LED_BUILTIN, OUTPUT);
  3. }
  4.  
  5. void loop() {
  6. digitalWrite(LED_BUILTIN, LOW);
  7. delay(1000);
  8. digitalWrite(LED_BUILTIN, HIGH);
  9. delay(1000);

Введи код первой программы в среду программирования Arduino IDE. Это можно сделать тремя способами:

  1. Набрать код программы в Arduino IDE вручную
  2. Скопировать код и вставить его в Arduino IDE
  3. Скачать код в виде файла и открыть его в среде Arduino IDE. Чтобы скачать файл нужно нажать на его название над листингом (показано на рисунке красной стрелкой)

Так или иначе код программы должен оказаться в EsPy

Необходимо убедиться, что EsPy установлено соединение с Лабораторией IoT (Подробнее о том, как это сделать) и отправить листинг интерпретатору Python, который находится в микроконтроллере.

Результатом должно стать мигание синего светодиода в верхнем левом углу Лаборатории.

Не работает?

Если не получилось, то необходимо еще раз проверить подключение, убедиться, что соединение настроено верно. Для этого еще раз внимательно прочитать статью Подключение и настройка. Если все выполнено верно, но все равно не работает — Возможные проблемы и их устранение

Как это работает?

Теперь, когда первый эксперимент удался, самое время разобраться как и почему это работает.

В Arduino скетче обязательным является наличие двух функций setup() и loop(), они объявлены соответственно в строках 1 и 5. Функция setup() выполняется один раз после включения или перезагрузки микроконтроллера. В свою очередь loop() запускается после setup() и выполняется в бесконечном цикле пока на контроллер подано питание.

Для настройки вывода микроконтроллера используется следующая строчка:

  1. pinMode(LED_BUILTIN, OUTPUT);

Мы вызываем функцию pinMode и передаем ей в качестве первого параметра номер вывода LED_BUILTIN, а вторым параметром OUTPUT мы сообщаем , что хотим настроить этот вывод как цифровой Выход. LED_BUILTIN это псевдоним номера вывода 2, к которому подключен светодиод, установленный на микроконтроллере (для разных микроконтроллеров он имеет разный номер). Все выводы микроконтроллера имеют свой номер, именно по этому номеру и происходит работа с ними из программы. Выводы микроконтроллера также могут назваться портами GPIO (англ. general-purpose input/output по-русски Интерфейс ввода/вывода общего назначения).

Теперь мы можем влиять на состояние ножки микроконтроллера.

  1. void loop() {
  2. digitalWrite(LED_BUILTIN, LOW);
  3. delay(1000);
  4. digitalWrite(LED_BUILTIN, HIGH);
  5. delay(1000);
  6. }

Функция digitalWrite(pin, value) устанавливает низкий или высокий уровень на выводе согласно заданным параметрам: pin — номер вывода и value — значение, может быть LOW (низкий уровень) или HIGH (высокий уровень). Таким образом мы подаем или снимаем напряжение со светодиода, который подключен к этому выводу.

Зачем же нам delay(1000)? Все дело в том, что микроконтроллер работает очень быстро, исполняя миллионы операций в секунду. Он может тысячи раз в секунду зажечь и потушить светодиод. Это слишком быстро, чтобы человек смог что либо заметить. Чтобы приостановить исполнение программы мы и вызываем функцию delay(). В качестве параметра она принимает число миллисекунд на которое нужно сделать паузу. В нашем случае мы делаем паузу на 1 секунду (1000 миллисекунд = 1 секунде) после зажигания светодиода и столько же после его выключения.

Как Arduino понимает какой именно участок кода является телом функции, какой именно участок кода необходимо исполнять? Для этого в Arduino используются фигурные скобки { } после объявления функции. Как можно видеть в строках 1 и 5 стоят открывающие скобки {, а в строках 3 и 10 закрывающие. Вот участки кода расположенные { и } являются телом функции.

Остановка программы

В отличие от Python'а, выполнение Arduino скетча можно остановить только отключением питания микроконтроллера или загрузкой нового скетча.