在 Arduino 中發訊息到 Telegram, LINE Notify 的替代方案

2024111511:30

LINE Notify 功能即將關閉,可改用免費的 Telegram 機器人收發訊息

Telegram bot 比 LINE Notify 稍麻煩的是申請新的機器人的步驟
 

step1 申請一隻 Telegram bot


**以電腦版為例 (手機版本的操作 皆相同)

將 BotFather 這隻機器人加為好友

按這裡 BotFather https://t.me/BotFather 即可加朋友

或將 @BotFather 加為朋友



加入後,會顯示 BotFather 的基本功能 tg_bot1


輸入 /newbot 即可開始申請一隻機器人bot

過程如下: tg_bot2

上圖中,兩個重點: https://t.me/mybox001_bot
這是機器人的網址,自己要先點這個網址 加入這個機器人


 

7737191024:AAFE5R2CpVz6hqqjwah6lvWhNWYXFQ....
這是機器人的 API 存取 token

 

 

查詢自己的 chat id

將 @chat_id_echo_bot 加為朋友

即可看到自己的 chat id (用戶編號)

tg_bot_userid

 

 

幫你的 bot 設定大頭貼 (icon)

輸入 /setuserpic

再上傳一張 JPG 或 PNG 圖片:

telegram bot 設定大頭貼


 

 

step2 如何發訊息到 telegram bot


方法一:最簡單,直接在瀏覽器

https://api.telegram.org/bot7737191024:AAFE5R2CpVz6hqqjwah6lvWhNWYXFQ/sendMessage?chat_id=716660000&text=HelloWorld


方法二:用 Arduino 發訊息到 Telegram bot 範例程式

以純 http post 方式發送訊息到 Telegram bot

先安裝 ArduinoHttpClient 這個程式庫

範例:

#include <WiFi.h>
#include <ArduinoHttpClient.h>

// Initialize Wifi connection to the router
char ssid[] = "iot5";      //wifi名稱
char pass[] = "hello!!!";  //wifi密碼
int status = WL_IDLE_STATUS;

//Bot Teken
const char* BOT_TOKEN = "7737191024:AAFE5R2CpVz6hqqjwah6lvWhNW.....";

WiFiSSLClient wifi;

HttpClient http_client = HttpClient(wifi, "api.telegram.org", 443);

int msg_sended = 0;

void setup() {
    Serial.begin(115200);

  // 連接 wift
  while (status != WL_CONNECTED) {
      Serial.print("Attempting to connect to WPA SSID: ");
      Serial.println(ssid);
      status = WiFi.begin(ssid, pass);

      delay(2000);
  }

  Serial.println("WiFi connected");

  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  // 連接 wifi 完成.........

}


void loop() {

  if (msg_sended == 0) {

    //----------------------------------
    //發送一則訊息 給 74369xxxx 這個user
    String chat_id = "7436xxxxx";
    String message = "你好,這是測試";

    String uri = "/bot" + String(BOT_TOKEN) + "/";
    String contentType = "application/x-www-form-urlencoded";
    String postData = "method=sendMessage&text="+ message + "&chat_id="+chat_id;

    http_client.post(uri, contentType, postData);

    // read the status code and body of the response
    int statusCode = http_client.responseStatusCode();
    String response = http_client.responseBody();
    Serial.println(statusCode);
    Serial.println(response);

    msg_sended = 1;
  }

}

發送訊息的結果:

undefined


 

這兒有個蠻有趣的機器人應用:

用Telegram打造自己的監控機器人-IoT 智慧生活的異想世界


 

參考資料;


Ardteleg資料發送