Для повторения Вам понадобится:
Pzem 004T-100A: http://alii.pub/5wda7b
ESP32: http://ali.pub/5e1frn
M5stack: http://ali.pub/4snj9n
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Pzem 004T-100A – это модуль состоящий из основной части и ферритового кольца. Собственно ферритовым кольцом он меряет силу тока проходящую через провод ( точно так-же как токовые клещи).
Данный модуль умеет измерять:
Переменное напряжение.
Силу тока.
Потребляемую энергию в киловатт/часах.
Частоту сети.
Схема подключения нагрузки к модулю выглядит следующим образом:
Данные с этого датчика берутся по uart интерфейсу.
Общаться с данным датчиком будем в ESPHome.
В еспхоум существует несколько интеграций для датчиков Pzem.
Разница в ревизии платы. Например, если у Вас модуль Pzem 004T-100A любой другой версии кроме v3.0. То интеграция нужна pzem004t такая:
https://esphome.io/components/sensor/pzem004t.html
А если как у меня, у меня модуль Pzem 004T-100A v3.0. Для него интеграция нужна pzemac:
https://esphome.io/components/sensor/pzemac.html
Собственно на основе второй интеграции я сделал код, и он выглядит следующим образом:
uart:
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 9600
sensor:
- platform: pzemac
voltage:
name: "Pzem_voltage"
current:
name: "Pzem_current"
power:
name: "Pzem_power"
energy:
name: "Pzem_energy"
frequency:
name: "Pzem_frequency"
power_factor:
name: "Pzem_power_factor"
update_interval: 10s
Все, после добавления этого кода, и добавления интеграции в Home Assistant, у Нас будет отображаться примерно вот так:
На этом все, с датчиком вопрос в ESPHome я считаю решен.
Но в видео ниже я также показываю Как эти значения вывести на дисплей подключенный к ESP32. В моем случае это плата M5stack.
Код в ESPHome будет выглядеть следующим образом:
captive_portal:
uart:
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 9600
i2c:
sda: 21
scl: 22
scan: true
frequency: 200kHz
spi:
clk_pin: 18
mosi_pin: 23
miso_pin: 19
sensor:
- platform: pzemac
voltage:
name: "Pzem_voltage"
id: voltage
current:
name: "Pzem_current"
id: current
power:
name: "Pzem_power"
id: power
energy:
name: "Pzem_energy"
id: energy
frequency:
name: "Pzem_frequency"
id: frequency
power_factor:
name: "Pzem_power_factor"
id: powerfactor
update_interval: 10s
font:
- file: "fonts/Roboto-Medium.ttf"
id: font_roboto_medium22
size: 22
color:
- id: RED
red: 100%
green: 0%
blue: 0%
- id: BLUE
red: 0%
green: 0%
blue: 100%
- id: WHITE
red: 100%
green: 100%
blue: 100%
display:
- platform: ili9341
id: m5stack_display
model: M5Stack
cs_pin: 14
dc_pin: 27
led_pin: 32
reset_pin: 33
rotation: 0
lambda: |-
it.rectangle(0, 0, it.get_width(), it.get_height(), RED);
it.rectangle(0, 22, it.get_width(), it.get_height(), RED); // header bar
it.print(it.get_width() / 2, 11, id(font_roboto_medium22), RED, TextAlign::CENTER, "Power Monitor");
it.print(11, 33, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "Pzem_voltage");
it.print(11, 55, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "Pzem_current");
it.print(11, 77, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "Pzem_power");
it.print(11, 99, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "Pzem_energy");
it.print(11, 121, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "Pzem_frequency");
it.print(11, 143, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "Pzem_powerfactor");
it.printf(it.get_width() - 11, 33, id(font_roboto_medium22), WHITE, TextAlign::RIGHT, "%.1f V", id(voltage).state);
it.printf(it.get_width() - 11, 55, id(font_roboto_medium22), WHITE, TextAlign::RIGHT, "%.3f A", id(current).state);
it.printf(it.get_width() - 11, 77, id(font_roboto_medium22), WHITE, TextAlign::RIGHT, "%.1f Wt", id(power).state);
it.printf(it.get_width() - 11, 99, id(font_roboto_medium22), WHITE, TextAlign::RIGHT, "%.3f kW/h", id(energy).state);
it.printf(it.get_width() - 11, 121, id(font_roboto_medium22), WHITE, TextAlign::RIGHT, "%.0f Hz", id(frequency).state);
it.printf(it.get_width() - 11, 143, id(font_roboto_medium22), WHITE, TextAlign::RIGHT, "%.0f", id(powerfactor).state);
Сначала если вы этот код себе вставите, у Вас заругается на блок:
font:
- file: "fonts/Roboto-Medium.ttf"
id: font_roboto_medium22
size: 22
Это потому, что нужно закинуть шрифты формата .ttf
В моем случае используется шрифт Roboto-Medium.ttf
Который находится в папке fonts.
В общем нужно сначала в Home Assistant установить samba. Как это сделано у меня написано вот в этой статье:
Делаем сетевые папки на сервере HassOS Home Assistant с помощью аддона samba share
После этого нужно по пути \\ip address Home assistant\config\esphome – создать там папку fonts и кинуть туда шрифт в формате .ttf
У меня это выглядит вот так:
Все, после этого компиляция ESPHome не должна выдавать ошибок и все у Вас корректно загрузится.
По подробнее об этом я рассказал в видео: