BME680 support (experimental)

This commit is contained in:
Klaus K Wilting 2018-11-14 23:10:59 +01:00
parent 4ae4633a15
commit 9c66167303
7 changed files with 38 additions and 21 deletions

View File

@ -47,11 +47,11 @@ typedef struct {
} gpsStatus_t; } gpsStatus_t;
typedef struct { typedef struct {
uint16_t temperature; float_t temperature;
uint16_t pressure; float_t pressure;
uint16_t humidity; float_t humidity;
uint16_t gas_resistance; float_t gas_resistance;
uint16_t altitude; float_t altitude;
} bmeStatus_t; } bmeStatus_t;
// global variables // global variables

View File

@ -39,6 +39,7 @@ public:
uint8_t reset1, uint8_t reset2); uint8_t reset1, uint8_t reset2);
void addAlarm(int8_t rssi, uint8_t message); void addAlarm(int8_t rssi, uint8_t message);
void addGPS(gpsStatus_t value); void addGPS(gpsStatus_t value);
void addBME(bmeStatus_t value);
void addButton(uint8_t value); void addButton(uint8_t value);
#if PAYLOAD_ENCODER == 1 // format plain #if PAYLOAD_ENCODER == 1 // format plain

View File

@ -6,10 +6,10 @@
; ---> SELECT TARGET PLATFORM HERE! <--- ; ---> SELECT TARGET PLATFORM HERE! <---
[platformio] [platformio]
;env_default = generic env_default = generic
;env_default = ebox ;env_default = ebox
;env_default = eboxtube ;env_default = eboxtube
env_default = heltec ;env_default = heltec
;env_default = heltecv2 ;env_default = heltecv2
;env_default = ttgov1 ;env_default = ttgov1
;env_default = ttgov2 ;env_default = ttgov2

View File

@ -47,15 +47,14 @@ void bme_loop(void *pvParameters) {
if (!bme.performReading()) { if (!bme.performReading()) {
ESP_LOGE(TAG, "BME680 read error"); ESP_LOGE(TAG, "BME680 read error");
continue; continue;
} else {
// read current BME data and buffer in global struct
bme_status.temperature = bme.temperature;
bme_status.pressure = bme.pressure / 100.0;
bme_status.humidity = bme.humidity;
bme_status.gas_resistance = bme.gas_resistance / 1000.0;
bme_status.altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
} }
// read BME data and cast to global struct
bme_status.temperature = (uint16_t)bme.temperature;
bme_status.pressure = (uint16_t)(bme.pressure / 100.0);
bme_status.humidity = (uint16_t)bme.humidity;
bme_status.gas_resistance = (uint16_t)(bme.gas_resistance / 1000.0);
bme_status.altitude = (uint16_t)bme.readAltitude(SEALEVELPRESSURE_HPA);
} // end of infinite loop } // end of infinite loop
vTaskDelete(NULL); // shoud never be reached vTaskDelete(NULL); // shoud never be reached

View File

@ -3,13 +3,9 @@
#include <stdint.h> #include <stdint.h>
#define HAS_BME 1 // BME680 sensor on I2C bus (SDA=4/SCL=15); comment out if not present
// Hardware related definitions for Heltec LoRa-32 Board // Hardware related definitions for Heltec LoRa-32 Board
#define HAS_LORA 1 // comment out if device shall not send data via LoRa #define HAS_LORA 1 // comment out if device shall not send data via LoRa
#define CFG_sx1276_radio 1 #define CFG_sx1276_radio 1
#define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C // OLED-Display on board #define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C // OLED-Display on board
#define HAS_LED (25) // white LED on board #define HAS_LED (25) // white LED on board
#define HAS_BUTTON (0) // button "PROG" on board #define HAS_BUTTON (0) // button "PROG" on board

View File

@ -21,7 +21,8 @@
//#define LMIC_USE_INTERRUPTS //#define LMIC_USE_INTERRUPTS
#define LMIC_ENABLE_DeviceTimeReq 1 //time sync via LoRaWAN network, is not yet supported by TTN (LoRaWAN spec v1.0.3)
//#define LMIC_ENABLE_DeviceTimeReq 1
// 16 μs per tick // 16 μs per tick
// LMIC requires ticks to be 15.5μs - 100 μs long // LMIC requires ticks to be 15.5μs - 100 μs long
@ -40,7 +41,7 @@
// enable more verbose output. Make sure that printf is actually // enable more verbose output. Make sure that printf is actually
// configured (e.g. on AVR it is not by default), otherwise using it can // configured (e.g. on AVR it is not by default), otherwise using it can
// cause crashing. // cause crashing.
#define LMIC_DEBUG_LEVEL 2 #define LMIC_DEBUG_LEVEL 0
// Enable this to allow using printf() to print to the given serial port // Enable this to allow using printf() to print to the given serial port
// (or any other Print object). This can be easy for debugging. The // (or any other Print object). This can be easy for debugging. The

View File

@ -93,6 +93,16 @@ void PayloadConvert::addGPS(gpsStatus_t value) {
#endif #endif
} }
void PayloadConvert::addBME(bmeStatus_t value) {
#ifdef HAS_BME
buffer[cursor++] = (byte)(value.temperature);
buffer[cursor++] = (byte)(value.pressure);
buffer[cursor++] = (byte)(value.humidity);
buffer[cursor++] = (byte)(value.gas_resistance);
buffer[cursor++] = (byte)(value.altitude);
#endif
}
void PayloadConvert::addButton(uint8_t value) { void PayloadConvert::addButton(uint8_t value) {
#ifdef HAS_BUTTON #ifdef HAS_BUTTON
buffer[cursor++] = value; buffer[cursor++] = value;
@ -150,6 +160,16 @@ void PayloadConvert::addGPS(gpsStatus_t value) {
#endif #endif
} }
void PayloadConvert::addBME(bmeStatus_t value) {
#ifdef HAS_BME
writeUint8((byte)value.temperature);
writeUint8((byte)value.pressure);
writeUint8((byte)value.humidity);
writeUint8((byte)value.gas_resistance);
writeUint8((byte)value.altitude);
#endif
}
void PayloadConvert::addButton(uint8_t value) { void PayloadConvert::addButton(uint8_t value) {
#ifdef HAS_BUTTON #ifdef HAS_BUTTON
writeUint8(value); writeUint8(value);