t-beam supreme: display fix, BME add, user btn fix

-Fixed build issues after display refactor
-Added BME280 support and updated SensorManager to include this data
-Fixed user button and verified it turns the display on
This commit is contained in:
cod3doomy
2025-05-19 12:55:56 -07:00
parent f9c0056955
commit fd37810022
6 changed files with 89 additions and 10 deletions

1
.gitignore vendored
View File

@@ -8,3 +8,4 @@ out/
.direnv/ .direnv/
.DS_Store .DS_Store
.vscode/settings.json .vscode/settings.json
.vscode/extensions.json

View File

@@ -10,10 +10,10 @@
class SensorManager { class SensorManager {
public: public:
double node_lat, node_lon; // modify these, if you want to affect Advert location double node_lat, node_lon, node_temp, node_hum, node_pres; // modify these, if you want to affect Advert location
double node_altitude; // altitude in meters double node_altitude; // altitude in meters
SensorManager() { node_lat = 0; node_lon = 0; node_altitude = 0; } SensorManager() { node_lat = 0; node_lon = 0; node_altitude = 0; node_temp = 0; node_hum = 0; node_pres = 0;}
virtual bool begin() { return false; } virtual bool begin() { return false; }
virtual bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) { return false; } virtual bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) { return false; }
virtual void loop() { } virtual void loop() { }

View File

@@ -22,7 +22,7 @@
#define PIN_BOARD_SCL1 41 //SCL for PMU and PFC8563 (RTC) #define PIN_BOARD_SCL1 41 //SCL for PMU and PFC8563 (RTC)
#define PIN_PMU_IRQ 40 //IRQ pin for PMU #define PIN_PMU_IRQ 40 //IRQ pin for PMU
#define PIN_USER_BTN 0 //#define PIN_USER_BTN 0
#define P_BOARD_SPI_MOSI 35 //SPI for SD Card and QMI8653 (IMU) #define P_BOARD_SPI_MOSI 35 //SPI for SD Card and QMI8653 (IMU)
#define P_BOARD_SPI_MISO 37 //SPI for SD Card and QMI8653 (IMU) #define P_BOARD_SPI_MISO 37 //SPI for SD Card and QMI8653 (IMU)
@@ -55,7 +55,9 @@ class TBeamS3SupremeBoard : public ESP32Board {
XPowersAXP2101 PMU; XPowersAXP2101 PMU;
public: public:
#ifdef MESH_DEBUG #ifdef MESH_DEBUG
void scanDevices(TwoWire *w);
void printPMU(); void printPMU();
void printBMEValues();
#endif #endif
bool power_init(); bool power_init();

View File

@@ -8,18 +8,21 @@ build_flags =
-D P_LORA_TX_LED=6 -D P_LORA_TX_LED=6
-D PIN_BOARD_SDA=17 -D PIN_BOARD_SDA=17
-D PIN_BOARD_SCL=18 -D PIN_BOARD_SCL=18
-D PIN_USER_BTN=0
-D RADIO_CLASS=CustomSX1262 -D RADIO_CLASS=CustomSX1262
-D WRAPPER_CLASS=CustomSX1262Wrapper -D WRAPPER_CLASS=CustomSX1262Wrapper
;-D DISPLAY_CLASS=SSD1306Display ;Needs to be modified for SH1106 -D DISPLAY_CLASS=SH1106Display
-D SX126X_RX_BOOSTED_GAIN=1 -D SX126X_RX_BOOSTED_GAIN=1
build_src_filter = ${esp32_base.build_src_filter} build_src_filter = ${esp32_base.build_src_filter}
+<../variants/lilygo_tbeam_supreme_SX1262> +<../variants/lilygo_tbeam_supreme_SX1262>
+<helpers/ui/SH1106Display.cpp>
board_build.partitions = min_spiffs.csv ; get around 4mb flash limit board_build.partitions = min_spiffs.csv ; get around 4mb flash limit
lib_deps = lib_deps =
${esp32_base.lib_deps} ${esp32_base.lib_deps}
lewisxhe/XPowersLib @ ^0.2.7 lewisxhe/XPowersLib @ ^0.2.7
;adafruit/Adafruit SSD1306 @ ^2.5.13 adafruit/Adafruit SH110X @ ^2.1.13
stevemarple/MicroNMEA @ ^2.0.6 stevemarple/MicroNMEA @ ^2.0.6
adafruit/Adafruit BME280 Library @ ^2.3.0
; === LILYGO T-Beam S3 Supreme with SX1262 environments === ; === LILYGO T-Beam S3 Supreme with SX1262 environments ===
[env:T_Beam_S3_Supreme_SX1262_repeater] [env:T_Beam_S3_Supreme_SX1262_repeater]

View File

@@ -1,10 +1,16 @@
#include <Arduino.h> #include <Arduino.h>
#include "target.h" #include "target.h"
#include <helpers/sensors/MicroNMEALocationProvider.h> #include <helpers/sensors/MicroNMEALocationProvider.h>
#include <Adafruit_BME280.h>
TBeamS3SupremeBoard board; TBeamS3SupremeBoard board;
#ifdef DISPLAY_CLASS
DISPLAY_CLASS display;
#endif
bool pmuIntFlag; bool pmuIntFlag;
//#define SEALEVELPRESSURE_HPA (1013.25)
#ifndef LORA_CR #ifndef LORA_CR
#define LORA_CR 5 #define LORA_CR 5
@@ -23,6 +29,7 @@ ESP32RTCClock fallback_clock;
AutoDiscoverRTCClock rtc_clock(fallback_clock); AutoDiscoverRTCClock rtc_clock(fallback_clock);
MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1); MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1);
TbeamSupSensorManager sensors = TbeamSupSensorManager(nmea); TbeamSupSensorManager sensors = TbeamSupSensorManager(nmea);
Adafruit_BME280 bme;
static void setPMUIntFlag(){ static void setPMUIntFlag(){
pmuIntFlag = true; pmuIntFlag = true;
@@ -46,7 +53,7 @@ void scanDevices(TwoWire *w)
switch (addr) { switch (addr) {
case 0x77: case 0x77:
case 0x76: case 0x76:
Serial.println("\tFound BMX280 Sensor"); Serial.println("\tFound BME280 Sensor");
deviceOnline |= BME280_ONLINE; deviceOnline |= BME280_ONLINE;
break; break;
case 0x34: case 0x34:
@@ -107,6 +114,26 @@ void TBeamS3SupremeBoard::printPMU()
Serial.println(); Serial.println();
} }
void printBMEValues() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
Serial.println();
}
#endif #endif
bool TBeamS3SupremeBoard::power_init() bool TBeamS3SupremeBoard::power_init()
@@ -289,6 +316,10 @@ bool radio_init() {
fallback_clock.begin(); fallback_clock.begin();
rtc_clock.begin(Wire1); rtc_clock.begin(Wire1);
// #ifdef MESH_DEBUG
// printBMEValues();
// #endif
#ifdef SX126X_DIO3_TCXO_VOLTAGE #ifdef SX126X_DIO3_TCXO_VOLTAGE
float tcxo = SX126X_DIO3_TCXO_VOLTAGE; float tcxo = SX126X_DIO3_TCXO_VOLTAGE;
@@ -340,8 +371,14 @@ void TbeamSupSensorManager::sleep_gps() {
} }
bool TbeamSupSensorManager::begin() { bool TbeamSupSensorManager::begin() {
//init BME280
if (! bme.begin(0x77, &Wire)) {
MESH_DEBUG_PRINTLN("Could not find a valid BME280 sensor, check wiring!");
}
else
MESH_DEBUG_PRINTLN("BME280 found and init!");
// init GPS port // init GPS port
Serial1.begin(GPS_BAUD_RATE, SERIAL_8N1, P_GPS_RX, P_GPS_TX); Serial1.begin(GPS_BAUD_RATE, SERIAL_8N1, P_GPS_RX, P_GPS_TX);
bool result = false; bool result = false;
@@ -359,22 +396,53 @@ bool TbeamSupSensorManager::querySensors(uint8_t requester_permissions, CayenneL
if (requester_permissions & TELEM_PERM_LOCATION) { // does requester have permission? if (requester_permissions & TELEM_PERM_LOCATION) { // does requester have permission?
telemetry.addGPS(TELEM_CHANNEL_SELF, node_lat, node_lon, node_altitude); telemetry.addGPS(TELEM_CHANNEL_SELF, node_lat, node_lon, node_altitude);
} }
if (requester_permissions & TELEM_PERM_ENVIRONMENT) { // does requester have permission?
telemetry.addTemperature(TELEM_CHANNEL_SELF, node_temp);
telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, node_hum);
telemetry.addBarometricPressure(TELEM_CHANNEL_SELF, node_pres);
//telemetry.addAltitude(TELEM_CHANNEL_SELF, node_alt);
}
return true; return true;
} }
void TbeamSupSensorManager::loop() { void TbeamSupSensorManager::loop() {
static long next_gps_update = 0; static long next_update = 0;
_nmea->loop(); _nmea->loop();
if (millis() > next_gps_update) { if (millis() > next_update) {
if (_nmea->isValid()) { if (_nmea->isValid()) {
node_lat = ((double)_nmea->getLatitude())/1000000.; node_lat = ((double)_nmea->getLatitude())/1000000.;
node_lon = ((double)_nmea->getLongitude())/1000000.; node_lon = ((double)_nmea->getLongitude())/1000000.;
node_altitude = ((double)_nmea->getAltitude()) / 1000.0; node_altitude = ((double)_nmea->getAltitude()) / 1000.0;
//Serial.printf("lat %f lon %f\r\n", _lat, _lon); //Serial.printf("lat %f lon %f\r\n", _lat, _lon);
} }
next_gps_update = millis() + 1000;
//read BME280 values
//node_alt = bme.readAltitude(SEALEVELPRESSURE_HPA);
node_temp = bme.readTemperature();
node_hum = bme.readHumidity();
node_pres = (bme.readPressure() / 100.0F);
#ifdef MESH_DEBUG
Serial.print("Temperature = ");
Serial.print(node_temp);
Serial.println(" *C");
Serial.print("Humidity = ");
Serial.print(node_hum);
Serial.println(" %");
Serial.print("Pressure = ");
Serial.print(node_pres);
Serial.println(" hPa");
// Serial.print("Approx. Altitude = ");
// Serial.print(node_alt);
// Serial.println(" m");
#endif
next_update = millis() + 1000;
} }
} }

View File

@@ -31,6 +31,11 @@ extern WRAPPER_CLASS radio_driver;
extern AutoDiscoverRTCClock rtc_clock; extern AutoDiscoverRTCClock rtc_clock;
extern TbeamSupSensorManager sensors; extern TbeamSupSensorManager sensors;
#ifdef DISPLAY_CLASS
#include <helpers/ui/SH1106Display.h>
extern DISPLAY_CLASS display;
#endif
enum { enum {
POWERMANAGE_ONLINE = _BV(0), POWERMANAGE_ONLINE = _BV(0),
DISPLAY_ONLINE = _BV(1), DISPLAY_ONLINE = _BV(1),