From 3e5e8480f3f2f0af56731471cc967404efe0c921 Mon Sep 17 00:00:00 2001 From: Steven Date: Wed, 6 Oct 2021 00:52:14 -0400 Subject: andy cleanup --- mush.ino | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 mush.ino (limited to 'mush.ino') diff --git a/mush.ino b/mush.ino new file mode 100644 index 0000000..6c2688f --- /dev/null +++ b/mush.ino @@ -0,0 +1,126 @@ +#include +#include "ota.h" +#include +#include "CCS811.h" + +#define TEMP_SENSOR_PIN 12 +#define HUMIDITY_SENSOR_PIN 12 +#define FAN_PIN 15 +#define CO2_PIN 16 +#define ULTRASONIC_PIN 12 + +#define PHOTORESISTOR 0 // pin 0 is analog + +#define CHECK_FREQUENCY 2 // check sensors every 2 seconds +#define HUMIDITY_DESIRED 75 +#define HUMIDITY_VARIATION 3 // ultrasonic turns on at (75 - 3 = 72) and off + // at (75 + 3 = 78) +WiFiClient *wific = 0; + +// Tempature + Humidity Sensor +#define DHTPIN 12 +#define DHTTYPE DHT11 +DHT dht(DHTPIN, DHTTYPE); + +/* + * IIC address default 0x5A, the address becomes 0x5B if the ADDR_SEL is soldered. + */ +//CCS811 sensor(&Wire, /*IIC_ADDRESS=*/0x5A); +CCS811 sensor; + +void setup(void) +{ + setupWifi((char *) hostname); + setupOTA((char *) hostname); + + dht.begin(); // temp+humidity sensor + pinMode(PHOTORESISTOR, INPUT); // photo resistor + wific = new WiFiClient(); + + + Serial.begin(115200); + /*Wait for the chip to be initialized completely, and then exit*/ + while (sensor.begin()) { + Serial.println("failed to init chip, please check if the chip connection is fine"); + delay(1000); + } + /** + * @brief Set measurement cycle + * @param cycle:in typedef enum{ + * eClosed, //Idle (Measurements are disabled in this mode) + * eCycle_1s, //Constant power mode, IAQ measurement every second + * Ecycle_10s, //Pulse heating mode IAQ measurement every 10 seconds + * eCycle_60s, //Low power pulse heating mode IAQ measurement every 60 seconds + * eCycle_250ms //Constant power mode, sensor measurement every 250ms + * }eCycle_t; + */ + sensor.setMeasCycle(sensor.eCycle_250ms); +} + +void writeBoth(char *buf) +{ + Serial.print(buf); + if (wific->connected()) { + wific->write(buf); + } +} + +void log_reading (float temp_c, float humidity, int photons, uint16_t co2, uint16_t tvoc) +{ + auto fmt = "T: %.2f H: %.2f HI: %.2f Light: %d CO2: %d TVOC: %d\r\n"; + char buf[500]; + + float heat_index_c = dht.computeHeatIndex(temp_c, humidity, false); + + snprintf(buf, sizeof(buf), fmt, temp_c, humidity, heat_index_c, photons, co2, tvoc); + writeBoth(buf); +} + +struct SensorState +{ + float last_reading; + virtual void sense() = 0; +}; + +struct TemperatureSensor : public SensorState { virtual void sense() { last_reading = dht.readTemperature(); } }; +struct HumiditySensor : public SensorState { virtual void sense() { last_reading = dht.readHumidity(); } }; +struct PhotoSensor : public SensorState { virtual void sense() { last_reading = analogRead(PHOTORESISTOR); } }; +struct CO2Sensor : public SensorState { virtual void sense() { last_reading = sensor.getCO2PPM(); } }; +struct TVOCSensor : public SensorState { virtual void sense() { last_reading = sensor.getTVOCPPB(); } }; + +TemperatureSensor temperatureSensor; +HumiditySensor humiditySensor; +PhotoSensor photoSensor; +CO2Sensor cO2Sensor; +TVOCSensor tVOCSensor; + +SensorState *sensors[] = { &temperatureSensor, &humiditySensor, &photoSensor, &cO2Sensor, &tVOCSensor }; + +void sensor_loop() +{ + for (int i=0; isense(); + } + sensor.writeBaseLine(0x847B); +} + +void loop() +{ + ArduinoOTA.handle(); + + auto ip = IPAddress(192,168,1,2); + auto port = 3141; + if (!wific->connected()) { + Serial.println("Attempting to connect"); + wific->connect(ip, port); + } + + sensor_loop(); + + log_reading(temperatureSensor.last_reading, humiditySensor.last_reading, photoSensor.last_reading, cO2Sensor.last_reading, tVOCSensor.last_reading); + + delay(1000); +} + + -- cgit v1.2.3