diff --git a/ESP_MidRoom/platformio.ini b/ESP_MidRoom/platformio.ini index 4ef80ac..9a5644a 100644 --- a/ESP_MidRoom/platformio.ini +++ b/ESP_MidRoom/platformio.ini @@ -16,4 +16,6 @@ board_build.f_cpu = 26000000L board_build.ldscript = eagle.flash.1m.ld ;board_build.flash_mode = dout upload_protocol = espota -upload_port = 192.168.1.132 \ No newline at end of file +upload_port = 192.168.1.132 +lib_deps = + jwrw/ESP_EEPROM @ ^2.0.0 \ No newline at end of file diff --git a/ESP_MidRoom/src/main.cpp b/ESP_MidRoom/src/main.cpp index 98cef19..b72d63b 100644 --- a/ESP_MidRoom/src/main.cpp +++ b/ESP_MidRoom/src/main.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #define R_LED (13) #define G_LED (12) @@ -124,9 +124,9 @@ void setup() { Serial1.println(p); */ } - EEPROM.begin(4); - EEPROM.get(0, mvDelaySet); - mvDelaySet = 90; + EEPROM.begin(16); + EEPROM.get(4, mvDelaySet); + //mvDelaySet = 90; mvDelay = -1; connectToWifi(); @@ -143,21 +143,21 @@ void loop() { ArduinoOTA.handle(); g_led.tick(); //r_led.tick(); - if((digitalRead(MOV_SENS) > 0) && (mvDelay == -1)){ - //mqttClient.publish("/home/midroom/move", 1, false, "1"); + if(digitalRead(MOV_SENS) > 0){ + if(mvDelay == -1) mqttClient.publish("/home/midroom/move", 1, false, "1"); mvDelay = mvDelaySet; } - if (digitalRead(MOV_SENS) != old_mov){ + /*if (digitalRead(MOV_SENS) != old_mov){ old_mov = digitalRead(MOV_SENS); //Serial1.println(F("Change mov detected")); mqttClient.publish("/home/midroom/move", 1, false, old_mov ? "1" : "0"); - } + }*/ if(cRun + 999 < millis()){ cRun = millis(); if(mvDelay == 0) { - //mqttClient.publish("/home/midroom/move", 1, false, "0"); + mqttClient.publish("/home/midroom/move", 1, false, "0"); mvDelay = -1; } if(mvDelay > 0) mvDelay--; @@ -193,10 +193,10 @@ void loop() { //r_led.start(); //Serial1.println("Begin Publish"); dtostrf(t, 5, 1,v); - mqttClient.publish("/home/midroom/temp", 0, false, v); + mqttClient.publish("/home/midroom/temp", 1, false, v); //Serial1.println("Publish1"); dtostrf(h, 5, 1,v); - mqttClient.publish("/home/midroom/humid", 0, false, v); + mqttClient.publish("/home/midroom/humid", 1, false, v); //Serial1.println("Publish2"); if(firstRun){ stDelay++; @@ -204,7 +204,7 @@ void loop() { } if(!firstRun && (mhz19.errorCode == RESULT_OK)){ itoa(co2, v, 10); - mqttClient.publish("/home/midroom/co2", 0, false, v); + mqttClient.publish("/home/midroom/co2", 1, false, v); //Serial1.println("Publish3"); } } @@ -258,22 +258,16 @@ void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) { } void onMqttConnect(bool sessionPresent) { -/* Serial1.println(F("Connected to MQTT.")); - Serial1.print(F("Session present: ")); - //Serial1.flush(); - Serial1.println(sessionPresent); */ - //digitalWrite(B_LED, HIGH); - //digitalWrite(R_LED, LOW); - //uint16_t packetIdSub = - // //Serial1.print("Subscribing Lamp1, packetId: "); - // //Serial1.println(packetIdSub); - //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); + char v[15]; + sprintf(v, "%u", mvDelaySet); + //itoa(mvDelaySet, v, 10); + mqttClient.publish("/home/midroom/mvdelay", 1, false, v); + mqttClient.subscribe("/home/midroom/mvdelay", 1); + // ultoa(ESP.getFlashChipSize(), v, 10); + // mqttClient.publish("/home/midroom/chipsize", 1, false, v); + // ultoa(ESP.getFlashChipRealSize(), v, 10); + // mqttClient.publish("/home/midroom/realchipsize", 1, false, v); + digitalWrite(B_LED, LOW); } void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) { @@ -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) { if(strcmp(topic, "/home/midroom/mvdelay") == 0){ - mvDelaySet = atol(payload); - EEPROM.put(0, mvDelaySet); + mvDelaySet = atoi(payload); + EEPROM.put(4, mvDelaySet); EEPROM.commit(); } } diff --git a/ExtSens/src/main.cpp b/ExtSens/src/main.cpp index 7d0af8a..440e28a 100644 --- a/ExtSens/src/main.cpp +++ b/ExtSens/src/main.cpp @@ -2,6 +2,7 @@ #define MY_DEBUG #define MY_RADIO_RF24 +#define MY_RF24_CHANNEL (105) #define MY_RF24_PA_LEVEL RF24_PA_HIGH #include #include @@ -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("Humidity...: ")); Serial.print(myAHT10.readHumidity(AHT10_USE_READ_DATA)); Serial.println(F(" +-2%")); - cRun = millis(); - send(msgMillis.set(cRun)); + cRun = 0; + //send(msgMillis.set(cRun)); } void loop() { float temp, hum; - //if((cRun + 29999) < millis()){ - cRun = millis(); - temp = myAHT10.readTemperature(AHT10_FORCE_READ_DATA); - hum = myAHT10.readHumidity(AHT10_USE_READ_DATA); - Serial.print(F("Temperature: ")); Serial.print(temp); Serial.println(F(" +-0.3C")); - Serial.print(F("Humidity...: ")); Serial.print(hum); Serial.println(F(" +-2%")); - if (temp < 200){ - send(msgTemp.set(temp, 1)); - send(msgHum.set(hum, 1)); - } - send(msgMillis.set(cRun)); - sensorValue = analogRead(BATTERY_SENSE_PIN); - v = sensorValue * 0.004659498; - batteryPcnt = ((v-3.0) * 100) / 1.2; - sendBatteryLevel(batteryPcnt); - send(msgVolts.set(v, 2)); - //} - sleep(60000 - (millis() - cRun)); + unsigned long t = millis(); + temp = myAHT10.readTemperature(AHT10_FORCE_READ_DATA); + hum = myAHT10.readHumidity(AHT10_USE_READ_DATA); + Serial.print(F("T: ")); Serial.print(temp);// Serial.println(F(" +-0.3C")); + Serial.print(F("H: ")); Serial.print(hum);// Serial.println(F(" +-2%")); + if (temp < 200){ + send(msgTemp.set(temp, 1)); + send(msgHum.set(hum, 1)); + } + sensorValue = analogRead(BATTERY_SENSE_PIN); + v = sensorValue * 0.004659498; + batteryPcnt = ((v-3.0) * 100) / 1.2; + sendBatteryLevel(batteryPcnt); + send(msgVolts.set(v, 2)); + Serial.println(F("Tm run")); Serial.println(millis() - t); + send(msgMillis.set(cRun++)); + sleep(60000 - (millis() - t)); } void presentation() diff --git a/KorMYS/src/main.cpp b/KorMYS/src/main.cpp index e9ef5d7..c4b5ce7 100644 --- a/KorMYS/src/main.cpp +++ b/KorMYS/src/main.cpp @@ -1,97 +1,28 @@ #include -/** -* 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 -* 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 - - -// Enable and select radio type attached #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_CHANNEL (105) #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 #define MY_BAUD_RATE 38400 #endif #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 #define MY_DEFAULT_LED_BLINK_PERIOD 300 - // Inverses the behavior of leds #define MY_WITH_LEDS_BLINKING_INVERSE - // 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_TX_LED_PIN A4 // the PCB, on board LED #define MY_DEFAULT_RX_LED_PIN A5 // Receive led pin #include -//#include #include #include unsigned long cRun; -int cSec, adc, move, oldmov, minLight, minLightDB, LightInt; +int cSec, adc, move, oldmov, minLight, minLightDB, LightInt, timeDelay, curDelay; uint8_t sdsPeriod; bool lamp; //float avgL; @@ -108,7 +39,9 @@ MyMessage msgLightLevSet(3, V_VAR1); MyMessage msgMillis(3, V_VAR4); MyMessage msgMove(4, V_TRIPPED); 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 setup() @@ -132,6 +65,13 @@ void setup() minLightDB = (loadState(2) << 8) + loadState(3); LightInt = (loadState(4) << 8) + loadState(5); 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); // if(minLight == 0) minLight = 5; //adc = analogRead(A0); @@ -155,56 +95,73 @@ void presentation() void loop() { float p25, p10; - move = digitalRead(A1); - if(move != oldmov){ - oldmov = move; - send(msgMove.set(move)); - } + //move = digitalRead(A1); + + if(digitalRead(A1) > 0){ + 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); - //avgL += ((float)(adc) - avgL) * 0.1f; if ((adc <= minLight) && (move == 1)){ analogWrite(LAMP_OUT, LightInt); - //digitalWrite(6, HIGH); if(lamp == false){ Serial.println("Lamp ON"); Serial.print("ADC: ");Serial.print(adc); Serial.print(", Move: ");Serial.println(move); - send(msgLightLev.set(adc, 2)); + sendData(msgLightLev, adc); + //send(msgLightLev.set(adc, 2)); wait(50); - send(msgLamp.set(true)); + sendData(msgLamp, true); + //send(msgLamp.set(true)); lamp = true; } } else if((adc > (minLight + minLightDB)) || (move == 0)){ analogWrite(LAMP_OUT, 0); - //digitalWrite(6, LOW); if(lamp == true){ Serial.println("Lamp OFF"); Serial.print("ADC: ");Serial.print(adc); Serial.print(", Move: ");Serial.println(move); - send(msgLightLev.set(adc, 2)); + sendData(msgLightLev, adc); + //send(msgLightLev.set(adc, 2)); wait(50); - send(msgLamp.set(false)); + sendData(msgLamp, false); + //send(msgLamp.set(false)); lamp = false; } } if(cRun + 999 < millis()){ cRun = millis(); + if(curDelay == 0) { + sendData(msgMove, false); + move = false; + curDelay = -1; + } + if(curDelay > 0) curDelay--; int error = sds.read(&p25, &p10); //Serial.print("ADC: ");Serial.print(adc);Serial.print(", Move: ");Serial.println(move); if (!error) { Serial.println(millis()/1000); Serial.println("P2.5: " + String(p25)); Serial.println("P10: " + String(p10)); - send(msgHum25.set(p25, 1)); + sendData(msgHum25, p25); + //send(msgHum25.set(p25, 1)); wait(100); - send(msgHum10.set(p10, 1)); + sendData(msgHum10, p10); + //send(msgHum10.set(p10, 1)); } if (++cSec > 19){ cSec = 0; - //sendHeartbeat(); wait(100); - send(msgLightLev.set(adc)); + sendData(msgLightLev, adc); + //send(msgLightLev.set(adc)); wait(100); uint32_t ms = millis(); send(msgMillis.set(ms)); @@ -240,12 +197,18 @@ void receive(const MyMessage &message) sdsPeriod = message.getInt(); saveState(6, sdsPeriod); 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 ////////////////////// - void SDS011workmode(byte mode, SoftwareSerial *ser) { byte cs = 7 + mode; @@ -255,3 +218,46 @@ void SDS011workmode(byte mode, SoftwareSerial *ser) 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; // Выходим из цикла + } + } +} diff --git a/MainDoorMyS/src/main.cpp b/MainDoorMyS/src/main.cpp index 1c72553..93508ca 100644 --- a/MainDoorMyS/src/main.cpp +++ b/MainDoorMyS/src/main.cpp @@ -4,6 +4,7 @@ // Enable and select radio type attached #define MY_RF24_PA_LEVEL RF24_PA_HIGH #define MY_RADIO_RF24 +#define MY_RF24_CHANNEL (105) #if F_CPU == 8000000L #define MY_BAUD_RATE 38400 #endif diff --git a/MidRoomNLight/src/main.cpp b/MidRoomNLight/src/main.cpp index fc96644..eb76a9c 100644 --- a/MidRoomNLight/src/main.cpp +++ b/MidRoomNLight/src/main.cpp @@ -4,6 +4,7 @@ // Enable and select radio type attached #define MY_RADIO_RF24 +#define MY_RF24_CHANNEL (105) #include #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 presentation() @@ -30,10 +30,8 @@ void presentation() present(0, S_DIMMER, "Dimmer"); } - void loop() { - } void receive(const MyMessage &message) diff --git a/SerialGateWayMyS/.vscode/tasks.json b/SerialGateWayMyS/.vscode/tasks.json new file mode 100644 index 0000000..0a16bc1 --- /dev/null +++ b/SerialGateWayMyS/.vscode/tasks.json @@ -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" +} \ No newline at end of file diff --git a/SerialGateWayMyS/platformio.ini b/SerialGateWayMyS/platformio.ini index 6511c31..e2becce 100644 --- a/SerialGateWayMyS/platformio.ini +++ b/SerialGateWayMyS/platformio.ini @@ -10,8 +10,8 @@ [env:nanoatmega328] platform = atmelavr -;board = nanoatmega328 -board = uno +board = nanoatmega328 +;board = uno framework = arduino monitor_speed = 115200 lib_deps = featherfly/SoftwareSerial @ ^1.0 diff --git a/SerialGateWayMyS/src/main.cpp b/SerialGateWayMyS/src/main.cpp index bd897c3..efbe6e6 100644 --- a/SerialGateWayMyS/src/main.cpp +++ b/SerialGateWayMyS/src/main.cpp @@ -1,167 +1,33 @@ #include -/** -* 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 -* 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 - - -// Enable and select radio type attached #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 - -// Enable serial gateway #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) #if F_CPU == 8000000L #define MY_BAUD_RATE 38400 #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 #define MY_DEFAULT_LED_BLINK_PERIOD 300 - // Inverses the behavior of leds #define MY_WITH_LEDS_BLINKING_INVERSE - // 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_RX_LED_PIN 6 // Receive led pin #define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED #include -//#include -#include -#include unsigned long cRun; 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() { - Serial.begin(115200); - sSerial.begin(9600); - set_per(2, &sSerial); - sds.begin(&sSerial); 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() { - 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); }