Commit 3
This commit is contained in:
parent
9e702af8c6
commit
2e2687d3f7
8 changed files with 252 additions and 57 deletions
84
src/main.ino
84
src/main.ino
|
|
@ -1,6 +1,6 @@
|
|||
#include <ArduinoJson.h>
|
||||
#include <rtl_433_ESP.h>
|
||||
#include <RCSwitch.h>
|
||||
//#include <RCSwitch.h>
|
||||
#include <Wire.h>
|
||||
#include <BME280I2C.h>
|
||||
#include <EnvironmentCalculations.h>
|
||||
|
|
@ -12,21 +12,23 @@
|
|||
|
||||
#define _DICT_PACK_STRUCTURES
|
||||
|
||||
#ifndef LED_BUILTIN
|
||||
#define LED_BUILTIN 12
|
||||
#endif
|
||||
#define LED LED_BUILTIN
|
||||
|
||||
#define RCSWITCH_PIN 43
|
||||
|
||||
//CC1101 radiotx = RADIO_LIB_MODULE;
|
||||
RCSwitch mySwitch = RCSwitch();
|
||||
CC1101 radiotx = RADIO_LIB_MODULE;
|
||||
//RCSwitch mySwitch = RCSwitch();
|
||||
|
||||
#ifndef RF_MODULE_FREQUENCY
|
||||
# define RF_MODULE_FREQUENCY 433.92
|
||||
#endif
|
||||
|
||||
#define JSON_MSG_BUFFER 512
|
||||
#define MINDELAY 10L
|
||||
#define ALTITUDE 150.0
|
||||
#define DELAYLOCALSENSORS 30L
|
||||
//#define ALTITUDE 150.0
|
||||
#define ALTITUDE 210.0
|
||||
#define DELAYLOCALSENSORS 60L
|
||||
//#define DELAYKAKUSEND 750L
|
||||
|
||||
Dictionary<String, unsigned long> d1;
|
||||
|
||||
|
|
@ -38,6 +40,10 @@ BME280I2C bme;
|
|||
bool sensors_enabled;
|
||||
|
||||
int count = 0;
|
||||
unsigned long lastrcv = 0;
|
||||
|
||||
//unsigned long kakucode = 0;
|
||||
//bool kakucmd = false;
|
||||
|
||||
uint32_t lastts_localsensors = 0;
|
||||
|
||||
|
|
@ -45,16 +51,22 @@ void rtl_433_Callback(char* message) {
|
|||
//Serial.println("RTL433 Callback");
|
||||
JsonDocument jsonDocument;
|
||||
deserializeJson(jsonDocument,message);
|
||||
//logJsonAll(jsonDocument);
|
||||
logJson(jsonDocument);
|
||||
count++;
|
||||
lastrcv = millis();
|
||||
}
|
||||
|
||||
JsonDocument analyzeTH_type1(JsonArray payloadrh) {
|
||||
JsonDocument doc;
|
||||
doc["moisture"] = payloadrh[5].as<int>();
|
||||
doc["battery_ok"] = payloadrh[0].as<unsigned char>() & 0b00000001;
|
||||
int16_t payloadtemp = payloadrh[4].as<unsigned char>();
|
||||
payloadtemp += payloadrh[3].as<unsigned char>() << 8;
|
||||
doc["temperature_C"] = payloadtemp / 100.0;
|
||||
//doc["moisture"] = payloadrh[5].as<int>();
|
||||
uint16_t payloadmoisture = payloadrh[6].as<unsigned char>();
|
||||
payloadmoisture += payloadrh[5].as<unsigned char>() << 8;
|
||||
doc["moisture"] = payloadmoisture;
|
||||
doc["battery_ok"] = payloadrh[0].as<unsigned char>() & 0b00000001;
|
||||
uint16_t payloadbat = payloadrh[2].as<unsigned char>();
|
||||
payloadbat += payloadrh[1].as<unsigned char>() << 8;
|
||||
|
|
@ -63,6 +75,16 @@ JsonDocument analyzeTH_type1(JsonArray payloadrh) {
|
|||
return doc;
|
||||
}
|
||||
|
||||
JsonDocument analyzeTH_type2(JsonArray payloadrh) {
|
||||
JsonDocument doc;
|
||||
int16_t payloadtemp = payloadrh[2].as<unsigned char>();
|
||||
payloadtemp += payloadrh[1].as<unsigned char>() << 8;
|
||||
doc["temperature_C"] = payloadtemp / 100.0;
|
||||
uint8_t payloadhumidity = payloadrh[3].as<unsigned char>();
|
||||
doc["humidity"] = payloadhumidity;
|
||||
return doc;
|
||||
}
|
||||
|
||||
void logJson(JsonDocument jsondata) {
|
||||
if(jsondata["model"].is<String>())
|
||||
{
|
||||
|
|
@ -76,7 +98,7 @@ void logJson(JsonDocument jsondata) {
|
|||
if(jsondata["model"].is<String>() && jsondata["model"] == "RadioHead-ASK") {
|
||||
JsonArray payloadrh = jsondata["payload"];
|
||||
bool treatrh = 0;
|
||||
if(jsondata["len"].as<int>() == 6 && ((payloadrh[0].as<unsigned char>() & 0b00010000 ) > 0)) {
|
||||
if(jsondata["len"].as<int>() == 7 && ((payloadrh[0].as<unsigned char>() & 0b00010000 ) > 0)) {
|
||||
treatrh = true;
|
||||
//Serial.println("Analyse RH Payload");
|
||||
JsonDocument adoc = analyzeTH_type1(payloadrh);
|
||||
|
|
@ -85,6 +107,11 @@ void logJson(JsonDocument jsondata) {
|
|||
jsondata["battery_V"] = adoc["battery_V"];
|
||||
jsondata["battery_percent"] = adoc["battery_percent"];
|
||||
jsondata["temperature_C"] = adoc["temperature_C"];
|
||||
} else if(jsondata["len"].as<int>() == 4 && ((payloadrh[0].as<unsigned char>() & 0b00100000 ) > 0)) {
|
||||
treatrh = true;
|
||||
JsonDocument adoc = analyzeTH_type2(payloadrh);
|
||||
jsondata["temperature_C"] = adoc["temperature_C"];
|
||||
jsondata["humidity"] = adoc["humidity"];
|
||||
}
|
||||
if(treatrh == true) {
|
||||
jsondata.remove("from");
|
||||
|
|
@ -149,6 +176,7 @@ void logJsonRH(JsonDocument jsondata) {
|
|||
//Serial.println();
|
||||
//ledblink();
|
||||
}
|
||||
*/
|
||||
|
||||
void logJsonAll(JsonDocument jsondata) {
|
||||
// Serial.println(count);
|
||||
|
|
@ -162,7 +190,7 @@ void logJsonAll(JsonDocument jsondata) {
|
|||
Serial.println(JSONmessageBuffer);
|
||||
//ledblink();
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
void sendBME280() {
|
||||
JsonDocument jsonDocument;
|
||||
|
|
@ -203,14 +231,29 @@ void ledblink() {
|
|||
}
|
||||
|
||||
void setup() {
|
||||
Serial.setTxBufferSize(512);
|
||||
//Serial.setTxBufferSize(512);
|
||||
//Serial.setTxTimeoutMs(100);
|
||||
Serial.begin(115200);
|
||||
delay(1000);
|
||||
delay(10000);
|
||||
//for (int i=0 ; i<10; i++) {
|
||||
// Serial.print("Hello");
|
||||
// delay(1000);
|
||||
//}
|
||||
/*Serial.print("MISO ");
|
||||
Serial.println(MISO);
|
||||
Serial.print("MOSI ");
|
||||
Serial.println(MOSI);
|
||||
Serial.print("SS ");
|
||||
Serial.println(SS);
|
||||
Serial.print("SCK ");
|
||||
Serial.println(SCK);
|
||||
*/
|
||||
/*SPI.begin(SCK, MISO, MOSI, SS);
|
||||
SPI.setFrequency(4000000);*/
|
||||
SPI.setFrequency(4000000);
|
||||
Serial.printf("SPI.begin(SCK=%d, MISO=%d, MOSI=%d, CS=%d)\n", SCK, MISO, MOSI, SS);
|
||||
Serial.print("RF_MODULE_RECEIVER_GPIO ");
|
||||
Serial.println(RF_MODULE_RECEIVER_GPIO);
|
||||
/* if(SS != 21 || MOSI != 20 || MISO != 10 || SCK != 7)
|
||||
{
|
||||
for ( ; ; ) {
|
||||
|
|
@ -235,10 +278,17 @@ void setup() {
|
|||
|
||||
void loop() {
|
||||
rf.loop();
|
||||
if(sensors_enabled == true && (millis() > (lastts_localsensors + (DELAYLOCALSENSORS*1000)) || lastts_localsensors > millis())) {
|
||||
if(sensors_enabled == true && (millis() > (lastts_localsensors + (DELAYLOCALSENSORS*1000) + random(0, 5000)) || lastts_localsensors > millis())) {
|
||||
lastts_localsensors = millis();
|
||||
sendBME280();
|
||||
}
|
||||
/*if(kakucode > 0 && (millis() > (lastrcv + DELAYKAKUSEND) || lastrcv > millis())) {
|
||||
rf.disableReceiver();
|
||||
radiotx.SPIsendCommand(RADIOLIB_CC1101_CMD_TX);
|
||||
radiotx.SPIsendCommand(RADIOLIB_CC1101_CMD_RX);
|
||||
rf.enableReceiver();
|
||||
kakucode = 0;
|
||||
}*/
|
||||
if (Serial.available())
|
||||
{
|
||||
// Read the JSON document from the "link" serial port
|
||||
|
|
@ -257,10 +307,10 @@ void loop() {
|
|||
//rf.disableReceiver();
|
||||
//radiotx.SPIsendCommand(RADIOLIB_CC1101_CMD_TX);
|
||||
//mySwitch.enableTransmit(RF_MODULE_GDO0);
|
||||
mySwitch.enableTransmit(RCSWITCH_PIN);
|
||||
//mySwitch.enableTransmit(RCSWITCH_PIN);
|
||||
//mySwitch.setRepeatTransmit(8);
|
||||
mySwitch.setRepeatTransmit(5);
|
||||
mySwitch.send(doc["value"].as<uint32_t>(), 24);
|
||||
//mySwitch.setRepeatTransmit(5);
|
||||
//mySwitch.send(doc["value"].as<uint32_t>(), 24);
|
||||
//mySwitch.disableTransmit();
|
||||
//radiotx.SPIsendCommand(RADIOLIB_CC1101_CMD_RX);
|
||||
//rf.enableReceiver();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue