ESP8266. Особенности программирования в Arduino IDE.

При работе с ESP8266 и модулях на базе этой микросхемы, есть некоторые особенности работы в Arduino IDE, отличные от привычных действий с контроллерами AVR.

Очень хорошо про это написано тут. На основе этого материала и своих наблюдений здесь я остановлюсь на некоторых встретившихся мне программных моментах .


Функция analogRead()

В ESP8266 есть один канал АЦП. Он может измерять напряжение в диапазоне 0.. 1.0V. На многих платах по входу А0 стоит делитель, его коэффициент деления надо учитывать при обработке считанного с АЦП значения.

Интересно, что АЦП позволяет измерять напряжение питания контроллера (не совсем так, как это принято в AVR). Для этого прежде всего нужно вызвать

ADC_MODE(ADC_VCC);

до void setup(). Например, сразу после #include. Само напряжение питания можно получить из ESP.getVcc(). Например:

int VCCesp = ESP.getVCC();

значение получаем в милливольтах. Надо учесть, что контроллер не отключает вход А0 при таком измерении. То есть, если на входе А0 стоит резистивный делитель, то он влияет на полученное показание.  Например у меня на плате Wemos D1 R1 считанное значение составляет 2996, хотя на плате стоит стабилизатор на 3,3В.


EEPROM

EEPROM в esp8266 является эмуляцией из Flash памяти, поэтому мы можем выбрать нужный размер. Перед началом работы нужно вызвать EEPROM.begin(4.. 4096) с указанием размера области памяти в байтах.

Для применения изменений в памяти нужно вызвать EEPROM.commit(). То есть по EEPROM.write(addr,dat) — записи в память не произойдет. После заполнения «буфера» с помощью write() — для области адресов, нужно вызвать  EEPROM.commit(), это и приведет к записи данных из «буфера» в EEPROM. Пример:

EEPROM.begin(16);
EEPROM.write(0,1);
EEPROM.write(1,2);
EEPROM.write(5,3);
EEPROM.commit();

В остальном работа с библиотекой EEPROM.h ничем не отличается.