นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน
อ่าน: 3921
ความเห็น: 3

ESP8266 / ESP8285 กับการส่งการแจ้งเตือนเข้า LINE

ESP8266

ESP8266 / ESP8285 กับการส่งการแจ้งเตือนเข้า LINE

ส่วนประกอบส่วนหนึ่งของ 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 ได้เลย

 

--------------------

ขอบคุณที่อ่านมาจนจบนะครับ ในโอกาศหน้าผมจะนำบทความอะไรมาลงอีก สามารถติดตามได้ที่เว็บของ IOXhop หรือที่เพจ IOXhop ได้ครับ และสุดท้ายหวังว่าเราจะก้าวเข้าสู่ Thailand 4.0 ไปพร้อม ๆ กันนะครับ

สวัสดีครับ.

 

ขอบคุณบทความการใช้งาน LINE Notify ในภาษา Python จาก python3.wannaphong.com จนนำมาสู่การนำไปใช้บน ESP8266 / ESP8285 และเกิดบทความนี้ขึ้นมาครับ

ref: http://www.ioxhop.com/article/47/esp8266-esp8285-%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AA%E0%B9%88%E0%B8%87%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%81%E0%B8%88%E0%B9%89%E0%B8%87%E0%B9%80%E0%B8%95%E0%B8%B7%E0%B8%AD%E0%B8%99%E0%B9%80%E0%B8%82%E0%B9%89%E0%B8%B2-line

หมวดหมู่บันทึก: เรื่องทั่วไป
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 07 มกราคม 2560 12:15 แก้ไข: 07 มกราคม 2560 12:15 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 ดำขำ.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

Ico48
Anan yaowapan [IP: 101.108.182.249]
26 มกราคม 2561 06:37
#108008

รบกวนสอบถามครับ ถ้าต้องการแจ้งเตือน 3 ข้อความ ได้หรือเปล่าครับ วิธีการเขียน Code ต้องเขียนยังงัยครับ

สามารถนำข้อความที่ต้องการส่งใส่ไปได้เลยตรงๆ (ภาษาอังกฤษ) ครับ แต่หากเป็นภาษาไทยต้องแปลงก่อนครับ http://meyerweb.com/eric/tools/dencoder/ ด้วยเว็บนี้ก่อนครับ

Ico48
Jinda [IP: 27.145.135.163]
27 มกราคม 2561 23:26
#108010

รบกวนสอบถามครับ ถ้าต้องการแจ้งเตือน 3 ข้อความ ได้หรือเปล่าครับ วิธีการเขียน Code ต้องเขียนยังงัยครับ

และเพิ่มสวิทอีก 3ตัวด้วยได้มัย

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 35.153.39.7
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ