Finishing BME280 page an sensor integration for BME280, BMP290, SHT21

This commit is contained in:
norbert-walter 2022-03-10 19:41:03 +01:00
parent 8291631f36
commit d0d773c8de
7 changed files with 470 additions and 50 deletions

View File

@ -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

View File

@ -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
);

View File

@ -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

View File

@ -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"

View File

@ -6,6 +6,10 @@
#include <Ticker.h> // Timer Lib for timer interrupts
#include <Wire.h> // I2C connections
#include <MCP23017.h> // MCP23017 extension Port
#include <Adafruit_Sensor.h> // Adafruit Lib for sensors
#include <Adafruit_BME280.h> // Adafruit Lib for BME280
#include <Adafruit_BMP280.h> // Adafruit Lib for BMP280
#include <HTU21D.h> // Lib for SHT21/HTU21
#include <N2kTypes.h> // NMEA2000
#include <N2kMessages.h>
#include <NMEA0183.h> // 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(&registerPageClock);
extern PageDescription registerPageWhite;
list.add(&registerPageWhite);
extern PageDescription registerPageBME280;
list.add(&registerPageBME280);
}
// 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();

View File

@ -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}

View File

@ -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