ส่วนประกอบส่วนหนึ่งของ IoT ก็จะเป็นเรื่องของความปลอยภัยส่วนบุคคล แม้เราจะมีกล้องวงจรปิดซึ่งเป็นอุปกรณ์ IoT อยู่แล้ว การกล้องวงจรปิดทำหน้าที่ได้แค่บันทึกภาพเท่านั้น ไม่สามารถส่งการแจ้งเตือนใด ๆ ให้เราสามารถรับรู้สถานะการได้ หรือหากใช้กล้องวงจรปิดที่มีอยู่ในท้องตลาด และสามารถแจ้งเตือนได้ ก็จำเป็นจะต้องลองแอพพลิเคชั่นในโทรศัพท์มือถือเพิ่มเติม
ในบทความนี้จะเป็นการนำ ESP8266 / ESP8285 มาทำการเชื่อมต่อ WiFi และส่งข้อมูลไปที่ Line ของผู้ใช้ ผ่านทาง API ที่ทาง LINE ได้จัดทำไว้ครับ สามารถนำไปเป็นพื้นฐานการเรียนรู้ในการส่งข้อมูลผ่าน API เข้า LINE และสามารถผูพื้นฐานไปสู่การทำ LINE Bot เพื่อเป็นผู้ช่วยควบคุมสิ่งต่าง ๆ ภายในบ้านได้ผ่านแอพพลิเคชั่น Line
รู้จักกับ LINE Notify
LINE Notify เป็นบริการของทาง LINE เป็นบริการและช่องทางที่ถูกต้อง ท่านสามารถส่งความ การแจ้งเตือนต่าง ๆ ไปยังแอคเค้าของท่านเองได้ ผ่านการใช้ API ซึ่งเรียกผ่าน HTTP POST แบบง่าย ๆ
ข้อจำกัดของ LINE Notify คือ สามารถส่งแจ้งเตือนได้เฉพาะผู้ที่ขอใช้ หรือกลุ่มที่ผู้ขอใช้เป็นสมาชิกเท่านั้น ไม่สามารถส่งข้อความเข้าห้องสนทนาของเพื่อน ๆ ได้ หากต้องการให้สามารถส่งข้อความหาใครก็ได้ ท่านต้องใช้ LINE Bot API แทน
เพิ่ม LINE Notify เป็นเพื่อน
ก่อนที่จะใช้งาน API และส่งการแจ้งเตือน ท่านต้องเพิ่ม LINE Notify เป็นเพื่อนก่อน โดยสแกน QR Code ด้านล่างนี้
รูปภาพจาก notify-bot.line.me
การขอ Access Token
ในการใช้งาน API ในทุก ๆ บริการ จะมีสิ่งที่เรียกว่า Access Token ไว้สำหรับเป็นรหัสที่ใช้ตอนจะเข้าใช้งาน API โดยรหัสนี้จะเป็นข้อความแทนอีเมล์ และพาสเวิคของเรา ดังนั้นหาก Access Token ถูกเปิดเผย เรายังสามารถใช้งานแอ๊กเค้าได้ปกติ (แต่หากรู้ตัวว่า Access Token ถูกเปิดเผย ควรยกเลิก แล้วขอ Access Token ใหม่ทันที)
เข้าไปที่หน้าเว็บ https://notify-bot.line.me/my/ จากนั้นระบบจะให้เราล็อกอินด้วยแอ๊คเค้า LINE โดยกรอกอีเมล์ และรหัสผ่านที่ได้ตั้งไว้ลงไป
เมื่อล็อกอินสำเร็จแล้ว ให้เลื่อนลงมาด้านล่าง จะพบ ออก Access Token (สำหรับผู้พัฒนา) ให้กดปุ่ม ออก Token
พอมาถึงส่วนนี้ให้เราทำความเข้าใจก่อนว่า เมื่อเราส่งข้อความไปแล้ว ข้อความที่ขึ้นจะปรากฏในรูปแบบ
[ชื่อ Token]: [ข้อความ]
ดังนั้นในช่องที่ 1 สามารถกรอกเป็นอะไรก็ได้ และสิ่งที่กรอกนั้นจะติดไปพร้อมกับข้อความเสมอ เช่น หากกรอกว่า ESP8266 เมื่อใช้ API ส่งข้อความว่า “สวัสดี” ข้อความจะขึ้นว่า “ESP8266:สวัสดี”
ในช่องที่ 2 จะให้เลือกว่าเราจะส่งข้อความเข้าไปในกลุ่มไหน หรือส่งให้ตัวเองเท่านั้น
เมื่อกรอกครบแล้ว ให้กดปุ่ม ออก Token
เมื่อกดปุ่มแล้ว จะปรากฏรหัส Token ให้ท่านเก็บรหัสนี้ไว้ให้ดีเพราะจะออกให้เพียงครั้งเดียว แต่หากลืม ท่านสามารถเริ่มต้นทำขั้นตอนใหม่เพื่อขอ Token ใหม่ได้
ส่วนใน LINE ก็จะมีการแจ้งเตือนว่าออก Access Token ใหม่แล้ว
แค่นี้เป็นอันจบขั้นตอนการขอ Access Token แล้ว ต่อเราจะมาเริ่มต่อวงจรกันครับ
ต่อวงจรสวิตซ์ให้ NodeMCU v1.0
ในบทความนี้จะเลือกใช้ NodeMCU เนื่องจากเป็นบอร์ดที่ค่อนข้างได้รับความนิยมเป็นส่วนใหญ่
ในการทดลอง จะใช้สวิตซ์ในการแทนเซ็นเซอร์อื่น ๆ เมื่อมีการกดสวิตซ์แล้ว จะมีการส่งแจ้งเตือนไปทาง LINE ท่านสามารถเปลี่ยนสวิตซ์เป็น PIR Sensor เพื่อตรวจจับผู้บุกรุกได้ หรือเปลี่ยนเป็นสวิตซ์แม่เหล็กติดกับประตูเพื่อแจ้งเตือนมีการเปิดประตูได้
Coding
ในโค้ดด้านล่างนี้ ท่านสามารถคัดลอกไปวางในโปรแกรม Arduino IDE ได้เลย แล้วแก้ไข <WIFI_SSID> , <WIFI_PASSWORD> ให้เป็นค่าที่ถูกต้อง ส่วน <LINE_TOKEN> ให้นำ Access Token จากในขั้นตอนที่แล้วมาวาง
void Line_Notify(String message) ; | |
#include <ESP8266WiFi.h> | |
// Config connect WiFi | |
#define WIFI_SSID “<YOUR WIFINAME>“ | |
#define WIFI_PASSWORD “<YOUR WIFIPASSWORD>“ | |
// Line config | |
#define LINE_TOKEN “<LINE ACCESS TOKEN>“ | |
#define SW D2 | |
String message = “%E0%B9%82%E0%B8%94%E0%B8%99%E0%B8%81%E0%B8%94“; | |
void setup() { | |
pinMode(SW, INPUT); | |
Serial.begin(9600); | |
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(“————-“); | |
} |
จากนั้นอัพโหลดลง NodeMCU ไปได้เลย
การทดสอบ
หลังจาก ESP8266 เชื่อมต่อ WiFi ได้แล้ว ทดลองกดสวิตซ์ จะมีข้อความว่า “โดนกด” มาปรากฏในห้องแชทของ LINE Notify เป็นอันจบการทดสอบ
การแก้ไขข้อความที่ส่ง
ท่านสามารถแก้ไขข้อความได้โดยแก้ไขคำในตัวแปร message ในบรรทัดที่ 12 ได้เลย
แต่เนื่องจากไมโครคอนโทรลเลอร์ไม่รองรับ UTF-8 ทำให้ไม่รองรับการพิมพ์ภาษาไทยลงไปตรง ๆ หากต้องการส่งข้อความที่ไม่ใช่ภาษาอังกฤษ เป็นข้อความภาษาไทย ข้อความยาวหลายบรรทัด มีการเว้นวรรค มีอักษรพิเศษ จะต้องแปลงข้อความให้อยู่ในรูปที่เรียกว่า URL Encode ก่อน โดยใช้บริการเว็บ http://meyerweb.com/eric/tools/dencoder/ เมื่อเข้าไปในเว็บ ให้พิมพ์ข้อความที่ต้องการ จากนั้นกดปุ่ม Encode ก็จะปรากฏข้อความที่ถูกแปลงแล้วออกมา ท่านสามารถนำข้อความที่ถูกแปลงแล้วไปใส่ในตัวแปร message ได้เลย
——————–