Заметки по ESP

Накопилось некоторое количество вкладок в браузере и заметок, решил законспектировать.

  • https://ru.wikipedia.org/wiki/ESP8266 – старый / дешевый вариант модуля на популярном чипе. Может быть полезен там, где не нужен Bluetooth или надо сделать максимально дешевое устройство (т.е., например, там, где ставить ESP32 нет смысла). Собственно, есть чип – esp8266, есть более новый вариант – esp8285, где внутри уже есть своя память (например, в Sonoff Basic стоит именно esp8285). Есть модули, сделанные на базе чипа – ESP-01, ESP-02 и так далее. Обычно они на базе esp8266 с размещенным рядом чипом памяти (хорошо видно по ESP-01, где нет крышки).
    • Из полезных и часто встречающихся модулей – ESP-01, ESP-07 и ESP-12.
      • Первый – не сказать, что сильно отличается по размерам от остальных, но в целом – минимум выводов (8 штук, из которых 4 gpio, питание/общий и пара сервисных), оформленных как готовые пины с шагом в 2.54 мм, так что можно использовать разъемное подключение в готовой конструкции.
      • ESP-07 пригодится там, где нужно подключить внешнюю антенну для WiFi.
      • ESP-12 – популярный вариант для разных самоделок, используется, например, на NodeMCU. Развился до варианта ESP-12E, а потом и ESP-12F. Последние отличаются (помимо сертификации и улучшения в плане дальности связи у F-версии) прежде всего размером памяти у “F” – там 4 МБ, против 1 МБ у “Е”. Отличается еще режим прошивки (пока не смотрел, где там эта опция в Arduino IDE) – DOUT для “F” и DIO для “E”. У E/F-вариантов на торце есть выведенные пины, однако в обычных случаях их использовать не приходится (они параллельны внутренней микросхеме памяти), поэтому для распайки и дальнейшего использования в конструкциях вполне можно использовать такие платы.
    • Пинаут – особенно внимательно стоит смотреть на табличку, где в примечании есть “Boot fails”: например, к такому приводило использование D8 для подключения RX/TX у PZEM-004t. Использовать-то можно, но не в момент запуска: D8, он же GPIO15 – один из пинов, определяющих источник загрузки программы для чипа – в итоге цепь через оптопару просто глушила загрузку.
    • В варианте NodeMCU есть 2 набортных светодиода – один на модуле, один на “большой” плате. В остальных случаях остается только тот, что на модуле (D4).
OTA-обновления.
  • http://wikihandbk.com/wiki/ESP8266:Прошивки/Arduino/OTA-апдейты – подробно расписанное руководство по различным вариантам обновления прошивки по воздуху.
  • Вариант обновления удобно рассматривать (и интегрировать) на примере того, что есть в каталоге examples (file – examples – ArduinoOTA (в разделе examples for nodemcu 0.9, который должен появиться при добавлении соответствующих плат)). Технически все сводится к добавлению 3 заголовков – ESP8266mDNS, WiFiUdp и ArduinoOTA; описанию в разделе setup() необходимых параметров (например, пароля на функцию обновления или хостнейм для устройства), при необходимости – дебаг состояния (основная часть кода в примере) и функции ArduinoOTA.begin(); в setup() + ArduinoOTA.handle(); в loop(). Иначе говоря, для кода, где уже реализовано подключение к wifi и тому подобные сервисы, все сводится к

#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

setup() {

ArduinoOTA.begin();

}

loop() {

ArduinoOTA.handle();

}

При этом ESP’шка анонсирует себя в сети; посмотреть список анонсов можно командой (из пакета avahi-utils)

avahi-browse _arduino._tcp –parsable –resolve –terminate | grep ^=

В Arduino IDE скан без резолва, поэтому если модули имеют одинаковое имя в ArduinoOTA.setHostname(), то в списке доступных плат будет только одна запись. Как обходной путь – использовать ChipID в качестве части имени:

char tmp[15];
sprintf(tmp, "myhostname-%06x", ESP.getChipId());
ArduinoOTA.setHostname(tmp);


<Будет дополняться>

Одна мысль про “Заметки по ESP”

Добавить комментарий