Мод 3xPZEM-004t для ESP-01

В качестве развлечения сделал модификацию кода из этой статьи для запуска на самом простом модуле на базе esp8266 – ESP-01.

Отличие модуля – малое число выводов, “рабочих” – только 4, из них 2 – штатный RX/TX и еще 2 – GPIO.

Вообще PZEM-004t позволяет задать ему внутренний адрес, что дает возможность целиком запараллелить несколько модулей и использовать в дальнейшем для общения с ними только одну шину. Не пробовал, да и это подразумевает необходимость предварительной манипуляции с измерителем, чего хотелось бы по возможности избежать. Поэтому максимально задействуем те линии, что есть. Отсюда:

  • никакого дебага через serial, все функции связанные с ним вырезаны.
  • нет лишней линии, чтобы подключить ds18b20, так что код, связанный с опросом термодатчиков и выводом данных с них, убран.
  • Все RX-линии измерителей соединены и подключены на TX-выход ESP-01. Иначе говоря, запрос шлется на все измерители сразу, ответ слушается только от нужного. Отсюда всплыл небольшой косяк, который пока никак не решал (точнее, добавил небольшие sleep’ы для 2 и 3 измерителя, но это не особо помогло) – при вызове индексной страницы в iframe запрашиваются сразу 3 подстраницы (для каждого из измерителей), в итоге каждый измеритель закидывается запросами и не всегда дает ответ по некоторым из параметров. Если вызывать отдельную страницу для измерителя, то проблемы нет. TX’ы измерителей – соответственно, RX, GPIO0 и GPIO2 на модуле.
  • “Набортный” светодиод на модуле висит на RX-линии для 3-го измерителя, поэтому для того, чтобы помигать им, когда модуль подключается к Wifi, вывод переводится в режим выхода, после чего возвращается обратно. Светодиод на измерителе, понятное дело, мигает вместе с ним.

Еще из особенностей, выявленных в процессе отладки прошивки:

  • Отлаживать на отладочной плате не вышло (забавно, да) – наличие лишних “подтяжек” на ней мешало формировать сигналы: например, GPIO0, на котором висит кнопка Flash, подтянут к плюсу, в итоге оптопара измерителя (в котором, в свою очередь, есть свои “подтяжки”) не могла “притянуть” ногу к земле. Отключение модуля от отладочной платы и сборка всего на макетке решила проблему.
  • В Arduino IDE выбираем плату “Generic 8266”, в таком случае в меню есть возможность выбрать разбивку внутренней памяти – выбрать соотношение между SPIFFS и OTA. Выбираем вариант с максимальным объемом для OTA – из-за того, что на ESP-01 всего 1 МБ памяти (против 4 на ESP-12), если напрямую зашить код из прошлой статьи, то OTA-обновления не хотели работать – под них просто не оставалось места.
  • После выбора “Generic 8266” сборка валилась на строке определения 2-го измерителя – коду не нравилась конструкция pzem2(0, 1) – ругалось именно на “0”. Но если объявить ноль через переменную – все работало :).

Код PZEM_esp01

Одна мысль про “Мод 3xPZEM-004t для ESP-01”

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