//TaskScheduler , the source is from Arduino IDE library(TaskScheduler)
#include <TaskScheduler.h>
void loop1(); // Callback methods prototypes (Read_DHT_DigiPin_1)
Task t1(2000, TASK_FOREVER, &loop1);//Task t1 runs every 2 seconds indefinitely, load loop1& task
void loop2(); // Callback methods prototypes (Read_DHT_DigiPin_2)
Task t2(3600000, TASK_FOREVER, &loop2);//Task t1 runs every 3600 seconds(1Hour) indefinitely, load loop2& task
void loop3(); // Callback methods prototypes (Buildin_led)
Task t3(10000, TASK_FOREVER, &loop3);//Task t2 runs every x seconds indefinitely, load loop3& task
Scheduler runner;
//TaskScheduler
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <DHT.h>
#include <BlynkSimpleEsp8266.h>
//pin definition
#define DHTDigiPin 5 // D4 = GPIO 2
#define DHTTYPE DHT22
String ByteReceived = "";
// your thingspeak channel API key and your WiFi SSID and password
String apiKey = "xxx";
const char* server = "api.thingspeak.com";
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
//char auth[] = "xxx";
char auth[] = "xxx";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "xxx";
char pass[] = "xxx";
DHT dht(DHTDigiPin, DHTTYPE);
WiFiClient client;
IPAddress ip;
/*
////this is a case to "READ" BLYNK button widget
BLYNK_WRITE(1){ // the blynk pin is 1
int virtualPinValue = param.asInt(); //Read virtualPinValue from pin 1
if (virtualPinValue == 1) {
Serial.println("Pin voltage is HIGH");
Blynk.virtualWrite(V0,"\n");
Blynk.virtualWrite(V0, "Pin voltage is HIGH");
Blynk.virtualWrite(V0,"\n");
}else{
Serial.println("Pin voltage is LOW");
Blynk.virtualWrite(V0,"\n");
Blynk.virtualWrite(V0, "Pin voltage is LOW");
Blynk.virtualWrite(V0,"\n");
}
}
*/
//this is a case to "READ" BLYNK menu widget
BLYNK_WRITE(2){ // the blynk pin is 2
int virtualPinValue = param.asInt(); //Read virtualPinValue from pin 2
if (virtualPinValue == 1) {
Serial.println("PLED 1 ON");
Blynk.virtualWrite(V0,"\n");
Blynk.virtualWrite(V0, "LED 1 ON");
Blynk.virtualWrite(V0,"\n");
} else if (virtualPinValue == 2){
Serial.println("LED 1 OFF");
Blynk.virtualWrite(V0,"\n");
Blynk.virtualWrite(V0, "LED 1 OFF");
Blynk.virtualWrite(V0,"\n");
} else if (virtualPinValue == 3){
Serial.println("LED 2 ON");
Blynk.virtualWrite(V0,"\n");
Blynk.virtualWrite(V0, "LED 2 ON");
Blynk.virtualWrite(V0,"\n");
} else if (virtualPinValue == 4){
Serial.println("LED 2 OFF");
Blynk.virtualWrite(V0,"\n");
Blynk.virtualWrite(V0, "LED 2 OFF");
Blynk.virtualWrite(V0,"\n");
} else {
Serial.println("Pin value is others");
Blynk.virtualWrite(V0,"\n");
Blynk.virtualWrite(V0, "Pin value is others");
Blynk.virtualWrite(V0,"\n");
}
}
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
WifiCheck();
Blynk.begin(auth, ssid, pass);
dht.begin();
//TaskScheduler
runner.addTask(t1); //Read_DHT_DigiPin_2();
Serial.println("Added t1 TaskScheduler");
t1.enable();
Serial.println("Enabled t1 TaskScheduler");
runner.addTask(t2); //Read_DHT_DigiPin_2();
Serial.println("Added t2 TaskScheduler");
t2.enable();
Serial.println("Enabled t2 TaskScheduler");
runner.addTask(t3); // Buildin_led();
Serial.println("Added t3 TaskScheduler");
t3.enable();
Serial.println("Enabled t3 TaskScheduler");
//TaskScheduler
}
// the loop function runs over and over again forever
void loop() {
delay(1000); // wait for a second
SendData_To_Blynk_From_SerialMonitor();
ByteReceived = "";
Serial.flush();
Blynk.run();
//TaskScheduler
runner.execute();
//TaskScheduler
}
void loop1() {
Read_DHT_DigiPin_1();
}
void loop2() {
Read_DHT_DigiPin_2();
}
void loop3(){
Buildin_led();
}
void Buildin_led(){
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
// try to get a string from serial monitor input
String SerialRead(){
if ( Serial.available()){
ByteReceived = Serial.readString();
Serial.print("ByteReceived = ");
Serial.println(ByteReceived);
return ByteReceived;
/*
* "\n" is needed for compairing
String x1 = "xx\n";
if (ByteReceived == x1){
Serial.println("ByteReceived is xx");
return ByteReceived;
} else {
Serial.println("ByteReceived is not xx");
}
*/
}
}
//update DHT data to Blynk
void Read_DHT_DigiPin_1(){
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
Blynk.virtualWrite(V0, "Failed to read from DHT sensor!");
}
Blynk.virtualWrite(V0, " 溫度 = " , t);
Blynk.virtualWrite(V0, " 溼度 = ", h );
Blynk.virtualWrite(V0, "\n");
Serial.printf(" 溫度 = %f", t);
Serial.printf(" 溼度 = %f \n", h);
Serial.println("Sending data to Blynk");
}
//update DHT data to ThinkSpeack
void Read_DHT_DigiPin_2(){
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
}
if (client.connect(server,80)) {
String postStr = apiKey;
postStr +="&field1=";
postStr += String(t);
postStr +="&field2=";
postStr += String(h);
//postStr +="&field3=";
//postStr += String(RainMapValue);
postStr += "\r\n\r\n";
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("Light");
//Serial.print(RainAnalogValue );
//Serial.print("light : ");
//Serial.println(LightAnalogPinValue);
//int sensorValue = analogRead(A1);
//int LDI = 0;
//LDI = digitalRead(LightDigitalInPin);
//Serial.print(LDI);
Serial.println("Sending data to Thingspeak");
client.stop();
}
}
int ReadDigiPin(int Pin, String PinName){
Serial.print("ReadDigiPin = ");
Serial.print(PinName);
Serial.print("=");
Serial.print(Pin);
Serial.print(":::::Value = ");
Serial.println(digitalRead(Pin));
}
int ReadAnalogPin(int Pin, String PinName){
Serial.print("ReadAnalogPin = ");
Serial.print(PinName);
Serial.print("=");
Serial.print(Pin);
Serial.print(":::::Value = ");
Serial.println(analogRead(Pin));
}
void WifiCheck(){
if (WiFi.status() == WL_CONNECTED) {
ip = WiFi.localIP();
Serial.println("WiFi connected");
Blynk.virtualWrite(V0," WiFi connected ");
Serial.print(" WiFi LocalIP : ");
Serial.println(ip);
Blynk.virtualWrite(V0, WiFi.localIP().toString());
Blynk.virtualWrite(V0,"\n");
}
}
void SendData_To_Blynk_From_SerialMonitor() {
if ( Serial.available()){
ByteReceived = Serial.readString();
Serial.print("ByteReceived = ");
Serial.println(ByteReceived);
//return ByteReceived;
Blynk.virtualWrite(V0,ByteReceived);
Blynk.virtualWrite(V0,"\n");
Serial.println(" ..... Waiting 1000ms .....");
delay(1000);
} else {
exit;
}
}