• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Модуль NodeMCU-32S и датчик CWT-Soil-TH-S

ОлегК

New member
К модулю NodeMCU-32S ESP-32S) я подключаю датчик CWT-Soil-TH-S по протоколу Modbus RTU. Модуль имеет выводы аппаратной шины UART0 (TX0, RX0). Выводы для шин UART1 и UART2 отсутствуют.
Программу я разрабатываю в esp-idf. Пример esp-idf/examples/protocols/modbus/serial/mb_master предполагает подключение RS485 - ttl к выводам UART. В Arduino есть библиотека SoftwareSerial для программной реализации шины UART. Известны ли для esp-idf решения аналогичные SoftwareSerial, которые позволят NODEMCU-32S взаимодействовать с устройством Modbus?
1712520590354.png
 

ОлегК

New member
Раз вы пишете в esp-idf то зачем вам SoftwareSerial? У вашего ESP-32 аж 3 аппаратных UART.
Разобрался с конфигурированием UART . Как выяснилось, в примере esp-idf/examples/protocols/modbus/serial/mb_master уже есть вызов функции uart_set_pin(), которая привязывает шины UART и выводы платы ESP-32.
Код:
    // Set UART pin numbers
    err = uart_set_pin(MB_PORT_NUM, CONFIG_MB_UART_TXD, CONFIG_MB_UART_RXD,
                              CONFIG_MB_UART_RTS, UART_PIN_NO_CHANGE);
Таким образом, необходимости в SoftwareSerial нет. Пришлось переделать структуру holding_reg_params_t под тип данных, которые передает датчик: параметры float заменить на uint_16t.
Код:
typedef struct
{
    uint16_t holding_data0;
    uint16_t holding_data1;
} holding_reg_params_t;
В приложении файл master.c - текст примера, основанного на mb_master, который опрашивает CWT-Soil-TH-S и выводит значения влажности и температуру почвы.
Схема соединений в заголовке текста примера. Задавать какие-либо параметры через idf.py не нужно.
Возможно, кому-то пригодится.
 

Вложения

Сверху Снизу