การสร้างแอปพลิเคชันเพื่อรับค่าและแสดงผลด้วย
Blynk
ในบทนี้ จะเป็นการประยุกต์ใช้งาน NodeMCU ร่วมกับ Blynk App เพิ่มเติมจากบทที่แล้ว
โดยจะแบ่งเป็น 3 ตอน คือ การสร้างแอปพลิเคชันบน Blynk App เพื่อแสดงค่าระยะทาง การสร้างแอปพลิเคชันบน Blynk App เพื่อแสดงค่าความสว่าง และ การสร้างแอปพลิเคชันบน
Blynk App เพื่อควบคุมรีเลย์จากความสว่าง
โดยการทดลองที่แสดงในบทนี้ มีวัตถุประสงค์เพื่อให้ผู้เรียนสามารถเชื่อมต่อ NodeMCU
กับแอพพลิเคชัน Blynk และรับค่าต่าง ๆ จากเซนเซอร์ได้
และผู้เรียนสามารถเขียนโปรแกรมประยุกต์ใช้งานควบคุมร่วมกันระหว่าง NodeMCU และแอปพลิเคชัน Blynk
App ได้
อุปกรณ์ที่ใช้ในการทดลอง
1. เครี่องคอมพิวเตอร์ที่มีระบบปฏิบัติการ
Windows
(ตั้งแต่ Windows 7 ขึ้นไป)
พร้อมติดตั้งโปรแกรม Arduino IDE 1.8.8 IoT 1
เครื่อง
2. NodeMCU v.3 1
บอร์ด
3. NodeMCU Base
Ver 1.0 1
บอร์ด
4. บอร์ดโมดูลอัลตราโซนิกส์ HC-SR04 1
บอร์ด
5. บอร์ดโมดูลโมดูลวัดแสงแบบแอนะล็อกด้วย LDR 1
บอร์ด
6. บอร์ดรีเลย์ชนิด 4 ช่อง 1
บอร์ด
7. อะแดปเตอร์ 9 V 1
ตัว
8. สาย USB 1
เส้น
9. สายต่อวงจร
(สายจัมพ์ เมีย-เมีย) 6
เส้น
การสร้างแอปพลิเคชันบน Blynk App เพื่อแสดงค่าระยะทาง
1.
ต่อวงจรตามรูปที่ 13.1 โดยให้ต่อขา D0 และ D1 ของ NodeMCU เข้ากับขา TRIG และ
ECHO ของบอร์ดโมดูลอัลตราโซนิกส์ HC-SR04 ตามลำดับ
รูปที่ 13.1 การเชื่อมต่อเพื่อใช้งานโมดูลอัลตราโซนิกส์
2.
เขียนโค้ดโปรแกรมดังแสดงข้างล่าง (โดยอาจจะต้องแก้ไข auth, ssid และ pass)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
// Control NodeMCU
ESP8266 by Blynk // Read and
display value from ultrasonic sensor // Comment this out to disable prints #define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <Ultrasonic.h> // ultrasonic(Trigger PIN,
Echo PIN) Ultrasonic ultrasonic(D0,D1); char auth[] =
"9c687abf4897467992e46e7249af7209"; char ssid[] = "XXXXXXX"; char pass[] =
"XXXXXXX"; void setup() {
Serial.begin(9600);
Blynk.begin(auth, ssid,
pass); } void sendUltra() { unsigned long ultra_value = ultrasonic.Ranging(CM);
Blynk.virtualWrite(V0, ultra_value); } void loop() {
Blynk.run();
delay(100);
sendUltra(); } |
3.
อัปโหลดโปรแกรมลงใน NodeMCU
เพื่อให้ฮาร์ดแวร์รอรับคำสั่งเชื่อมต่อ
4.
เปิด Blynk App
โดยอาจสร้างโปรเจคใหม่ (ขอ Token ใหม่)
หรือลบอุปกรณ์ในโปรเจคเดิมก็ได้ จากนั้นจึงสร้างตัวแสดงค่า (Value Display) 1 ตัว แล้วขยายขนาด (ดังรูปที่ 13.2) โดยกำหนด INPUT PIN เป็นปุ่มเสมือน
V0 ดังรูปที่ 13.2
5.
รันโปรแกรมเพื่อทดสอบการรับค่าเข้าจากโมดูลอัลตราโซนิกส์ และทดลองเปลี่ยนระยะห่างเพื่อตรวจสอบความถูกต้องของการอ่านค่าและการส่งข้อมูล
รูปที่ 13.2 ขั้นตอนการสร้างและกำหนดคุณสมบัติของ Value Display
เพื่อแสดงค่าจากโมดูลอัลตราโซนิกส์
การสร้างแอปพลิเคชันบน Blynk App เพื่อแสดงค่าความสว่าง
1.
ต่อวงจรตามรูปที่ 13.3 โดยให้ต่อขา A0 ของ NodeMCU
ต่อเข้ากับขา A0 ของบอร์ดโมดูลวัดค่าความสว่างแสงแบบแอนะล็อก
รูปที่ 13.3 การเชื่อมต่อเพื่อใช้งานโมดูลวัดแสงแบบแอนะล็อก
2.
เขียนโค้ดโปรแกรมดังแสดงข้างล่าง (โดยอาจจะต้องแก้ไข auth, ssid และ pass)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
// Control
NodeMCU ESP8266 by Blynk // Read value
from LDR // Comment this
out to disable prints #define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> char auth[] = "9c687abf4897467992e46e7249af7209"; char ssid[] = "XXXXXXX"; char pass[] =
"XXXXXXX"; int LDR_Sensor = A0; float Cal_illuminance() {
float illu_LDR;
float volt_LDR;
int data_LDR;
data_LDR = analogRead(LDR_Sensor);
volt_LDR = (3.3/1024)*data_LDR;
illu_LDR = (42.0 * pow(volt_LDR, -3.15));
return illu_LDR; } void setup() {
Serial.begin(9600);
Blynk.begin(auth, ssid,
pass); } void loop() {
float illu_LDR;
illu_LDR = Cal_illuminance();
Blynk.virtualWrite(V0,
String(illu_LDR));
Blynk.run();
delay(100); } |
3.
อัปโหลดโปรแกรมลงใน NodeMCU
เพื่อให้ฮาร์ดแวร์รอรับคำสั่งเชื่อมต่อ
4.
เปิด Blynk App
โดยอาจสร้างโปรเจคใหม่ (ขอ Token ใหม่)
หรือลบอุปกรณ์ในโปรเจคเดิมก็ได้ จากนั้นจึงสร้างตัวแสดงค่า (Value Display) 1 ตัว โดยกำหนด INPUT PIN เป็นปุ่มเสมือน
V0 ดังรูปที่ 13.2
(เหมือนกับกับการทดลองตอนที่ 1)
5.
รันโปรแกรมเพื่อทดสอบการรับค่าเข้าจากโมดูลวัดความสว่างแสง
โดยสังเกตว่า ค่าที่แสดงเป็นค่าทศนิยมในหน่วยลักซ์ที่คำนวณจากโค้ดที่เขียนในฟังก์ชัน
Cal_illuminance (ดูบทที่ 9 สำหรับการเทียบวัดค่าความสว่างแสง)
การสร้างแอปพลิเคชันบน Blynk App เพื่อควบคุมรีเลย์จากความสว่าง
ในการทดลองตอนนี้
เราจะสมมติว่า เราต้องการสร้าง Blynk App ที่ทำหน้าที่เปิด-ปิดไฟอัตโนมัติเมื่อมีความสว่างน้อยเกินไป โดยกำหนดให้ค่าความสว่างต้องมากกว่า
100 ลักซ์ นั่นคือ
หากแสงที่ตรวจวัดได้มีค่าความสว่างน้อยกว่า 100 ลักซ์แล้ว
รีเลย์จะควบคุมให้เปิดโคมไฟ (ดูรูปที่ 13.4) ขั้นตอนการทดลองสร้าง เริ่มจากการกำหนดแผนผังการทำงานของโปรแกรมเสียก่อน
แผนผังอาจเขียนได้ดังแสดงในรูปที่ 13.5
รูปที่
13.4
แนวคิดการออกแบบระบบควบคุมอัตโนมัติในการทดลองตอนที่ 3
รูปที่
13.5 แผนผังการทำงานของโปรแกรมที่แสดงในตอนที่ 3
ขั้นตอนการสร้าง/การทดลองตามแผนผังที่ออกแบบไว้
มีดังนี้
1.
ต่อวงจรดังรูปที่ 13.6 โดยต่อรีเลย์เข้ากับขา D1 ของ NodeMCU เพียงขาเดียว และจ่ายไฟเลี้ยงให้กับทั้งบอร์ดโมดูลวัดความสว่างและบอร์ดรีเลย์
รูปที่ 13.6 การเชื่อมต่อเพื่อใช้สร้างระบบควบคุมการทำงานโคมไฟด้วยแสง
2.
เขียนโค้ดโปรแกรมดังแสดงข้างล่าง (อย่าลืมแก้ไข auth, ssid
และ pass)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
// Control
NodeMCU ESP8266 by Blynk // Read value
from LDR and control a relay // Comment this
out to disable prints #define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> char auth[] =
"9c687abf4897467992e46e7249af7209"; char ssid[] = "XXXXXXX"; char pass[] =
"XXXXXXX"; #define OFF HIGH #define ON LOW int Relay1 = D1; int LDR_Sensor = A0; float Cal_illuminance() {
float illu_LDR;
float volt_LDR; int data_LDR;
data_LDR = analogRead(LDR_Sensor);
volt_LDR = (3.3/1024)*data_LDR;
illu_LDR = (42.0 * pow(volt_LDR, -3.15));
return illu_LDR; } void setup() {
Serial.begin(9600);
//
for debugging
Blynk.begin(auth, ssid,
pass); pinMode(Relay1, OUTPUT);
digitalWrite(Relay1, OFF); } void loop() {
int state1; // State of virtual button V1
float illu_LDR;
illu_LDR = Cal_illuminance();
// Serial.println(String(illu_LDR));
Blynk.virtualWrite(V0,
String(illu_LDR));
if (illu_LDR < 100.0) { digitalWrite(Relay1, ON); delay(1000);
} else { digitalWrite(Relay1, OFF); delay(1000);
}
Blynk.run();
delay(100); } |
3.
อัปโหลดโปรแกรมลงใน NodeMCU
เพื่อให้ฮาร์ดแวร์รอรับคำสั่งเชื่อมต่อ
4.
เปิด Blynk App
โดยอาจสร้างโปรเจคใหม่ (ขอ Token ใหม่)
หรือลบอุปกรณ์ในโปรเจคเดิมก็ได้ จากนั้นจึงสร้างตัวแสดงค่า (Value Display) 1 ตัว โดยกำหนด INPUT PIN เป็นปุ่มเสมือน
V0 ดังรูปที่ 13.2 (เหมือนกับการทดลองตอนที่
1)
5.
รันโปรแกรมเพื่อทดสอบการรับค่าเข้าจากโมดูลวัดความสว่างแสง
โดยสังเกตว่า เมื่อค่าความสว่างมีค่าน้อยกว่า 100 ลักซ์แล้ว
รีเลย์ 1 จะทำงาน (นำกระแส)