From f2738c6e3df00745c0ad7d9a13059cc4415f8adf Mon Sep 17 00:00:00 2001 From: Ilya Belyakov Date: Fri, 17 Nov 2023 00:18:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B1=D1=83=D0=B5=D0=BC=20St?= =?UTF-8?q?ream=20=D0=B4=D0=BB=D1=8F=20Esp32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/classes/IoTUart.h | 3 ++- src/classes/IoTUart.cpp | 11 ++++++++--- src/modules/sensors/UART/Uart.cpp | 2 +- src/modules/sensors/UART/Uart.h | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/include/classes/IoTUart.h b/include/classes/IoTUart.h index 985c4548..e45697ca 100644 --- a/include/classes/IoTUart.h +++ b/include/classes/IoTUart.h @@ -6,6 +6,7 @@ #include #else #include +#include #endif @@ -28,7 +29,7 @@ class IoTUart : public IoTItem { #ifdef ESP8266 SoftwareSerial* _myUART; #else - HardwareSerial* _myUART; + Stream* _myUART; #endif }; \ No newline at end of file diff --git a/src/classes/IoTUart.cpp b/src/classes/IoTUart.cpp index c912f9b5..2ee9d384 100644 --- a/src/classes/IoTUart.cpp +++ b/src/classes/IoTUart.cpp @@ -14,8 +14,13 @@ IoTUart::IoTUart(const String& parameters) : IoTItem(parameters) { _myUART->begin(_speed); #endif #ifdef ESP32 - _myUART = new HardwareSerial(_line); - _myUART->begin(_speed, SERIAL_8N1, _rx, _tx); + if (_line >= 0) { + _myUART = new HardwareSerial(_line); + ((HardwareSerial*)_myUART)->begin(_speed, SERIAL_8N1, _rx, _tx); + } else { + _myUART = new SoftwareSerial(_rx, _tx); + ((SoftwareSerial*)_myUART)->begin(_speed); + } #endif } @@ -33,7 +38,7 @@ void IoTUart::uartPrintStrInUTF16(const char *strUTF8, int length) { // не определяются исключения по формату UTF-8 for (int i=0; i < length; i++) { if (strUTF8[i] < 176) { // если байт соответствует коду ASCII, значит берем как есть, но расширяем до двух байт - _myUART->write(0x00); + //_myUART->write(0x00); _myUART->write(strUTF8[i]); } else { // иначе понимаем, что имеем дело с двумя байтами (да UTF8 может иметь и больше, но это ограничение наше) _myUART->write(0x04); // указываем номер диапазона символов кириллицы первым байтом на выходе diff --git a/src/modules/sensors/UART/Uart.cpp b/src/modules/sensors/UART/Uart.cpp index eab3b6d5..d0e3e971 100644 --- a/src/modules/sensors/UART/Uart.cpp +++ b/src/modules/sensors/UART/Uart.cpp @@ -9,7 +9,7 @@ #ifdef ESP8266 SoftwareSerial* myUART = nullptr; #else - HardwareSerial* myUART = nullptr; + Stream* myUART = nullptr; #endif class IoTmUART : public IoTUart { diff --git a/src/modules/sensors/UART/Uart.h b/src/modules/sensors/UART/Uart.h index b64ffa23..b371cf59 100644 --- a/src/modules/sensors/UART/Uart.h +++ b/src/modules/sensors/UART/Uart.h @@ -5,5 +5,5 @@ extern SoftwareSerial* myUART; #else #include -extern HardwareSerial* myUART; +extern Stream* myUART; #endif \ No newline at end of file