Lab 13 ESP32 Line Notify

จุดประสงค์การเรียนรู้

สามารถรับส่งข้อมูลระหว่างESP32ผ่านApplication Lineได้


สาระการเรียนรู้

-


วิธีทำการทดลอง

ตอนที่ 1 การสมัครLine Notify

1. เข้าไปที่เว็บไซต์ : https://notify-bot.line.me/th/

2. เลือกเข้าสู่ระบบ

3. ทำการกรอก E-mail และรหัสผ่าน หลังจากนั้นกดที่ปุ่มLog in

4. หลังจากนั้นจะได้รับรหัสยืนยันมา ให้นำรหัสยืนยันนี้ไปกรอกในApplication LineในSmartphone

เพื่อทำการอนุญาตให้Line Notifyใช้งานผ่านDeviceของเราได้

5. ให้เลือกที่หัวลูกศรชี้ลง หลังจากนั้นให้เลือกที่ My page

6. เลือกGenerate token

7. ทำการตั้งชื่อLine Notify และเลือกกลุ่มที่ต้องการให้แจ้งเตือน หลังจากนั้นให้กดGenerate token

8. ก็จะได้Tokenมาดังภาพ นำเอาToken นี้ไปกรอกในCode Arduino IDE ที่จะกล่าวถึงในตอนที่2

ตอนที่ 2 Config ESP32 ในArduino IDE

วัสดุอุปกรณ์

1. ไมโครสวิตซ์ ชนิดกดติดปล่อยดับ จำนวน 1 ตัว

2. ตัวต้านทาน 10 กิโลโอห์ม จำนวน 1 ตัว

3. บอร์ด ESP32 Devkit V.1 จำนวน 1 บอร์ด

4. สายMicro USB จำนวน 1 เส้น

5. Breadboard

6. สายแพร Male-Male

7. หลอด LED จำนวน 3 หลอด

8. ตัวต้านทาน 220 โอห์ม จำนวน 3 ตัว

9. ตัวต้านทานปรับค่าได้ Potentiometer จำนวน 1 ตัว

10. ลำโพงBuzzer จำนวน 1 อัน

11. จอแสดงผล OLED I2C จำนวน 1 อัน

12. Servo Motor จำนวน 1 ตัว

13. โมดูลMb 102 Breadboard จำนวน 1 ตัว

14. Adaptor 9Vdc จำนวน 1 ตัว

15. ไดซ์มอเตอร์ TB6612 FNG จำนวน 1 ตัว

16. มอเตอร์กระแสตรง จำนวน 2 ตัว

1. หากทำการทดลอง Lab1-Lab10 แล้ว ไม่จำเป็นต้องต่ออะไรเพิ่มเติมอีก

2. ทำการCopy Codeด้านล่างก่อนUpload code Arduino IDE ลงไปใบนบอร์ด ESP32 Devkit v1 ควรแก้ไขดังนี้

ภาพตำแหน่ง Code ที่ต้องเปลี่ยน

ตัวอย่างCodeหลังจากที่เปลี่ยนแล้ว

หลังจากนั้นให้เข้ามาเลือกที่Tool -> Board -> ESP32 Arduino ->ESP32 Dev Module (ดังภาพประกอบด้านล่าง)

Arduino IDE Code

#include <WiFi.h>

#include <WiFiClientSecure.h>

#include <Wire.h>

#include <SPI.h>

#include <ESP32Servo.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 OLED(-1);


#define LINE_TOKEN "iPz1pCC1FmExh6fQXSKBtCQDNfIANFwuKiMm5RqByjQ" //Fill in the information Token Line Notify


#define WIFI_STA_NAME "BJHome2G" // Fill in the information SSID wifi

#define WIFI_STA_PASS "123456789" // Fill in the information Password Wifi


#define k_nob 35

#define LEDA 5

#define LEDB 19

#define LEDC 23

#define snd 18


bool LINE_Notify(String message) {

WiFiClientSecure client;


if (!client.connect("notify-api.line.me", 443)) {

Serial.println("connection failed");

return false;

}


String payload = "message=" + message;

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 += "User-Agent: ESP32\r\n";

req += "Content-Type: application/x-www-form-urlencoded\r\n";

req += "Content-Length: " + String(payload.length()) + "\r\n";

req += "\r\n";

req += payload;

// Serial.println(req);

client.print(req);


delay(20);


// Serial.println("-------------");

long timeOut = millis() + 30000;

while (client.connected() && timeOut > millis()) {

if (client.available()) {

String str = client.readString();

// Serial.print(str);

}

delay(10);

}

// Serial.println("-------------");


return timeOut > millis();

}


void setup() {

OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C);

Serial.begin(115200);

pinMode(LEDA, OUTPUT);

pinMode(LEDB, OUTPUT);

pinMode(LEDC, OUTPUT);

pinMode(k_nob, INPUT);


Serial.println();

Serial.println();

Serial.print("Connecting to ");

Serial.println(WIFI_STA_NAME);


WiFi.mode(WIFI_STA);

WiFi.begin(WIFI_STA_NAME, WIFI_STA_PASS);


while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

// digitalWrite(LED, !digitalRead(LED));

}


digitalWrite(LEDA, LOW);

digitalWrite(LEDB, LOW);

digitalWrite(LEDC, LOW);

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

tone(snd, 800, 50); tone(snd, 900, 50); tone(snd, 800, 50);

//////////// OLED Display //////////////////

OLED.clearDisplay();

OLED.setTextColor(WHITE, BLACK);

OLED.setCursor(0, 0);

OLED.setTextSize(1);

OLED.print("SSID:"); OLED.println(WIFI_STA_NAME);

OLED.print(" IP:"); OLED.println(WiFi.localIP());

OLED.print("....................");

OLED.display();

}


void loop() {

String text = "Hello ESP32"; // Message sent from Line Notify

int sensor = analogRead(k_nob); // value sensor

Serial.print("MSG : "); Serial.print("No Data"); Serial.print(" Value : "); Serial.println(sensor);


///////////// status LED////////////////////

digitalWrite(LEDA, LOW);

digitalWrite(LEDB, LOW);

digitalWrite(LEDC, LOW);

//////////// OLED Display //////////////////

OLED.clearDisplay();

OLED.setTextColor(WHITE, BLACK);

OLED.setCursor(0, 0);

OLED.setTextSize(1);

OLED.print(" SSID:"); OLED.println(WIFI_STA_NAME);

OLED.print(" IP:"); OLED.println(WiFi.localIP());

OLED.println("....................");

OLED.print("Value:"); OLED.println(sensor);

OLED.println("....................");

OLED.print("MSG : ");OLED.println("No Data");

OLED.println("....................");

OLED.display();

if (sensor > 2048) {

Serial.print("MSG : "); Serial.print(text); Serial.print(" Value : "); Serial.println(sensor);

///////////// status LED////////////////////

digitalWrite(LEDA, HIGH);

digitalWrite(LEDB, HIGH);

digitalWrite(LEDC, HIGH);

//////////// OLED Display //////////////////

OLED.clearDisplay();

OLED.setTextColor(WHITE, BLACK);

OLED.setCursor(0, 0);

OLED.setTextSize(1);

OLED.print(" SSID:"); OLED.println(WIFI_STA_NAME);

OLED.print(" IP:"); OLED.println(WiFi.localIP());

OLED.println("....................");

OLED.print("Value:"); OLED.println(sensor);

OLED.println("....................");

OLED.print("MSG : ");OLED.println(text);

OLED.println("....................");

OLED.display();

// LINE_Notify("msg");

// LINE_Notify(text);

String Sensor = String(sensor);

LINE_Notify(text +" ** value : " +Sensor);

delay(100);

}

}

3.หลังจากนั้นให้เข้ามาที่ Tool ->Port แล้วเลือกพอร์ตC om portที่เชื่อมกับUSB ดังรูปข้างล่าง

** กรณีใช้งานใน Ubuntu ก่อนกดUpload ให้ทำการเปิดTerminal โดยเข้าไปที่desktop คลิกขวาตรงพื้นที่ว่าง แล้วเลือก Open Terminal หลังจากนั้นให้พิมพ์ข้อความในTerminalดังนี้เพื่อทำการเปิดพอร์ตUSB : sudo chmod 666 /dev/ttyUSB0 หลังจากนั้นให้กดEnter และทำการกรอกรหัสผ่านของเครื่องพร้อมกับกดEnerอีกครั้ง หลังจากนั้นก็Upload codeในArduino IDE

4.ทำการกดปุ่มUpload ที่เป็นรูปหัวลูกษร หรือจะกด Ctrl+u ที่คีย์บอร์ดเพื่อทำการUploadโปรแกรมไปที่บอร์ดESP32 ดังรูปข้างล่าง

5.หลังจากที่Uploadโปรแกรมแล้วจะมีการแสดงผลชื่อ SSID หมายเลข IP ค่าที่รับมาจากเซนเซอร์ พร้อมทั้งข้อความที่ส่งไปที่ Line Notify ซึ่งทั้งหมดนี้จะแสดงผลในSerial Monitor และจอแสดงผล OLED

อ้างอิงจาก https://gist.githubusercontent.com/maxpromer/b9a626a4cf95045578206737e8b240df/raw/9a5ffb217c62731df2aefd5c0b418fdba87d6e93/MQTT_Light_Dimmer_ESP32.ino