物聯網_Wifi篇 瓦斯偵測上傳至Line

物聯網_Wifi篇  瓦斯偵測上傳至Line


瓦斯帶給人們便利的生活,但也是很危險的用具。瓦斯偵測器產品眾多,但若能在第一時間傳送數據
給Line群組,對很多憾事是可避免。
本系統是由WeMos觸發Line Notify,Line Notify 再傳送訊息給Line群組,無需再透過 ifttt去觸發。


1.組成元件介紹
Wifi晶片:WeMos D1 Mini
瓦斯偵測:MQ-2
接收載具:手機+Line


   


使用WeMos D1 Mini 的目的是它很小,微型化就等於可商品化,且開發容易。
若還不知如何使用請參考:物聯網_Wifi篇 WeMos D1 Mini 設定


瓦斯偵測器使用MQ-2,它本身是一電熱絲架構,若有可燃氣體在附近,會讓電熱絲更熱,
造成溫度上升而使感測器的數值產生變化,而MQ-2可偵測的瓦斯濃度約 300 ppm~1000 ppm。


使用Line是因它具有即時性,瓦斯外漏是何等大的事,因此正常的時侯約30分鐘(可自訂)
傳送一次數值給Line群組,告訴大家我還活著。
但若偵測到瓦斯外漏時,則程式會每秒(可自訂)傳送訊息到Line群組,通知群組的人趕快應變。



一、電路圖、成品圖

 


 
MQ-2模組有4pin:Vcc、Gnd、DO、AO,DO為數位輸出,AO為類比輸出,我是使用AO




二、Line設定
WeMos無法直接傳送至Line,因此需透過第三方軟體(Line notify)做中介。
WeMos傳送數據給 Line notify,Line notify 再將訊息傳送給Line中的群組。

Line Notify 網站:https://notify-bot.line.me/zh_TW/
點選左上角的 登入

輸入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)


上傳速率預設是用115200,請設為最高921600,不用擔心太快,若用115200燒4M 的Flash,會等到天荒地老的。
其中序列埠也記得要設定,記得除了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;
 }   
}

留言

  1. 你好
    請問 如果用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

    故發出去的內容正確格式是什麼?
    謝謝

    回覆刪除
  2. 你好 WiFi模式使用AP模式可行嗎
    STA工作站該如何設置

    回覆刪除
  3. 上傳跑一下之後
    最後只出現
    Leaving...
    Hard resetting via RTS pin...
    該如何解決

    回覆刪除
  4. 執行後不斷顯示無法連接,可能是什麼問題

    回覆刪除

張貼留言

這個網誌中的熱門文章

物聯網_Wifi篇 WeMos D1 Mini 設定

物聯網晶片ESP-12S(一)設定篇