Added SHT21 as a Possible Sensor Type
This commit is contained in:
parent
2a0516ec83
commit
a37f20605c
|
@ -1,7 +1,7 @@
|
|||
# TinyLoRa Firmware
|
||||
|
||||
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
|
||||
|
||||
|
@ -21,4 +21,4 @@ function Decoder(bytes, port) {
|
|||
|
||||
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 "tinySPI.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"
|
||||
|
||||
#ifdef HAS_BME280
|
||||
#include <BME280.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SHT21
|
||||
#include <SHT21.h>
|
||||
#endif
|
||||
|
||||
// Initialize RFM95W and LoraWAN
|
||||
#define DIO0 PIN_B0
|
||||
#define NSS PIN_B1
|
||||
|
@ -48,16 +56,20 @@ uint16_t Frame_Counter_Tx = 0x0000;
|
|||
// If set LED will blink when sending
|
||||
#define LED_PIN PIN_A7
|
||||
|
||||
// Sensor Class
|
||||
// Sensorclass and deepsleep interval (for measurement about every 10Min)
|
||||
#ifdef HAS_BME280
|
||||
BME280 sensor;
|
||||
#define SLEEP_TIME 528
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SHT21
|
||||
SHT21 sensor;
|
||||
#define SLEEP_TIME 544
|
||||
#endif
|
||||
|
||||
// Global Variable used for deep sleep
|
||||
uint16_t sleep_interval;
|
||||
|
||||
// Sleep Time (s) Between Two Measurements
|
||||
#define SLEEP_TIME 528
|
||||
|
||||
|
||||
// Setup Wakeup Interrupt Timer
|
||||
void init_wdt()
|
||||
{
|
||||
|
@ -123,7 +135,6 @@ void setup()
|
|||
#ifdef LED_PIN
|
||||
pinMode(LED_PIN, OUTPUT);
|
||||
#endif
|
||||
|
||||
delay(50);
|
||||
}
|
||||
|
||||
|
@ -134,7 +145,15 @@ void loop()
|
|||
int32_t data[4];
|
||||
|
||||
// Get Sensor Data
|
||||
#ifdef HAS_BME280
|
||||
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();
|
||||
|
||||
// LED On before Sending
|
||||
|
|
Loading…
Reference in a new issue