ESPIno32CAM : Line Notify

ESPIno32CAM : Line Notify

ตัวอย่างการใช้งาน ESPIno32CAM ส่งข้อ ,สติ๊กเกอร์ และ ภาพถ่าย ไปแจ้งเตือนยัง Line Notify

วิธีขอ Token เพื่อใช้งาน Line Notify

1 สมัครหรือสร้างบัญชี Line ของเรา (สำหรับผู้ที่ยังไม่เคยใช้งาน Application Line)

2 เข้าไปยัง Website : https://notify-bot.line.me

3 Login เข้าใช้งาน

4  คลิกที่ชื่อ User ของเราและเลือก My page

5 คลิกที่ Generate token

6 ตั้งชื่อ Notification ของเรา เลือกผูกการแจ้งเตือนไปยัง Line ID ของเรา หรือเลือกให้แจ้งเตือนไปยัง Group Line ของเรา จากนั้นคลิก Generate token 

7 Line Notify จะสร้าง Token สำหรับให้เรานำไปใช้งาน ซึ่งผู้ใช้งานจะต้องนำค่า Token นี้ไปใช้ในการเขียนโปรแกรมด้วย

เริ่มต้นการทดลอง

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

– เปิดตัวอย่าง File > Example >ESPIno32CAM > Ex_Line_Notify

-ตั้งค่า Arduino IDE ให้ใช้งานกับ ESPIno32CAM (Link)

-ตั้งค่า SSID , password ของ Access point ที่ต้องการให้ ESPIno32CAM เชื่อมต่อ Internet

-ใส่  Token ที่ได้จากหัวข้อ  “วิธีขอ Token เพื่อใช้งาน Line Notify” ในข้างต้น

– Upload Program ลงไปยัง ESPIno32CAM

– เปิด Serial Monitor

– ตั้งค่า Baudrate = 115200

– เมื่อเริ่มทำงาน ESPIno32CAM จะเชื่อมต่อไปยัง Access point ที่ตั้งค่าไว้ รอจนเชื่อมต่อสำเร็จ

– กด Button Program

– โปรแกรมจะทำการถ่ายรูป แล้วส่งข้อความ , สติ๊กเกอร์ และ รูปภาพไปแจ้งเตือนยัง Line Notify

คำอธิบาย Code Program

#include "ESPino32CAM.h"
#include "ESPino32CAM_LineNotify.h"
const char* ssid     = ""; 
const char* password = "";
String token = "";
ESPino32CAM cam;
LineNotify line;
#define Button 0
void setup() {
  Serial.begin(115200);
  Serial.println("\r\nESPino32CAM");
  if (cam.init() != ESP_OK)
  {
    cam.printDebug(F("Init Fail"));
    while (1);
  }
  sensor_t *s = cam.sensor();
  s->set_framesize(s, FRAMESIZE_VGA);
  s->set_whitebal(s,true);
  Serial.print("Attempting to connect to SSID: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("\r\nConnected");
  line.authenKey(token);
  line.setUTC(7);
}
void loop()
{
  camera_fb_t *fb;
  String msg;
  if(!digitalRead(Button))
  {
    lineResp ret;
    msg = "ทดสอบ ส่งข้อความ สติ๊กเกอร์ และ รูปภาพจากกล้อง ESPIno32CAM";
    Serial.println("Send Message,Sticker and Image: "+msg);
    Serial.println("Capture");
    fb = cam.capture();
    ret = line.send(msg,4,275,fb->buf, fb->len);
    cam.clearMemory(fb);
    if(ret.status)
    {
      Serial.printf("API Called %d/%d per hour\r\n",ret.remaining,ret.limit);
      Serial.printf("Send Image %d/%d per hour\r\n",ret.imageremaining,ret.imagelimit);
      Serial.printf("The time when the limit is reset %d(UTC epoch seconds) , ",ret.reset);
      Serial.println(ret.reset_time);
    }
    else
      Serial.println(ret.response);
   Serial.println();
  } 
}

บรรทัดที่ 1: ประกาศใช้ Library ESPIno32CAM 

บรรทัดที่ 2: ประกาศใช้ Library ESPino32CAM_LineNotify

บรรทัดที่ 3: ใส่ชื่อ SSID ของ Access piont ที่ต้องการเชื่อมต่อ

บรรทัดที่ 4: ใส่ชื่อ password ของ Access piont ที่ต้องการเชื่อมต่อ

บรรทัดที่ 5:  ใส่ Token ที่ได้จากการ generate token

บรรทัดที่ 6: สร้าง Object cam

บรรทัดที่ 7: สร้าง Object line

บรรทัดที่ 8:  กำหนดให้ BUTTON = IO 0

บรรทัดที่ 12: Initial โมดูลกล้อง

บรรทัดที่ 18: กำหนดให้ถ่ายภาพขนาด VGA (640×480 Pixel)

บรรทัดที่ 19: เปิดใช้ white balance

บรรทัดที่ 22: เชื่อมต่อ WiFi

บรรทัดที่ 23-27: รอจนเชื่อมต่อ WiFi สำเร็จ

บรรทัดที่ 29: กำหนดค่า Toket 

บรรทัดที่ 30: ตั้ง Time zone เป็น UTC+7

บรรทัดที่ 36: ตรวจเช็คว่ามีการกด Button Program หรือไม่

บรรทัดที่ 38: ประกาศตัวแปร lineResp สำหรับรอรับ Status การส่งข้อมูลไปยัง Line Notify

บรรทัดที่ 39: กำหนดข้อความที่ต้องการส่ง Message

บรรทัดที่ 42: ถ่ายรูปแล้วเก็บ JPG File ยัง fb

บรรทัดที่ 43: ส่ง ข้อความ , หมายเลข stickerPacketID , stickerID , รูปภาพ , ขนาดรูปภาพ และ return สถานะการส่งข้อมูล ออกมาเก็บมที่ ตัวแปร lineResp ret

บรรทัดที่ 44: คืนค่า Memory fb 

บรรทัดที่ 45: ตรวจสอบ ret.status มีค่าเป็น True หมายถึงสามารถส่ง Line Notify ได้สำเร็จ

บรรทัดที่ 47-50 แสดงผล ที่ line Notify ตอบกลับมา 
เช่น
API Called 997/1000 per hour    // ใน 1 ชั่วโมงเรียกใช้ Line API ไปแล้ว 997 ครั้ง จากทั้งหมด 1000 ครั้ง   
Send Image 47/50 per hour         // ใน 1 ชั่วโมง ส่งรูปภาพไปแล้ว 47 ครั้ง จากทั้งหมด 50 ครั้ง
The time when the limit is reset 1561998440(UTC epoch seconds) , 23:27:20 // Server จะ Reset จำนวนนับกลับไปเป็น 0 เวลา 23:27:20

บรรทัดที่ 53 แสดงข้อความที่ Server ตอบกลับในกรณีที่ไม่สามารถส่งข้อมูลได้
เช่น {“status”:400,”message”:”Image rate limit exceeded.”} // ส่งรูปภาพมากกว่า 50 ครั้ง ใน 1 ชั่วโมง