Added SHT21 as a Possible Sensor Type
This commit is contained in:
parent
2a0516ec83
commit
a37f20605c
|
@ -1,7 +1,7 @@
|
||||||
# TinyLoRa Firmware
|
# TinyLoRa Firmware
|
||||||
|
|
||||||
Example Sensor Node Firmware with a BMP/E280 Sensor.
|
Example Sensor Node Firmware with a BMP/E280 Sensor.
|
||||||
Please Change the Values in src/secconfig.h to your Keys from https://console.thethingsnetwork.org. Device has to be set to ABP Mode.
|
Please Change the Values in src/secconfig.h to your Keys from https://console.thethingsnetwork.org. Device has to be set to ABP Mode. Also since there is no permanent storage to store the Frame Counter, please disable the Frame Counter Check in the TTN console.
|
||||||
|
|
||||||
Project was created using PlatformIO Atmel-AVR Framework
|
Project was created using PlatformIO Atmel-AVR Framework
|
||||||
|
|
||||||
|
@ -21,4 +21,4 @@ function Decoder(bytes, port) {
|
||||||
|
|
||||||
return decoded;
|
return decoded;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
72
Firmware/lib/SHT21/SHT21.cpp
Normal file
72
Firmware/lib/SHT21/SHT21.cpp
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
main.cpp - SHT21 Sensor Library
|
||||||
|
Copyright (c) 2019, Stefan Brand
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <i2cmaster.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include "SHT21.h"
|
||||||
|
|
||||||
|
SHT21::SHT21() {
|
||||||
|
// Initialize I2C Bus
|
||||||
|
i2c_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t SHT21::sensorRead(uint8_t command) {
|
||||||
|
uint16_t result;
|
||||||
|
|
||||||
|
// Trigger Measurement
|
||||||
|
i2c_start_wait(SHT21_I2CADDR+I2C_WRITE);
|
||||||
|
i2c_write(command);
|
||||||
|
//if (command == SHT21_TEMPHOLD || command == SHT21_TEMPNOHOLD) {
|
||||||
|
delay(86); // Max Measurement Time 14 bit Temperature
|
||||||
|
//} else if (command == SHT21_HUMIHOLD || command == SHT21_HUMINOHOLD) {
|
||||||
|
// delay(30); // Max Measurement Time 12 bit Humidity
|
||||||
|
//}
|
||||||
|
i2c_stop();
|
||||||
|
|
||||||
|
// Read Value
|
||||||
|
i2c_start_wait(SHT21_I2CADDR+I2C_READ);
|
||||||
|
result = (i2c_readAck() << 8);
|
||||||
|
result |= (i2c_readNak());
|
||||||
|
i2c_stop();
|
||||||
|
|
||||||
|
result &= ~0x0003; // Clear CRC Bits
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
float SHT21::getTemperature(void) {
|
||||||
|
return (-46.85 + 175.72 / 65536.0 * (float)(sensorRead(SHT21_TEMPHOLD)));
|
||||||
|
}
|
||||||
|
|
||||||
|
float SHT21::getHumidity(void) {
|
||||||
|
return (-6.0 + 125.0 / 65536.0 * (float)(sensorRead(SHT21_HUMIHOLD)));
|
||||||
|
}
|
56
Firmware/lib/SHT21/SHT21.h
Normal file
56
Firmware/lib/SHT21/SHT21.h
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
main.cpp - SHT21 Sensor Library
|
||||||
|
Copyright (c) 2019, Stefan Brand
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SHT21_H
|
||||||
|
#define SHT21_H
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
#define SHT21_I2CADDR 0x80
|
||||||
|
#define SHT21_TEMPHOLD 0xE3
|
||||||
|
#define SHT21_TEMPNOHOLD 0xF3
|
||||||
|
#define SHT21_HUMIHOLD 0xE5
|
||||||
|
#define SHT21_HUMINOHOLD 0xF5
|
||||||
|
#define SHT21_SOFTRESET 0xFE
|
||||||
|
|
||||||
|
class SHT21
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
uint16_t sensorRead(uint8_t command);
|
||||||
|
|
||||||
|
public:
|
||||||
|
SHT21(void);
|
||||||
|
|
||||||
|
float getTemperature(void);
|
||||||
|
float getHumidity(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -33,11 +33,19 @@
|
||||||
#include <avr/wdt.h>
|
#include <avr/wdt.h>
|
||||||
#include "tinySPI.h"
|
#include "tinySPI.h"
|
||||||
#include "LoRaWAN.h"
|
#include "LoRaWAN.h"
|
||||||
#include <BME280.h>
|
|
||||||
|
|
||||||
//Change Keys in secconfig.h for your TTN application:
|
|
||||||
|
// secconfig.h Configures TTN Keys and used Sensor
|
||||||
#include "secconfig.h"
|
#include "secconfig.h"
|
||||||
|
|
||||||
|
#ifdef HAS_BME280
|
||||||
|
#include <BME280.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAS_SHT21
|
||||||
|
#include <SHT21.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// Initialize RFM95W and LoraWAN
|
// Initialize RFM95W and LoraWAN
|
||||||
#define DIO0 PIN_B0
|
#define DIO0 PIN_B0
|
||||||
#define NSS PIN_B1
|
#define NSS PIN_B1
|
||||||
|
@ -48,16 +56,20 @@ uint16_t Frame_Counter_Tx = 0x0000;
|
||||||
// If set LED will blink when sending
|
// If set LED will blink when sending
|
||||||
#define LED_PIN PIN_A7
|
#define LED_PIN PIN_A7
|
||||||
|
|
||||||
// Sensor Class
|
// Sensorclass and deepsleep interval (for measurement about every 10Min)
|
||||||
|
#ifdef HAS_BME280
|
||||||
BME280 sensor;
|
BME280 sensor;
|
||||||
|
#define SLEEP_TIME 528
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAS_SHT21
|
||||||
|
SHT21 sensor;
|
||||||
|
#define SLEEP_TIME 544
|
||||||
|
#endif
|
||||||
|
|
||||||
// Global Variable used for deep sleep
|
// Global Variable used for deep sleep
|
||||||
uint16_t sleep_interval;
|
uint16_t sleep_interval;
|
||||||
|
|
||||||
// Sleep Time (s) Between Two Measurements
|
|
||||||
#define SLEEP_TIME 528
|
|
||||||
|
|
||||||
|
|
||||||
// Setup Wakeup Interrupt Timer
|
// Setup Wakeup Interrupt Timer
|
||||||
void init_wdt()
|
void init_wdt()
|
||||||
{
|
{
|
||||||
|
@ -123,7 +135,6 @@ void setup()
|
||||||
#ifdef LED_PIN
|
#ifdef LED_PIN
|
||||||
pinMode(LED_PIN, OUTPUT);
|
pinMode(LED_PIN, OUTPUT);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
delay(50);
|
delay(50);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +145,15 @@ void loop()
|
||||||
int32_t data[4];
|
int32_t data[4];
|
||||||
|
|
||||||
// Get Sensor Data
|
// Get Sensor Data
|
||||||
|
#ifdef HAS_BME280
|
||||||
sensor.getData(&data[0], &data[1], &data[2]);
|
sensor.getData(&data[0], &data[1], &data[2]);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAS_SHT21
|
||||||
|
data[0] = (int32_t)(sensor.getTemperature()*100);
|
||||||
|
data[1] = 0;
|
||||||
|
data[2] = (int32_t)(sensor.getHumidity()*100);
|
||||||
|
#endif
|
||||||
data[3] = readVcc();
|
data[3] = readVcc();
|
||||||
|
|
||||||
// LED On before Sending
|
// LED On before Sending
|
||||||
|
|
Loading…
Reference in a new issue