So I made this and it works. (Danish btw)
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <Button.h>
#include <TimeLib.h>
#include <TimeAlarms.h>
AlarmId id;
int ventetidSekunder = 31;
const char* ssid = "xxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxxxxxx";
const char* server = "api.thingspeak.com";
String apiKey = "TNT9988Xxxxxxxxx";
#define DHTPIN 4 // D2 på NodeMCU
#define MAALER_PIN 5 // D1 på NodeMCU
#define RESET_PIN 2 // D4 på NodeMCU
#define PULLUP true
#define INVERT true
#define DEBOUNCE_MS 0
int lysPin = A0; // A0 på NodeMCU
int lysStyrke = 0;
int tip = 0;
float millimeter = 0;
unsigned long time_now = 0;
Button maaler(MAALER_PIN, PULLUP, INVERT, DEBOUNCE_MS);
Button reset(RESET_PIN, PULLUP, INVERT, DEBOUNCE_MS);
DHT dht(DHTPIN, DHT22, 11);
WiFiClient client;
void setup() {
Serial.begin(115200);
setTime(20,14,45,8,19,18);
Alarm.alarmRepeat(13,1,40, Nulstil);
dht.begin();
WiFi.hostname("Vejrstation");
WiFi.begin(ssid, password);
Serial.print("Forbinder til ");
Serial.print(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("");
Serial.println(" forbundet");
}
void loop() {
if(millis() > time_now + ventetidSekunder * 1000){
time_now = millis();
int sensorValue = digitalRead(D0);
lysStyrke = analogRead(lysPin);
float h = dht.readHumidity();
float f = dht.readTemperature(true);
float t = (((f-32)*5)/9);
if (client.connect(server,80)) {
String postStr = apiKey;
postStr +="&field1=";
postStr += String((float)t);
postStr +="&field2=";
postStr += String((int)h);
postStr +="&field3=";
postStr += String((int)lysStyrke);
postStr +="&field4=";
postStr += String((float)millimeter,1);
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.print("Temperatur: ");
Serial.print(t,1);
Serial.print(" grader celcius, luftfugtighed: ");
Serial.print(h,1);
Serial.print("%, lysstyrke: ");
Serial.print(lysStyrke);
Serial.print(" og regn: ");
Serial.print(millimeter,1);
Serial.println(" ... Send til Thingspeak");
}
client.stop();
Serial.print("Venter i ");
Serial.print(ventetidSekunder);
Serial.println(" sekunder, før der uploades igen...");
}
maaler.read();
if (maaler.wasPressed()) {
tip++;
delay(20);
}
millimeter = tip * 0.2794;
reset.read();
if (reset.wasPressed()) {
tip = 0;
}
Alarm.delay(0);
}
void Nulstil() {
tip = 0;
}
As I wrote, it works. BUT… there’s nothing good about ‘hard’ setting the time when it’s already all over the internet. On any reboot I will send my weather thingy back in time and out of sync with midnight when I want my variable reset.
How will I ever put an internet time into
setTime(20,14,45,8,19,18);
instead of lame numbers?