From fee46c25331d8e999c0f6d1f1ddfc917369c1795 Mon Sep 17 00:00:00 2001 From: Nikita Kovaliov Date: Sun, 20 Jan 2019 19:56:21 +0300 Subject: [PATCH] iss #46: fix MH-Z19 reading error --- .../platformio-version/include/Ambient7Co2.h | 5 -- .../include/configs.h.example | 1 + .../platformio-version/platformio.ini | 3 +- .../platformio-version/src/Ambient7Co2.cpp | 76 ------------------- .../platformio-version/src/main.cpp | 34 ++++++--- 5 files changed, 26 insertions(+), 93 deletions(-) delete mode 100644 ambient7-arduino/platformio-version/include/Ambient7Co2.h delete mode 100644 ambient7-arduino/platformio-version/src/Ambient7Co2.cpp diff --git a/ambient7-arduino/platformio-version/include/Ambient7Co2.h b/ambient7-arduino/platformio-version/include/Ambient7Co2.h deleted file mode 100644 index 38f31a6..0000000 --- a/ambient7-arduino/platformio-version/include/Ambient7Co2.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#include - -extern int readCO2UART(SoftwareSerial co2Serial, unsigned int timeoutMillis = 5000); diff --git a/ambient7-arduino/platformio-version/include/configs.h.example b/ambient7-arduino/platformio-version/include/configs.h.example index ca3d576..300830e 100644 --- a/ambient7-arduino/platformio-version/include/configs.h.example +++ b/ambient7-arduino/platformio-version/include/configs.h.example @@ -8,6 +8,7 @@ Copy that file as configs.h TODO: generate that header from .ini configs https://docs.platformio.org/en/latest/projectconf/advanced_scripting.html */ +const bool ENABLE_WIFI_CLIENT = true; const char* WIFI_NETWORK = "my_network"; const char* WIFI_PASSWORD = "pa$$word"; diff --git a/ambient7-arduino/platformio-version/platformio.ini b/ambient7-arduino/platformio-version/platformio.ini index b937b2d..d701566 100644 --- a/ambient7-arduino/platformio-version/platformio.ini +++ b/ambient7-arduino/platformio-version/platformio.ini @@ -14,4 +14,5 @@ board = d1 framework = arduino lib_deps = DHT@1.0.0 -monitor_speed = 115200 \ No newline at end of file + MHZ19_uart@0.3 +monitor_speed = 9600 \ No newline at end of file diff --git a/ambient7-arduino/platformio-version/src/Ambient7Co2.cpp b/ambient7-arduino/platformio-version/src/Ambient7Co2.cpp deleted file mode 100644 index 63c6380..0000000 --- a/ambient7-arduino/platformio-version/src/Ambient7Co2.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// based on maple37 code from -// https://forum.arduino.cc/index.php?topic=525459.msg3587557#msg3587557 - -#include "Arduino.h" -#include - -byte countCheckSum(byte *packet) -{ - byte i; - byte checksum = 0; - for (i = 1; i < 8; i++) { - checksum += packet[i]; - } - checksum = 0xff - checksum; - checksum += 1; - return checksum; -} - -// TODO: return struct with all results -int readCO2UART(SoftwareSerial co2Serial, unsigned int timeoutMillis = 5000) -{ - byte cmd[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79}; - byte response[9]; // for answer - - // Serial.println("Sending CO2 request..."); - co2Serial.write(cmd, 9); //request PPM CO2 - - // clear the buffer - memset(response, 0, 9); - - unsigned int elapsed = 0; - unsigned int delayMillis = 500; - while (co2Serial.available() == 0) { - delay(delayMillis); - elapsed += delayMillis; - if (elapsed > timeoutMillis) { - // Serial.println("ERROR: Unable to get Co2 data"); - return -1; - } - } - - if (co2Serial.available() > 0) { - co2Serial.readBytes(response, 9); - } - - // print out the response in hex - // for (int i = 0; i < 9; i++) { - // Serial.print(String(response[i], HEX)); - // Serial.print(" "); - // } - // Serial.println(""); - - // checksum - byte check = countCheckSum(response); - if (response[8] != check) { - // Serial.println("Checksum not OK!"); - // Serial.print("Received: "); - // Serial.println(response[8]); - // Serial.print("Should be: "); - // Serial.println(check); - return -2; - } - - // ppm - int ppm_uart = 256 * (int)response[2] + response[3]; - //Serial.print("PPM: "); Serial.println(ppm_uart); - - // TODO: check status - // byte status = response[5]; - // Serial.print("Status: "); Serial.println(String(status, HEX)); - // if (status == 0x40) { - // Serial.println("Status OK"); - // } - - return ppm_uart; -} diff --git a/ambient7-arduino/platformio-version/src/main.cpp b/ambient7-arduino/platformio-version/src/main.cpp index 2214817..c7ca0b1 100644 --- a/ambient7-arduino/platformio-version/src/main.cpp +++ b/ambient7-arduino/platformio-version/src/main.cpp @@ -4,18 +4,18 @@ //#include #include "configs.h" #include "Ambient7Wifi.h" -#include "Ambient7Co2.h" -#include "DHT.h" +#include +#include unsigned long startTime = millis(); -SoftwareSerial co2Serial(CO2_RX, CO2_TX); +MHZ19_uart mhz19; DHT dht; void setup() { - Serial.begin(115200); + Serial.begin(9600); Serial.println(""); Serial.println(""); Serial.println("Ambient7"); Serial.println("https://github.com/maizy/ambient7/"); @@ -24,10 +24,13 @@ void setup() Serial.print(" CO2 RX Pin: "); Serial.println(CO2_RX); Serial.print(" CO2 TX Pin: "); Serial.println(CO2_TX); Serial.print(" DHT22 1wire Pin: "); Serial.println(DTH22_1WIRE); - Serial.print(" Wifi network: "); Serial.println(WIFI_NETWORK); - Serial.print(" Wifi password: "); - for (unsigned int i = 0; i < strlen(WIFI_PASSWORD); i++) { - Serial.print('*'); + Serial.print(" Wifi Client: "); Serial.println(ENABLE_WIFI_CLIENT ? "enabled" : "disabled"); + if (ENABLE_WIFI_CLIENT) { + Serial.print(" Wifi network: "); Serial.println(WIFI_NETWORK); + Serial.print(" Wifi password: "); + for (unsigned int i = 0; i < strlen(WIFI_PASSWORD); i++) { + Serial.print('*'); + } } Serial.println(""); Serial.println(""); @@ -36,15 +39,24 @@ void setup() dht.setup(DTH22_1WIRE); Serial.println(" done"); - setupWifi(WIFI_NETWORK, WIFI_PASSWORD); - Serial.println(""); + Serial.println("Setup MH-Z19 ..."); + mhz19.begin(CO2_RX, CO2_TX); + mhz19.setAutoCalibration(false); + Serial.println("Done"); + + if (ENABLE_WIFI_CLIENT) { + setupWifi(WIFI_NETWORK, WIFI_PASSWORD); + Serial.println(""); + } } void loop() { Serial.print("Uptime: "); Serial.print((millis() - startTime) / 1000); Serial.println(" s"); - int co2Ppm = readCO2UART(co2Serial, 1000); + Serial.print("MH-Z19 status: "); Serial.print(mhz19.getStatus()); + Serial.print(" warming: "); Serial.println(mhz19.isWarming() ? "true" : "false"); + int co2Ppm = mhz19.getPPM(); if (co2Ppm < 0) { Serial.println("ERROR: failed to read from Co2 sensor"); } else {