Дружимся с ESP

Здравствуйте, коллеги и энтузиасты!

Последние пару лет практически все прототипирование несложных IoT-устройств я делаю на NodeMCU, хотя зачастую она и великовата по размеру, и дороговата, и избыточна по функционалу. А все потому, что имела неудачный опыт с ESP-01, которая совершенно не поддавалась прошивке. Сейчас пришло время преодолеть этот барьер и освоить другие железки, от которых мне нужно следующее - Wi-Fi и пины для подключения периферии.

В этой статье разберем подключение к платформе Интернета вещей наиболее популярных плат с интерфейсом Wi-Fi. Их можно использовать, чтобы управлять своим устройством дистанционно или чтобы снимать показания с сенсоров через интернет.

Несколько представленных в статье модулей (ESP-01, ESP-07, ESP-12E, ESP-12F) и плат (Goouuu Mini-S1, WeMos D1 mini и NodeMCU V2) базируются на контроллере ESP8266, использование которого позволяет простым и дешевым способом добавить в своё устройство беспроводную связь через Wi-Fi.

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

Последняя плата из тех, о которых я расскажу (ESP32 WROOM DevKit v1), построена на контроллере семейства ESP32 - более продвинутой по своим возможностям версии ESP8266.

Все представленные модели можно программировать и загружать прошивки через Arduino IDE точно так же, как при работе с Arduino.

  • ESP-01
  • ESP-07
  • ESP-12E
  • ESP-12F
  • Goouuu Mini-S1
  • WeMos D1 mini
  • NodeMCU V2
  • ESP32 WROOM DevKit v1

Настройка среды программирования Arduino IDE

По умолчанию среда IDE настроена только на AVR-платы. Для платформ, представленных ниже, необходимо добавить в менеджере плат дополнительную поддержку.

1) Открываем среду программирования Arduino IDE.

2) В пункте меню File (Файл) выбираем Preferences (Настройки). В окне Additional Boards Manager URLs вводим через запятую адреса http://arduino.esp8266.com/stable/package_esp8266com_index.json и https://dl.espressif.com/dl/package_esp32_index.json.

http://arduino.esp8266.com/stable/package_esp8266com_index.json, https://dl.espressif.com/dl/package_esp32_index.json

3) Нажимаем OK.

4) В пункте меню Tools (Инструменты) -> Board (Плата) выбираем Boards manager (Менеджер плат).

Находим в списке платформы на ESP8266 и нажимаем на кнопку Install (Установить).

6) Надпись INSTALLED сообщает, что дополнения успешно установлены.

7) Аналогичным образом устанавливаем дополнение для ESP32.

8) Теперь нам доступны к программированию платформы с модулем ESP8266 и ESP32.

9) Для подключения плат к платформе Интернета вещей используем библиотеку EspMQTTClient. Чтобы ее установить, в пункте меню Tools (Инструменты) выбираем Manage Libraries (Управлять библиотеками). Находим и устанавливаем библиотеку EspMQTTClient. Может появиться сообщение об установке дополнительных библиотек. Выбираем “Install all”.

Примечание - Также для работы с платами понадобится установить драйверы CH340 (WeMos и Goouuu) и CP2102 (для остальных). Их отсутствие повлияет на то, найдет ли Arduino IDE COM-порт, к которому подключена плата.

Код прошивки

Для прошивки всех используемых ниже модулей используем один и тот же код.

Основные функции:

  1. Установка Wi-Fi соединения.
  2. Подключение к объекту на платформе Rightech IoT Cloud по протоколу MQTT.
  3. Отправка рандомных значений по температуре ("base/state/temperature") и влажности ("base/state/humidity") каждые 5 секунд (PUB_DELAY).
  4. Получение сообщений о переключении света ("base/relay/led1").
#include "Arduino.h"
#include "EspMQTTClient.h" /* https://github.com/plapointe6/EspMQTTClient */
                           /* https://github.com/knolleary/pubsubclient */
#define PUB_DELAY (5 * 1000) /* 5 seconds */

EspMQTTClient client(
  "<wifi-ssid>",
  "<wifi-password>",

  "dev.rightech.io",
  "<ric-mqtt-client-id>"
);

void setup() {
  Serial.begin(9600);  
}

void onConnectionEstablished() {
  client.subscribe("base/relay/led1", [] (const String &payload)  {
    Serial.println(payload);
  });
}

long last = 0;
void publishTemperature() {
  long now = millis();
  if (client.isConnected() && (now - last > PUB_DELAY)) {
    client.publish("base/state/temperature", String(random(20, 30)));
    client.publish("base/state/humidity", String(random(40, 90)));
    last = now;
  }
}

void loop() {
  client.loop();
  publishTemperature();
}

Работоспособность кода будем проверять на платформе Rightech IoT Cloud, именно поэтому в качестве адреса MQTT-брокера указан dev.rightech.io. Идентификаторами клиентов служат идентификаторы объектов, созданных на платформе. Под каждую проверку я завела на платформе отдельный объект, именно поэтому во всех скринах кодов, которые будут далее представлены, отличается только строка <ric-mqtt-client-id>.

Прим. - Можно подключаться и к одному и тому же объекту, тогда можно использовать один и тот же код для прошивки всех плат без изменений, однако следите, чтобы в таком случае платы не подключались к одному и тому же объекту одновременно, иначе случится коллизия.

Если данная тема вам заинтересовала, полную версию читайте здесь.