Wi-Fi энергомонитор на PZEM-004t и ESP-12F

Доброго времени суток!

Давно хотел сделать измерение потребления электричества в квартире. Подумывал о разных приспособах, но все они как-то не вызывали доверия.

Датчики вроде ACS712 как-то не вызывали доверия (уж слишком хлипкими выглядели),  SCT-013-000 казались громоздкими.

И совершенно случайно мне попалась на глаза замечательная вещь - PZEM-004T:

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

(Кстати, есть версия с индикацией, подробнее обо всём на буржуйском сайте ).

Возможности модуля (подробнее можно посмотреть в даташите ):

Измеряемое напряжение: 60 - 280 В переменки;

Ток: до 100 А / 22 кВт;

Частота: 45-65 Гц;

По запросу может выдавать значение напряжения (В), тока (А), активную мощность (Вт), потребленную энергию (Вт*час). Еще можно выставлять сигнализацию на определенную мощность (в кВт), но, похоже, это касается только разновидности с экраном.

Киловатт-часы хранятся до 99 999 Вт*ч, потом идёт сброс в 0.

Есть кнопка сброса значения Вт*ч, ее нужно подержать 5 сек. В этот момент модуль не отвечает по TTL.

Схема подключения проста:

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост
А вот с управлением всё несколько печальнее.

Для получения данных нужно выставить адрес командой в порт "B4 C0 A8 01 01 00 1E", где B4 - собственно команда, C0 A8 01 01 это адрес 192.168.1.1, 00 просто плейсхолдер (используется только при задании значения мощности сигнализации), Е1 - контрольная сумма.

Для получения значения напряжения нужно отправить команду "B0 C0 A8 01 01 00 1A", где В1 - команда, потом опять адрес и контрольная сумма.

Нам придет ответ вида R = A0 00 E6 02 00 00 88, где А0 - метка ответа, Е6 - старший разряд (230 Вольт), 02 - младший (2 Вольта), 88 - контрольная сумма. Напряжение тут R[2]  + R[3] = 232 В.

Подробнее в даташите.

Использовал вот эту  библиотеку.

Добавляем энергомер в скетч:

#include "pzem-004t.h"

PZEM_004T pzem(10,11); // для общения используется SoftwareSerial, т.е. в случае ESP-12F можно использовать пины 0-5 и 12-15


void setup()

{

while(!pzem.setAddress(192,168,1,1)); // инициализируем. С любым адресом, лишь бы они отличались, если PZEM-ок несколько.

}

void loop()

{

float V = pzem.getVoltage(); //меряем напряжение

if (V > 0) Serial.println("V = " + (String)V + " Volts"); // значение "-1" это ошибка получения данных

delay(1000);

}

TTL-логика у PZEM-004T 5 В, вполне можно спалить порт ESP-шки, поэтому я, не выпендриваясь, сделал делитель напряжений на резисторах (рассчитать можно здесь):

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Кстати, у меня PZEM  +5В не давал, пришлось использовать отдельный БП на 5 В (для PZEM) и понижать до 3.3 В (для ESP) с помощью AMS -1117-3.3 и пары кондёров.

Для удобства решил еще добавить OLED-дисплей SSD1306 разрешением 128 х 64 с I2C:

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Библиотеку брал отсюда.

Если ESP его не видит, попробуйте поменять местами SDA и SCL или прогнать I2C device scanner, иногда заявленный адрес не соответствует фактическому.

Умеет даже в скролл и прогрессбар.

Команды, в принципе, в комментариях не нуждаются

display.init();

display.setTextAlignment(TEXT_ALIGN_LEFT);

display.setFont(ArialMT_Plain_16);

Шрифт любого размера можно сделать тут и добавить в "...\Arduino\libraries\esp8266-oled-ssd1306-master\src\OLEDDisplayFonts.h"

Лично у меня шрифт 50 размера для удобства чтения издалека.

На экран выводится потребление в Вт (999) или в кВт (1.8к), в зависимости от текущей нагрузки.

Чтобы не "гуляли" ноги, заодно приделал термометр Dallas DS18B20.

Ну и куда же, естественно, без IoT?)

Данные с энергомера будем выгружать в https://thingspeak.com/. Как с ним работать, я уже как-то  писал.

Все устройство поместилось в корпус на DIN-рейку на две позиции (или как оно называется?).

В тестовом варианте выглядело всё вот так:

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

ТТ висит на фазе удлинителя где-то за границами фото.

Полная съема выглядит так (да, мне всё еще лень рисовать нормальные схемы. Надеюсь, ничего не забыл)

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Традиционным методом ЛУТ сделана (не без косяков) плата (размеры примерно 30*58 мм, с вырезами под болты корпуса)

Слишком тонкая дорожка слева-снизу почти сразу оторвалась.

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Полностью собранный, но еще не отмытый счетчик (на том этапе еще показывал напряжения и ток. Что информативней показывать активную мощность, я решил позже):

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Готовое устройство на рейке выглядит так (включен комп + свет)

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Тут еще добавился чайник (на котором написано 2 кВт).

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Засёк также:

Комп (i3, 1060, 2 HDD, 20" TFT-моник) - 89 Вт в без нагрузки, 130 Вт в WoT / Dota 2

Комп в спящем режиме - 10 Вт;

Четыре 5 Вт LED лампы Е14 - 22 Вт;

Пылесос в холостую - 1,37 кВт (мощность 350 Вт / 1800 МАХ);

Комп на ночь выключается из розетки, ночью в темноте потребление около 12 - 15 Вт (не морозящий холодильник, роутер, может, зарядное).


В течении дня напряжение меняется примерно так (данные отсылаются каждые 5 минут). Можно заодно отслеживать качество напряжения в доме.

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Скетч, фотки и библиотеки в гугл-диске

Вроде бы ничего не забыл.

Если что, спрашивайте ;)

Спасибо за внимание!

Arduino & Pi

1.4K постов20.6K подписчиков

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

Нескромный вопрос.


Чтобы такие вещи знать (и уметь) это нужно на РТФ поступать?

раскрыть ветку (6)
1
Автор поста оценил этот комментарий

Нет, это простенькая поделка, которую осилит даже ардуинщик. А, кстати, это он и делал.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Мне всё это очень понравилось, только я совсем ничо не понял.

Лойс на всякий случай я всё ж таки поставлю.

2
Автор поста оценил этот комментарий
Терпение, умение гуглить и желание разобраться, этого хватит
раскрыть ветку (3)
Автор поста оценил этот комментарий

А курсов никаких и образования точно не требуется?

раскрыть ветку (2)
2
Автор поста оценил этот комментарий

На крайняк сгорит дом все будет нормально, максимум сгорит PZEM-004t и ESP-12F

2
Автор поста оценил этот комментарий
На ардуино и есп море статей, форумов и даже видосов на ютубе. Почти все, что только может придти к вам в голову, 95%уже кто-то сделал.
Обычно сспец знаний не требуется
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку