From d0d773c8defa81d33f2f7633e36dd49023f11ff6 Mon Sep 17 00:00:00 2001 From: norbert-walter Date: Thu, 10 Mar 2022 19:41:03 +0100 Subject: [PATCH] Finishing BME280 page an sensor integration for BME280, BMP290, SHT21 --- lib/obp60task/OBP60Hardware.h | 12 +- lib/obp60task/PageBME280.cpp | 208 ++++++++++++++++++++++++++++++++++ lib/obp60task/Pagedata.h | 22 ++++ lib/obp60task/config.json | 51 ++++++--- lib/obp60task/obp60task.cpp | 155 ++++++++++++++++++++++--- lib/obp60task/platformio.ini | 3 + platformio.ini | 69 +++++++++-- 7 files changed, 470 insertions(+), 50 deletions(-) create mode 100644 lib/obp60task/PageBME280.cpp diff --git a/lib/obp60task/OBP60Hardware.h b/lib/obp60task/OBP60Hardware.h index 05d3041..c2cc77e 100644 --- a/lib/obp60task/OBP60Hardware.h +++ b/lib/obp60task/OBP60Hardware.h @@ -6,9 +6,17 @@ // SeaTalk #define OBP_SEATALK_TX 2 #define OBP_SEATALK_RX 15 - // I2C (MCP23017) + // I2C (MCP23017, BME280, BMP280, SHT21) #define OBP_I2C_SDA 21 #define OBP_I2C_SCL 22 + // Extension Port MCP23017 + #define MCP23017_I2C_ADDR 0x20 // Addr. 0 is 0x20 + // BME280 + #define BME280_I2C_ADDR 0x76 // Addr. 0x76 + // BMP280 + #define BMP280_I2C_ADDR 0x77 // Addr. 0x77 + // SHT21 + #define SHT21_I2C_ADDR 0x40 // Addr. 0x40 // SPI (E-Ink display, Extern Bus) #define OBP_SPI_CS 5 #define OBP_SPI_DC 17 @@ -43,8 +51,6 @@ #define OBP_ANALOG2 39 // Analog In 2 #define MIN_VOLTAGE 9.0 // Min voltage for under voltage detection (then goto deep sleep) #define POWER_FAIL_TIME 2 // in [ms] Accept min voltage until 2 x 1ms (for under voltage gaps by engine start) - // Extension Port MCP23017 - #define MCP23017_I2C_ADDR 0x20 // Addr. 0 is 0x20 // Extension Port PA #define PA0 0 // Digital Out 1 #define PA1 1 // Digital Out 2 diff --git a/lib/obp60task/PageBME280.cpp b/lib/obp60task/PageBME280.cpp new file mode 100644 index 0000000..13ce912 --- /dev/null +++ b/lib/obp60task/PageBME280.cpp @@ -0,0 +1,208 @@ +#include "Pagedata.h" +#include "OBP60ExtensionPort.h" + +class PageBME280 : public Page +{ + bool keylock = false; // Keylock + + public: + PageBME280(CommonData &comon){ + comon.logger->logDebug(GwLog::LOG,"Show PageThreeValue"); + } + + virtual int handleKey(int key){ + if(key == 11){ // Code for keylock + keylock = !keylock; // Toggle keylock + return 0; // Commit the key + } + return key; + } + + virtual void displayPage(CommonData &commonData, PageData &pageData){ + GwConfigHandler *config = commonData.config; + GwLog *logger=commonData.logger; + + double value1 = 0; + double value2 = 0; + double value3 = 0; + + // Get config data + String tempformat = config->getString(config->tempFormat); + bool simulation = config->getBool(config->useSimuData); + String displaycolor = config->getString(config->displaycolor); + String flashLED = config->getString(config->flashLED); + String backlightMode = config->getString(config->backlight); + + // Get sensor values #1 + String name1 = "Temp"; // Value name + name1 = name1.substring(0, 6); // String length limit for value name + if(simulation == false){ + value1 = commonData.data.airTemperature; // Value as double in SI unit + } + else{ + value1 = 23.0 + float(random(0, 10)) / 10.0; + } + String svalue1 = String(value1, 1); // Formatted value as string including unit conversion and switching decimal places + String unit1 = "Deg C"; // Unit of value + + // Get sensor values #2 + String name2 = "Humid"; // Value name + name2 = name2.substring(0, 6); // String length limit for value name + if(simulation == false){ + value2 = commonData.data.airHumidity; // Value as double in SI unit + } + else{ + value2 = 43 + float(random(0, 4)); + } + String svalue2 = String(value2, 0); // Formatted value as string including unit conversion and switching decimal places + String unit2 = "%"; // Unit of value + + // Get sensor values #3 + String name3 = "Press"; // Value name + name3 = name3.substring(0, 6); // String length limit for value name + if(simulation == false){ + value3 = commonData.data.airPressure; // Value as double in SI unit + } + else{ + value3 = 1006 + float(random(0, 5)); + } + String svalue3 = String(value3, 0); // Formatted value as string including unit conversion and switching decimal places + String unit3 = "mBar"; // Unit of value + + // Optical warning by limit violation (unused) + if(String(flashLED) == "Limit Violation"){ + setBlinkingLED(false); + setPortPin(OBP_FLASH_LED, false); + } + + // Logging boat values + LOG_DEBUG(GwLog::LOG,"Drawing at PageBME280, %s: %f, %s: %f, %s: %f", name1, value1, name2, value2, name3, value3); + + // Draw page + //*********************************************************** + + // Set background color and text color + int textcolor = GxEPD_BLACK; + int pixelcolor = GxEPD_BLACK; + if(displaycolor == "Normal"){ + textcolor = GxEPD_BLACK; + pixelcolor = GxEPD_BLACK; + } + else{ + textcolor = GxEPD_WHITE; + pixelcolor = GxEPD_WHITE; + } + // Clear display by call in obp60task.cpp in main loop + + // ############### Value 1 ################ + + // Show name + display.setTextColor(textcolor); + display.setFont(&Ubuntu_Bold20pt7b); + display.setCursor(20, 55); + display.print(name1); // Page name + + // Show unit + display.setTextColor(textcolor); + display.setFont(&Ubuntu_Bold12pt7b); + display.setCursor(20, 90); + display.print(unit1); // Unit + + // Switch font if format for any values + display.setFont(&DSEG7Classic_BoldItalic30pt7b); + display.setCursor(180, 90); + + // Show bus data + display.print(svalue1); // Real value as formated string + + // ############### Horizontal Line ################ + + // Horizontal line 3 pix + display.fillRect(0, 105, 400, 3, pixelcolor); + + // ############### Value 2 ################ + + // Show name + display.setTextColor(textcolor); + display.setFont(&Ubuntu_Bold20pt7b); + display.setCursor(20, 145); + display.print(name2); // Page name + + // Show unit + display.setTextColor(textcolor); + display.setFont(&Ubuntu_Bold12pt7b); + display.setCursor(20, 180); + display.print(unit2); // Unit + + // Switch font if format for any values + display.setFont(&DSEG7Classic_BoldItalic30pt7b); + display.setCursor(180, 180); + + // Show bus data + display.print(svalue2); // Real value as formated string + + // ############### Horizontal Line ################ + + // Horizontal line 3 pix + display.fillRect(0, 195, 400, 3, pixelcolor); + + // ############### Value 3 ################ + + // Show name + display.setTextColor(textcolor); + display.setFont(&Ubuntu_Bold20pt7b); + display.setCursor(20, 235); + display.print(name3); // Page name + + // Show unit + display.setTextColor(textcolor); + display.setFont(&Ubuntu_Bold12pt7b); + display.setCursor(20, 270); + display.print(unit3); // Unit + + // Switch font if format for any values + display.setFont(&DSEG7Classic_BoldItalic30pt7b); + display.setCursor(180, 270); + + // Show bus data + display.print(svalue3); // Real value as formated string + + // ############### Key Layout ################ + + // Key Layout + display.setTextColor(textcolor); + display.setFont(&Ubuntu_Bold8pt7b); + display.setCursor(115, 290); + if(keylock == false){ + display.print(" [ <<<<<< >>>>>> ]"); + if(String(backlightMode) == "Control by Key"){ // Key for illumination + display.setCursor(343, 290); + display.print("[ILUM]"); + } + } + else{ + display.print(" [ Keylock active ]"); + } + + // Update display + display.updateWindow(0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, true); // Partial update (fast) + + }; +}; + +static Page *createPage(CommonData &common){ + return new PageBME280(common); +}/** + * with the code below we make this page known to the PageTask + * we give it a type (name) that can be selected in the config + * we define which function is to be called + * and we provide the number of user parameters we expect + * this will be number of BoatValue pointers in pageData.values + */ +PageDescription registerPageBME280( + "BME280", // Page name + createPage, // Action + 0, // Number of bus values depends on selection in Web configuration + {}, // Names of bus values undepends on selection in Web configuration (refer GwBoatData.h) + true // Show display header on/off +); \ No newline at end of file diff --git a/lib/obp60task/Pagedata.h b/lib/obp60task/Pagedata.h index b5ebb67..8716fe9 100644 --- a/lib/obp60task/Pagedata.h +++ b/lib/obp60task/Pagedata.h @@ -12,10 +12,32 @@ typedef struct{ ValueList values; } PageData; +typedef struct{ + double batteryVoltage = 0; + double batteryCurrent = 0; + double batteryPower = 0; + double solarVoltage = 0; + double solarCurrent = 0; + double solarPower = 0; + double generatorVoltage = 0; + double generatorCurrent = 0; + double generatorPower = 0; + double airTemperature = 21.3; + double airHumidity = 43.2; + double airPressure = 1018.8; + double onewireTemp1 = 0; + double onewireTemp2 = 0; + double onewireTemp3 = 0; + double onewireTemp4 = 0; + double onewireTemp5 = 0; + double onewireTemp6 = 0; +} SensorData; + typedef struct{ GwApi::Status status; GwLog *logger=NULL; GwConfigHandler *config=NULL; + SensorData data; } CommonData; //a base class that all pages must inherit from diff --git a/lib/obp60task/config.json b/lib/obp60task/config.json index 942f8c1..c5c24fb 100644 --- a/lib/obp60task/config.json +++ b/lib/obp60task/config.json @@ -17,8 +17,8 @@ "default": "0", "check": "checkMinMax", "min": -12, - "max": 12, - "description": "Time zone [UTC -12...+12]", + "max": 14, + "description": "Time zone [UTC -12...+14]", "category": "OBP60 Settings", "capabilities": { "obp60":"true" @@ -238,32 +238,47 @@ }, { "name": "useGPS", - "label": "GPS NEO-6M", - "type": "boolean", - "default": "false", - "description": "Using internal GPS modul NEO-6M", + "label": "GPS Sensor", + "type": "list", + "default": "off", + "description": "Using internal GPS modul NEO-6M or NEO-M8N", + "list": [ + "off", + "NEO-6M", + "NEO-M8N" + ], "category": "OBP60 Hardware", "capabilities": { "obp60":"true" } }, { - "name": "useBME280", - "label": "BME280", - "type": "boolean", - "default": "false", - "description": "Using internal BME280 modul", + "name": "useEnvSensor", + "label": "Env. Sensor", + "type": "list", + "default": "off", + "description": "Using internal or external environment sensors BME280, BMP280 or SHT21", + "list": [ + "off", + "BME280", + "BMP280", + "SHT21" + ], "category": "OBP60 Hardware", "capabilities": { "obp60":"true" } }, { - "name": "use1Wire", - "label": "1Wire", + "name": "useTempSensor", + "label": "Temp. Sensor", "type": "boolean", - "default": "false", + "default": "off", "description": "Using external 1Wirew devices (DS18B20)", + "list": [ + "off", + "DS18B20" + ], "category": "OBP60 Hardware", "capabilities": { "obp60":"true" @@ -492,7 +507,7 @@ "type": "list", "default": "Voltage", "description": "Type of page for page 1", - "list":["oneValue","twoValues","threeValues","forValues","forValues2","apparentWind","WindRose","Voltage","DST810","Clock","WhitePage"], + "list":["oneValue","twoValues","threeValues","forValues","forValues2","apparentWind","WindRose","Voltage","DST810","Clock","WhitePage","BME280"], "category": "OBP60 Page 1", "capabilities": { "obp60":"true" @@ -552,7 +567,7 @@ "type": "list", "default": "apparantWind", "description": "Type of page for page 2", - "list":["oneValue","twoValues","threeValues","forValues","forValues2","apparentWind","WindRose","Voltage","DST810","Clock","WhitePage"], + "list":["oneValue","twoValues","threeValues","forValues","forValues2","apparentWind","WindRose","Voltage","DST810","Clock","WhitePage","BME280"], "category": "OBP60 Page 2", "capabilities": { "obp60":"true" @@ -613,7 +628,7 @@ "type": "list", "default": "oneValue", "description": "Type of page for page 3", - "list":["oneValue","twoValues","threeValues","forValues","forValues2","apparentWind","WindRose","Voltage","DST810","Clock","WhitePage"], + "list":["oneValue","twoValues","threeValues","forValues","forValues2","apparentWind","WindRose","Voltage","DST810","Clock","WhitePage","BME280"], "category": "OBP60 Page 3", "capabilities": { "obp60":"true" @@ -674,7 +689,7 @@ "type": "list", "default": "oneValue", "description": "Type of page for page 4", - "list":["oneValue","twoValues","threeValues","forValues","forValues2","apparentWind","WindRose","Voltage","DST810","Clock","WhitePage"], + "list":["oneValue","twoValues","threeValues","forValues","forValues2","apparentWind","WindRose","Voltage","DST810","Clock","WhitePage","BME280"], "category": "OBP60 Page 4", "capabilities": { "obp60":"true" diff --git a/lib/obp60task/obp60task.cpp b/lib/obp60task/obp60task.cpp index e6d888f..fe93fd8 100644 --- a/lib/obp60task/obp60task.cpp +++ b/lib/obp60task/obp60task.cpp @@ -6,6 +6,10 @@ #include // Timer Lib for timer interrupts #include // I2C connections #include // MCP23017 extension Port +#include // Adafruit Lib for sensors +#include // Adafruit Lib for BME280 +#include // Adafruit Lib for BMP280 +#include // Lib for SHT21/HTU21 #include // NMEA2000 #include #include // NMEA0183 @@ -27,10 +31,20 @@ tNMEA0183Msg NMEA0183Msg; tNMEA0183 NMEA0183; +Adafruit_BME280 bme280; // Evironment sensor BME280 +Adafruit_BMP280 bmp280; // Evironment sensor BMEP280 +HTU21D sht21(HTU21D_RES_RH12_TEMP14); // Environment sensor SHT21 identical to HTU21 + // Global vars bool initComplete = false; // Initialization complete int taskRunCounter = 0; // Task couter for loop section bool gps_ready = false; // GPS initialized and ready to use +bool BME280_ready = false; // BME280 initialized and ready to use +bool BMP280_ready = false; // BMP20 initialized and ready to use +bool SHT21_ready = false; // SHT21 initialized and ready to use +double airhumidity = 0; // Air Humitity value from environment sensor +double airtemperature = 0; // Air Temperature value from environment sensor +double airpressure = 0; // Ais pressure value from environment sensor // Timer Interrupts for hardware functions void underVoltageDetection(); @@ -95,15 +109,6 @@ void OBP60Init(GwApi *api){ // Init extension port MCP23017Init(); - // Settings for 1Wire - bool enable1Wire = api->getConfig()->getConfigItem(api->getConfig()->use1Wire,true)->asBoolean(); - if(enable1Wire == true){ - api->getLogger()->logDebug(GwLog::DEBUG,"1Wire Mode is On"); - } - else{ - api->getLogger()->logDebug(GwLog::DEBUG,"1Wire Mode is Off"); - } - // Settings for NMEA0183 String nmea0183Mode = api->getConfig()->getConfigItem(api->getConfig()->serialDirection,true)->asString(); api->getLogger()->logDebug(GwLog::DEBUG,"NMEA0183 Mode is: %s", nmea0183Mode); @@ -136,8 +141,8 @@ void OBP60Init(GwApi *api){ } // Start serial stream and take over GPS data stream form internal GPS - bool gpsOn=api->getConfig()->getConfigItem(api->getConfig()->useGPS,true)->asBoolean(); - if(gpsOn == true){ + String gpsOn=api->getConfig()->getConfigItem(api->getConfig()->useGPS,true)->asString(); + if(String(gpsOn) == "NEO-6M"){ Serial2.begin(9600, SERIAL_8N1, OBP_GPS_TX, -1); // GPS RX unused in hardware (-1) if (!Serial2) { api->getLogger()->logDebug(GwLog::ERROR,"GPS modul NEO-6M not found, check wiring"); @@ -150,6 +155,19 @@ void OBP60Init(GwApi *api){ gps_ready = true; } } + if(String(gpsOn) == "NEO-M8N"){ + Serial2.begin(9600, SERIAL_8N1, OBP_GPS_TX, -1); // GPS RX unused in hardware (-1) + if (!Serial2) { + api->getLogger()->logDebug(GwLog::ERROR,"GPS modul NEO-M8N not found, check wiring"); + gps_ready = false; + } + else{ + api->getLogger()->logDebug(GwLog::DEBUG,"GPS modul NEO-M8N found"); + NMEA0183.SetMessageStream(&Serial2); + NMEA0183.Open(); + gps_ready = true; + } + } // Marker for init complete // Used in OBP60Task() @@ -161,6 +179,54 @@ void OBP60Init(GwApi *api){ } + // Settings for temperature sensors + String tempSensor = api->getConfig()->getConfigItem(api->getConfig()->useTempSensor,true)->asString(); + if(String(tempSensor) == "DS18B20"){ + api->getLogger()->logDebug(GwLog::DEBUG,"1Wire Mode is On"); + } + else{ + api->getLogger()->logDebug(GwLog::DEBUG,"1Wire Mode is Off"); + } + + // Settings for environment sensors on I2C bus + String envSensors=api->getConfig()->getConfigItem(api->getConfig()->useEnvSensor,true)->asString(); + + if(String(envSensors) == "BME280"){ + if (!bme280.begin(BME280_I2C_ADDR)) { + api->getLogger()->logDebug(GwLog::ERROR,"Modul BME280 not found, check wiring"); + } + else{ + api->getLogger()->logDebug(GwLog::DEBUG,"Modul BME280 found"); + airtemperature = bme280.readTemperature(); + airpressure = bme280.readPressure()/100; + airhumidity = bme280.readHumidity(); + BME280_ready = true; + } + } + else if(String(envSensors) == "BMP280"){ + if (!bmp280.begin(BMP280_I2C_ADDR)) { + api->getLogger()->logDebug(GwLog::ERROR,"Modul BMP280 not found, check wiring"); + } + else{ + api->getLogger()->logDebug(GwLog::DEBUG,"Modul BMP280 found"); + airtemperature = bmp280.readTemperature(); + airpressure =bmp280.readPressure()/100; + BMP280_ready = true; + } + } + else if(String(envSensors) == "SHT21"){ + if (!sht21.begin()) { + api->getLogger()->logDebug(GwLog::ERROR,"Modul SHT21 not found, check wiring"); + } + else{ + api->getLogger()->logDebug(GwLog::DEBUG,"Modul SHT21 found"); + airhumidity = sht21.readCompensatedHumidity(); + airtemperature = sht21.readTemperature(); + SHT21_ready = true; + } + } + + } typedef struct { @@ -288,6 +354,8 @@ void registerAllPages(PageList &list){ list.add(®isterPageClock); extern PageDescription registerPageWhite; list.add(®isterPageWhite); + extern PageDescription registerPageBME280; + list.add(®isterPageBME280); } // OBP60 Task @@ -415,7 +483,7 @@ void OBP60Task(GwApi *api){ // Configuration values for main loop String gpsFix = api->getConfig()->getConfigItem(api->getConfig()->flashLED,true)->asString(); - bool gps = api->getConfig()->getConfigItem(api->getConfig()->useGPS,true)->asBoolean(); + String gps = api->getConfig()->getConfigItem(api->getConfig()->useGPS,true)->asString(); String backlight = api->getConfig()->getConfigItem(api->getConfig()->backlight,true)->asString(); // refreshmode defined in init section // displaycolor defined in init section @@ -441,6 +509,8 @@ void OBP60Task(GwApi *api){ long starttime2 = millis(); // Full display refresh after 5 min long starttime3 = millis(); // Display update all 1s long starttime4 = millis(); // Delayed display update after 2s when select a new page + long starttime5 = millis(); // Voltage update all 1s + long starttime6 = millis(); // Environment sensor update all 1s while (true){ Timer1.update(); // Update for Timer1 @@ -449,7 +519,7 @@ void OBP60Task(GwApi *api){ starttime0 = millis(); // Send NMEA0183 GPS data on several bus systems all 1000ms - if(gps == true){ // If config enabled + if(String(gps) == "NEO-6M" || String(gps) == "NEO-M8N"){ // If config enabled if(gps_ready = true){ tNMEA0183Msg NMEA0183Msg; while(NMEA0183.GetMessage(NMEA0183Msg)){ @@ -489,15 +559,17 @@ void OBP60Task(GwApi *api){ if (keyboardMessage == 9) { pageNumber++; - if (pageNumber >= numPages) + if (pageNumber >= numPages){ pageNumber = 0; + } } // #10 Swipe left if (keyboardMessage == 10) { pageNumber--; - if (pageNumber < 0) + if (pageNumber < 0){ pageNumber = numPages - 1; + } } /* // #9 or #10 Refresh display befor start a new page if reshresh is enabled @@ -538,12 +610,61 @@ void OBP60Task(GwApi *api){ } // Send supplay voltage value - if(millis() > starttime3 + 1000){ - batteryVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 + if(millis() > starttime5 + 1000){ + starttime5 = millis(); + batteryVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 + commonData.data.batteryVoltage = batteryVoltage; // Data take over to page + // Send to NMEA200 bus SetN2kDCBatStatus(N2kMsg, 0, batteryVoltage, N2kDoubleNA, N2kDoubleNA, 1); api->sendN2kMessage(N2kMsg); } + // Send data from environment sensor + if(millis() > starttime6 + 1000){ + starttime6 = millis(); + unsigned char TempSource = 2; // Inside temperature + unsigned char PressureSource = 0; // Atmospheric pressure + unsigned char HumiditySource=0; // Inside humidity + LOG_DEBUG(GwLog::LOG,"Ready status BME280 %d", BME280_ready); + if(BME280_ready == true){ + airtemperature = bme280.readTemperature(); + commonData.data.airTemperature = airtemperature; // Data take over to page + airpressure = bme280.readPressure()/100; + commonData.data.airPressure = airpressure; // Data take over to page + airhumidity = bme280.readHumidity(); + commonData.data.airHumidity = airhumidity; // Data take over to page + // Send to NMEA200 bus + SetN2kPGN130312(N2kMsg, 0, 0,(tN2kTempSource) TempSource, CToKelvin(airtemperature), N2kDoubleNA); + api->sendN2kMessage(N2kMsg); + SetN2kPGN130313(N2kMsg, 0, 0,(tN2kHumiditySource) HumiditySource, airhumidity, N2kDoubleNA); + api->sendN2kMessage(N2kMsg); + SetN2kPGN130314(N2kMsg, 0, 0, (tN2kPressureSource) mBarToPascal(PressureSource), airpressure); + api->sendN2kMessage(N2kMsg); + } + else if(BMP280_ready == true){ + airtemperature = bmp280.readTemperature(); + commonData.data.airTemperature = airtemperature; // Data take over to page + airpressure =bmp280.readPressure()/100; + commonData.data.airPressure = airpressure; // Data take over to page + // Send to NMEA200 bus + SetN2kPGN130312(N2kMsg, 0, 0,(tN2kTempSource) TempSource, CToKelvin(airtemperature), N2kDoubleNA); + api->sendN2kMessage(N2kMsg); + SetN2kPGN130314(N2kMsg, 0, 0, (tN2kPressureSource) mBarToPascal(PressureSource), airpressure); + api->sendN2kMessage(N2kMsg); + } + else if(BME280_ready == true){ + airhumidity = sht21.readCompensatedHumidity(); + commonData.data.airHumidity = airhumidity; // Data take over to page + airtemperature = sht21.readTemperature(); + commonData.data.airTemperature = airtemperature; // Data take over to page + // Send to NMEA200 bus + SetN2kPGN130312(N2kMsg, 0, 0,(tN2kTempSource) TempSource, CToKelvin(airtemperature), N2kDoubleNA); + api->sendN2kMessage(N2kMsg); + SetN2kPGN130313(N2kMsg, 0, 0,(tN2kHumiditySource) HumiditySource, airhumidity, N2kDoubleNA); + api->sendN2kMessage(N2kMsg); + } + } + // Refresh display data all 1s if(millis() > starttime3 + 1000){ starttime3 = millis(); diff --git a/lib/obp60task/platformio.ini b/lib/obp60task/platformio.ini index f458dc8..6be486b 100644 --- a/lib/obp60task/platformio.ini +++ b/lib/obp60task/platformio.ini @@ -13,6 +13,9 @@ lib_deps = adafruit/Adafruit BusIO@1.5.0 zinggjm/GxEPD@3.1.0 sstaub/Ticker@4.4.0 + adafruit/Adafruit BMP280 Library@2.6.2 + adafruit/Adafruit BME280 Library@2.2.2 + enjoyneering/HTU21D@1.2.1 build_flags= -D BOARD_NODEMCU32S_OBP60 ${env.build_flags} diff --git a/platformio.ini b/platformio.ini index cd07950..e1a7947 100644 --- a/platformio.ini +++ b/platformio.ini @@ -7,13 +7,10 @@ ; ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html + [platformio] -default_envs= - m5stack-atom - m5stack-atom-canunit - m5stickc-atom-canunit - nodemcu-homberger -extra_configs= +default_envs = nodemcu32s_obp60 +extra_configs = lib/*task*/platformio.ini [env] @@ -33,18 +30,22 @@ board_build.embed_files = lib/generated/config.json.gz lib/generated/xdrconfig.json.gz lib/generated/md5.js.gz -board_build.partitions = partitions_custom.csv +board_build.partitions = partitions_custom.csv extra_scripts = pre:extra_script.py post:post.py -lib_ldf_mode = chain+ +lib_ldf_mode = chain+ monitor_speed = 115200 build_flags = -D PIO_ENV_BUILD=$PIOENV [env:m5stack-atom] board = m5stack-atom -lib_deps = ${env.lib_deps} +lib_deps = + ${env.lib_deps} + adafruit/Adafruit BMP280 Library@2.6.2 + adafruit/Adafruit BME280 Library@2.2.2 + enjoyneering/HTU21D@1.2.1 build_flags = -D BOARD_M5ATOM ${env.build_flags} @@ -53,7 +54,11 @@ upload_protocol = esptool [env:m5stack-atom-canunit] board = m5stack-atom -lib_deps = ${env.lib_deps} +lib_deps = + ${env.lib_deps} + adafruit/Adafruit BMP280 Library@2.6.2 + adafruit/Adafruit BME280 Library@2.2.2 + enjoyneering/HTU21D@1.2.1 build_flags = -D BOARD_M5ATOM_CANUNIT ${env.build_flags} @@ -62,7 +67,11 @@ upload_protocol = esptool [env:m5stickc-atom-canunit] board = m5stick-c -lib_deps = ${env.lib_deps} +lib_deps = + ${env.lib_deps} + adafruit/Adafruit BMP280 Library@2.6.2 + adafruit/Adafruit BME280 Library@2.2.2 + enjoyneering/HTU21D@1.2.1 build_flags = -D BOARD_M5STICK_CANUNIT -D HAS_RTC -D HAS_M5LCD ${env.build_flags} @@ -71,9 +80,45 @@ upload_protocol = esptool [env:nodemcu-homberger] board = nodemcu-32s -lib_deps = ${env.lib_deps} +lib_deps = + ${env.lib_deps} + adafruit/Adafruit BMP280 Library@2.6.2 + adafruit/Adafruit BME280 Library@2.2.2 + enjoyneering/HTU21D@1.2.1 build_flags = -D BOARD_HOMBERGER ${env.build_flags} upload_port = /dev/esp32 upload_protocol = esptool + +[env:testboard] +board = m5stack-atom +lib_deps = + ${env.lib_deps} + own_lib + enjoyneering/HTU21D@1.2.1 +build_flags = + -D BOARD_TEST + ${env.build_flags} +upload_port = /dev/esp32 +upload_protocol = esptool + +[env:nodemcu32s_obp60] +board_build.partitions = lib/obp60task/partitions_obp60.csv +board = nodemcu-32s +lib_deps = + ${env.lib_deps} + lib_deps = + blemasle/MCP23017@2.0.0 + adafruit/Adafruit BusIO@1.5.0 + zinggjm/GxEPD@3.1.0 + sstaub/Ticker@4.4.0 + adafruit/Adafruit BMP280 Library@2.6.2 + adafruit/Adafruit BME280 Library@2.2.2 + enjoyneering/HTU21D@1.2.1 +build_flags = + -D BOARD_NODEMCU32S_OBP60 + ${env.build_flags} +upload_port = COM3 +upload_protocol = esptool +monitor_speed = 115200