但當初有藉由 IFTTT 作為中間的媒介,也就是說我們發送訊息需要先傳送到 IFTTT ,再讓他轉傳到 Line 上面,如此一來較不即時也比較不彈性
事實上 Line 是可以藉由發送 Https 之 POST request 的方式直接發送訊息的
網路上常見的 NodeMCU 範例都是用 WifiClient 這個函式庫
而這個函式庫是不能用來發送 Https 的,僅可以發送 Http
以下程式碼為實作 NodeMCU 直接由 LineToken 發送訊息到 Line 上面
首先你還是需要先至 LineNotify 申請一個群組的 Token ,才能讓 Line Notify 這個 BOT 幫你發送訊息
如何申請 Line Notify 的群組 Token ? 很簡單!!
先到這裡登陸你的 Line 帳號
接著點選個人頁面,如下圖
接著點選發行權杖,並選擇你要發送的群組
打開手機版的 Line ,並把 Line Notify 機器人邀請進入該群組
到桌面開啟一個新的資料夾(名稱隨意,最好是英文的, Ex : LineNotifyPractice )
到這裡下載 Library 後,解壓縮後放進去,然後壓縮檔就可以刪了
接著打開一個空白的 Arduino 文件,並使用以下程式碼 (程式碼中已交代的很清楚該如何修改了)
#include "ESP8266WiFi.h"
#include "WiFiClientSecure.h"
void wifiConnect(const char* SSID,const char* PASSWORD);
void sendMessage(const char* token, const char* message);
const char* SSID = "改為你家的 Wifi 帳號";
const char* PASSWORD = " WiFi 密碼";
String Linetoken = " 你在 Line Notify 得到的群組 token(權杖) ";
void setup() {
Serial.begin(115200);
wifiConnect(SSID, PASSWORD);
}
void loop() {
int number = 55688;
String MESSAGE = "測試字串" + '\n' + String(number);
sendMessage(Linetoken, MESSAGE);
delay(5000);
}
void wifiConnect(const char* SSID,const char* PASSWORD){
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
// Attempt to connect to Wifi network:
Serial.print("Connecting Wifi: ");
Serial.println(SSID);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
IPAddress ip = WiFi.localIP();
Serial.println(ip);
}
void sendMessage(String token, String message) {
WiFiClientSecure client;
String host = "notify-api.line.me";
if (client.connect(host,443)) {
Serial.print("Host : "); Serial.println(host); Serial.println();
Serial.print("message="); Serial.println(message);
int LEN = message.length();
Serial.print("message.length()="); Serial.println(LEN);
/* Post url */
String url = "/api/notify";
client.println("POST " + url + " HTTP/1.1");
/* Headers */
client.print("Host: "); client.println(host); /* Header (Host) */
client.println("Connection: close");
client.println("User-Agent: ESP8266/1.0"); //optional
client.print("Authorization: Bearer "); client.println(token);
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: "); client.println( String((LEN+8)) );
client.println(); //end of the headers
/* Body */
client.print("message="); client.println(message);
client.println();
delay(50);
String response = "";
response = client.readString();
Serial.println(response);
}
else{
Serial.println("connected fail");
}
}
將改好的程式碼儲存到剛剛桌面的資料夾中 ( LineNotifyPractice )
最後拿出你的 NodeMCU 燒錄進去即可 ( 或 WeMos D1 等 ESP8266 系列的開發版 )
我將定期推出程式語言的新手教學影片