From c8d4bfc64abe9190406281da28e0c6dec2108449 Mon Sep 17 00:00:00 2001 From: Francois <thiebolt@irit.fr> Date: Mon, 18 Apr 2022 11:29:57 +0200 Subject: [PATCH] added SoftwareSerial port2 for esp8266 serial sensors. Tests required! --- neosensor/libraries/boards/neosensor.h | 14 ++++++++++--- .../libraries/neocampus_drivers/pm_serial.cpp | 21 +++++++++++++------ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/neosensor/libraries/boards/neosensor.h b/neosensor/libraries/boards/neosensor.h index 5516cc58..cceaed68 100644 --- a/neosensor/libraries/boards/neosensor.h +++ b/neosensor/libraries/boards/neosensor.h @@ -154,9 +154,17 @@ */ #ifndef SENSORS_SERIAL_LINK #ifdef ESP32 - #define SENSORS_SERIAL_LINK (uint8_t)2 // [jul.21] neOSensor V5 added (i.e Serial2) - #else - #define SENSORS_SERIAL_LINK INVALID_SERIAL_LINK + #define SENSORS_SERIAL_LINK (uint8_t)2 // [jul.21] neOSensor V5 added (i.e Serial2) + #elif defined(ESP8266) + /* [apr.22] notes about serial ports on esp8266 + * - serial0(HW) is for programming and debug + * - serial1(HW) only TX + * - serial2(sw) this one + */ + //#define SENSORS_SERIAL_LINK INVALID_SERIAL_LINK + #define SENSORS_SERIAL_LINK (uint8_t)2 // [apr.22] useless but just to have var defined (i.e Serial2) + #define SENSORS_SERIAL_LINK_RX 4 // shared with PIR sensor hence avoid double declaration ;) + #define SENSORS_SERIAL_LINK_TX INVALID_GPIO // no TX pin #endif #endif diff --git a/neosensor/libraries/neocampus_drivers/pm_serial.cpp b/neosensor/libraries/neocampus_drivers/pm_serial.cpp index aab2c01c..36eb56b2 100644 --- a/neosensor/libraries/neocampus_drivers/pm_serial.cpp +++ b/neosensor/libraries/neocampus_drivers/pm_serial.cpp @@ -19,6 +19,9 @@ * Includes */ #include <Arduino.h> +#ifdef ESP8266 +#include <SoftwareSerial.h> +#endif /* ESP8266 */ #include "neocampus.h" #include "neocampus_debug.h" @@ -65,7 +68,7 @@ pm_serial::pm_serial( void ) : generic_driver( _MEASURES_INTERLEAVE_MS, _measures = nullptr; _nbMeasures = 0; - /* [nov.21] we choose to disable PM%_ENABLE gpio because PMS sensors + /* [nov.21] we choose to disable PM_ENABLE gpio because PMS sensors * already features both sleep() and wakeUp() commands _enable_gpio = PM_ENABLE; // PM_ENABLE gpio */ @@ -700,12 +703,18 @@ boolean pm_serial::_init( void ) { return false; } - #warning "esp8266 hack: Serial2 is not known ... correct me!" - #ifndef ESP8266 - Serial2.begin( _link_speed ); - _stream = &Serial2; // TODO pointer to stream according to link number specified ... maybe later ;) + #if defined(ESP8266) + #warning "esp8266 serial2 makes use of SoftwareSerial!" + SoftwareSerial *mySerial2 = new SoftwareSerial(SENSORS_SERIAL_LINK_RX,SENSORS_SERIAL_LINK_TX); + if( !mySerial2 ) return false; + mySerial2->begin( _link_speed ); + _stream = mySerial2; + #elif defined(ESP32) + Serial2.begin( _link_speed ); + _stream = &Serial2; // TODO pointer to stream according to link number specified ... maybe later ;) #else - return false; + #warning "unknown architecture for Serial2 link" + return false; #endif /* ESP8266 */ if( !_stream ) return false; -- GitLab