====== Smart ventilator example ====== This example shows how to make a temperature sensor controlled ventilator. You will need 2 controller modules. One with DHT shield attached and the other with relay shield. {{:en:iot:examples:20200610_212520.jpg?300|IoT controllers with DHT and relay shields}} Once the code has been uploaded, the DHT controller will publish the temperature and humidity values to "temp" and "hum" every 2 seconds. The relay module subscribes to topics "temp" and "conf". The relay controller will switch the relay if the temperature rises above the set limit (default:28 degrees). To change the set limit, send a new value to the "conf" topic. (For example: "25.5") The following is the code for the controller with relay module. Required libraries: lib_deps = ITTIoT // Includes global variables and librarys that the relay uses #include #include #define WIFI_NAME "name" #define WIFI_PASSWORD "password" // Change it according to the real name of the red IoT module where // temperature & humidity shield is connected #define DHT_TOPIC "ESP30" #define RELAY_PIN 5 // The relay has been connected to pin 5 float t; //for holding the received temperature float value float tempLimit = 28; //the temperature limit on what the relay will switch // Message received void iot_received(String topic, String msg) { t=msg.toFloat(); // Converts received temperature value into a real number // Check if topic contains configuration data (change the temperature limit value) if(topic == (DHT_TOPIC"/conf")) { //re-configures the temperature limit tempLimit=t; } // Check if topic contains temperature data if(topic == (DHT_TOPIC"/temp")) { // Relay switching according to the temperature limit value if(t >= tempLimit) { digitalWrite(RELAY_PIN, HIGH); } else { digitalWrite(RELAY_PIN, LOW); } } } // Function started after the connection to the server is established. void iot_connected() { // Send message to serial port to show that connection is established Serial.println("MQTT connected callback"); // Subscribe to get temperature and temperature configuration messages iot.subscribe(DHT_TOPIC"/temp"); iot.subscribe(DHT_TOPIC"/conf"); // Send message to MQTT server to show that connection is established iot.log("Ventilator example!"); } void setup() { // Initialize serial port and send message Serial.begin(115200); // setting up serial connection parameter Serial.println("Booting"); //iot.setConfig("wname", WIFI_NAME); //iot.setConfig("wpass", WIFI_PASSWORD); iot.printConfig(); // print IoT json config to serial iot.setup(); // Initialize IoT library pinMode(RELAY_PIN, OUTPUT); // The relay pin is defined as output type } void loop() { iot.handle(); // IoT behind the plan work, it should be periodically called delay(20); // Wait 0.2 second } The following is the program code for the controller with DHT module. Required libraries: lib_deps = ITTIoT, DHT sensor library, Adafruit Unified Sensor After programming, if NAN appears instead of readings, the USB cable should be disconnected and reconnected! // Includes global variables and librarys that the DHT uses #include #include #include #include #define WIFI_NAME "name" #define WIFI_PASSWORD "password" #define DHTPIN D3 // Pin where DHT shield is connected. Change this to D4 if the shield has no legs removed. #define DHTTYPE DHT22 // DHT 22 (AM2302) // Create an object for DHT sensor DHT dht(DHTPIN, DHTTYPE); // Create an object for Ticker library Ticker timeTicker; bool sendDataFlag; // Ticker library callback, which will occur 0.5 second interval. void sendData() { sendDataFlag=true; } // Function started after the connection to the server is established. void iot_connected() { // Send message to serial port to show that connection is established Serial.println("MQTT connected callback"); // Send message to MQTT server to show that connection is established iot.log("IoT DHT example!"); } void setup() { // Initialize serial port and send message Serial.begin(115200); // setting up serial connection parameter Serial.println("Booting"); //iot.setConfig("wname", WIFI_NAME); //iot.setConfig("wpass", WIFI_PASSWORD); iot.printConfig(); // print IoT json config to serial iot.setup(); // Initialize IoT library // Initialize DHT library dht.begin(); // Initialize Ticker interval and callback timeTicker.attach(1, sendData); } void loop() { iot.handle(); // IoT behind the plan work, it should be periodically called if(sendDataFlag) { sendDataFlag = false; // Read humidity and temperature float h = dht.readHumidity(); float t = dht.readTemperature(); // Create a buffer to store strings to being sent later char buf[10]; // Convert temperature value messages to strings and send to the MQTT server String(t).toCharArray(buf,10); iot.publishMsg("temp",buf); // Convert humidity value messages to strings and send to the MQTT server String(h).toCharArray(buf,10); iot.publishMsg("hum",buf); } }