NodeMCU IoT Project - DHT11
by osoyooproduct in Circuits > Electronics
17802 Views, 15 Favorites, 0 Comments
NodeMCU IoT Project - DHT11
Please follow us on facebook, find our new released item and share your idea and Video on how to creatively use our products. You can get cash back or giveaway from us!
Facebook: https://www.facebook.com/pg/OsoyooProducts
Youtube: https://www.youtube.com/channel/UCZsnf-n1TR1MGQT-...
In this lesson, we will show how to get the real-time environment temperature/humidity data by using NodeMCU and DHT11, then send the data to an MQTT broker via MQTT protocol, the MQTT client will subscribe to these messages.
Hardware:
NodeMCU board x 1
DHT11 temperature/humidity sensor x 1
Breadboard x 1
jumper wires
Software:
Arduino IDE(version 1.6.4+)
ESP8266 Board Package and the Serial Port Driver
MQTT Clirnt (MQTTBox here (http://osoyoo.com/2017/05/10/nodemcu-lesson-8-mqtt...)
Arduino library: PubSubClient (http://osoyoo.com/2017/05/10/nodemcu-lesson-8-mqtt...)
Arduino library:DHT (http://osoyoo.com/wp-content/uploads/samplecode/DH...)
Connection Graph
NodeMCU-- DHT11 sensor
3.3v --VCC
D3--DATA
GND--Ground
Code
Connect the NodeMCU to computer via USB cable, copy below code to Arduino IDE
/* ___ ___ ___ _ _ ___ ___ ____ ___ ____
* / _ \ /___)/ _ \| | | |/ _ \ / _ \ / ___) _ \| \ *| |_| |___ | |_| | |_| | |_| | |_| ( (__| |_| | | | | * \___/(___/ \___/ \__ |\___/ \___(_)____)___/|_|_|_| * (____/ * Use NodeMCU to drive DHT11 and send temperature/humidity value to MQTT server * Tutorial URL www.osoyoo.com * CopyRight www.osoyoo.com */ #include #include #include dht DHT;// Define NodeMCU D3 pin to as temperature data pin of DHT11 #define DHT11_PIN D3
// Update these with values suitable for your network. const char* ssid = "******"; const char* password = "******"; const char* mqtt_server = "broker.mqtt-dashboard.com"; //const char* mqtt_server = "iot.eclipse.org";
WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; char msg[50]; int value = 0;
void setup_wifi() { delay(100); // We start by connecting to a WiFi network Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); }
void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Command is : ["); Serial.print(topic); int p =(char)payload[0]-'0'; int chk = DHT.read11(DHT11_PIN); // if MQTT comes a 0 message, show humidity if(p==0) { Serial.println("to show humidity!]"); Serial.print(" Humidity is: " ); Serial.print(DHT.humidity, 1); Serial.println('%'); } // if MQTT comes a 1 message, show temperature if(p==1) { // digitalWrite(BUILTIN_LED, HIGH); Serial.println(" is to show temperature!] "); int chk = DHT.read11(DHT11_PIN); Serial.print(" Temp is: " ); Serial.print(DHT.temperature, 1); Serial.println(' C'); } Serial.println(); } //end callback
void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Create a random client ID String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); // Attempt to connect //if you MQTT broker has clientID,username and password //please change following line to if (client.connect(clientId,userName,passWord)) if (client.connect(clientId.c_str())) { Serial.println("connected"); //once connected to MQTT broker, subscribe command if any client.subscribe("OsoyooCommand"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 6 seconds before retrying delay(6000); } } } //end reconnect()
void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); int chk = DHT.read11(DHT11_PIN); Serial.print(" Starting Humidity: " ); Serial.print(DHT.humidity, 1); Serial.println('%'); Serial.print(" Starting Temparature "); Serial.print(DHT.temperature, 1); Serial.println('C'); }
void loop() { if (!client.connected()) { reconnect(); } client.loop(); long now = millis(); // read DHT11 sensor every 6 seconds if (now - lastMsg > 6000) { lastMsg = now; int chk = DHT.read11(DHT11_PIN); String msg="real time temperature: "; msg= msg+ DHT.temperature; msg = msg+" C ;real time Humidity: " ; msg=msg+DHT.humidity ; msg=msg+"%"; char message[58]; msg.toCharArray(message,58); Serial.println(message); //publish sensor data to MQTT broker client.publish("OsoyooData", message); } }
Edit the code to fit your own WiFi and MQTT settings as following operations:
1)Hotspot Configration: Find below code line,put your own ssid and password on there.
const char* ssid = “your_hotspot_ssid”;
const char* password = “your_hotspot_password”;
2)MQTT Server Address Setting: You can also use some famous free MQTT server to test the project such as “broker.mqtt-dashboard.com”, “iot.eclipse.org” etc.
const char* mqtt_server = “broker.mqtt-dashboard.com”;
3)MQTT Client Settings If your MQTT broker require clientID,username and password authentication,you need to change
if (client.connect(clientId.c_str()))
to
if (client.connect(clientId,userName,passWord)) //put your clientId/userName/passWord here
If not,just keep them as default. After do that,choose the corresponding board type and port type as below,then upload the sketch to the NodeMCU.
- Board:”NodeMCU 0.9(ESP-12 Module)”
- CPU Frequency:”80MHz”
- Flash Size:”4M (3M SPIFFS)”
- Upload Speed:”115200″
- Port: Choose your own Serial Port for your NodeMCU
MQTT Client Setting
About how to config the MQTT client,check https://www.instructables.com/id/NodeMCU-MQTT-Basi...
Topics Settings:
Topic to publish: OsoyooCommand
Topic to subscribe: OsoyooDataRunning
Result
Once the upload done,if wifi hotspot ssid and password setting is ok, all the connections are normal, open the Serial Monitor,you will see following result: the NodeMCU serial port keep output real-time humidity and temperature data every 6 second,and these messages will be published to the MQTT broker via MQTT protocol,then they will be subscribed by the MQTT client.
At the same time,open the MQTT client and choose subscribe to a topic called “OsoyooData” ,you will see the real-time humidity and temperature data