ThingSpeak Arduino Weather Station
Monitor the Temperature and Humidity in your room and also beam that data to Cloud.
Components and supplies
Arduino UNO
Jumper wires (generic)
ESP8266 ESP-01
Breadboard (generic)
SparkFun Breadboard Power Supply 5V/3.3V
DHT11 Temperature & Humidity Sensor (3 pins)
Apps and platforms
Arduino IDE
Windows 10
ThingSpeak API
Project description
Code
CODE
arduino
1String myAPIkey = "Your Write API key here"; 2 3#include <SoftwareSerial.h> 4#include <DHT.h>; 5SoftwareSerial ESP8266(2, 3); // Rx, Tx 6 7#define DHTTYPE DHT11 8#define DHTPIN A0 9 10DHT dht(DHTPIN, DHTTYPE,11); 11float humidity, temp_f; 12long writingTimer = 17; 13long startTime = 0; 14long waitTime = 0; 15 16 17boolean relay1_st = false; 18boolean relay2_st = false; 19unsigned char check_connection=0; 20unsigned char times_check=0; 21boolean error; 22 23void setup() 24{ 25 Serial.begin(9600); 26 ESP8266.begin(9600); 27 dht.begin(); 28 startTime = millis(); 29 ESP8266.println("AT+RST"); 30 delay(2000); 31 Serial.println("Connecting to Wifi"); 32 while(check_connection==0) 33 { 34 Serial.print("."); 35 ESP8266.print("AT+CWJAP=\\"Wifi Network's name\\",\\"PassWord\\"\ \ 36"); 37 ESP8266.setTimeout(5000); 38 if(ESP8266.find("WIFI CONNECTED\ \ 39")==1) 40 { 41 Serial.println("WIFI CONNECTED"); 42 break; 43 } 44 times_check++; 45 if(times_check>3) 46 { 47 times_check=0; 48 Serial.println("Trying to Reconnect.."); 49 } 50 } 51} 52 53void loop() 54{ 55 waitTime = millis()-startTime; 56 if (waitTime > (writingTimer*1000)) 57 { 58 readSensors(); 59 writeThingSpeak(); 60 startTime = millis(); 61 } 62} 63 64 65void readSensors(void) 66{ 67 temp_f = dht.readTemperature(); 68 humidity = dht.readHumidity(); 69} 70 71 72void writeThingSpeak(void) 73{ 74 startThingSpeakCmd(); 75 // preparacao da string GET 76 String getStr = "GET /update?api_key="; 77 getStr += myAPIkey; 78 getStr +="&field1="; 79 getStr += String(temp_f); 80 getStr +="&field2="; 81 getStr += String(humidity); 82 getStr += "\ \ 83\ \ 84"; 85 GetThingspeakcmd(getStr); 86} 87 88void startThingSpeakCmd(void) 89{ 90 ESP8266.flush(); 91 String cmd = "AT+CIPSTART=\\"TCP\\",\\""; 92 cmd += "184.106.153.149"; // api.thingspeak.com IP address 93 cmd += "\\",80"; 94 ESP8266.println(cmd); 95 Serial.print("Start Commands: "); 96 Serial.println(cmd); 97 98 if(ESP8266.find("Error")) 99 { 100 Serial.println("AT+CIPSTART error"); 101 return; 102 } 103} 104 105String GetThingspeakcmd(String getStr) 106{ 107 String cmd = "AT+CIPSEND="; 108 cmd += String(getStr.length()); 109 ESP8266.println(cmd); 110 Serial.println(cmd); 111 112 if(ESP8266.find(">")) 113 { 114 ESP8266.print(getStr); 115 Serial.println(getStr); 116 delay(500); 117 String messageBody = ""; 118 while (ESP8266.available()) 119 { 120 String line = ESP8266.readStringUntil('\ 121'); 122 if (line.length() == 1) 123 { 124 messageBody = ESP8266.readStringUntil('\ 125'); 126 } 127 } 128 Serial.print("MessageBody received: "); 129 Serial.println(messageBody); 130 return messageBody; 131 } 132 else 133 { 134 ESP8266.println("AT+CIPCLOSE"); 135 Serial.println("AT+CIPCLOSE"); 136 } 137}
CODE
arduino
1String myAPIkey = "Your Write API key here"; 2 3#include <SoftwareSerial.h> 4#include 5 <DHT.h>; 6SoftwareSerial ESP8266(2, 3); // Rx, Tx 7 8#define DHTTYPE DHT11 9#define 10 DHTPIN A0 11 12DHT dht(DHTPIN, DHTTYPE,11); 13float humidity, temp_f; 14long 15 writingTimer = 17; 16long startTime = 0; 17long waitTime = 0; 18 19 20boolean 21 relay1_st = false; 22boolean relay2_st = false; 23unsigned char check_connection=0; 24unsigned 25 char times_check=0; 26boolean error; 27 28void setup() 29{ 30 Serial.begin(9600); 31 32 ESP8266.begin(9600); 33 dht.begin(); 34 startTime = millis(); 35 ESP8266.println("AT+RST"); 36 37 delay(2000); 38 Serial.println("Connecting to Wifi"); 39 while(check_connection==0) 40 41 { 42 Serial.print("."); 43 ESP8266.print("AT+CWJAP=\\"Wifi Network's 44 name\\",\\"PassWord\\"\ \ 45"); 46 ESP8266.setTimeout(5000); 47 if(ESP8266.find("WIFI 48 CONNECTED\ \ 49")==1) 50 { 51 Serial.println("WIFI CONNECTED"); 52 break; 53 54 } 55 times_check++; 56 if(times_check>3) 57 { 58 times_check=0; 59 Serial.println("Trying 60 to Reconnect.."); 61 } 62 } 63} 64 65void loop() 66{ 67 waitTime = millis()-startTime; 68 69 if (waitTime > (writingTimer*1000)) 70 { 71 readSensors(); 72 writeThingSpeak(); 73 74 startTime = millis(); 75 } 76} 77 78 79void readSensors(void) 80{ 81 82 temp_f = dht.readTemperature(); 83 humidity = dht.readHumidity(); 84} 85 86 87void 88 writeThingSpeak(void) 89{ 90 startThingSpeakCmd(); 91 // preparacao da string 92 GET 93 String getStr = "GET /update?api_key="; 94 getStr += myAPIkey; 95 96 getStr +="&field1="; 97 getStr += String(temp_f); 98 getStr +="&field2="; 99 100 getStr += String(humidity); 101 getStr += "\ \ 102\ \ 103"; 104 GetThingspeakcmd(getStr); 105 106} 107 108void startThingSpeakCmd(void) 109{ 110 ESP8266.flush(); 111 String 112 cmd = "AT+CIPSTART=\\"TCP\\",\\""; 113 cmd += "184.106.153.149"; // api.thingspeak.com 114 IP address 115 cmd += "\\",80"; 116 ESP8266.println(cmd); 117 Serial.print("Start 118 Commands: "); 119 Serial.println(cmd); 120 121 if(ESP8266.find("Error")) 122 123 { 124 Serial.println("AT+CIPSTART error"); 125 return; 126 } 127} 128 129String 130 GetThingspeakcmd(String getStr) 131{ 132 String cmd = "AT+CIPSEND="; 133 cmd 134 += String(getStr.length()); 135 ESP8266.println(cmd); 136 Serial.println(cmd); 137 138 139 if(ESP8266.find(">")) 140 { 141 ESP8266.print(getStr); 142 Serial.println(getStr); 143 144 delay(500); 145 String messageBody = ""; 146 while (ESP8266.available()) 147 148 { 149 String line = ESP8266.readStringUntil('\ 150'); 151 if (line.length() 152 == 1) 153 { 154 messageBody = ESP8266.readStringUntil('\ 155'); 156 157 } 158 } 159 Serial.print("MessageBody received: "); 160 Serial.println(messageBody); 161 162 return messageBody; 163 } 164 else 165 { 166 ESP8266.println("AT+CIPCLOSE"); 167 168 Serial.println("AT+CIPCLOSE"); 169 } 170}
Downloadable files
Circuit
Circuit
Code
https://github.com/imalwaysontheinternet/Weather-Stasion
Code
https://github.com/imalwaysontheinternet/Weather-Stasion
Circuit
Circuit
Comments