物聯網_Wifi篇 瓦斯偵測上傳至Line
物聯網_Wifi篇 瓦斯偵測上傳至Line
瓦斯帶給人們便利的生活,但也是很危險的用具。瓦斯偵測器產品眾多,但若能在第一時間傳送數據
給Line群組,對很多憾事是可避免。
給Line群組,對很多憾事是可避免。
本系統是由WeMos觸發Line Notify,Line Notify 再傳送訊息給Line群組,無需再透過 ifttt去觸發。
1.組成元件介紹
Wifi晶片:WeMos D1 Mini
瓦斯偵測:MQ-2
接收載具:手機+Line
使用WeMos D1 Mini 的目的是它很小,微型化就等於可商品化,且開發容易。
瓦斯偵測器使用MQ-2,它本身是一電熱絲架構,若有可燃氣體在附近,會讓電熱絲更熱,
造成溫度上升而使感測器的數值產生變化,而MQ-2可偵測的瓦斯濃度約 300 ppm~1000 ppm。
造成溫度上升而使感測器的數值產生變化,而MQ-2可偵測的瓦斯濃度約 300 ppm~1000 ppm。
使用Line是因它具有即時性,瓦斯外漏是何等大的事,因此正常的時侯約30分鐘(可自訂)
傳送一次數值給Line群組,告訴大家我還活著。
但若偵測到瓦斯外漏時,則程式會每秒(可自訂)傳送訊息到Line群組,通知群組的人趕快應變。
傳送一次數值給Line群組,告訴大家我還活著。
但若偵測到瓦斯外漏時,則程式會每秒(可自訂)傳送訊息到Line群組,通知群組的人趕快應變。
一、電路圖、成品圖
MQ-2模組有4pin:Vcc、Gnd、DO、AO,DO為數位輸出,AO為類比輸出,我是使用AO
二、Line設定
因 WeMos無法直接傳送至Line,因此需透過第三方軟體(Line notify)做中介。
WeMos傳送數據給 Line notify,Line notify 再將訊息傳送給Line中的群組。
點選左上角的 登入
輸入Line的帳密,就可登入
登入後,點選 個人頁面
在Line中建立一群組 「萬能工商_IoT」,準備跟 Line Notify 連動。
在Line Notify中建立 發行權杖,其實就是建立連動帳號的通行碼
1.權杖名稱:Line接收到信號時會看到是由 WNVS_瓦斯偵測 傳送來的
2.選擇接收的通知的聊天室(群組),預設是Line Notify這一對一的帳號,但我是用群組「萬能工商_IoT」群組,
方便日後多人加入。
方便日後多人加入。
此發行的權杖只會出現一次,請務必用複製貼在其它地方。且每重建一次,它的序號(權杖)就會不同。
看到Line Notify已產生一連動服務
而此時的Line 會有一新的帳號LINE Notify產生,它告訴你將連動「萬能工商_IoT」帳號。
一般 100 ppm以下為正常背景值,超過200ppm就表示有瓦斯外漏
三、WeMos D1 Mini程式開發
WeMos D1 Mini等同於 Arduino+ESP-8266,具有11隻I/O腳位,及wifii功能
=
|
+
|
WeMos D1 Mini的wifi可設定成三種工作模式:STA、AP、STA+AP
在此我們設定成STA模式。
WeMos D1 Mini架構同ESP-8266,因此可用Arduino IDE 來開發
(1)設定 Arduino IDE
啟動Arduino IDE會發現並不支援ESP-8266家族晶片
如何增加硬體項目,進入檔案/偏好設定
後再按確定
點選開發板管理員
1:輸入8266,等一會會出現2、3,做完2丶3就等一段時間就裝好了,前題對外網路一定要能通
裝好了就是設定板子類型,原則上所有具有開發板的ESP-8266家族的晶片都可以設定:
NodeMcu 1.0(ESP-12E Module)
NodeMcu 1.0(ESP-12E Module)
上傳速率預設是用115200,請設為最高921600,不用擔心太快,若用115200燒4M 的Flash,會等到天荒地老的。
其中序列埠也記得要設定,記得除了Com1、Com2都不是,其它的就是。
其中序列埠也記得要設定,記得除了Com1、Com2都不是,其它的就是。
程式
#include <ESP8266WiFi.h>
#include <WiFiClientSecureAxTLS.h>
#define WIFI_SSID "Wifi 主機"
#define WIFI_PASSWORD "Wifi 密碼"
#define LINE_TOKEN "vE44bevN05Kb3ZchEfEwvArpDTH9J4MfStlW0XKljHl"
String msg;
int gas;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("連線中");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.print("\n 分配到 IP: ");
Serial.println(WiFi.localIP());
}
void loop(){
WiFiClientSecure client;
for(int i=0;i<60;i++){
gas= analogRead(A0);
delay(1000);
msg = "正常\n偵測到瓦斯值為:";
if( gas > 200){
msg ="危險\n瓦斯外漏值為:";
break;
}
}
msg += String(gas) + " ppm";
if (!client.connect("notify-api.line.me", 443)) {
Serial.println("連線失敗!!!");
return;
}
String 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 += "Cache-Control: no-cache\r\n";
req += "User-Agent: ESP8266\r\n";
req += "Connection: close\r\n";
req += "Content-Type: application/x-www-form-urlencoded\r\n";
req += "Content-Length: " + String(String("message=" + msg).length()) + "\r\n";
req += "\r\n";
req += "message=" + msg + gas;
client.print(req);
while(client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r")
break;
}
}
|
你好
回覆刪除請問 如果用at command 方式下給esp8266時
req內容如何下?
這是我要用esp8266打出去的內容
POST /api/notify HTTP/1.1\r\n
Host: notify-api.line.me\r\n
Authorization: Bearer TOcLHNPX8IE0mMEukIgjJnqTirrfrKmFPOoax1vyGyW\r\n
Cache-Control: no-cache\r\n
User-Agent: test_notify\r\n
Connection: close\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 5\r\n
\r\n
message=hello
打出去前 先發AT+CIPSEND=內容長度.出現 >
把上述內容複製過去
剛出現 如下錯誤
Recv 245 bytes
CLOSED
SEND FAIL
故發出去的內容正確格式是什麼?
謝謝
你好 WiFi模式使用AP模式可行嗎
回覆刪除STA工作站該如何設置
上傳跑一下之後
回覆刪除最後只出現
Leaving...
Hard resetting via RTS pin...
該如何解決
執行後不斷顯示無法連接,可能是什麼問題
回覆刪除