iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
自我挑戰組

Maker making IoT !!系列 第 24

[Day23] Esp32 + LINE

1.前言

今天我們將進入到Esp32結合Line的推播服務(開始變得有趣起來了呢!)相信這應該也是大部份小夥伴期待已久的系列內容吧?! 這篇會使用到Esp32s的STA模式,那在前幾張說過,此次會見證到STA的真正功能,那就繼續往下看,因為此次還需要使用到Line的服務,所以準備事情較多,那就廢話不多說,往主題Let's Go~
※本章節需使用到Line帳號。

2.準備事項

  1. 調整Arduino IDE中Esp32的版本
  2. 下載Line Notify函式庫
  3. 登入Line Notify取得Token

第1點,降Esp32版本可至開發板管理員輸入Esp32,調整Esp32的版本,請將版本調整至1.0.3。(如不懂可至「Day4 Arduino測試燒錄」,當中就有介紹如何選擇指定版本)

圖片取自:使用者拍攝

第2點,取得Line Notify函式庫,可至Arduino IDE的程式庫管理員打上Line Notify安裝。(如不懂可至「程式碼講解Part-2」,當中有提提到如何安裝函式庫)

圖片取自:使用者拍攝

第3點,登入Line Notify取得Token
請先打開瀏覽器,並搜尋Line Notify,進入頁面後點擊登入。

圖片取自:Line Notify

登入後,點擊相同地方,選擇個人頁面

圖片取自:Line Notify

點擊發行權杖

圖片取自:Line Notify

當出現這畫面時,就是開始申請權杖(Token),所以請先輸入名稱,及選擇透過1對1聊天接收Line Notify的通知,都選擇好後點擊發行

圖片取自:Line Notify

發行後,會看到這樣一條序號,這序號就是你的權杖(Token),請先把這權杖複製起來,等等會使用到
※這邊要注意,該權杖只會顯示這次,所以請先把這權杖記錄起來,盡量複製起來貼上記事本上

圖片取自:Line Notify

申請完權杖後,會看見多了一條,那就代表成功囉,那右方解除就是當你不想使用時就可解除。

圖片取自:Line Notify

3.接線圖

圖片取自:使用者繪製

  • Esp32s GND -> St01(C) -
  • Esp32s Vcc(5V) -> St01(C) +
  • Esp32s 22 -> St01(C) SCL
  • Esp32s 21 -> St01(C) SDA

4.程式碼

需更改ssid及password的數值,還有LINE_TOKEN中的數值(貼上剛才申請的LINE權杖),都設定好後就可燒錄。

#include <WiFi.h>
#include <WiFiClient.h>
#include <TridentTD_LineNotify.h>

#include <AHT10.h>
#include <Wire.h>
uint8_t readStatus = 0;
AHT10 myAHT10(AHT10_ADDRESS_0X38);

// 修改成上述寄到登入郵箱的 Token權杖號碼
#define LINE_TOKEN "jYTanwRtmAwnwevAWbBhU35RKhEq2OXAxxxxxxxxxxx"

// 設定無線基地台SSID跟密碼
const char* ssid     = "xxxx";
const char* password = "xxxxxxxx";

 
float humidity, temp_f;   // 從 AHT10 讀取的值

unsigned long previousMillis = 0;        // will store last temp was read
const long interval = 2000;              // interval at which to read sensor

// 用不到以下兩個變數
// const char* host = "notify-api.line.me";
// const int httpsPort = 443;
 
void setup(void)
{
  Serial.begin(115200);  // 設定速率 感測器
  myAHT10.begin();           // 初始化

  WiFi.mode(WIFI_STA);
  // 連接無線基地台
  WiFi.begin(ssid, password);
  Serial.print("\n\r \n\rWorking to connect");

  // 等待連線,並從 Console顯示 IP
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("DHT Weather Reading Server");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}
 
void loop(void)
{
  // 量測間等待至少 2 秒
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= interval) {
    // 將最後讀取感測值的時間紀錄下來 
    previousMillis = currentMillis;   

    // 讀取溫度大約 250 微秒!
    humidity = myAHT10.readHumidity();          // 讀取濕度(百分比)
    delay(100);
    temp_f = myAHT10.readTemperature();     // 讀取溫度(華氏)
    delay(100);
    
 
    // 檢查兩個值是否為空值
    if (isnan(humidity) || isnan(temp_f)) {
       Serial.println("Failed to read from DHT sensor!");
       return;
    }
  }

  String tempe="溫度:"+String(temp_f)+"℃";   
  String humid="濕度:"+String(humidity)+"%";

  // 顯示 Line版本
  Serial.println(LINE.getVersion());
 
  LINE.setToken(LINE_TOKEN);

  // 先換行再顯示
  LINE.notify("\n" + tempe + " ;" + humid);
      
  // 每2分鐘發送一次(delay120000)
  delay(10000);
}

5.操作畫面

如果上述都完成且正確,那就會開始收到Line Notify所傳輸的數值,那跟之前一樣可以嘗試觸碰AHT10查看數值變化狀態。

圖片取自:使用者拍攝

歡迎交流

好了,今天介紹了使用Esp32s的STA mode 加上 AHT10 並透過LINE Notify的服務,達到可以傳送溫溼度數值到手機上,不知大家這種傳輸有沒有興趣,除連自己手機外,也可以將這作品放在家中,並連接家中的WiFi分享器,就可以時刻接受到家中溫濕度,希望大家看完這篇會有收穫,那就明天見囉。


上一篇
[Day22] Esp32用STA mode + AHT10 - (程式碼講解)
下一篇
[Day24] Esp32 + LINE - (程式碼講解)
系列文
Maker making IoT !!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
goodnight
iT邦研究生 2 級 ‧ 2021-12-03 16:48:21

我用ESP32,都無法成功的發送訊息.

ks_wwlin iT邦新手 5 級 ‧ 2021-12-05 19:22:24 檢舉

@goodnight 檢查一下ESP32開發板版本是否為1.0.3,過高版本會有資料傳輸的問題。

我要留言

立即登入留言