« เมื่อ: พฤษภาคม 03, 2018, 12:01:47 PM »
งานครั้งที่ 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. แปลงค่าตัวเลขเป็นสตริงก่อนส่งค่า
โค้ดโปรแกรม
#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() ไม่สามารถใส่ไว้ในโปรแกรมตอบสนองการอินเตอร์รัพท์ได้ (ภายในโปรแกรมตอบสนองการอินเตอร์รัพท์ควรใช้ฟังก์ชั่นการทำงานที่น้อยที่สุด)
โค้ดโปรแกรม
#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);
}
}
}
ICACHE_RAM_ATTR void Alarm1() {
digitalWrite(LED1,HIGH);
i=0;
}
}
ICACHE_RAM_ATTR void Alarm2() {
digitalWrite(LED2,HIGH);
i=0;
}
ทดสอบการทำงาน
13. หลังจากการ upload โค้ด สังเกตผลการแจ้งเตือนที่โปรแกรมไลน์
รหัสสติกเกอร์
« แก้ไขครั้งสุดท้าย: สิงหาคม 26, 2022, 10:31:33 AM โดย admin »
บันทึกการเข้า