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

Как к ESP8266 подключить два UART-устройства?

Vaffanculo

New member
Требуется подключить к ESP8266 два устройства, с которыми можно общаться только по UART, и это должно быть общение в обе стороны для каждого из них.
Прошивка пишется на RTOS SDK.
Хотелось бы прояснить несколько вопросов.
  1. К аппаратному UART подключен программатор, и он должен остаться в окончательной версии прибора. Можно ли к тем же выводам подключить одно из двух устройств? Точнее, что нужно сделать, чтобы оно и программатор друг другу не мешали?
  2. Для работы со вторым устройством придется использовать программную эмуляцию последовательного порта. Но что-то я не нахожу версии SoftSerial'а для RTOS SDK. Такое есть в природе?
 

pvvx

Активный участник сообщества
Какой ещё SoftSerial на контроллере занятом WiFi? Когда он будет дрыгать ногами - только при отключенном WiFi?

"К аппаратному UART подключен программатор" - ведущий в системе у вас ESP или программатор?

Когда с TX одного из двух аппаратных UART идет поток к программатору, то второе устройство тоже передает что-то в RX UART и всё это вы упаковываете в передачу по WiFi одновременно?

Поставьте логически элемент AND на вход RX UART0 и используйте TX0 UART0 и TX1 UART1.
 

pvvx

Активный участник сообщества
Просьба к любителям SoftSerial:
Хотелось бы увидеть одновременную работу двух SoftSerial'а в одном устройстве.
 

Vaffanculo

New member
"К аппаратному UART подключен программатор" - ведущий в системе у вас ESP или программатор?
Похоже, я неточно выразился. Под программатором имелся в виду USB/UART преобразователь, который нужен в основном для прошивки. Естественно, главное устройство - это ESP.

На время прошивки я могу, наверное, отключить оба устройства, чтобы они ничего не передавали. Но не уверен, что они поддерживают временное отключение, надо ещё почитать мануал.
В остальное время, т.е. когда на идет прошивка, я так понимаю программатору без разницы какой мусор ему идет от ESP.

Когда с TX одного из двух аппаратных UART идет поток к программатору, то второе устройство тоже передает что-то в RX UART и всё это вы упаковываете в передачу по WiFi одновременно?
Передача по WiFi эпизодическая. Иногда одно из устройств отдает небольшой блок данных, порядка сотен байт, который передается на удаленный сервер. Так что стриминга тут нет, если вы об этом. Это что-то меняет?

Поставьте логически элемент AND на вход RX UART0 и используйте TX0 UART0 и TX1 UART1.
Что произойдет, когда оба устройства начнут передавать одновременно?

Просьба к любителям SoftSerial:
Хотелось бы увидеть одновременную работу двух SoftSerial'а в одном устройстве.
Вот я нашел парочку попыток, не знаю насколько они рабочие. Но похоже ни одна из них не совместима с RTOS SDK. Или я ошибаюсь?
plerup/espsoftwareserial
plieningerweb/esp8266-software-uart
 

Vaffanculo

New member
В остальное время, т.е. когда на идет прошивка, я так понимаю программатору без разницы какой мусор ему идет от ESP.
В остальное время, т.е. когда НЕ идет прошивка, я так понимаю программатору без разницы какой мусор ему идет от ESP.
 

pvvx

Активный участник сообщества
Значит вам надо Serial.swap()
Register ESP8266 0x3ff00028
Код:
typedef struct        // 0x3ff00028
{
    __IO unsigned    swap_two_uart    :1;    // bit0: swap two uart
    __IO unsigned    swap_two_spi    :1;    // bit1: swap two spi
    __IO unsigned    swap_uart0        :1;    // bit2: swap uart0 pins (u0rxd <-> u0cts), (u0txd <-> u0rts)
    __IO unsigned    swap_uart1        :1;    // bit3: swap uart1 pins (u1rxd <-> u1cts), (u1txd <-> u1rts)
    __I unsigned    dummy4            :1;
    __IO unsigned    spi1_high_prior    :1;    // bit5: hspi is with the higher prior
    __IO unsigned    spi1_overlap    :1;    // bit6: two spi masters on spi1
    __IO unsigned    spi0_overlap    :1;    // bit7: two spi masters on spi0 (spi0_overlap)
    __I unsigned    dummy8            :24;
} dport_peri_io_t;
 
Сверху Снизу