วันอังคารที่ 23 กรกฎาคม พ.ศ. 2562

โปรเจค IoT ESP32 แจ้งเตือนด้วย LINE Notify เมื่อมีผู้บุกรุก



LINE Notify คืออะไร ?

LINE เป็นแอพพลิเคชั่นแชทยอดนิยมในประเทศไทย ปัจจุบันเราได้เห็นการใช้งาน LINE ในรูปแบบต่าง ๆ มากขึ้น ทั้งการขายสินค้า การชำระเงิน การพูดคุยกันในหน่วยงาน ในโปรเจคนี้จึงมุ่งเป้าหมายไปที่การใช้แอพพลิเคชั่น LINE เป็นส่วนหนึ่งของระบบ IoT โดยใช้ ESP32 เป็นแกนหลัก

ส่วนของ API หรือส่วนสำหรับนักพัฒนาได้มีการเปิดส่วนของ LINE Notify ขึ้นมาให้ใช้งานเพื่อให้นักพัฒนาได้ส่งการแจ้งเตือน ข้อความต่าง ๆ ผ่าน LINE ได้ง่ายขึ้น

สำหรับตัว LINE Notify นั้น ออกแบบมาเพื่อใช้สำหรับการแจ้งเตือนต่าง ๆ โดยเฉพาะ สามารถส่งข้อความเพื่อแจ้งเตือนไปยังกลุ่ม หรือบุคคลก็ได้ ทั้งนี้ LINE Notify จะมีข้อจำกัดการใช้งานอยู่ที่ จะสามารถใช้งานได้กับบุคคลเดียวเท่านั้น หรือกลุ่มเดียวเท่านั้น การติดต่อกับ LINE จะใช้โปรโตคอล HTTPS ในการติดต่อ และใช้สิ่งที่เรียกว่า Token เป็นรหัสผ่านเข้าไปขอส่งข้อความเข้า LINE

สรุปคือ LINE Notify คือหนึ่งในบริการดีๆ ที่ฟรีไม่เสียตังค์ของ LINE เพื่อส่งการแจ้งเตือน ส่งข้อความไปยัง LINE Notify ถ้าอธิบายง่ายๆ ก็คือ LINE Notify ก็คือเพื่อนของท่านคนหนึ่ง ก่อนที่จะสื่อสารกับเขาได้ต้องเพิ่มเพื่อนก่อน เพื่อนคนนี้จะส่งข้อความมาหาเราเหมือนคนอื่นปกติ จะลากเข้ากลุ่มก็ได้ แต่พิเศษตรงที่ว่า ข้อความที่เพื่อนคนนี้ส่งมา ก็คือการแจ้งเตือนที่เราส่งไปให้นั่นเอง




การแจ้งเตือนด้วย LINE Notify เมื่อมีผู้บุกรุก ก็คือ เมื่อ PIR Motion Sensor  ตรวจจับพบความเคลื่อนไหวของสิ่งมีชีวิต ESP32  จะส่งการแจ้งเตือนผ่านไปยัง  WiFi Router  ซึ่งเชื่อมต่อกับ เซิฟเวอร์ ของ LINE ที่เชื่อมโยงกันด้วยเครือข่ายอินเทอร์เน็ต  และส่งข้อมูลการแจ้งเตือน ไปยัง แอพพลิเคชั่น LINE ให้แสดงข้อความที่ LINE Notify




### อุปกรณ์ที่ใช้ ###


1. PICO KIT V4 ESP32 Development Board WiFi + Bluetooth

2. Micro USB Cable Wire 1m for NodeMCU

3. Breadboard 830 Point MB-102

4. Keyestudio PIR Motion Sensor Module

5. Jumper (M2M) 10cm Male to Male




โดยการทำโปรเจคมีขั้นตอนดังนี้


1. สมัครขอใช้บริการ LINE Notify


(ในตัวอย่างใช้คอมพิวเตอร์ PC เพื่อความสดวกในการทำงาน)



1.1 ลงทะเบียนขอรหัส token ที่ https://notify-bot.line.me/my/


1.2 เข้าสู่ระบบด้วยบัญชีของ LINE ให้เรียบร้อย




1.2 คลิกที่ Generate token




1.3  ให้ตั้งชื่อให้ token ที่ต้องการ ในตัวอย่างตั้งชื่อว่า ESP32 จากนั้นให้เลือก LINE Notify ของเราเอง แล้วคลิกที่ปุ่ม Generate token




1.4 ระบบจะสร้าง token มาให้




1.5 ให้คัดลอกเก็บไว้ เพราะถ้าลืมจะไม่สามารถดูได้อีก ต้องลบและขอใหม่เท่านั้น




1.6  คลิก Close ปิดหน้าต่างลงไป





1.7 เสร็จขั้นตอนการขอ token แล้ว (เราจะใช้ token นี้ ในขั้นตอนการเขียนโค้ดต่อไป)





1.8 ใช้สมาร์ทโฟน ไปที่ LINE Notify จะมีข้อความแสดงว่าได้ออก Token เรียบร้อยแล้ว ถึงขั้นตอนนี้เราก็เริ่มใช้บริการ LINE Notify ได้แล้ว





2.ติดตั้ง แพลตฟอร์ม ESP32 สำหรับ Arduino IDE

ลิงค์การติดตั้ง แพลตฟอร์ม ESP32

https://robotsiam.blogspot.com/2017/09/arduino-core-for-esp32.html




3.เชื่อมต่ออุปกรณ์


3.1 เชื่อมต่อ  ESP32  กับ PIR Motion Sensor Module






ภาพรวมการต่อวงจร 








4. อัพโหลดโปรแกรม


4.1 เชื่อมต่อสาย USB ระหว่าง คอมพิวเตอร์ กับ ESP32




4.2 
ตรวจสอบการติดตั้งไดร์เวอร์ ของ ชิปแปลง USB to UART เบอร์ CP2102 โดย คลิกขวา Computet -> Properties -> Device Manager

ที่ Ports (COM & LPT) จะพบ ไดร์เวอร์ ของชิป CP2102

ในตัวอย่างเป็น Silicon Labs CP210x USB to UART Bridge (COM18)






4.3 เปิดโปรแกรม Arduino (IDE) และ ก็อปปี้ โค้ดด้านล่างนี้ ไปวางไว้ในส่วนเขียนโปรแกรม




#include <WiFi.h>
#include <WiFiClientSecure.h>

//########## CONFIGURATION : MODIFY HERE ##########
char ssid[] = "YourNetworkName";  // เครือข่าย Wi-Fi ที่ต้องการเชื่อมต่อ
char pass[] = "YourPassword"; // รหัสผ่านเครือข่าย

//รหัสเชื่อมต่อ Line token
#define TokenLine "token" 

// ข้อความ ที่จะแสดงใน Line
String txt1 = "มีผู้บุกรุก!!! ที่อาคาร 5";  

//กำหนดขาที่เชื่อมต่อกับเซ็นเซอร์
byte sensorPin = 18;

void setup() {

  //กำหนดให้ขาดิจิตอล sensorPin รับข้อมูลจากเซ็นเซอร์
  pinMode(sensorPin, INPUT);

  //ตั้งค่าคอนโซล
  Serial.begin(115200);

  //เริ่มการเชื่อมต่อกับวายฟายแม่ข่าย
  WiFi.begin(ssid, pass);

  //แสดง "WiFi Connecting" ในคอนโซล
  Serial.print("WiFi Connecting");

  //ตรวจเช็คสถานะการเขื่อมต่อวายฟาย
  //ถ้าไม่สำเร็จให้แสดง "." ในคอนโซลจนกว่าจะเขื่อมต่อได้
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  //แสดงสถานะการวายฟายเชื่อมต่อแล้ว
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
}

void loop() {

  byte state = digitalRead(sensorPin);

  if (state == 1) {
    Serial.println("Somebody is in this area!");
    NotifyLine(txt1);
  }
  else if (state == 0) {
    Serial.println("No one!");
  }

  delay(5000);

}

void NotifyLine(String t) {
  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(TokenLine) + "\r\n";
  req += "Cache-Control: no-cache\r\n";
  req += "User-Agent: ESP32\r\n";
  req += "Content-Type: application/x-www-form-urlencoded\r\n";
  req += "Content-Length: " + String(String("message=" + t).length()) + "\r\n";
  req += "\r\n";
  req += "message=" + t;
  Serial.println(req);
  client.print(req);
  delay(20);
  Serial.println("-------------");
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      break;
    }
  } //while
} //loop



4.4 ก่อนการอัพโหลดต้องแก้ไขโค้ด ตรงตัวอักษรสีแดงให้ถูกต้องตาม เครือข่าย WiFi ที่เลือกใช้งาน โดย


char ssid[] = "YourNetworkName";  // เครือข่าย Wi-Fi ที่ต้องการเชื่อมต่อ

char pass[] = "YourPassword"; // รหัสผ่านเครือข่าย


และ token จากอีเมล ที่ระบบสร้าง มาให้ ตามหัวข้อ 1.4


#define TokenLine "token" // รหัสเชื่อมต่อ LINE token



ตรวจความถูกต้องแบบละเอียด เช่น...ตัวพิมพ์เล็ก , ตัวพิมพ์ใหญ่ อักขระต่างๆ ให้ถูกต้อง




4.5 ไปที่ Tools -> Board เลือก ESP32 Dev Module




4.6 ไปที่ Tools -> Port แล้วเลือกพอร์ตที่ปรากฏ (กรณีใช้เครื่องคอมพิวเตอร์ที่มี COM Port ให้เลือกตัวอื่นที่ไม่ใช่ COM1)

ในตัวอย่างเลือกเป็น "COM18"





4.7 กดปุ่ม   เพื่ออัพโหลด


ตั้งชื่อไฟล์ -> Save โปรแกรม จะทำการ อัพโหลด






4.8 หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า Done uploading. ที่แถบด้านล่าง




5. ตรวจสอบการเชื่อมต่อ WiFi ของ ESP32 


5.1 เปิดหน้าต่าง Serial Monitor  โดยไปที่ Tools > Serial Monitor





5.2 มุมขวาล่าง ของ Serial Monitor เลือก 115200 baud  คือ ตั้งค่าความเร็วในการรับ-ส่งข้อมูล  คือ 115200






5.4 กดที่ปุ่ม EN 1 ครั้ง เพื่อเริ่มการทำงาน ของ ESP32




5.5 รอจนกระทั่งที่ Serial Monitor แสดง "connected: IP"  ในตัวอย่างนี้คือ 
192.168.1.35 และ "No one!"

แสดงว่า WiFi ของ ESP 32  พร้อมทำงานแล้ว





6. ทดสอบการทํางาน


6.1 เมื่อ PIR Motion Sensor  ตรวจจับพบความเคลื่อนไหวของสิ่งมีชีวิต ที่ LINE Notify จะแสดงข้อความแจ้งเตือน "มีผู้บุกรุก!!! ที่อาคาร 5"






7. วีดีโอ ผลลัพล์การทำงาน







credit : https://medium.com/@visitwnk วิสิทธิ์ เวียงนาค

วันพุธที่ 17 กรกฎาคม พ.ศ. 2562

โปรเจค IoT ESP32 เปิดปิดไฟ ผ่าน Internet ด้วย App Blynk

โปรเจค นี้จะเป็นการนำ ESP32 ควบคุมการแสดงผล ปิดเปิด ไฟ LED ผ่านระบบเครือข่ายอินเทอร์เน็ต ได้ทั่วโลก ด้วยแอพ Blynk ที่สามารถเชื่อมต่ออุปกรณ์ Device ของเราเข้ากับ internet ได้อย่างง่ายดาย

Blynk Application เป็นโปรแกรมบนมือถือที่ทำให้เราสร้างหน้าต่างควบคุมหรือแสดงผลเชื่อมต่อกับพวกไมโครคอนโทรเลอร์ (Ardunio, ESP8266, ESP32) ได้ง่ายๆ และยังสามารถควบคุมผ่าน ทุกที่ ที่สามารถเชื่อมต่ออินเตอร์เน็ต  ได้อีกด้วย

IoT หรือ Internet of Things หรือเทคโนโลยีของ อุปกรณ์และเครื่องใช้ต่างๆ ที่จะทำงานโดยมีการเชื่อมโยงถึงกันผ่านทางเครือข่ายอินเทอร์เน็ต กำลังเป็นเทคโนโลยีที่ถูกพูดถึงมากขึ้นเรื่อยๆ เราได้เห็นทั้งฮาร์ดแวร์รุ่นใหม่ๆ มีการประกาศมาตรฐาน มีทั้งบริการและเครื่องมือชนิดใหม่ ออกมาให้ได้ติดตามกันอย่างต่อเนื่อง  และ ก็มีบริการที่น่าสนใจเป็นอย่างมาก โดยเจ้าบริการที่ว่านี้มีชื่อว่า Blynk

การควบคุมสั่งงาน จาก Blynk ก็คือ เมื่อเรากดสั่งงานจาก App Blynk , App Blynk จะเชื่อมต่อกับ เซิฟเวอร์ ของ Blynk ที่เชื่อมโยงกับเครือข่ายอินเทอร์เน็ต  ทำให้สามารถเชื่อมต่อมาที่ WiFi Router ของเรา แล้วจึงเชื่อมต่อไปสั่งงานให้ ESP32 Server ให้ทำงานตามคำสั่งที่ได้รับมาจาก App Blynk โดยมี กุญแจสำหรับเชื่อมต่อก็คือ Auth Token ที่ได้ที่มาจากการเริ่มสร้างโปรเจคใหม่ของ App Blynk นั่นเอง







### อุปกรณ์ที่ใช้ ###


1. PICO KIT V4 ESP32 Development Board WiFi + Bluetooth

2. Micro USB Cable Wire 1m for NodeMCU

3. Breadboard 830 Point MB-102

4. Traffic Light LED Display Module

5. Jumper (M2M) 10cm Male to Male



โดยการทำโปรเจคมีขั้นตอนดังนี้


1.ใช้สมาร์ทโฟน สร้างแอพ Blynk สำหรับ เปิดปิดไฟ ESP32

ลิงค์สร้างแอพ Blynk สำหรับ เปิดปิดไฟ ESP32


https://esp32robot.blogspot.com/2019/07/app-blynk.html


2.ติดตั้ง แพลตฟอร์ม ESP32 สำหรับ Arduino IDE

ลิงค์การติดตั้ง แพลตฟอร์ม ESP32

https://robotsiam.blogspot.com/2017/09/arduino-core-for-esp32.html



3.ติดตั้ง ไลบรารี่ Blynk สำหรับ Arduino IDE


3.1.1 ดาวน์โหลด ไลบรารี่ Blynk ได้ที่



https://github.com/blynkkk/blynk-library



3.1.2  คลิกที่ Clone or download






3.1.2  คลิกที่ Download ZIP





3.2 เปิด โปรแกรม Arduino IDE 






3.3 ไปที่ Skecth -> Include Library -> Add .ZIP Library...






3.4 ไปที่ ไลบรารี blynk-library-master.zip ที่เรา ดาวน์โหลด มา -> Open





3.5 ตรวจสอบที่ Skecth -> Include Library  จะพบ ไลบรารี Blynk เพิ่มเข้ามาใน Arduino IDE ของเรา









4.เชื่อมต่ออุปกรณ์



4.1 เชื่อมต่อ  ESP32  กับ Traffic Light LED Display Module





ภาพรวมการต่อวงจร 






5. อัพโหลดโปรแกรม


5.1 เชื่อมต่อสาย USB ระหว่าง คอมพิวเตอร์ กับ ESP32




5.2 
ตรวจสอบการติดตั้งไดร์เวอร์ ของ ชิปแปลง USB to UART เบอร์ CP2102 โดย คลิกขวา Computet -> Properties -> Device Manager

ที่ Ports (COM & LPT) จะพบ ไดร์เวอร์ ของชิป CP2102

ในตัวอย่างเป็น Silicon Labs CP210x USB to UART Bridge (COM18)






5.3 เปิดโปรแกรม Arduino (IDE) และ ก็อปปี้ โค้ดด้านล่างนี้ ไปวางไว้ในส่วนเขียนโปรแกรม





#define BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

char auth[] = "YourAuthToken";
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

void setup()
{

  Serial.begin(115200);

  Blynk.begin(auth, ssid, pass);
}

void loop()
{
  Blynk.run();
}



5.4 ก่อนการอัพโหลดต้องแก้ไขโค้ด ตรงตัวอักษรสีแดงให้ถูกต้องตาม Auth Token จากอีเมล และ  ตามเครือข่าย WiFi ที่เลือกใช้งาน โดย




char auth[] = "YourAuthToken";  // Auth Token จากอีเมล ในขั้นตอนการทำงาน ที่ 1
char ssid[] = "YourNetworkName";  // เครือข่าย Wi-Fi ที่ต้องการเชื่อมต่อ
char pass[] = "YourPassword";  // รหัสผ่านเครือข่าย


ตรวจความถูกต้องแบบละเอียด เช่น...ตัวพิมพ์เล็ก , ตัวพิมพ์ใหญ่ อักขระต่างๆ ให้ถูกต้อง




5.5 ไปที่ Tools -> Board เลือก ESP32 Dev Module




5.6 ไปที่ Tools -> Port แล้วเลือกพอร์ตที่ปรากฏ (กรณีใช้เครื่องคอมพิวเตอร์ที่มี COM Port ให้เลือกตัวอื่นที่ไม่ใช่ COM1)

ในตัวอย่างเลือกเป็น "COM18"





5.7 กดปุ่ม   เพื่ออัพโหลด


ตั้งชื่อไฟล์ -> Save โปรแกรม จะทำการ อัพโหลด





5.8 หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า Done uploading. ที่แถบด้านล่าง



6. ทดสอบการทํางาน



6.1 ใช้ สมาร์ทโฟน ที่เชื่อมต่อเครือข่าย อินเทอร์เน็ต เปิดแอพ Blynk สำหรับ เปิดปิดไฟ ESP32 ที่สร้างไว้ในขั้นตอนที่ 1



6.2  เลือกเครื่องหมาย สามเหลี่ยม ขวามือ






6.3 ทดลองควบคุม








7. วีดีโอ ผลลัพล์การทำงาน







...