ArdUnground is an arduino library that updates weather station data to WeatherUnderground or another rapidfire server.
You need to have the Ethernet.h library installed (native arduino library).
See https://www.arduino.cc/en/Guide/Libraries for further information.
- Weather-Station.ino - Wunderground upload via arduino
- Wundergound PWS Protocol (archive) - Documentation for Wunderground PWS protocol
- UrlEncode function - An arduino function to escape URLs
- Ethernet Library - Documentation for Ethernet library
Grab the latest release (ArdUnground[...].zip) here and extract the content in your arduino/libraries folder as usual.
See https://www.arduino.cc/en/Guide/Libraries for further information.
In atom or vscode, run Crtl+Shift+P then search for 'git clone' and eter the git url https://github.com/storca/ArdUnground.git
First include the two libraries as follow :
#include <Ethernet.h>
#include <ArdUnground.h>
Declare a 'WeatherStation' object :
WeatherStation station("your station id", "your station password", "the station name");
/!\ The communications are made via http which means that your password may be intercepted /!\
Use a unique password for you weather station
Declare an 'EthernetClient' object:
EthernetClient client;
Set your 'client' object as usual
Set the temperature to send in Farenheight :
WeatherStation.setTempF(float tempF);
Set the humidity to send in % :
WeatherStation.setHumidity(float humidity);
Set the dew point to send in Farenheight :
WeatherStation.setDewptf(int dewptf);
Set the wind direction to send in degrees :
WeatherStation.setWinddir(int windir);
Set the wind speed to send in mph :
WeatherStation.setWindspeedmph(int windspeedmph);
More functions to come here, this is just a draft of the library
Post the PWS data to WeatherUnderground :
Where 'timestamp' is optional, it's "now" by default : the timestamp "now" will be interpreted as the current time (UTC+0) by the rapidfire server.
The content of the 'timestamp' variable will be url escaped automaticly, no need to do it.
See http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol_ for more information
WeatherStation.post(EthernetClient client, String timestamp = "now");
//Local directory
#include <ArdUnground.h>
//Native library
#include <Ethernet.h>
//Reference for Ethernet library : https://www.arduino.cc/en/Tutorial/WebClient
//Mac address for the ethernet client
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//If the dhcp server fails
IPAddress ip(192, 168, 0, 177);
EthernetClient client;
WeatherStation station("id", "password", "Arduino Custom station");
void setup()
{
Serial.begin(9600);
if (!Ethernet.begin(mac))
{
Serial.println("Failed to configure Ethernet using DHCP");
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip);
}
// give the Ethernet shield a second to initialize:
Serial.println("connecting...");
delay(1000);
station.set("rtupdate.wunderground.com", "GET /weatherstation/updateweatherstation.php?");
/*
Not necessary, these values are set by default in ArdUnderground.h
*/
}
void loop()
{
float temp = 67.65444; //In °F
float humidity = 40.65; //In %
/*
* See http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol#GET_parameters
* For further information about unities
*/
station.setTempF(temp);
station.setHumidity(humidity);
/*
* Set the temperature and humidity before posting it
*/
station.post(client);
/*
* That's one way to do it
* The second argument has a default value of "now"
* When the timestamp has a value of "now" ; the server will produce a timestamp by itself
* http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol#GET_parameters
*/
station.post(client, "2001-01-01 10:32:35");
/*
* Another way to do it
* Note : the timestamp will be url escaped later, no need to do it here
*/
}