diff --git a/.DS_Store b/.DS_Store index b6d1147..62d177e 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e504141 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "terminal.integrated.env.osx": { + "PATH": "/Users/carstenschmiemann/.platformio/penv/bin:/Users/carstenschmiemann/.platformio/penv:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin", + "PLATFORMIO_CALLER": "vscode" + } +} \ No newline at end of file diff --git a/lib/.DS_Store b/lib/.DS_Store index d103dae..c699966 100644 Binary files a/lib/.DS_Store and b/lib/.DS_Store differ diff --git a/platformio.ini b/platformio.ini index fde5787..e5924d7 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,5 +12,5 @@ platform = atmelavr board = pro16MHzatmega328 framework = arduino -lib_deps = PMS Library, TaskScheduler +lib_deps = PMS Library, TaskScheduler, MH-Z19 monitor_speed = 57600 \ No newline at end of file diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000..74452e0 Binary files /dev/null and b/src/.DS_Store differ diff --git a/src/main.cpp b/src/main.cpp index 31d176a..5fe9e1f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,73 +1,47 @@ #include -#include -#include -#include -#include +#include "MHZ19.h" // include main library +#include // Remove if using HardwareSerial -SoftwareSerial pms7003(11, 12); // RX, TX -SoftwareSerial mhz19(9, 10); // RX, TX -PMS pms(pms7003); -PMS::DATA data; -Scheduler runner; +#define RX_PIN 9 // Rx pin which the MHZ19 Tx pin is attached to +#define TX_PIN 10 // Tx pin which the MHZ19 Rx pin is attached to +#define BAUDRATE 9600 // Native to the sensor (do not change) -void sensor_pms(); -Task t1(5000, TASK_FOREVER, &sensor_pms); +MHZ19 myMHZ19; // Constructor for MH-Z19 class +SoftwareSerial mySerial(RX_PIN, TX_PIN); // Constructor for Stream class *change for HardwareSerial, i.e. ESP32 *** -//////////////// MODBUS Registers /////////////////// -enum -{ - R00_Dust_10, - R01_Dust_25, - R02_Dust_100, - TOTAL_ERRORS, - TOTAL_REGS_SIZE -}; -unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array -int PM10; -int PM25; -int PM100; -////////////////////////////////////////////////////// +//HardwareSerial mySerial(1); // ESP32 Example -void setup() { - //Serial.begin(57600); - //Serial.print("Starting up..."); - mhz19.begin(9600); - pms7003.begin(9600); - pinMode(8, OUTPUT); //MAX485 Tranmit Enable - modbus_configure(9600, 6, 8, TOTAL_REGS_SIZE, 0); //Modbus via MAX485 - runner.init(); - //runner.addTask(t1); - //t1.enable(); +unsigned long getDataTimer = 0; // Variable to store timer interval + +void setup() +{ + Serial.begin(57600); // For ESP32 baudarte is 115200 etc. + + mySerial.begin(BAUDRATE); // Begin Stream with MHZ19 baudrate + + //mySerial.begin(BAUDRATE, SERIAL_8N1, RX_PIN, TX_PIN); // ESP32 Example + + myMHZ19.begin(mySerial); // *Important, Pass your Stream reference + + myMHZ19.autoCalibration(); // Turn ABC ON. Disable with autoCalibration(false) (also default) } -void loop() { - runner.execute(); - holdingRegs[R00_Dust_10] = PM10; - holdingRegs[R01_Dust_25] = PM25; - holdingRegs[R02_Dust_100] = PM100; - holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs); +void loop() +{ + if (millis() - getDataTimer >= 2000) // Check if interval has elapsed (non-blocking delay() equivilant) + { + int CO2; // Buffer for CO2 + CO2 = myMHZ19.getCO2(); // Request CO2 (as ppm) - if (pms.read(data)) { - /*Serial.print("PM 1.0 (ug/m3): "); - Serial.println(data.PM_AE_UG_1_0); - Serial.print("PM 2.5 (ug/m3): "); - Serial.println(data.PM_AE_UG_2_5); - Serial.print("PM 10.0 (ug/m3): "); - Serial.println(data.PM_AE_UG_10_0); - Serial.println(); - */ - PM10 = (int)data.PM_AE_UG_1_0; - PM25 = (int)data.PM_AE_UG_2_5; - PM100 = (int)data.PM_AE_UG_10_0; - } -} + Serial.print("CO2 (ppm): "); + Serial.println(CO2); -void sensor_pms() { - Serial.print("PM 1.0 (ug/m3): "); - Serial.println(PM10); - Serial.print("PM 2.5 (ug/m3): "); - Serial.println(PM25); - Serial.print("PM 10.0 (ug/m3): "); - Serial.println(PM100); - Serial.println(); + float Temp; // Buffer for temperature + Temp = myMHZ19.getTemperature(); // Request Temperature (as Celsius) + + Serial.print("Temperature (C): "); + Serial.println(Temp); + + getDataTimer = millis(); // Update interval + } } \ No newline at end of file diff --git a/test/main2.cpp b/test/main2.cpp new file mode 100644 index 0000000..31d176a --- /dev/null +++ b/test/main2.cpp @@ -0,0 +1,73 @@ +#include +#include +#include +#include +#include + +SoftwareSerial pms7003(11, 12); // RX, TX +SoftwareSerial mhz19(9, 10); // RX, TX +PMS pms(pms7003); +PMS::DATA data; +Scheduler runner; + +void sensor_pms(); +Task t1(5000, TASK_FOREVER, &sensor_pms); + +//////////////// MODBUS Registers /////////////////// +enum +{ + R00_Dust_10, + R01_Dust_25, + R02_Dust_100, + TOTAL_ERRORS, + TOTAL_REGS_SIZE +}; +unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array +int PM10; +int PM25; +int PM100; +////////////////////////////////////////////////////// + +void setup() { + //Serial.begin(57600); + //Serial.print("Starting up..."); + mhz19.begin(9600); + pms7003.begin(9600); + pinMode(8, OUTPUT); //MAX485 Tranmit Enable + modbus_configure(9600, 6, 8, TOTAL_REGS_SIZE, 0); //Modbus via MAX485 + runner.init(); + //runner.addTask(t1); + //t1.enable(); +} + +void loop() { + runner.execute(); + holdingRegs[R00_Dust_10] = PM10; + holdingRegs[R01_Dust_25] = PM25; + holdingRegs[R02_Dust_100] = PM100; + holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs); + + if (pms.read(data)) { + /*Serial.print("PM 1.0 (ug/m3): "); + Serial.println(data.PM_AE_UG_1_0); + Serial.print("PM 2.5 (ug/m3): "); + Serial.println(data.PM_AE_UG_2_5); + Serial.print("PM 10.0 (ug/m3): "); + Serial.println(data.PM_AE_UG_10_0); + Serial.println(); + */ + PM10 = (int)data.PM_AE_UG_1_0; + PM25 = (int)data.PM_AE_UG_2_5; + PM100 = (int)data.PM_AE_UG_10_0; + } +} + +void sensor_pms() { + Serial.print("PM 1.0 (ug/m3): "); + Serial.println(PM10); + Serial.print("PM 2.5 (ug/m3): "); + Serial.println(PM25); + Serial.print("PM 10.0 (ug/m3): "); + Serial.println(PM100); + Serial.println(); +} \ No newline at end of file