ผู้เขียน หัวข้อ: งานครั้งที่ 45 [iot#20 Line Notify] การแจ้งเตือนผ่านโปรแกรมไลน์  (อ่าน 1163 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 516
    • ดูรายละเอียด
    • อีเมล์
งานครั้งที่ 45 [iot#20 Line Notify] การแจ้งเตือนผ่านโปรแกรมไลน์
การแจ้งเตือนผ่านโปรแกรมไลน์หรือที่เรียกว่า LINE Notify เป็นบริการของ LINE ที่ให้สามารถส่งข้อความ การแจ้งเตือนต่าง ๆ ไปยังบัญชีของผู้ใช้งานหรือกลุ่มต่าง ๆ ที่ผู้ใช้งานมีอยู่ งานด้าน iot สามารถใช้ประโยชน์ในส่วนนี้ได้โดยอาจให้แจ้งเตือนสิ่งต่าง ๆ ที่บอร์ด iot ตรวจพบ และการทดลองในงานนี้
มีส่วนที่ต้องส่งค่าอุณหภูมิและความชื้นขึ้นแจ้งผลผ่านโปรแกรมไลน์ซึ่งการเขียนโค้ดที่บอร์ดควบคุมจำเป็นต้องมีไลบรารี่สำหรับอ่านค่าจากโมดูลอ่านค่าอุณหภูมิและความชื้น ท่านใดยังไม่ได้ดำเนินการให้ศึกษาขั้นตอนได้ในงานครั้งที่ 8 การเขียนโปรแกรมอ่านค่าอุณหภูมิและความชื้นด้วย DHT11 เบื้องต้น

คอนเซ็ปต์หลักของงาน
บอร์ดส่งค่าที่เป็นข้อความหรือรูปภาพแจ้งเตือนผ่านโปรแกรมไลน์


ผู้ใช้งานต้องมีบัญชีโปรแกรมไลน์และได้ดำเนินการสร้าง User/Password ไว้สำหรับใช้งานโปรแกรมไลน์ผ่านคอมพิวเตอร์แล้ว

[ขั้นตอนการดำเนินการ]
-ออกรหัส Token ของแกรมไลน์
-นำรหัสมาใส่ในโค้ดโปรแกรม
-เขียนโค้ดเพื่อใช้งาน

ซึ่งรายละเอียดเป็นดังนี้
1. วงจรที่ใช้ทดลอง
   -กรณีที่ใช้ NodeMCU

   -กรณีที่ใช้ WeMOS D1 mini


2. ผลที่ต้องการในงานครั้งนี้


วิธีสร้าง Line Token
1. เริ่มขั้นตอนสร้างโปรเจค โดยเข้าไปที่ https://notify-bot.line.me/en/
   (1) ล็อกอินด้วยยูสเซอร์/พาสเวิร์ดที่ได้ลงทะเบียนไว้ในโปรแกรมไลน์ (หากยังไม่สร้างให้ไปดำเนินการสร้างก่อน)
   (2) คลิกที่ "หน้าของฉัน"


2. เลื่อนลงมาจนพบการออก Access Token แล้วคลิก "ออก Token"


3. ใส่รายละเอียด
   (1) ใส่ชื่อ Token ที่ต้องการให้แสดงเป็นชื่อนั้น ๆ
   (2) เลือกเป้าหมายการแจ้งเตือน โดยให้แจ้งเตือนเฉพาะไลน์ส่วนตัว หรือกลุ่มที่ผู้ใช้งานมีก็ได้
   (3) คลิก "ออก Token"


4. จะปรากฏหน้าต่างแสดงรหัส Token ทำการคลิกปุ่มคัดลอก

เมื่อคัดลอกแล้วให้หาที่วางรหัสไว้ก่อน หากไม่วางไว้จะต้องสร้างรหัสใหม่เนื่องจากระบบไม่มีการจำรหัสไว้ให้

ส่วนจัดการโค้ด
การใช้งานแจ้งเตือนผ่านโปรแกรมไลน์จำเป็นต้องใช้ไลบรารี่ช่วยงานโดยดำเนินการดังนี้

5. ดาวน์โหลดไลบรารี่โดยเข้าไปที่เวปไซต์ https://github.com/TridentTD/TridentTD_LineNotify แล้วคลิกดาวน์โหลดตามลำดับ


6. ทำการติดตั้งไลบรารี่ที่ดาวน์โหลดมา ดำเนินการดังรูป


7. เปิดไฟล์ตัวอย่าง "LineNotify" ดังรูป


8. แก้ไขค่า
   (1) User / Password ของไวไฟที่จะให้บอร์ด iot จับสัญญาณ
   (2) รหัส Token ที่ได้จากขั้นตอนที่ 4


9. ฟังก์ชั่นต่าง ๆ ที่มีให้ใช้งาน
   *สติกเกอร์ไอดีสามารถดูได้จากไฟล์ https://devdocs.line.me/files/sticker_list.pdf


10. ทำการบันทึกไฟล์ไว้ในตำแหน่งอื่น (Save as) ก่อนการอัพโหลด เพื่อให้การแสดงผลภาษาไทยได้ถูกต้อง
   (1) ผลการรันจากการอัพโหลดที่ไม่ได้บันทึกไฟล์ในตำแหน่งใหม (ภาษาไทยไม่ถูกต้อง)
   (2) ผลการรันจากการอัพโหลดที่บันทึกไฟล์ในตำแหน่งใหม่ (ภาษาไทยถูกต้อง)


ตัวอย่างโปรแกรมแจ้งเตือนอุณหภูมิ
11. แปลงค่าตัวเลขเป็นสตริงก่อนส่งค่า


โค้ดโปรแกรม
โค๊ด: [Select]
#include <TridentTD_LineNotify.h>
#include <DHT.h>
#define DHTPIN D1         //pin connect DHT
#define DHTTYPE DHT11     //DHT11, DHT22 type of Sensor
#define SSID        "--------------------"
#define PASSWORD    "--------------------"
#define LINE_TOKEN  "--------------------"

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200); Serial.println();
  Serial.println(LINE.getVersion());
  WiFi.begin(SSID, PASSWORD);
  Serial.printf("WiFi connecting to %s\n",  SSID);
  while(WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(400); }
  Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP()); 
  LINE.setToken(LINE_TOKEN);  // กำหนด Line Token
  dht.begin();
}
void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  int adc=analogRead(A0);
  if (isnan(t) || isnan(h))
  {
    Serial.println("Error reading DHT!");
    delay(1000);
    return;   
  }
  else
  {
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print("\t");
    Serial.print("Temp: ");
    Serial.println(t);
    Serial.println("...............................");   
    LINE.notify("อุณหภูมิขณะนี้ "+String(t)+" องศา");
    LINE.notify("ความชื้นขณะนี้ "+String(h)+" %");     
  }
  delay(60000);
}
ทดสอบการทำงาน
12. หลังจากการ upload โค้ด สังเกตผลการแจ้งเตือนที่โปรแกรมไลน์


ตัวอย่างโปรแกรมแจ้งเตือนบุกรุก
13. ใช้สวิตช์แทนเซนเซอร์ตรวจจับ โดยให้การอินเตอร์รัพท์สำหรับการตรวจสอบเซนเซอร์
*ฟังก์ชั่น LINE.notify() ไม่สามารถใส่ไว้ในโปรแกรมตอบสนองการอินเตอร์รัพท์ได้ (ภายในโปรแกรมตอบสนองการอินเตอร์รัพท์ควรใช้ฟังก์ชั่นการทำงานที่น้อยที่สุด)

โค้ดโปรแกรม
โค๊ด: [Select]
#include <TridentTD_LineNotify.h>
#define sensor1 D5 
#define sensor2 D6
#define LED1 D7
#define LED2 D8
#define SSID        "--------------------"
#define PASSWORD    "--------------------"
#define LINE_TOKEN  "--------------------"

int i;
void setup() {
  Serial.begin(115200); Serial.println();
  Serial.println(LINE.getVersion());
  WiFi.begin(SSID, PASSWORD);
  Serial.printf("WiFi connecting to %s\n",  SSID);
  while(WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(400); }
  Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());
  pinMode(LED1,OUTPUT); 
  pinMode(LED2,OUTPUT);
  pinMode(sensor1,INPUT_PULLUP); 
  pinMode(sensor2,INPUT_PULLUP);
  LINE.setToken(LINE_TOKEN); 
  LINE.notify("System Start Ready"); 
  attachInterrupt(digitalPinToInterrupt(sensor1), Alarm1, FALLING);
  attachInterrupt(digitalPinToInterrupt(sensor2), Alarm2, FALLING); 
}
void loop() {
  if(digitalRead(LED1)==HIGH){
    LINE.notify("พบการบุกรุกจุดที่ 1");
    Serial.println("พบการบุกรุกจุดที่ 1");
    for(i=1000;i>0;i--){
      delay(5);
    }
    digitalWrite(LED1,LOW);   
  }
  if(digitalRead(LED2)==HIGH){
    LINE.notify("พบการบุกรุกจุดที่ 2"); 
    Serial.println("พบการบุกรุกจุดที่ 2");
    for(i=1000;i>0;i--){
      delay(5);
    }
    digitalWrite(LED2,LOW);       
  }     
}
void Alarm1() {
    digitalWrite(LED1,HIGH);
    i=0;
}
void Alarm2() {
    digitalWrite(LED2,HIGH);
    i=0;
}
ทดสอบการทำงาน
13. หลังจากการ upload โค้ด สังเกตผลการแจ้งเตือนที่โปรแกรมไลน์
« แก้ไขครั้งสุดท้าย: พฤษภาคม 06, 2018, 01:13:31 PM โดย admin »