創作內容

9 GP

ESP8266發送當前溫溼度數值到 LINE通知

作者:貓貓風 ฅ●ω●ฅ│2022-11-15 15:45:14│巴幣:18│人氣:1228
.












先用LINE帳號登入 LINE NOTIFY頁面


接著點選個人頁面 -> 發行權杖


然後選擇要發行權杖的群組







按發行後會跳出 金鑰 ,將金鑰複製起來,後面寫程式會用到


資料傳遞通訊協定 (新增 設定取得數值間隔封包格式)


接著撰寫 ESP8266端的程式   此段程式主要用來將從MEGA2560收到的資料上傳至LINE


  1. #include <ESP8266WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <TridentTD_LineNotify.h>
  4. #include <SoftwareSerial.h>
  5. #define LINE_TOKEN "剛剛發行權杖複製的TOKEN"
  6. // Set WiFi credentials
  7. #define WIFI_SSID "SSID"
  8. #define WIFI_PASS "PWD"
  9. unsigned long cal_time;
  10. float H;
  11. float T;
  12. const byte rxPin = 4;
  13. const byte txPin = 5;
  14. String send_packet = "";
  15. String rev_H = "";
  16. String rev_T = "";
  17. SoftwareSerial Ext_Serial (rxPin, txPin);
  18. void setup(){
  19.   Ext_Serial.begin(9600);
  20.   Serial.begin(9600);
  21. // 進行無線網路連接
  22.   WiFi.mode(WIFI_STA);
  23.   WiFi.begin(WIFI_SSID, WIFI_PASS);
  24. //等待無線網路連接
  25.   while (WiFi.status() != WL_CONNECTED)
  26.   {
  27.     delay(100);
  28.     Serial.print(".");
  29.   }
  30.   Serial.print("Connected to ");
  31.   Serial.println(WIFI_SSID);
  32.   Serial.print("IP address: ");
  33.   Serial.println(WiFi.localIP());
  34.   LINE.setToken(LINE_TOKEN); //設定Line Token權杖
  35.   LINE.notify("welcome to HT Monitor Server"); //發送訊息到Line上面
  36.   cal_time = millis();
  37. }
  38. int rev_idx = 0;
  39. byte rev_packet[10];
  40. int rev_count = 0;
  41. int data_interval = 1000;
  42. void loop() {
  43.     while(Ext_Serial.available())
  44.     {
  45.        byte rev_data = Ext_Serial.read();
  46.        rev_packet[rev_idx] = rev_data;
  47.         //Serial.println(rev_idx);
  48.        rev_idx ++;
  49.        if((char)rev_data == '\r' || rev_idx>= 10)
  50.        {
  51.           byte byteArray[10];
  52.           String decode_String = String((char*)rev_packet);
  53.           Serial.println(decode_String);
  54.           if((char)rev_packet[1] =='F' && (char)rev_packet[2] =='F')
  55.           {
  56.               rev_H = "";
  57.               
  58.               rev_H +=decode_String.substring(3,4);
  59.               rev_H +=decode_String.substring(4,5);
  60.               rev_H +=decode_String.substring(5,6);
  61.               rev_H +=decode_String.substring(6,7);
  62.               rev_H +=decode_String.substring(7,8);
  63.               rev_count++;
  64.           }
  65.           else if((char)rev_packet[1] =='F' && (char)rev_packet[2] =='E')
  66.           {
  67.               rev_T = "";
  68.               rev_T +=decode_String.substring(3,4);
  69.               rev_T +=decode_String.substring(4,5);
  70.               rev_T +=decode_String.substring(5,6);
  71.               rev_T +=decode_String.substring(6,7);
  72.               rev_T +=decode_String.substring(7,8);
  73.               rev_count++;
  74.           }
  75.           else if((char)rev_packet[1] =='E' && (char)rev_packet[2] =='1')
  76.           {
  77.               String rev_interval = "";
  78.               Serial.println(decode_String.substring(3,4)+decode_String.substring(4,5));
  79.               rev_interval += decode_String.substring(3,4);
  80.               rev_interval += decode_String.substring(4,5);
  81.               LINE.notify(String()+"設定每"+rev_interval+"秒送一次資料");
  82.               //發送訊息到Line
  83.               data_interval = 1000 * rev_interval.toInt();
  84.           }
  85.           if(rev_count >= 2)
  86.           {
  87.             rev_count = 0;
  88.             LINE.notify(String()+"室內濕度: "+rev_H+"% 室內溫度:"+ rev_T + " 度");
  89.             //發送訊息到Line
  90.           }
  91.           rev_idx = 0;
  92.        }       
  93.     }
  94.     if(millis() - cal_time > data_interval)
  95.     {
  96.       cal_time = millis();
  97.       Serial.println("Read HT");
  98.       String send_packet = "s00GAIS00\r";
  99.       byte packet[send_packet.length()];
  100.       send_packet.getBytes(packet, 10);
  101.       Ext_Serial.write(packet,10);
  102.     }
  103. }

MEGA2560 此區塊程式用來取得硬體Sensor數值並依照ESP8266指令做對應動作

  1. int rev_idx = 0;
  2. byte rev_packet[10];
  3. unsigned long cal_time;
  4. float H;
  5. float T;
  6. void setup() {
  7.   // put your setup code here, to run once:
  8.   Serial.begin(9600);
  9.   Serial3.begin(9600);
  10.   pinMode(A15,INPUT);
  11.   pinMode(A14,INPUT);
  12.   cal_time = millis();
  13. }
  14. void loop() {
  15.   // put your main code here, to run repeatedly:
  16.   if(Serial.available())
  17.     {
  18.       String read_interval = Serial.readString(); //只能輸入兩位數
  19.       //Serial.println(read_interval);
  20.       String send_packet = String()+"sE1"+read_interval+"0000\r";
  21.       byte packet[send_packet.length()];
  22.       send_packet.getBytes(packet, 10);
  23.       Serial3.write(packet,10);
  24.     }
  25.     if(millis() - cal_time > 1000)
  26.     {
  27.       cal_time = millis();
  28.       int read_h = analogRead(A15);
  29.       int read_t = analogRead(A14);
  30.       float voltage_h = read_h * (5.0 / 1023.0);
  31.       float voltage_t = read_t * (5.0 / 1023.0);
  32.       H = (voltage_h-1)/4*100;
  33.       T = (voltage_t-1)/4*100;
  34.       Serial.println(H);
  35.       Serial.println(T);
  36.     }

  37.     if(Serial3.available())
  38.     {
  39.        byte rev_data = Serial3.read();
  40.        rev_packet[rev_idx] = rev_data;
  41.        rev_idx ++;
  42.        if((char)rev_data == '\r' || rev_idx>= 10)
  43.        {
  44.           byte byteArray[10];
  45.           String decode_String = String((char*)rev_packet);
  46.           Serial.println(decode_String);
  47.         
  48.           if((char)rev_packet[3] =='G' && (char)rev_packet[4] =='A' &&
  49.           (char)rev_packet[5] =='I' && (char)rev_packet[6] =='S')
  50.           {
  51.               String send_packet = String()+"sFF"+H+"0\r";
  52.               byte packet[send_packet.length()];
  53.               send_packet.getBytes(packet, 10);
  54.               Serial3.write(packet,10);
  55.               delay(1000);
  56.               
  57.               send_packet = String()+"sFE"+T+"0\r";
  58.               send_packet.getBytes(packet, 10);
  59.               Serial3.write(packet,10);
  60.           }
  61.           rev_idx = 0;
  62.        }
  63.     }
  64. }


執行結果

預設為每1秒上報Sensor數值到LINE


設定資料間隔為每5秒上報一次




引用網址:https://home.gamer.com.tw/TrackBack.php?sn=5601478
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:ESP8266|Aduino|WiFi|MEGA2560|STH35|SHT85|DHT11|DHT22|LINE|ESP

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

9喜歡★s1234567 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:ESP8266 WEB ... 後一篇:貓咪大戰爭 真傳奇 打從...

追蹤私訊切換新版閱覽

作品資料夾

robert286 ლ(´•д• ̀ლ
ლ(´•д• ̀ლ看更多我要大聲說2小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】