Created
January 14, 2019 01:06
-
-
Save maxibor/22193342789692b0f8716744bbd8864e to your computer and use it in GitHub Desktop.
Wunderground - Weather underground Temperature Upload with DS18B20 and ESP8266 for Personal Weather Station
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <ESP8266WiFi.h> | |
#include <ESP8266HTTPClient.h> | |
#include <OneWire.h> | |
#include <DallasTemperature.h> | |
const char* ssid = "<yourNetworkName>"; | |
const char* password = "<yourNetworkPassword>"; | |
int sleeptime = 300000; // sleep time in ms | |
#define ONE_WIRE_BUS 2 //nodeMCU-ESP8266 pin D4 | |
OneWire oneWire(ONE_WIRE_BUS); | |
DallasTemperature sensors(&oneWire); | |
DeviceAddress deviceAddress = {0x28, 0xFF, 0xD2, 0xDE, 0xB4, 0x16, 0x05, 0xDA}; // DS18B20 device address see http://henrysbench.capnfatz.com/henrys-bench/arduino-temperature-measurements/ds18b20-arduino-user-manual-introduction-and-contents/ds18b20-user-manual-part-2-getting-the-device-address/ | |
String WS_ID = "<Wunderground personal weather station ID>"; | |
String WS_SECRET = "<Wunderground personal weather station key>"; | |
String wu_sha1 = "12:DB:BB:24:8E:0F:6F:D4:63:EC:45:DD:5B:ED:37:D7:6F:B1:5F:E5"; // Wunderground https certificate sha1 fingerprint. | |
void setup () { | |
Serial.begin(9600); | |
WiFi.begin(ssid, password); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(1000); | |
Serial.print("Connecting.."); | |
} | |
} | |
float getTemperature(DeviceAddress deviceAddress){ | |
// method 2 - faster | |
float tempC = sensors.getTempC(deviceAddress); | |
Serial.print("Temp C: "); | |
Serial.print(tempC); | |
Serial.print(" Temp F: "); | |
return(DallasTemperature::toFahrenheit(tempC)); | |
} | |
void wunderground_upload (DeviceAddress deviceAddress, String wu_sha1, String WS_ID, String WS_SECRET){ | |
float thetemp = getTemperature(deviceAddress); | |
float ftemp = thetemp * 1.8 + 32; | |
String server = "https://rtupdate.wunderground.com"; | |
String server_before = "/weatherstation/updateweatherstation.php?ID="+WS_ID+"&PASSWORD="+WS_SECRET+"&dateutc=now&tempf="; | |
String server_after = "&softwaretype=Arduino&action=updateraw&realtime=1&rtfreq=10"; | |
String server_close = "/ HTTP/1.1\r\nHost: host:port\r\nConnection: close\r\n\r\n"; | |
String server_close2 = "\r\n\r\n\r\n"; | |
String therequest = server+server_before+String(ftemp)+server_after+server_close+server_close2; | |
Serial.println(therequest); | |
HTTPClient http; | |
http.begin(therequest, wu_sha1); | |
int httpCode = http.GET(); | |
if (httpCode > 0) { | |
Serial.printf("HTTP GET ... code: %d\n", httpCode); | |
Serial.println(HTTP_CODE_OK); | |
if (httpCode == HTTP_CODE_OK) { | |
String payload = http.getString(); | |
} | |
} else { | |
Serial.printf("HTTP GET failed, error: %s\n", http.errorToString(httpCode).c_str()); | |
} | |
http.end(); | |
} | |
void loop (){ | |
wunderground_upload(deviceAddress, wu_sha1, WS_ID, WS_SECRET); | |
delay(sleeptime); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment