ModBus Master (DIY) — чтение Modbus RTU slave-устройств: подключение конвертера RS-485, настройка регистров, шаблоны данных, управление через HTTP/MQTT. Примеры: PZEM-014/016/017, Eastron SDM.
Опция ModBus Master позволяет контроллеру читать данные с ModBus RTU slave-устройств (счётчики электроэнергии, датчики, приводы) и передавать их в системы мониторинга через MQTT, HTTP и другие протоколы.
| Режим передачи | Полудуплексный (поочерёдный) |
| Физический интерфейс | RS-485 |
| Формат данных | Бинарный |
| Структура пакета | Адрес устройства (1 байт) + Код функции (1 байт) + Данные + CRC (2 байта) |
| Скорость по умолчанию | 9600 бод |
Для связи контроллера ESP32 с Modbus-устройствами нужен конвертер TTL ↔ RS-485 (на базе MAX485 или аналога).

ESP32: выводы UART и RTS настраиваются в веб-интерфейсе конструктора (гибкая привязка к GPIO).
Основные параметры в веб-интерфейсе конструктора:
| Параметр | Описание |
|---|---|
| Скорость | 9600 (стандартная для большинства устройств) |
| Тип регистров | Read Input Registers (0x04) или Read Holding Registers (0x03) |
| Адрес устройства | Адрес slave-устройства на шине (обычно 1) |
| Стартовый регистр | Номер первого регистра для чтения |
| Количество регистров | Сколько регистров читать (каждый = 2 байта / 16 бит) |

Шаблон задаёт формат разбора ответа от slave-устройства. Параметры через запятую:
| Параметр | Описание | Пример |
|---|---|---|
rX |
Количество регистров (Big Endian) | r2 = 2 регистра (4 байта) |
eX / gX |
Количество регистров (другой порядок байт) | e2 |
sX |
Пропустить X регистров | s4 = пропустить 4 регистра |
dX |
Количество знаков после запятой | d2 = два знака (245 → 2.45) |
mX |
Умножить на 10^X | m2 = ×100 |
i |
Число со знаком (signed) | r1i |
f / fa / fb |
Float (IEEE 754), разный порядок байт | fb = float Big Endian |
| Тип | Описание | Доступ |
|---|---|---|
| Discrete Inputs | Однобитовые входы («сухие» контакты) | Только чтение |
| Coils | Однобитовые выходы (реле) | Чтение и запись |
| Действие | URL |
|---|---|
| Запись RAW данных | http://IP/modbus&write=HEX_DATA (CRC добавляется автоматически) |
| Запись регистра | http://IP/modbus?addr=X?reg=Y&data=Z |
| Запись метрики | http://IP/modbus&dev=X&num=Y&data=Z (только Holding Registers) |
login/hostname/mbraw |
Запись RAW данных |
login/hostname/mbregX/Y |
Запись регистра (X = адрес, Y = номер) |
| Адрес: | 1 |
| Стартовый регистр: | 0 |
| Количество регистров: | 9 |
| Тип: | Read Input Registers (0x04) |
| Маска: | r1d1,r2d3,r2d1,r2,r1d1,rd2 |
| Метрики: | Напряжение, ток, мощность, энергия, частота, cosφ |
Смена адреса: http://IP/modbus&write=010600020005
Сброс счётчика: http://IP/modbus&write=0142

| Адрес: | 1 |
| Стартовый регистр: | 0 |
| Количество регистров: | 6 |
| Тип: | Read Input Registers (0x04) |
| Маска: | r1d2,r1d2,r2d1,r2 |
Требуется включение 2 stop bits в настройках.
| Адрес: | 1 |
| Стартовый регистр: | 0 |
| Количество регистров: | 14 |
| Тип: | Read Input Registers (0x04) |
| Маска (SDM220/120): | fb,s4,fb,s4,fb |
| Маска (SDM630): | fb,fb,fb,fb,fb,fb,fb,fb,fb |
Скорость обязательно 9600.
Возникли проблемы? Нажмите кнопку Обратная связь вверху страницы — создайте тикет через FixFlow, опишите проблему и приложите скриншот настроек.