Refactored Sensor Libraries to use Common Interface
This commit is contained in:
parent
9aa59b3fe9
commit
45fa51c071
9 changed files with 66 additions and 51 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -1 +1,6 @@
|
||||||
config.h
|
.pio
|
||||||
|
.vscode/.browse.c_cpp.db*
|
||||||
|
.vscode/c_cpp_properties.json
|
||||||
|
.vscode/launch.json
|
||||||
|
.vscode/ipch
|
||||||
|
src/config.h
|
7
.vscode/extensions.json
vendored
Normal file
7
.vscode/extensions.json
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||||
|
// for the documentation about the extensions.json format
|
||||||
|
"recommendations": [
|
||||||
|
"platformio.platformio-ide"
|
||||||
|
]
|
||||||
|
}
|
|
@ -78,7 +78,7 @@ int32_t BME280::compensate_h(int32_t adc_H)
|
||||||
return (uint32_t)((v_x1_u32r>>12)/10);
|
return (uint32_t)((v_x1_u32r>>12)/10);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BME280::getData(int32_t *t, int32_t *p, int32_t *h) {
|
void BME280::getSensorData(lora_data &loradata) {
|
||||||
|
|
||||||
int32_t UP, UT, UH;
|
int32_t UP, UT, UH;
|
||||||
int32_t rawP, rawT;
|
int32_t rawP, rawT;
|
||||||
|
@ -106,9 +106,9 @@ void BME280::getData(int32_t *t, int32_t *p, int32_t *h) {
|
||||||
UH = read16(0xFD);
|
UH = read16(0xFD);
|
||||||
|
|
||||||
// Compensate Values and Return
|
// Compensate Values and Return
|
||||||
*t = compensate_t(UT);
|
loradata.temperature = compensate_t(UT);
|
||||||
*p = compensate_p(UP);
|
loradata.pressure = compensate_p(UP);
|
||||||
*h = compensate_h(UH);
|
loradata.humidity = compensate_h(UH);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t BME280::read8(uint8_t addr) {
|
uint8_t BME280::read8(uint8_t addr) {
|
||||||
|
@ -147,4 +147,4 @@ void BME280::write8(uint8_t addr, uint8_t data) {
|
||||||
Wire.write(addr);
|
Wire.write(addr);
|
||||||
Wire.write(data);
|
Wire.write(data);
|
||||||
Wire.endTransmission();
|
Wire.endTransmission();
|
||||||
}
|
}
|
|
@ -5,6 +5,13 @@
|
||||||
|
|
||||||
#define BME280_I2CADDR 0x76
|
#define BME280_I2CADDR 0x76
|
||||||
|
|
||||||
|
struct lora_data {
|
||||||
|
uint8_t bat;
|
||||||
|
int32_t temperature;
|
||||||
|
int32_t humidity;
|
||||||
|
int32_t pressure;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
class BME280
|
class BME280
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
@ -36,7 +43,6 @@ public:
|
||||||
// Get Calibration Data from Sensor
|
// Get Calibration Data from Sensor
|
||||||
void getCalData(void);
|
void getCalData(void);
|
||||||
// Read Pressure From Sensor
|
// Read Pressure From Sensor
|
||||||
void getData(int32_t *t, int32_t *p, int32_t *h);
|
void getSensorData(lora_data &loradata);
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,7 +5,11 @@ void GA112A(void) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t getPPM(void) {
|
void SG112A::getSensorData(lora_data &loradata) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t SG112A::getPPM(void) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,19 @@
|
||||||
#ifndef SG112A_H
|
#ifndef SG112A_H
|
||||||
#define SG112A_H
|
#define SG112A_H
|
||||||
|
|
||||||
|
struct lora_data {
|
||||||
|
uint8_t bat;
|
||||||
|
int16_t ppm;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
class SG112A {
|
class SG112A {
|
||||||
private:
|
private:
|
||||||
void sendCmd(uint8_t *cmd, uint8_t len);
|
void sendCmd(uint8_t *cmd, uint8_t len);
|
||||||
uint16_t crc16(uint8_t *cmd, uint8_t len);
|
uint16_t crc16(uint8_t *cmd, uint8_t len);
|
||||||
|
uint16_t getPPM(void);
|
||||||
public:
|
public:
|
||||||
SG112A(void);
|
SG112A(void);
|
||||||
uint16_t getPPM(void);
|
void getSensorData(lora_data &loradata);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -52,10 +52,7 @@ uint16_t SHT21::sensorRead(uint8_t command) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
float SHT21::getTemperature(void) {
|
void SHT21::getSensorData(lora_data &loradata) {
|
||||||
return (-46.85 + 175.72 / 65536.0 * (float)(sensorRead(SHT21_TEMPHOLD)));
|
loradata.temperature = (int32_t)((-46.85 + 175.72 / 65536.0 * (float)(sensorRead(SHT21_TEMPHOLD)))*100);
|
||||||
}
|
loradata.humidity = (int32_t)((-6.0 + 125.0 / 65536.0 * (float)(sensorRead(SHT21_HUMIHOLD)))*100);
|
||||||
|
}
|
||||||
float SHT21::getHumidity(void) {
|
|
||||||
return (-6.0 + 125.0 / 65536.0 * (float)(sensorRead(SHT21_HUMIHOLD)));
|
|
||||||
}
|
|
|
@ -37,6 +37,12 @@
|
||||||
#define SHT21_HUMINOHOLD 0xF5
|
#define SHT21_HUMINOHOLD 0xF5
|
||||||
#define SHT21_SOFTRESET 0xFE
|
#define SHT21_SOFTRESET 0xFE
|
||||||
|
|
||||||
|
struct lora_data {
|
||||||
|
uint8_t bat;
|
||||||
|
int32_t temperature;
|
||||||
|
int32_t humidity;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
class SHT21
|
class SHT21
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
@ -44,9 +50,7 @@ class SHT21
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SHT21(void);
|
SHT21(void);
|
||||||
|
void getSensorData(lora_data &loradata);
|
||||||
float getTemperature(void);
|
|
||||||
float getHumidity(void);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
44
src/main.cpp
44
src/main.cpp
|
@ -31,14 +31,15 @@ void blink(uint8_t num) {
|
||||||
#define BLINK_LED(COUNT)
|
#define BLINK_LED(COUNT)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAS_BME280
|
#if defined HAS_BME280
|
||||||
#include <BME280.h>
|
#include <BME280.h>
|
||||||
BME280 sensor;
|
BME280 sensor;
|
||||||
#endif
|
#elif defined HAS_SHT21
|
||||||
|
#include <SHT21.h>
|
||||||
#ifdef HAS_SHT21
|
SHT21 sensor;
|
||||||
#include <SHT21.h>
|
#elif defined HAS_SG112A
|
||||||
SHT21 sensor;
|
#include <SG112A.h>
|
||||||
|
SG112A sensor;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Define some LMIC Callbacks and Variables
|
// Define some LMIC Callbacks and Variables
|
||||||
|
@ -147,21 +148,9 @@ void do_send(osjob_t* j) {
|
||||||
#ifdef HAS_NO_SENSOR
|
#ifdef HAS_NO_SENSOR
|
||||||
struct lora_data {
|
struct lora_data {
|
||||||
uint8_t bat;
|
uint8_t bat;
|
||||||
} __attribute ((packed)) data;
|
} __attribute ((packed));
|
||||||
#elif defined HAS_SHT21
|
|
||||||
struct lora_data {
|
|
||||||
uint8_t bat;
|
|
||||||
int32_t temperature;
|
|
||||||
int32_t humidity;
|
|
||||||
} __attribute__ ((packed)) data;
|
|
||||||
#elif defined HAS_BME280
|
|
||||||
struct lora_data {
|
|
||||||
uint8_t bat;
|
|
||||||
int32_t temperature;
|
|
||||||
int32_t humidity;
|
|
||||||
int32_t pressure;
|
|
||||||
} __attribute__ ((packed)) data;
|
|
||||||
#endif
|
#endif
|
||||||
|
lora_data data; // The struct is defined in the sensor class (or above for use without a sensor)
|
||||||
|
|
||||||
if (LMIC.opmode & OP_TXRXPEND) {
|
if (LMIC.opmode & OP_TXRXPEND) {
|
||||||
delay(1);
|
delay(1);
|
||||||
|
@ -172,12 +161,9 @@ void do_send(osjob_t* j) {
|
||||||
if (batv % 20 > 9)
|
if (batv % 20 > 9)
|
||||||
data.bat += 1;
|
data.bat += 1;
|
||||||
|
|
||||||
// Take Measurements depending on Sensor
|
// Get Sensor Readings Into Data Paket
|
||||||
#ifdef HAS_SHT21
|
#ifndef HAS_NO_SENSOR
|
||||||
data.temperature = (int32_t)(sensor.getTemperature()*100);
|
sensor.getSensorData(data);
|
||||||
data.humidity = (int32_t)(sensor.getHumidity()*100);
|
|
||||||
#elif defined HAS_BME280
|
|
||||||
sensor.getData(&data.temperature, &data.pressure, &data.humidity);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Queue Packet for Sending
|
// Queue Packet for Sending
|
||||||
|
@ -238,4 +224,4 @@ void loop()
|
||||||
{
|
{
|
||||||
// Only Run the LMIC loop here. Actual Sending Code is in do_send()
|
// Only Run the LMIC loop here. Actual Sending Code is in do_send()
|
||||||
os_runloop_once();
|
os_runloop_once();
|
||||||
}
|
}
|
Loading…
Reference in a new issue