firmware - v0.1.1, offer different I2C addresses for BME280, SHT31.

its done quick and dirty
and some Typos got fixed
This commit is contained in:
Marcus 2024-12-10 15:20:06 +01:00
parent 2098445202
commit 0a2c56cd7b
5 changed files with 102 additions and 46 deletions

View file

@ -6,10 +6,10 @@
// set CANGROW_VER and CANGROW_BUILD if not already done as Compiler Flag
#ifndef CANGROW_VER
#define CANGROW_VER "v0.1.0-dev"
#define CANGROW_VER "v0.1.1-dev"
#endif
#ifndef CANGROW_BUILD
#define CANGROW_BUILD "1a2b3c4f"
#define CANGROW_BUILD "1a2b3c4f-001"
#endif
/*
@ -136,25 +136,39 @@ void setup() {
// dht.begin(); //TODO: Do only, when configured
// initialise BME280
Serial.println(":: initialise BME280 sensor ::");
// dirty way of supporting multiple addresses, DRY? :p
Serial.println(":: initialise BME280 sensor, address 0x76 ::");
// ToDo: let the user configure somewhere the ID of the BME280 sensor
if(!bme.begin(0x76)) {
Serial.println("!! Cannot find BME280 on I2C bus. Please check connection or ID");
if(!bme_0x76.begin(0x76)) {
Serial.println("!! Cannot find BME280 on I2C bus at address 0x76. Please check connection or ID");
}
Serial.println(":: initialise BME280 sensor, address 0x77 ::");
// ToDo: let the user configure somewhere the ID of the BME280 sensor
if(!bme_0x77.begin(0x77)) {
Serial.println("!! Cannot find BME280 on I2C bus at address 0x77. Please check connection or ID");
}
// initialise SHT31
Serial.println(":: initialise SHT31 sensor ::");
if (! sht31.begin(0x44)) { // Set to 0x45 for alternate i2c addr
Serial.println("Couldn't find SHT31");
Serial.println(":: initialise SHT31 sensor, address 0x44 ::");
if (! sht31_0x44.begin(0x44)) { // Set to 0x45 for alternate i2c addr
Serial.println("!! Cannot find SHT31 on I2C bus at address 0x45. Please check connection or ID");
}
Serial.println(":: initialise SHT31 sensor, address 0x45 ::");
if (! sht31_0x45.begin(0x45)) { // Set to 0x45 for alternate i2c addr
Serial.println("!! Cannot find SHT31 on I2C bus at address 0x45. Please check connection or ID");
}
Serial.print("SHT31 Heater Enabled State: ");
if (sht31.isHeaterEnabled())
Serial.print(":: SHT31 (0x44) heater enable state ::");
if (sht31_0x44.isHeaterEnabled())
Serial.println("ENABLED");
else
Serial.println("DISABLED");
Serial.print(":: SHT31 (0x45) heater enable state ::");
if (sht31_0x45.isHeaterEnabled())
Serial.println("ENABLED");
else
Serial.println("DISABLED");

View file

@ -12,16 +12,17 @@
*/
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;
// dirty way of having multiple addresses configurable
Adafruit_BME280 bme_0x76;
Adafruit_BME280 bme_0x77;
/*
* SHT30/31 Stuff
*
*/
bool enableHeater = false;
Adafruit_SHT31 sht31 = Adafruit_SHT31();
Adafruit_SHT31 sht31_0x44 = Adafruit_SHT31();
Adafruit_SHT31 sht31_0x45 = Adafruit_SHT31();
/*
* Chirp functions
@ -103,9 +104,11 @@ float getTemperature(byte tempSensor) {
/*
* tempSensor
* ==========
* 1 : DHT11 temp sensor
* 2 : chirp I2C temp sensor
* 3 : SHT31
* 1 : BME280 0x76 temp sensor
* 2 : BME280 0x77 temp sensor
* 3 : SHT31 0x44 temp sensor
* 4 : SHT31 0x45 temp sensor
* 5 : Chirp I2C 0x20 temp sensor
*/
float temperature = 0;
@ -113,18 +116,23 @@ float getTemperature(byte tempSensor) {
switch(tempSensor) {
case 1:
// read temperature from BME280
temperature = bme.readTemperature();
// read temperature from DHT11
// dht support dropped
// temperature = dht.readTemperature();
temperature = bme_0x76.readTemperature();
break;
case 2:
// read temperature from chrip I2C
temperature = readI2CRegister16bit(0x20, 5) * 0.10 ;
// read temperature from BME280
temperature = bme_0x77.readTemperature();
break;
case 3:
// read temp from SHT31
temperature = sht31.readTemperature();
temperature = sht31_0x44.readTemperature();
break;
case 4:
// read temp from SHT31
temperature = sht31_0x45.readTemperature();
break;
case 5:
// read temperature from chrip I2C
temperature = readI2CRegister16bit(0x20, 5) * 0.10 ;
break;
default:
// if sensor type is not recognized, return 99
@ -138,18 +146,26 @@ float getHumidity(byte HumSensor) {
/*
* sensors:
* 1: BME280
* 2: SHT31
* 1 : BME280 0x76 humidity sensor
* 2 : BME280 0x77 humidity sensor
* 3 : SHT31 0x44 humidity sensor
* 4 : SHT31 0x45 humidity sensor
*
*/
float humidity;
switch(HumSensor) {
case 1:
humidity = bme.readHumidity();
humidity = bme_0x76.readHumidity();
break;
case 2:
humidity = sht31.readHumidity();
humidity = bme_0x77.readHumidity();
break;
case 3:
humidity = sht31_0x44.readHumidity();
break;
case 4:
humidity = sht31_0x45.readHumidity();
break;
default:
humidity = 0.0;

View file

@ -114,7 +114,7 @@ bool loadEEPROM() {
* 249 HumiditySensor_Type (1 byte)
* 250 PWMFrequency (2 byte)
* 252 DisplayScreenDuration (1 byte)
* 253
* 253 ...
*
*/

View file

@ -629,7 +629,7 @@ void WEBsystemSettings() {
body += "</select><br>\n";
// UseFANrelais bool
body += "Use relais for FAN (disable PWM): <select id='UseFANrelais' name='UseFANrelais' required>\n";
body += "Use relais for FAN1 (disable PWM): <select id='UseFANrelais' name='UseFANrelais' required>\n";
if(configured == false){body += "<option disabled value='' selected hidden>---</option>\n";}
body += "<option value='1'" + returnStrSelected(UseFANrelais, 1) + ">Yes</option>\n";
body += "<option value='0'" + returnStrSelected(UseFANrelais, 0) + ">No</option>\n";
@ -647,7 +647,7 @@ void WEBsystemSettings() {
body += "<option disabled value='' selected hidden>---</option>\n";
}
body += "<option value='1'" + returnStrSelected(MoistureSensor_Type, 1) + ">Analog capacitive</option>\n";
body += "<option value='2'" + returnStrSelected(MoistureSensor_Type, 2) + ">I2C Chirp</option>\n";
body += "<option value='2'" + returnStrSelected(MoistureSensor_Type, 2) + ">I2C Chirp (0x20)</option>\n";
body += "</select><br>\n";
// SoilmoistureLow byte
@ -679,9 +679,11 @@ void WEBsystemSettings() {
if(configured == false) {
body += "<option disabled value='' selected hidden>---</option>\n";
}
body += "<option value='1'" + returnStrSelected(TemperatureSensor_Type, 1) + ">I2C BME280</option>\n";
body += "<option value='2'" + returnStrSelected(TemperatureSensor_Type, 2) + ">I2C Chirp</option>\n";
body += "<option value='3'" + returnStrSelected(TemperatureSensor_Type, 3) + ">I2C SHT31</option>\n";
body += "<option value='1'" + returnStrSelected(TemperatureSensor_Type, 1) + ">I2C BME280 (0x76)</option>\n";
body += "<option value='2'" + returnStrSelected(TemperatureSensor_Type, 2) + ">I2C BME280 (0x77)</option>\n";
body += "<option value='3'" + returnStrSelected(TemperatureSensor_Type, 3) + ">I2C SHT31 (0x44)</option>\n";
body += "<option value='4'" + returnStrSelected(TemperatureSensor_Type, 4) + ">I2C SHT31 (0x45)</option>\n";
body += "<option value='5'" + returnStrSelected(TemperatureSensor_Type, 5) + ">I2C Chirp (0x20)</option>\n";
body += "</select><br>\n";
// HumiditySensor_Type byte
@ -689,8 +691,10 @@ void WEBsystemSettings() {
if(configured == false) {
body += "<option disabled value='' selected hidden>---</option>\n";
}
body += "<option value='1'" + returnStrSelected(HumiditySensor_Type, 1) + ">I2C BME280</option>\n";
body += "<option value='2'" + returnStrSelected(HumiditySensor_Type, 2) + ">I2C SHT31</option>\n";
body += "<option value='1'" + returnStrSelected(HumiditySensor_Type, 1) + ">I2C BME280 (0x76)</option>\n";
body += "<option value='2'" + returnStrSelected(HumiditySensor_Type, 2) + ">I2C BME280 (0x77)</option>\n";
body += "<option value='3'" + returnStrSelected(HumiditySensor_Type, 3) + ">I2C SHT31 (0x44)</option>\n";
body += "<option value='4'" + returnStrSelected(HumiditySensor_Type, 4) + ">I2C SHT31 (0x45)</option>\n";
body += "</select><br>\n";
// NtpOffset int
@ -710,7 +714,7 @@ void WEBsystemSettings() {
// DisplayScreenDuration byte
body += "Display rotation interval: <input class='inputShort' type='number' name='DisplayScreenDuration' min='0' max='255' value='";
body += DisplayScreenDuration;
body += "' required> s<br>\n";
body += "' required> Seconds<br>\n";
body += "<p class='helpbox'><b>0</b> will always show sensor value screen</p>";
body += "ESP32-Cam IP (optional): <input type='text' name='Esp32CamIP' maxlength='16' value='";
@ -1191,7 +1195,13 @@ void APIgetDebug() {
objSystem["MaintenanceDuration"] = MaintenanceDuration;
objSystem["PumpOnTime"] = PumpOnTime;
objSystem["PumpLastOn"] = PumpLastOn;
objSystem["OutputInvert"] = OutputInvert;
objSystem["SoilmoistureWet"] = SoilmoistureWet;
objSystem["SoilmoistureDry"] = SoilmoistureDry;
objSystem["HumiditySensor_Type"] = HumiditySensor_Type;
objSystem["PWMFrequency"] = PWMFrequency;
objSystem["DisplayScreenDuration"] = DisplayScreenDuration;
// Grow
JsonObject objGrow = jsonDebug["grow"].add<JsonObject>();
objGrow["GrowName"] = GrowName;
@ -1210,22 +1220,38 @@ void APIgetDebug() {
objGrow["DayOfGrow"] = DayOfGrow;
objGrow["PumpIntervalVeg"] = PumpIntervalVeg;
objGrow["PumpIntervalBloom"] = PumpIntervalBloom;
objSystem["PinFAN2PWM"] = PinFAN2PWM;
// Sensors
JsonObject objSensors = jsonDebug["sensors"].add<JsonObject>();
// Chirp
objSensors["chirp"]["temperature"] = getTemperature(2);
objSensors["chirp"]["temperature"] = getTemperature(5);
objSensors["chirp"]["soilmoisture"] = getSoilmoisture(2);
objSensors["chirp"]["soilmoistureRAW"] = getSoilmoisture(2, true);
objSensors["chirp"]["light"] = getLightchirp();
// BME280
objSensors["bme280"]["temperature"] = getTemperature(1);
objSensors["bme280"]["humidity"] = getHumidity(1);
objSensors["bme280"]["preassure"] = bme.readPressure() / 100.0F;
objSensors["bme280"]["appAltitude"] = bme.readAltitude(SEALEVELPRESSURE_HPA);
// BME280 0x76
objSensors["bme280_0x76"]["temperature"] = getTemperature(1);
objSensors["bme280_0x76"]["humidity"] = getHumidity(1);
//objSensors["bme280_0x76"]["preassure"] = bme.readPressure() / 100.0F;
//objSensors["bme280_0x76"]["appAltitude"] = bme.readAltitude(SEALEVELPRESSURE_HPA);
// BME280 0x77
objSensors["bme280_0x77"]["temperature"] = getTemperature(2);
objSensors["bme280_0x77"]["humidity"] = getHumidity(2);
//objSensors["bme280_0x77"]["preassure"] = bme.readPressure() / 100.0F;
//objSensors["bme280_0x77"]["appAltitude"] = bme.readAltitude(SEALEVELPRESSURE_HPA);
// SHT31 0x44
objSensors["sht31_0x44"]["temperature"] = getTemperature(3);
objSensors["sht31_0x44"]["humidity"] = getHumidity(3);
// SHT31 0x45
objSensors["sht31_0x45"]["temperature"] = getTemperature(4);
objSensors["sht31_0x45"]["humidity"] = getHumidity(4);
// Analog
objSensors["analog"]["soilmoisture"] = getSoilmoisture(1);

View file

@ -3,7 +3,7 @@
test -z $TTY && TTY="/dev/ttyUSB0"
test -z $IP && IP="192.168.4.20"
test -z $VER && VER="0.1.0"
test -z $VER && VER="0.1.1"
BUILD="$(git rev-parse --short HEAD)-$(date '+%Y%m%d%H%M%S')"
ACLI="$HOME/.local/bin/arduino-cli"