ผู้เขียน หัวข้อ: งานครั้งที่ 30 [iot#5 Blynk] การแสดงความชื้น/อุณหภูมิด้วยแอฟ Blynk  (อ่าน 23200 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 688
    • ดูรายละเอียด
    • อีเมล์
งานครั้งที่ 30 [iot#5 Blynk] การแสดงความชื้น/อุณหภูมิด้วยแอฟ Blynk
ก่อนที่จะแสดงค่าความชื้นและอุณภูมิด้วยแอฟ Blynk ได้ตัวบอร์ดต้องอ่านค่าจากตัวเซนเซอร์ให้ได้ก่อน ตัวเซนเซอร์ที่ใช้ในการทดลองนี้ใช้เบอร์ DHT11 ซึ่งขั้นตอนการเขียนโค้ดคำสั่งเพื่ออ่านค่าได้ทดลองผ่านมาแล้วในใบงานที่ 8 (DHT22 กับ DHT11 ใช้โค้ดตัวเดียวกันเพียงแต่แก้การกำหนดค่าเพียงคำสั่งเดียว) หากยังไม่ได้ติดตั้งไลบรารี่สำหรับเซนเซอร์ DHT ให้กลับไปศึกษาใน เขียนโปรแกรมอ่านค่าอุณหภูมิและความชื้นด้วย DHT22 เบื้องต้น สำหรับงานครั้งนี้มีขั้นตอนการดำเนินการทดลองเป็นดังนี้

[หมายเหตุ] จะใช้งานแอฟและไลบรารี่ Blynk ทั้งในสมาร์ตโฟนและโปรแกรม ArduinoIDE ได้ จะต้องดำเนินติดตั้งก่อน สามารถศึกษาวิธีการจากงานครั้งที่ 26 ได้ที่ งานครั้งที่ 26 [iot Blynk #1] เริ่มการใช้งาน Blynk

1. วงจรที่ใช้ทดลอง ทั้งที่เป็นบอร์ด NodeMCU และ WeMOS D1 mini


ส่วนจัดการแอฟ Blynk
2. เปิดแอฟ Blynk ในมือถือแตะสร้างโปรเจคใหม่


3. ดำเนินการกำหนดคุณสมบัติโปรเจค
    (1) ตั้งชื่อโปรเจค
    (2) เลือกบอร์ดที่ใช้ควบคุม
    (3) คลิกสร้าง


4. รหัส Token ของโปรเจคจะถูกส่งเข้าไปยังอีเมล์ (เป็นอีเมล์ที่ลงเบียนไว้ตอนล็อกอินแอฟ)


5. แตะที่เครื่องหมายบวกเพื่อเลือกวิตเจ็ทใช้งาน


6. แตะเลือกวิตเจทเกจ


7. จะได้เกจอยู่บนหน้าพื้นที่ใช้งาน ทำการแตะที่ตัวเกจเพื่อตั้งค่า


8. ทำการตั้งค่า
    (1) ตั้งชื่อเกจ (สามารถตั้งชื่อเป็นภาษาไทยได้ เช่น "ความชื้น")
    (2) เลือกขาพอร์ตที่ใช้อ่านค่า


9. ทำการเลือกขา ซึ่งเป็นขาบอร์ดที่เชื่อม LED ไว้
    (1) เลือกขาเสมือน (มีลักษณะเป็นตัวแปรรับค่า)
    (2) เลือกขาที่ใช้รับค่า (เป็นตัวแปรขาที่ถูกส่งค่ามาจากบอร์ด)
    (3) เมื่อเลือกตรงกับค่าที่ใช้งานจริงที่บอร์ดให้แตะที่ OK


10. ตั้งค่าเกจ (เพิ่มเติม)
    (1) ตั้งตัวเลขสูงสุดของสเกล (ความชื้นใช้ 100 เนื่องจากเป็นค่าเปอร์เซ็น)
    (2) กำหนดรูปแบบแสดงผล


11. ทำการเพิ่มเกจอีก 1 ตัวพร้อมตั้งค่าเกจ
    (1) ตั้งชื่อ
    (2) เลือกขาที่ใช้รับค่า (เป็นตัวแปรขาที่ถูกส่งค่ามาจากบอร์ด)
    (3) ตั้งตัวเลขสูงสุดของสเกล (ความอุณภูมิในที่นี้ใช้ 50 )
    (4) กำหนดรูปแบบแสดงผล


12. รูปแบบที่ใช้กำหนดการแสดงผลโดยให้แสดงผลที่มีจำนวนหลักทศนิยมตามต้องการดังนี้


ส่วนจัดการโค้ดโปรแกรมควบคุมบอร์ด
13. ฟังชั่นเปิดใช้งาน BlynkTimer ซึ่งทำหน้าที่คล้าย ๆ interrupt timer หมายถึงเมื่อครบเวลาตามที่กำหนดไว้โปรแกรมหลักจะกระโดดไปทำงานในโปรแกรมตอบสนองที่กำหนดไว้
    (1) ชื่อออฟเจคไว้อ้างอิง (ผู้ใช้งานตั้งชื่อเองในที่นี้ตั้งคำว่า "timer")
    (2) กำหนดค่าช่วงเวลาที่ให้บอร์ดกระโดดไปทำงานในโปรแกรมตอบสนอง ในที่นี้กำหนดเป็น 2000L หมายถึงให้บอร์ดมาทำงานในโปรแกรมตอบสนองทุก ๆ 2 วินาที
    (3) ชื่อโปรแกรมตอบสนอง (ฟังก์ชั่นย่อย)  ในที่นี้ตั้งชื่อว่า sendSensor ซึ่งบอร์ดจะวนมาทำงานฟังก์ชั่นชื่อนี้ทุก ๆ เวลาที่กำหนด


14. ฟังก์ชั่นการส่งค่าความชื้นและอุณภูมิไปยังแอฟ Blynk
    (-) ส่งค่าความชื้นจากค่าในตัวแปร h ไปยังตัวแปรขาเสมือน V5
    (-) ส่งค่าอุณหภูมิจากค่าในตัวแปร t ไปยังตัวแปรขาเสมือน V6


15. เปิดอีเมล์ทำการคัดลอกรหัส Token โปรเจค


16. เขียนโค้ดควบคุม
    (1) วางรหัส Token ที่คัดลอกมาจากอีเมล์
    (2) ใส่ชื่อไวไฟที่บอร์ดควบคุมใช้เชื่อมต่อ
    (3) ใส่พาสเวิร์ดไวไฟ (ในกรณีที่ไวไฟมีการใช้รหัสผ่าน แต่ถ้าไม่มีให้ใช้ "")
    (4) ส่วนของโปรแกรมตอบสนอง BlynkTimer เขียนโค้ดเพื่อส่งสถานะในทุก ๆ 2 วินาที
    (5) อ่านค่าความชื้นและอุณหภูมิ
    (6) หากการอ่านล้มเหลวให้กลับไปอ่านค่าใหม่
    (7) หากอ่านค่าได้ให้ส่งค่าไปยังตัวแปรสำหรับส่งค่า


โค้ดโปรแกรม
โค๊ด: [Select]
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#define BLYNK_PRINT Serial
char auth[] = "e04464999c544b0a9fbffc776ae44d85";
char ssid[] = "wifi name";
char pass[] = "wifi password";
BlynkTimer timer;
#define LED D4                  // LED on chip ESP8266
#define DHTPIN  D3              // pin of sensor connected to
#define DHTTYPE DHT11           // DHT22 if useDHT22
DHT dht(DHTPIN, DHTTYPE);

void setup()
{
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  //  Blynk.begin(auth, ssid, pass);
  //  Blynk.begin(auth, ssid, pass, "prakitblog.com", 8181);
  Blynk.begin(auth, ssid, pass, "blynk.iot-cm.com", 8080);
  dht.begin();
  timer.setInterval(2500, Sensor);
}
void loop()
{
  Blynk.run(); // Initiates Blynk
  timer.run(); // run BlynkTimer
}
void Sensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    digitalWrite(LED, LOW);
    delay(1500);
    return;
  }
  Serial.print("Humidity is: "); Serial.println(h, 1);
  Serial.print("Temperature is: "); Serial.println(t, 1);
  digitalWrite(LED, HIGH);
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
}

17. ทำการอัพโหลดลงบอร์ด เปิดหน้าต่าง Serial monitor จะได้ดังรูป


ทดสอบการทำงาน
18. กลับไปที่แอฟ Blynk ทำการแตะตัวสามเหลี่ยมเพื่อรันแอฟ


19. ผลของการรันที่แอฟ Blynk


20. การเชื่อมต่อบอร์ดทดลอง
« แก้ไขครั้งสุดท้าย: มกราคม 11, 2019, 10:49:24 AM โดย admin »