Change chanel & kor send & move sensors time

This commit is contained in:
2020-11-20 14:21:39 +03:00
parent a45b73601c
commit 9d5b0bbc22
9 changed files with 176 additions and 281 deletions

View File

@@ -17,3 +17,5 @@ board_build.ldscript = eagle.flash.1m.ld
;board_build.flash_mode = dout ;board_build.flash_mode = dout
upload_protocol = espota upload_protocol = espota
upload_port = 192.168.1.132 upload_port = 192.168.1.132
lib_deps =
jwrw/ESP_EEPROM @ ^2.0.0

View File

@@ -3,7 +3,7 @@
#include <Ticker.h> #include <Ticker.h>
#include <AsyncMqttClient.h> #include <AsyncMqttClient.h>
#include <leds.h> #include <leds.h>
#include <EEPROM.h> #include <ESP_EEPROM.h>
#define R_LED (13) #define R_LED (13)
#define G_LED (12) #define G_LED (12)
@@ -124,9 +124,9 @@ void setup() {
Serial1.println(p); */ Serial1.println(p); */
} }
EEPROM.begin(4); EEPROM.begin(16);
EEPROM.get(0, mvDelaySet); EEPROM.get(4, mvDelaySet);
mvDelaySet = 90; //mvDelaySet = 90;
mvDelay = -1; mvDelay = -1;
connectToWifi(); connectToWifi();
@@ -143,21 +143,21 @@ void loop() {
ArduinoOTA.handle(); ArduinoOTA.handle();
g_led.tick(); g_led.tick();
//r_led.tick(); //r_led.tick();
if((digitalRead(MOV_SENS) > 0) && (mvDelay == -1)){ if(digitalRead(MOV_SENS) > 0){
//mqttClient.publish("/home/midroom/move", 1, false, "1"); if(mvDelay == -1) mqttClient.publish("/home/midroom/move", 1, false, "1");
mvDelay = mvDelaySet; mvDelay = mvDelaySet;
} }
if (digitalRead(MOV_SENS) != old_mov){ /*if (digitalRead(MOV_SENS) != old_mov){
old_mov = digitalRead(MOV_SENS); old_mov = digitalRead(MOV_SENS);
//Serial1.println(F("Change mov detected")); //Serial1.println(F("Change mov detected"));
mqttClient.publish("/home/midroom/move", 1, false, old_mov ? "1" : "0"); mqttClient.publish("/home/midroom/move", 1, false, old_mov ? "1" : "0");
} }*/
if(cRun + 999 < millis()){ if(cRun + 999 < millis()){
cRun = millis(); cRun = millis();
if(mvDelay == 0) { if(mvDelay == 0) {
//mqttClient.publish("/home/midroom/move", 1, false, "0"); mqttClient.publish("/home/midroom/move", 1, false, "0");
mvDelay = -1; mvDelay = -1;
} }
if(mvDelay > 0) mvDelay--; if(mvDelay > 0) mvDelay--;
@@ -193,10 +193,10 @@ void loop() {
//r_led.start(); //r_led.start();
//Serial1.println("Begin Publish"); //Serial1.println("Begin Publish");
dtostrf(t, 5, 1,v); dtostrf(t, 5, 1,v);
mqttClient.publish("/home/midroom/temp", 0, false, v); mqttClient.publish("/home/midroom/temp", 1, false, v);
//Serial1.println("Publish1"); //Serial1.println("Publish1");
dtostrf(h, 5, 1,v); dtostrf(h, 5, 1,v);
mqttClient.publish("/home/midroom/humid", 0, false, v); mqttClient.publish("/home/midroom/humid", 1, false, v);
//Serial1.println("Publish2"); //Serial1.println("Publish2");
if(firstRun){ if(firstRun){
stDelay++; stDelay++;
@@ -204,7 +204,7 @@ void loop() {
} }
if(!firstRun && (mhz19.errorCode == RESULT_OK)){ if(!firstRun && (mhz19.errorCode == RESULT_OK)){
itoa(co2, v, 10); itoa(co2, v, 10);
mqttClient.publish("/home/midroom/co2", 0, false, v); mqttClient.publish("/home/midroom/co2", 1, false, v);
//Serial1.println("Publish3"); //Serial1.println("Publish3");
} }
} }
@@ -258,21 +258,15 @@ void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) {
} }
void onMqttConnect(bool sessionPresent) { void onMqttConnect(bool sessionPresent) {
/* Serial1.println(F("Connected to MQTT.")); char v[15];
Serial1.print(F("Session present: ")); sprintf(v, "%u", mvDelaySet);
//Serial1.flush(); //itoa(mvDelaySet, v, 10);
Serial1.println(sessionPresent); */ mqttClient.publish("/home/midroom/mvdelay", 1, false, v);
//digitalWrite(B_LED, HIGH); mqttClient.subscribe("/home/midroom/mvdelay", 1);
//digitalWrite(R_LED, LOW); // ultoa(ESP.getFlashChipSize(), v, 10);
//uint16_t packetIdSub = // mqttClient.publish("/home/midroom/chipsize", 1, false, v);
// //Serial1.print("Subscribing Lamp1, packetId: "); // ultoa(ESP.getFlashChipRealSize(), v, 10);
// //Serial1.println(packetIdSub); // mqttClient.publish("/home/midroom/realchipsize", 1, false, v);
//packetIdSub = mqttClient.subscribe("/home/kor/lamp2_set", 1);
////Serial1.print("Subscribing Lamp2, packetId: ");
////Serial1.println(packetIdSub);
////Serial1.println("Publishing at Lamp 1");
//mqttClient.publish("/home/kor/lamp2", 1, false, lStat2 ? "1" : "0");
////Serial1.println("Publishing at Lamp 2");
digitalWrite(B_LED, LOW); digitalWrite(B_LED, LOW);
} }
@@ -302,8 +296,8 @@ void onMqttUnsubscribe(uint16_t packetId) {
void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) { void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
if(strcmp(topic, "/home/midroom/mvdelay") == 0){ if(strcmp(topic, "/home/midroom/mvdelay") == 0){
mvDelaySet = atol(payload); mvDelaySet = atoi(payload);
EEPROM.put(0, mvDelaySet); EEPROM.put(4, mvDelaySet);
EEPROM.commit(); EEPROM.commit();
} }
} }

View File

@@ -2,6 +2,7 @@
#define MY_DEBUG #define MY_DEBUG
#define MY_RADIO_RF24 #define MY_RADIO_RF24
#define MY_RF24_CHANNEL (105)
#define MY_RF24_PA_LEVEL RF24_PA_HIGH #define MY_RF24_PA_LEVEL RF24_PA_HIGH
#include <MySensors.h> #include <MySensors.h>
#include <AHT10.h> #include <AHT10.h>
@@ -34,30 +35,29 @@ void setup() {
Serial.print(F("Temperature: ")); Serial.print(myAHT10.readTemperature(AHT10_FORCE_READ_DATA)); Serial.println(F(" +-0.3C")); Serial.print(F("Temperature: ")); Serial.print(myAHT10.readTemperature(AHT10_FORCE_READ_DATA)); Serial.println(F(" +-0.3C"));
Serial.print(F("Humidity...: ")); Serial.print(myAHT10.readHumidity(AHT10_USE_READ_DATA)); Serial.println(F(" +-2%")); Serial.print(F("Humidity...: ")); Serial.print(myAHT10.readHumidity(AHT10_USE_READ_DATA)); Serial.println(F(" +-2%"));
cRun = millis(); cRun = 0;
send(msgMillis.set(cRun)); //send(msgMillis.set(cRun));
} }
void loop() { void loop() {
float temp, hum; float temp, hum;
//if((cRun + 29999) < millis()){ unsigned long t = millis();
cRun = millis(); temp = myAHT10.readTemperature(AHT10_FORCE_READ_DATA);
temp = myAHT10.readTemperature(AHT10_FORCE_READ_DATA); hum = myAHT10.readHumidity(AHT10_USE_READ_DATA);
hum = myAHT10.readHumidity(AHT10_USE_READ_DATA); Serial.print(F("T: ")); Serial.print(temp);// Serial.println(F(" +-0.3C"));
Serial.print(F("Temperature: ")); Serial.print(temp); Serial.println(F(" +-0.3C")); Serial.print(F("H: ")); Serial.print(hum);// Serial.println(F(" +-2%"));
Serial.print(F("Humidity...: ")); Serial.print(hum); Serial.println(F(" +-2%")); if (temp < 200){
if (temp < 200){ send(msgTemp.set(temp, 1));
send(msgTemp.set(temp, 1)); send(msgHum.set(hum, 1));
send(msgHum.set(hum, 1)); }
} sensorValue = analogRead(BATTERY_SENSE_PIN);
send(msgMillis.set(cRun)); v = sensorValue * 0.004659498;
sensorValue = analogRead(BATTERY_SENSE_PIN); batteryPcnt = ((v-3.0) * 100) / 1.2;
v = sensorValue * 0.004659498; sendBatteryLevel(batteryPcnt);
batteryPcnt = ((v-3.0) * 100) / 1.2; send(msgVolts.set(v, 2));
sendBatteryLevel(batteryPcnt); Serial.println(F("Tm run")); Serial.println(millis() - t);
send(msgVolts.set(v, 2)); send(msgMillis.set(cRun++));
//} sleep(60000 - (millis() - t));
sleep(60000 - (millis() - cRun));
} }
void presentation() void presentation()

View File

@@ -1,97 +1,28 @@
#include <Arduino.h> #include <Arduino.h>
/**
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2019 Sensnology AB
* Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*
* DESCRIPTION
* The ArduinoGateway prints data received from sensors on the serial link.
* The gateway accepts input on serial which will be sent out on radio network.
*
* The GW code is designed for Arduino Nano 328p / 16MHz
*
* Wire connections (OPTIONAL):
* - Inclusion button should be connected between digital pin 3 and GND
* - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series
*
* LEDs (OPTIONAL):
* - To use the feature, uncomment any of the MY_DEFAULT_xx_LED_PINs
* - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received
* - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
* - ERR (red) - fast blink on error during transmission error or receive crc error
*
*/
// Enable debug prints to serial monitor
#define MY_DEBUG #define MY_DEBUG
// Enable and select radio type attached
#define MY_RADIO_RF24 #define MY_RADIO_RF24
//#define MY_RADIO_NRF5_ESB #define MY_RF24_CHANNEL (105)
//#define MY_RADIO_RFM69
//#define MY_RADIO_RFM95
// Set LOW transmit power level as default, if you have an amplified NRF-module and
// power your radio separately with a good regulator you can turn up PA level.
#define MY_RF24_PA_LEVEL RF24_PA_HIGH #define MY_RF24_PA_LEVEL RF24_PA_HIGH
// Enable serial gateway
//#define MY_GATEWAY_SERIAL
// Define a lower baud rate for Arduinos running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
#if F_CPU == 8000000L #if F_CPU == 8000000L
#define MY_BAUD_RATE 38400 #define MY_BAUD_RATE 38400
#endif #endif
#define MY_TRANSPORT_WAIT_READY_MS 10000 #define MY_TRANSPORT_WAIT_READY_MS 10000
// Enable inclusion mode
//#define MY_INCLUSION_MODE_FEATURE
// Enable Inclusion mode button on gateway
//#define MY_INCLUSION_BUTTON_FEATURE
// Inverses behavior of inclusion button (if using external pullup)
//#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP
// Set inclusion mode duration (in seconds)
//#define MY_INCLUSION_MODE_DURATION 60
// Digital pin used for inclusion mode button
//#define MY_INCLUSION_MODE_BUTTON_PIN 3
// Set blinking period // Set blinking period
#define MY_DEFAULT_LED_BLINK_PERIOD 300 #define MY_DEFAULT_LED_BLINK_PERIOD 300
// Inverses the behavior of leds // Inverses the behavior of leds
#define MY_WITH_LEDS_BLINKING_INVERSE #define MY_WITH_LEDS_BLINKING_INVERSE
// Flash leds on rx/tx/err // Flash leds on rx/tx/err
// Uncomment to override default HW configurations
#define MY_DEFAULT_ERR_LED_PIN A3 // Error led pin #define MY_DEFAULT_ERR_LED_PIN A3 // Error led pin
#define MY_DEFAULT_TX_LED_PIN A4 // the PCB, on board LED #define MY_DEFAULT_TX_LED_PIN A4 // the PCB, on board LED
#define MY_DEFAULT_RX_LED_PIN A5 // Receive led pin #define MY_DEFAULT_RX_LED_PIN A5 // Receive led pin
#include <MySensors.h> #include <MySensors.h>
//#include <SdsDustSensor.h>
#include <SDS011.h> #include <SDS011.h>
#include <SoftwareSerial.h> #include <SoftwareSerial.h>
unsigned long cRun; unsigned long cRun;
int cSec, adc, move, oldmov, minLight, minLightDB, LightInt; int cSec, adc, move, oldmov, minLight, minLightDB, LightInt, timeDelay, curDelay;
uint8_t sdsPeriod; uint8_t sdsPeriod;
bool lamp; bool lamp;
//float avgL; //float avgL;
@@ -108,7 +39,9 @@ MyMessage msgLightLevSet(3, V_VAR1);
MyMessage msgMillis(3, V_VAR4); MyMessage msgMillis(3, V_VAR4);
MyMessage msgMove(4, V_TRIPPED); MyMessage msgMove(4, V_TRIPPED);
MyMessage msgLamp(5, V_VAR1); MyMessage msgLamp(5, V_VAR1);
void sendData(MyMessage msg, int status);
void sendData(MyMessage msg, float status);
void sendData(MyMessage msg, bool status);
void SDS011workmode(byte mode, SoftwareSerial *ser); void SDS011workmode(byte mode, SoftwareSerial *ser);
void setup() void setup()
@@ -132,6 +65,13 @@ void setup()
minLightDB = (loadState(2) << 8) + loadState(3); minLightDB = (loadState(2) << 8) + loadState(3);
LightInt = (loadState(4) << 8) + loadState(5); LightInt = (loadState(4) << 8) + loadState(5);
sdsPeriod = loadState(6); sdsPeriod = loadState(6);
timeDelay = (loadState(8) << 8) + loadState(9);
curDelay = -1;
Serial.print(F("Min Light"));Serial.println(minLight);
Serial.print(F("Min LightDB"));Serial.println(minLightDB);
Serial.print(F("LightInt"));Serial.println(LightInt);
Serial.print(F("SDS Period"));Serial.println(sdsPeriod);
Serial.print(F("Time Delay"));Serial.println(timeDelay);
SDS011workmode(sdsPeriod, &sSerial); SDS011workmode(sdsPeriod, &sSerial);
// if(minLight == 0) minLight = 5; // if(minLight == 0) minLight = 5;
//adc = analogRead(A0); //adc = analogRead(A0);
@@ -155,56 +95,73 @@ void presentation()
void loop() void loop()
{ {
float p25, p10; float p25, p10;
move = digitalRead(A1); //move = digitalRead(A1);
if(move != oldmov){
oldmov = move; if(digitalRead(A1) > 0){
send(msgMove.set(move)); if(curDelay == -1) sendData(msgMove, true);
} move = true;
curDelay = timeDelay;
}
// if(move != oldmov){
// oldmov = move;
// sendData(msgMove, move);
// //send(msgMove.set(move));
// }
adc = analogRead(A0); adc = analogRead(A0);
//avgL += ((float)(adc) - avgL) * 0.1f;
if ((adc <= minLight) && (move == 1)){ if ((adc <= minLight) && (move == 1)){
analogWrite(LAMP_OUT, LightInt); analogWrite(LAMP_OUT, LightInt);
//digitalWrite(6, HIGH);
if(lamp == false){ if(lamp == false){
Serial.println("Lamp ON"); Serial.println("Lamp ON");
Serial.print("ADC: ");Serial.print(adc); Serial.print("ADC: ");Serial.print(adc);
Serial.print(", Move: ");Serial.println(move); Serial.print(", Move: ");Serial.println(move);
send(msgLightLev.set(adc, 2)); sendData(msgLightLev, adc);
//send(msgLightLev.set(adc, 2));
wait(50); wait(50);
send(msgLamp.set(true)); sendData(msgLamp, true);
//send(msgLamp.set(true));
lamp = true; lamp = true;
} }
} }
else if((adc > (minLight + minLightDB)) || (move == 0)){ else if((adc > (minLight + minLightDB)) || (move == 0)){
analogWrite(LAMP_OUT, 0); analogWrite(LAMP_OUT, 0);
//digitalWrite(6, LOW);
if(lamp == true){ if(lamp == true){
Serial.println("Lamp OFF"); Serial.println("Lamp OFF");
Serial.print("ADC: ");Serial.print(adc); Serial.print("ADC: ");Serial.print(adc);
Serial.print(", Move: ");Serial.println(move); Serial.print(", Move: ");Serial.println(move);
send(msgLightLev.set(adc, 2)); sendData(msgLightLev, adc);
//send(msgLightLev.set(adc, 2));
wait(50); wait(50);
send(msgLamp.set(false)); sendData(msgLamp, false);
//send(msgLamp.set(false));
lamp = false; lamp = false;
} }
} }
if(cRun + 999 < millis()){ if(cRun + 999 < millis()){
cRun = millis(); cRun = millis();
if(curDelay == 0) {
sendData(msgMove, false);
move = false;
curDelay = -1;
}
if(curDelay > 0) curDelay--;
int error = sds.read(&p25, &p10); int error = sds.read(&p25, &p10);
//Serial.print("ADC: ");Serial.print(adc);Serial.print(", Move: ");Serial.println(move); //Serial.print("ADC: ");Serial.print(adc);Serial.print(", Move: ");Serial.println(move);
if (!error) { if (!error) {
Serial.println(millis()/1000); Serial.println(millis()/1000);
Serial.println("P2.5: " + String(p25)); Serial.println("P2.5: " + String(p25));
Serial.println("P10: " + String(p10)); Serial.println("P10: " + String(p10));
send(msgHum25.set(p25, 1)); sendData(msgHum25, p25);
//send(msgHum25.set(p25, 1));
wait(100); wait(100);
send(msgHum10.set(p10, 1)); sendData(msgHum10, p10);
//send(msgHum10.set(p10, 1));
} }
if (++cSec > 19){ if (++cSec > 19){
cSec = 0; cSec = 0;
//sendHeartbeat();
wait(100); wait(100);
send(msgLightLev.set(adc)); sendData(msgLightLev, adc);
//send(msgLightLev.set(adc));
wait(100); wait(100);
uint32_t ms = millis(); uint32_t ms = millis();
send(msgMillis.set(ms)); send(msgMillis.set(ms));
@@ -240,12 +197,18 @@ void receive(const MyMessage &message)
sdsPeriod = message.getInt(); sdsPeriod = message.getInt();
saveState(6, sdsPeriod); saveState(6, sdsPeriod);
Serial.print("Sds period:"); Serial.print("Sds period:");
Serial.println(sdsPeriod);
}
if((message.sensor == 5) && (message.type == V_VAR2)){
timeDelay = message.getInt();
saveState(8, (timeDelay>>8) & 0xFF);
saveState(9, timeDelay & 0xFF);
Serial.print("time period:");
Serial.println(timeDelay);
} }
} }
////////////////// sends work mode command to SDS011 ////////////////////// ////////////////// sends work mode command to SDS011 //////////////////////
void SDS011workmode(byte mode, SoftwareSerial *ser) void SDS011workmode(byte mode, SoftwareSerial *ser)
{ {
byte cs = 7 + mode; byte cs = 7 + mode;
@@ -255,3 +218,46 @@ void SDS011workmode(byte mode, SoftwareSerial *ser)
ser->write(sleep_command[i]); ser->write(sleep_command[i]);
} }
} }
void sendData(MyMessage msg, bool status)
{
bool send_data = false;
uint8_t count = 0;
while(send_data == false){
count++;
send_data = send(msg.set(status));
wait(1000, C_SET, V_STATUS);
if ((count == 3 )&&(send_data == 0)){ // Если сделано 3 попытки и нет подтверждения отправки
count = 0; // Обнуляем счётчик
send_data = 1; // Выходим из цикла
}
}
}
void sendData(MyMessage msg, float status)
{
bool send_data = false;
uint8_t count = 0;
while(send_data == false){
count++;
send_data = send(msg.set(status, 1));
wait(1000, C_SET, V_STATUS);
if ((count == 3 )&&(send_data == 0)){ // Если сделано 3 попытки и нет подтверждения отправки
count = 0; // Обнуляем счётчик
send_data = 1; // Выходим из цикла
}
}
}
void sendData(MyMessage msg, int status)
{
bool send_data = false;
uint8_t count = 0;
while(send_data == false){
count++;
send_data = send(msg.set(status));
wait(1000, C_SET, V_STATUS);
if ((count == 3 )&&(send_data == 0)){ // Если сделано 3 попытки и нет подтверждения отправки
count = 0; // Обнуляем счётчик
send_data = 1; // Выходим из цикла
}
}
}

View File

@@ -4,6 +4,7 @@
// Enable and select radio type attached // Enable and select radio type attached
#define MY_RF24_PA_LEVEL RF24_PA_HIGH #define MY_RF24_PA_LEVEL RF24_PA_HIGH
#define MY_RADIO_RF24 #define MY_RADIO_RF24
#define MY_RF24_CHANNEL (105)
#if F_CPU == 8000000L #if F_CPU == 8000000L
#define MY_BAUD_RATE 38400 #define MY_BAUD_RATE 38400
#endif #endif

View File

@@ -4,6 +4,7 @@
// Enable and select radio type attached // Enable and select radio type attached
#define MY_RADIO_RF24 #define MY_RADIO_RF24
#define MY_RF24_CHANNEL (105)
#include <MySensors.h> #include <MySensors.h>
#define RELAY_PIN 3 // Arduino Digital I/O pin number for first relay (second on pin+1 etc) #define RELAY_PIN 3 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
@@ -20,7 +21,6 @@ void before()
void setup() void setup()
{ {
} }
void presentation() void presentation()
@@ -30,10 +30,8 @@ void presentation()
present(0, S_DIMMER, "Dimmer"); present(0, S_DIMMER, "Dimmer");
} }
void loop() void loop()
{ {
} }
void receive(const MyMessage &message) void receive(const MyMessage &message)

28
SerialGateWayMyS/.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,28 @@
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: avr-gcc.exe build active file",
"command": "C:/Users/lexa-/.platformio/packages/toolchain-atmelavr@1.50400.190710/bin/avr-gcc.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"-mmcu=atmega328p"
],
"options": {
"cwd": "C:/Users/lexa-/.platformio/packages/toolchain-atmelavr@1.50400.190710/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Generated task by Debugger"
}
],
"version": "2.0.0"
}

View File

@@ -10,8 +10,8 @@
[env:nanoatmega328] [env:nanoatmega328]
platform = atmelavr platform = atmelavr
;board = nanoatmega328 board = nanoatmega328
board = uno ;board = uno
framework = arduino framework = arduino
monitor_speed = 115200 monitor_speed = 115200
lib_deps = featherfly/SoftwareSerial @ ^1.0 lib_deps = featherfly/SoftwareSerial @ ^1.0

View File

@@ -1,167 +1,33 @@
#include <Arduino.h> #include <Arduino.h>
/**
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2019 Sensnology AB
* Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*
* DESCRIPTION
* The ArduinoGateway prints data received from sensors on the serial link.
* The gateway accepts input on serial which will be sent out on radio network.
*
* The GW code is designed for Arduino Nano 328p / 16MHz
*
* Wire connections (OPTIONAL):
* - Inclusion button should be connected between digital pin 3 and GND
* - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series
*
* LEDs (OPTIONAL):
* - To use the feature, uncomment any of the MY_DEFAULT_xx_LED_PINs
* - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received
* - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
* - ERR (red) - fast blink on error during transmission error or receive crc error
*
*/
// Enable debug prints to serial monitor
#define MY_DEBUG #define MY_DEBUG
// Enable and select radio type attached
#define MY_RADIO_RF24 #define MY_RADIO_RF24
//#define MY_RADIO_NRF5_ESB
//#define MY_RADIO_RFM69
//#define MY_RADIO_RFM95
// Set LOW transmit power level as default, if you have an amplified NRF-module and
// power your radio separately with a good regulator you can turn up PA level.
#define MY_RF24_PA_LEVEL RF24_PA_HIGH #define MY_RF24_PA_LEVEL RF24_PA_HIGH
// Enable serial gateway
#define MY_GATEWAY_SERIAL #define MY_GATEWAY_SERIAL
#define MY_RF24_CHANNEL (105)
// Define a lower baud rate for Arduinos running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender) // Define a lower baud rate for Arduinos running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
#if F_CPU == 8000000L #if F_CPU == 8000000L
#define MY_BAUD_RATE 38400 #define MY_BAUD_RATE 38400
#endif #endif
// Enable inclusion mode
//#define MY_INCLUSION_MODE_FEATURE
// Enable Inclusion mode button on gateway
//#define MY_INCLUSION_BUTTON_FEATURE
// Inverses behavior of inclusion button (if using external pullup)
//#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP
// Set inclusion mode duration (in seconds)
//#define MY_INCLUSION_MODE_DURATION 60
// Digital pin used for inclusion mode button
//#define MY_INCLUSION_MODE_BUTTON_PIN 3
// Set blinking period // Set blinking period
#define MY_DEFAULT_LED_BLINK_PERIOD 300 #define MY_DEFAULT_LED_BLINK_PERIOD 300
// Inverses the behavior of leds // Inverses the behavior of leds
#define MY_WITH_LEDS_BLINKING_INVERSE #define MY_WITH_LEDS_BLINKING_INVERSE
// Flash leds on rx/tx/err // Flash leds on rx/tx/err
// Uncomment to override default HW configurations
#define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin #define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin
#define MY_DEFAULT_RX_LED_PIN 6 // Receive led pin #define MY_DEFAULT_RX_LED_PIN 6 // Receive led pin
#define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED #define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED
#include <MySensors.h> #include <MySensors.h>
//#include <SdsDustSensor.h>
#include <SDS011.h>
#include <SoftwareSerial.h>
unsigned long cRun; unsigned long cRun;
int cSec; int cSec;
#define RX_PIN 2
#define TX_PIN 3
SoftwareSerial sSerial(RX_PIN, TX_PIN);
SDS011 sds;
//SdsDustSensor sds(sSerial);
MyMessage msgHum25(0, V_LEVEL);
MyMessage msgHum25_UN(0, V_UNIT_PREFIX);
MyMessage msgHum10(1, V_LEVEL);
MyMessage msgHum10_UN(1, V_UNIT_PREFIX);
void set_per(uint8_t per, SoftwareSerial *ser);
void setup() void setup()
{ {
Serial.begin(115200);
sSerial.begin(9600);
set_per(2, &sSerial);
sds.begin(&sSerial);
Serial.println("Begin"); Serial.println("Begin");
//Serial.println(sds.queryFirmwareVersion().toString()); // prints firmware version
//Serial.println(sds.setActiveReportingMode().toString()); // ensures sensor is in 'active' reporting mode
//Serial.println(sds.setCustomWorkingPeriod(3).toString()); // sensor sends data every 3 minutes
//sds.setActiveReportingMode();
//sds.setCustomWorkingPeriod(1);
cRun = millis();
cSec = 0;
}
void presentation()
{
present(0, S_DUST, "pm2.5");
present(1, S_DUST, "pm10");
} }
void loop() void loop()
{ {
float p25, p10;
if(cRun + 999 < millis()){
cRun = millis();
int error = sds.read(&p25, &p10);
if (!error) {
Serial.println(millis()/1000);
Serial.println("P2.5: " + String(p25));
Serial.println("P10: " + String(p10));
}
/* PmResult pm = sds.readPm();
if (pm.isOk()) {
send(msgHum25.set(pm.pm25, 2));
wait(100);
send(msgHum10.set(pm.pm10, 2));
}
if(++cSec == 60){
wait(100);
send(msgHum25_UN.set("pm2.5"));
wait(100);
send(msgHum10_UN.set("pm10"));
}*/
}
}
void set_per(uint8_t per, SoftwareSerial *ser)
{
ser->write(0xAA);
ser->write(0xB4);
ser->write(0x08);
ser->write(0xAA);
ser->write(0x01);
for(int i = 0; i < 10; i++) ser->print(0x00);
ser->write(0xFF);
ser->write(0xFF);
uint8_t crc = 0x07 + per;
ser->write(crc);
ser->write(0xAB);
} }