При работе с 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 ничем не отличается.