enjoynering
Well-known member
Бесит копипаста SoftSerial перекочевавшая с Arduino AVR на Arduino ESP8266. К AVR вопросов нет, там почти всегда один аппаратный UART и он занят bootloder-ом, поэтому без SoftSerial никак. Но зачем тащить кривой ногодрыг в проекты на ESP8266 с двумя аппаратными UART? Рассказываю как надо...
1. После старта ESP8266 Serial висит на UART0 подключенный к COM-USB мосту, пины GPIO01(TX)/GPIO03(RX)
2. Переключаем на сенсор (например MH-Z19) командой Serial.swap() висящий на втором UART2, пины GPIO15(TX)/GPIO13(RX)
3. На всякий случай чистим Serial буфер от мусора оставшегося от UART0 обмена, командой Serial.flush()
4. Передаем сообщения сенсору
5. Принимаем сообщение от сенсора ВО ВРЕМЕННУЮ ПЕРЕМЕННУЮ
6. Переключаем Serial назад на UART0 и чистим буфер от мусора оставшегося после обмена по UART2
7. Посылаем данные из временной переменной в COM-USB мост и на пины GPIO01(TX)/GPIO03(RX)
8. Переключаемся назад на сенсор и повторяем с п.3
На Arduino языке выглядит так:
У платы WeMos D1 Mini UART2 висит на D8/TX и D7/RX
1. После старта ESP8266 Serial висит на UART0 подключенный к COM-USB мосту, пины GPIO01(TX)/GPIO03(RX)
2. Переключаем на сенсор (например MH-Z19) командой Serial.swap() висящий на втором UART2, пины GPIO15(TX)/GPIO13(RX)
3. На всякий случай чистим Serial буфер от мусора оставшегося от UART0 обмена, командой Serial.flush()
4. Передаем сообщения сенсору
5. Принимаем сообщение от сенсора ВО ВРЕМЕННУЮ ПЕРЕМЕННУЮ
6. Переключаем Serial назад на UART0 и чистим буфер от мусора оставшегося после обмена по UART2
7. Посылаем данные из временной переменной в COM-USB мост и на пины GPIO01(TX)/GPIO03(RX)
8. Переключаемся назад на сенсор и повторяем с п.3
На Arduino языке выглядит так:
Код:
Serial.begin(9600, SERIAL_8N1); //GPIO1 (TX) and GPIO3 (RX), 9600kbps, 8-bit data, no parity, 1-bit stop
//your brilliant code here
Serial.swap(); //GPIO15 (TX) and GPIO13 (RX)
Serial.flush(); //clear serial buffer
//your brilliant code here
Serial.swap(); //swap back to GPIO1 (TX) and GPIO3 (RX)
Serial.flush(); //clear serial buffer
//your brilliant code here