รวบรวม Code เกี่ยวกับ Temp_Humid_ ESP8266_Blynk ใช้งานในรูปแบบต่างๆ

สืบเนื่องมาจาก โพสต์: อยากปรับช่วงอุณหภูมิใน Blynk แทนการแก้ไขโค้ดที่ตั้งค่าไว้ แบบรับค่าอุณหภูมิเข้าไปผ่าน Blynk ทำยังไงได้บ้างหรอคะ

โพสต์นี้ ผมขอเอาไว้อ้างอิง ให้กับกระทู้ของสมาชิกหลายๆท่าน เกี่ยวกับเรื่องของ Temp_Humid_ ESP8266 และ Blynk ที่ต้องการการทำงานในลักษณะต่างๆ กัน
โดยการใช้ Code พื้นฐาน ที่งา่ยต่อการทำความเข้าใจกันครับ

  1. การให้ค่า Temp ส่งค่าเข้า Esp 8266 และให้ Esp 8266 ส่งค่า Temp ไปแสดง ใน Blynk
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>


char auth[] = "xxxxxxxx";

char ssid[] = xxxxxxx";
char pass[] = "xxxxxxxx";

char server[] = "oasiskit.com";
int port = 8080;


#define DHTPIN 5          // D1
//#define DHTTYPE DHT11     // DHT 11
#define DHTTYPE DHT22   // DHT 22, AM2302, AM2321
//#define DHTTYPE DHT21   // DHT 21, AM2301

DHT dht(DHTPIN, DHTTYPE);



BlynkTimer timer;


void sendSensor()
{
 float h = dht.readHumidity();
 float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

 if (isnan(h) || isnan(t)) {
   Serial.println("Failed to read from DHT sensor!");
   return;
 }

 Blynk.virtualWrite(V1, t);


 Serial.print("Temp : ");
 Serial.println(t);

}

void setup()
{

 Serial.begin(115200);
 dht.begin();

 WiFi.begin(ssid, pass);
 Blynk.config(auth, server, port);
 Blynk.connect();


 timer.setInterval(2000L, sendSensor);
}

void loop()
{
 Blynk.run();
 timer.run();
}

67030

67031

PUYIOT October 18, 2020, 3:07pm #2

  1. การให้ค่า Temp ส่งค่าเข้า Esp 8266 และให้ Esp 8266 ส่งค่า Temp ไปแสดง ใน Blynk โดยมีการควบคุมค่า Min Max ผ่าน Slide bar จาก Blynk เพื่อควบคุมให้ LED ของ Blynk ON หรือ OFF

โดยการตั้งค่า Min Max จะถูกเก็บใน EEPROM ของ ESP8266 ดังนั้น แม้ไม่มีการเชื่อมต่อของ Blynk ค่า Min Max ยังคงอยู่และสามารถควบคุมอุปกรณ์ให้ทำงานตามเงื่อนไขได้เลย

ภาพ

67069

ทดสอบการทำงาน

67076

67077

67078

Code :slight_smile:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>

#include <EEPROM.h>

char auth[] = "xxxxxxx";

char ssid[] = "xxxxxxx";
char pass[] = "xxxxxxx";

char server[] = "oasiskit.com";
int port = 8080;


#define DHTPIN 5          // What digital pin we're connected to
//#define DHTTYPE DHT11     // DHT 11
#define DHTTYPE DHT22   // DHT 22, AM2302, AM2321
//#define DHTTYPE DHT21   // DHT 21, AM2301

DHT dht(DHTPIN, DHTTYPE);





//Temp
float tmax;
String t_max1;
float t_max2;

float tmin;
String t_min1;
float t_min2;

WidgetLED led_1(V4);




BlynkTimer timer;




void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  Blynk.virtualWrite(V1, t);


  Serial.print("Temp : ");
  Serial.println(t);


  if ( t > tmin && t <= tmax ) {

    led_1.on();

  }  else   {

    led_1.off();
  }

}






BLYNK_WRITE(V2)

{
  t_max1 = param.asString();//รับค่าข้อความจาก Blynk เข้ามา เก็บในรูปแบบ String

  t_max2 = t_max1.toFloat();//แปลงค่าจาก String เป็น Float

  EEPROM.put(0, t_max2); //เขียนค่า
  EEPROM.commit(); //จบการเขียน

  tmax = EEPROM.get(0, t_max2);//อ่าน ค่า
  Serial.print("Set Tmax : ");
  Serial.println(tmax);

  delay(100);

}



BLYNK_WRITE(V3)

{
  t_min1 = param.asString();//รับค่าข้อความจาก Blynk เข้ามา เก็บในรูปแบบ String

  t_min2 = t_min1.toFloat();//แปลงค่าจาก String เป็น Float

  EEPROM.put(10, t_min2); //เขียนค่า
  EEPROM.commit(); //จบการเขียน

  tmin = EEPROM.get(10, t_min2);//อ่าน ค่า
  Serial.print("Set Tmin : ");
  Serial.println(tmin);

  delay(100);

}





BLYNK_CONNECTED()
{

  Blynk.syncAll();//ให้ซิงค์ข้อมูลทั้งหมดล่าสุดจาก Blynk Server

}//end Blynk connect










void setup()
{

  Serial.begin(115200);
  dht.begin();





  WiFi.begin(ssid, pass);
  Blynk.config(auth, server, port);
  Blynk.connect();


  timer.setInterval(2000L, sendSensor);

  
  EEPROM.begin(512);

  tmax = EEPROM.get(0, t_max2);
  Serial.print("Tmax in Void setup : ");
  Serial.println(tmax);



  tmin = EEPROM.get(10, t_min2);
  Serial.print("Tmin in Void setup : ");
  Serial.println(tmin);

}

void loop()
{
  Blynk.run();
  timer.run();
}

1

PUYIOT October 18, 2020, 3:23pm #3

  1. การให้ค่า Temp ส่งค่าเข้า Esp 8266 และให้ Esp 8266 ส่งค่า Temp ไปแสดง ใน Blynk โดยมีการควบคุมค่า Min Max ผ่าน Slide bar จาก Blynk เพื่อควบคุมให้ LED ของ Blynk ON หรือ OFF

โดยการตั้งค่า Min Max จะถูกเก็บใน EEPROM ของ ESP8266 ดังนั้น แม้ไม่มีการเชื่อมต่อของ Blynk ค่า Min Max ยังคงอยู่และสามารถควบคุมอุปกรณ์ให้ทำงานตามเงื่อนไขได้เลย

สำหรับข้อที่ 3 จะเหมือนกับข้อที่ 2. เพียงแค่เปลี่ยน รูปแบบการป้อนค่า จาก Slide bar เป็น Text Input Setting โดยให้ผลลัพธ์ในการตั้งค่าที่เหมือนกัน แต่

  1. แบบ Text Input Setting การตั้งค่าจะเร็ว และแม่นยำกว่า
  2. แบบ Slide bar การตั้งค่าจะช้า และแม่นยำน้อยกว่า ต้องใช้เวลาในการตั้งค่า

67091

ส่วนรูปแบบอื่นๆ จะเพิ่มเติมอีกครั้ง นะครับ ส่วนสมาชิกท่านใดมีรูปแบบ ที่แตกต่างจากนี้ก็ แบ่งปันกันมาได้เลยครับ