การใช้งาน esp8266 กับ Blynk เบื้องต้น ด้วย sensor แบบ analog และ DIGITAL
หน้าจอโปรแกรม Blynk บนมือถือ
การทดลองในบทความนี้ จะเป็นการใช้ esp8266 กับ blynk โดยมีทั้ง sensor ทีเป็น digital และ Analog โดยในส่วนของ digital เราจะใช้ DHT11 สำหรับรับ อุณหภูมิและความชื้น ส่วน Analog เราจะใช้ตัว R แบบปรับค่าได้
ความรู้เบื้องต้นเกี่ยวกับ Blynk
Blynk เป็น cloud platform ที่ให้บริการฟรี สำหรับ IOT ไม่ว่าจะเป็น Arduino, Raspberry Pi หรือ ESP8266 โดยในโปรแกรมสามารถให้เราสร้างปุ่มกดเพื่อสั่งงานบน esp8266 ผ่าน wifi ได้เลย หรือจะสร้างหน้าจอแสดงผลเป็นกราฟ หรือ gauge หรืออะไรก็ได้ครับ ฟรีครับ
การใช้งาน บนมือถือให้ download โปรแกรม Blynk มาครับ โดยจะให้พลังงานมาฟรีเริ่มต้น 2000 energy ในตัวอย่างเราจะใช้ Gauge จำนวน 1 อัน และ graph จำนวน 2 อัน
หลักการ คือ เมื่อเราสร้าง new project เราจะได้ authen key มา โดย authen key จะถูกส่งมาทางอีเมล์ให้เราโดยอัตโนมัติ เราก็จะ copy มาใส่ใน code เรา แค่นั้นก็เสร็จ
การติดตั้ง Blynk สำหรับ Arduino IDE
ก่อนการใช้งาน ต้อง download library มาติดตั้งก่อน โดยดาวน์โหลดเป็น zip file จากที่นี่ https://github.com/blynkkk/blynk-library/releases/download/v0.4.6/Blynk_Release_v0.4.6.zip แล้วแตกไฟล์มาไว้ใน C:\Program Files (x86)\Arduino\libraries จากนั้นก็ปิดเปิด arduino ide ให้เรียบร้อย
จากนั้นก็เปิดตัวอย่างจาก example -> blynk -> board_wifi -> esp8266_Standalone
อุปกรณ์ที่ใช้
1.breadboard และสายไฟ ( 100 บาท)
2.esp8266 node CMU V.2 ( 250-300 บาท)
3. R แบบปรับค่าได้ ( 10 บาท)
การต่อวงจรขาของ R แบบปรับค่าได้ โดยหันตัวปรับค่า เข้าหาตัวเรา
ซ้ายมือสุด ต่อ 3.3v ขากลาง ต่อกับ AO ส่วนขามือสุดต่อ GND (ground)
4. DHT11 ( 50 บาท)
การต่อวงจรขาของ DHT11 โดยหันด้านหน้าที่เป็นรูๆ เข้าหาตัวเรา
ซ้ายมือสุด ต่อ 3.3v ขากลาง ต่อกับ D5 ขาที่สามปล่อยว่าง ส่วนขามือสุดต่อ GND (ground)
5.สาย USB ( 50 บาท)
ภาพการต่อวงจร
software ที่ใช้
1.Arduino IDE
2.Blynk บนมือถือ ( ดาวน์โหลดได้จาก store ทั้ง android และ ios )
/// code c++ บน arduino IDE //
#include <BlynkSimpleEsp8266.h>
// You should get Auth Token in the Blynk App
// Go to the Project Settings (nut icon).
char auth[] = "BLINK AUTH TOKEN"; //ได้มาจาก email หลังจาก new project
char ssid[] = "WIFI_SSID";
char pass[] = "WIFI_PASSWORD";
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
}
void loop()
{
Blynk.run();
}
///////////////////
ส่วนของ Blynk
เริ่มต้น ดาวน์โหลด blynk หลังจากนั้นสมัครสมาชิก โดยให้จำ email ไว้ให้ดีดี เนื่องจากหลังจากที่เรา new project ระบบจะส่ง authen key ไปให้ทางอีเมล์ครับ
เริ่มสร้าง project หลังจากสร้าง project ก็จะส่ง authen key มาทางอีเมล์
หลังจาก สร้าง project ระบบจะส่ง authen key มาให้
หลังจากสร้าง project จะยังไม่มีอะไร จะมีแค่หน้าว่าง ให้เลื่อนจอไปทางข้างๆ จะพบกับกราฟต่างๆ
สามารถเลือกใช้ได้ตามชอบใจ แต่ energy ก็จะลดลงเรื่อยๆ
ให้เลือก gauge เพื่อสร้างการแสดงผลจา R แบบปรับค่าได้ โดยให้เลือก pin เป็น ADC0
เพราะเนื่องจาก esp8266 จะรับค่า analog ได้เพียง ขาเดียว
จากนั้นก็ให้เลือก graph เพื่อแสดงผลอุณหภูมิ โดยเลือก pin เป็น Virtual V5
เนื่องจาก DHT11 สามารถรับค่าได้ทั้งอุณหภูมิและความชื้น จึงต้องใช้ค่า virtual
สร้าง graph แสดงผลความชื้น โดยเลือก pin เป็น virtual V6
ทดลอง RUN โดยกดปุ่มสามเหลี่ยม ด้านขวา ก็จะเห็นผล
เพิ่มเติม
ต่อ Relay แบบ 1 channel โดยสั่งกดปุ่มที่ Blynk แล้วทำให้ไฟที่ relay ติด
Relay แบบ 1 channel วิธีการต่อ ตามขาเลยครับ แต่ขา IN ให้ต่อกับขา D5 ( GPO14)
สร้างปุ่มกดมา 1 ปุ่ม โดยกำหนดขา PIN เป็น GPO14
เมื่อกดปุ่ม ไฟจะติด
///////////////////////
ตัวอย่างเช่น ทำกล่องแล้วว่างไว้ที่แผนกเวรเปลในโรงพยาบาล ถ้ากดปุ่ม เวรเปลก็จะมารับที่จุดกดปุ่ม โดยอาจใช้ไฟจากถ่าน หรือแหล่งอื่นก็ได้
การต่อขา ปุ่มกด ขาซ้ายสุดต่อ D5 ขากลางต่อกับ GND
////code c++ ///
void Line_Notify(String message) ;
#include <ESP8266WiFi.h>
// Config connect WiFi
#define WIFI_SSID "ssid"
#define WIFI_PASSWORD "wifi_password"
// Line config
#define LINE_TOKEN "line token key"
#define SW D5
String message = " Help me please";
void setup() {
pinMode(SW, INPUT);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
// connect to wifi.
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("connected: ");
Serial.println(WiFi.localIP());
}
void loop() {
if (digitalRead(SW) == HIGH) {
while(digitalRead(SW) == HIGH) delay(10);
Serial.println("Enter !");
Line_Notify(message);
// Serial.println();
}
delay(10);
}
void Line_Notify(String message) {
WiFiClientSecure client;
if (!client.connect("notify-api.line.me", 443)) {
Serial.println("connection failed");
return;
}
String req = "";
req += "POST /api/notify HTTP/1.1\r\n";
req += "Host: notify-api.line.me\r\n";
req += "Authorization: Bearer " + String(LINE_TOKEN) + "\r\n";
req += "Cache-Control: no-cache\r\n";
req += "User-Agent: ESP8266\r\n";
req += "Content-Type: application/x-www-form-urlencoded\r\n";
req += "Content-Length: " + String(String("message=" + message).length()) + "\r\n";
req += "\r\n";
req += "message=" + message;
// Serial.println(req);
client.print(req);
delay(20);
// Serial.println("-------------");
while(client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r") {
break;
}
//Serial.println(line);
}
// Serial.println("-------------");
}
///////////////
นำโค้ดทั้ง3อันมารวมกันได้มั้ยครับ
ตอบลบขอบคุณครับอธิบายได้เข้าใจมากขึ้น
ตอบลบถ้าใช้กับหลายเครื่อง ต้องสร้างบนมือถือทุกเครื่องมั้ย หรือคัดลอกไปได้
ตอบลบคัดลอกได้ครับ
ลบ