電報機(jī)器人與ESP32 -控制GPIO引腳通過電報聊天
Telegram是自由和開源的,它在2015年宣布了新的Telegram bot API,允許第三方為ESP32創(chuàng)建利用消息應(yīng)用程序作為主要通信接口的Telegram bot。這意味著我們可以用它控制我們的智能家居應(yīng)用程序和其他智能設(shè)備。因此,在本文中,我們將討論一種控制智能設(shè)備并了解其狀態(tài)的新方法。你說得對,我們會用社交媒體應(yīng)用“電報”控制他們。
之前我們做過這樣的項目,
?使用Telegram Bot與樹莓派:共享文本和文件
?樹莓派GPIO控制使用電報應(yīng)用程序
所以,如果你感興趣的話,一定要去看看。
什么是Telegram?
Telegram是一個跨平臺的基于云的即時消息、視頻電話和VoIP服務(wù),端到端加密聊天僅用于秘密聊天,而服務(wù)器-客戶端/客戶端-服務(wù)器加密用于云聊天。
但它與其他此類消息平臺的不同之處在于創(chuàng)建機(jī)器人的能力。
Telegram bots是基于人工智能的應(yīng)用程序,可以配置為提供許多不同的功能,例如,發(fā)送有關(guān)天氣或有用的新聞文章的相關(guān)信息,有些是預(yù)先配置為發(fā)送提醒,還有一些可以播放音樂或創(chuàng)建待辦事項列表,等等。
今天我們還將創(chuàng)建一個這樣的機(jī)器人,它將與我們的ESP32通信。
項目概述
在本教程中,我們將使用Telegram bot控制LED, LED連接到ESP32板。而不是LED,你可以控制任何引腳連接到任何其他設(shè)備或組件。
構(gòu)建基于ESP32的電報機(jī)器人的要求
由于這個項目是一個軟件繁重的項目,它不需要那么多的硬件,但是在軟件方面有相當(dāng)多的步驟需要遵循,我們將在本文中討論這些步驟。
硬件需求:
ESP32開發(fā)板
軟件要求:
Arduino IDE
特定的Arduino庫
電報應(yīng)用
制作一個電報機(jī)器人
正如我們前面所討論的,Telegram允許我們創(chuàng)建幾個具有不同功能的機(jī)器人。對于我們的項目,我們將使用Telegram創(chuàng)建一個簡單的bot。其余的命令聲明和回復(fù)將在ESP板本身編碼,它將使用聊天ID與我們的bot通信。我們將在本文中進(jìn)一步討論這些問題。解決了這個問題后,我們可以將注意力轉(zhuǎn)向在Telegram中構(gòu)建bot。
?從Play Store安裝Telegram。
?安裝之后,如果你還沒有一個帳戶,請創(chuàng)建一個帳戶,然后按照下面的步驟讓你的TG機(jī)器人工作。
?首先,搜索“botfather”并單擊botfather,如下所示?;蛘咴谀愕闹悄苁謾C(jī)上打開這個鏈接t.me/botfather。
?Botfather是一個預(yù)先構(gòu)建的電報機(jī)器人,可以讓您創(chuàng)建,管理和刪除您的機(jī)器人。
?單擊開始按鈕并選擇/newbot
?給你的機(jī)器人一個名字和用戶名。
?如果成功創(chuàng)建了bot,您將收到一條消息,其中包含訪問新創(chuàng)建的bot和bot令牌的鏈接。Bot令牌是一個唯一的id,稍后我們將使用它與Bot進(jìn)行通信。
獲取你的Telegram聊天id
telegram用戶id是每個聊天、組和用戶的唯一號碼,可以幫助telegram識別用戶和聊天。在我們的這個項目中,任何擁有bot鏈接的人都可以與bot進(jìn)行交互。為了防止任何未經(jīng)授權(quán)的訪問,我們可以使用唯一的用戶id對其進(jìn)行加密。
通過這樣做,每次ESP從bot接收消息時,它都會檢查id是否與存儲在其中的id相對應(yīng),然后只執(zhí)行命令。
獲取Telegram用戶ID的步驟:
?在你的Telegram賬戶中,搜索“IDBot”或在你的智能手機(jī)上打開這個鏈接t.me/myidbot。
?與該機(jī)器人開始對話并輸入/getid。您將得到一個帶有您的用戶ID的回復(fù)。
?注意用戶id,因為我們稍后會用到它。
安裝Telegram Bot庫
我們將使用Arduino IDE對ESP32板進(jìn)行編程。因此,請確保您的PC上安裝了IDE和電路板包。我們需要在Arduino IDE中安裝兩個庫,使用這些庫將使編碼過程更加簡單和方便。
為了與Telegram bot建立通信,我們將使用Brian Lough創(chuàng)建的通用Telegram bot庫,該庫為Telegram bot API提供了一個簡單的接口。
按照下面的步驟安裝庫的最新版本。
1. 點(diǎn)擊此鏈接下載通用Arduino Telegram Bot庫。
2. 去素描>包括庫> Add.ZIP庫…
3. 添加剛剛下載的庫。就是這樣。完成庫的安裝。
有關(guān)庫的詳細(xì)信息,您可以查看Universal Arduino Telegram Bot library GitHub頁面。
ArduinoJson庫:
你還必須安裝ArduinoJson庫。按照下面的步驟安裝庫。
1. 進(jìn)入草圖>包括庫>管理庫。
2. 搜索“ArduinoJson”。
3. 選擇可用的最新版本。
4. 安裝庫。
我們已經(jīng)安裝了所有必需的庫。
基于ESP32的電報機(jī)器人編程
我們必須以這樣一種方式閃爍ESP32,即它接收從bot發(fā)送的任何消息,比較用戶id,并根據(jù)收到的消息打開或關(guān)閉LED。
在代碼的第一部分,我們從導(dǎo)入所需的庫開始。
之后,我們初始化變量來存儲您的Wi-Fi的SSID和密碼。
類似地,我們定義了保存bot令牌和聊天id的變量。您需要將您的憑據(jù)放入這些變量中。
之后,我們用wiificlientsecure創(chuàng)建一個新的WiFi客戶端。
使用令牌和客戶端創(chuàng)建bot,我們在前面已經(jīng)保存了這些內(nèi)容。
兩個變量botRequestDelay和lastTimeBotRan用于每隔x秒檢查新的電報消息。在我們的示例中,我們將每隔1000毫秒檢查一次新消息。我們可以通過更改botRequestDelay變量將延遲時間更改為我們的特定需求。
handleNewMessages()函數(shù)保存新消息到達(dá)時發(fā)生的情況的選項卡。
我們需要獲取該消息的聊天ID并將其存儲在chat_id變量中。這個ID允許我們識別是誰發(fā)送了這條消息。
如果chat_id與您的聊天ID (chat_id)不同,則意味著其他人已向您的bot發(fā)送了消息。如果是這種情況,我們需要忽略所有消息并等待新的消息。
否則,這意味著消息是從一個有效的用戶發(fā)送的,因此我們將把它保存在text變量中并檢查其內(nèi)容。
from_name變量保存發(fā)送者的名稱。
如果我們收到/start消息,我們將向ESP32發(fā)送一個有效的命令。如果您忘記了控制電路板的特定命令,則此功能非常有用。
我們可以非常簡單地通過在聊天機(jī)器人對象上使用sendMessage()方法并將接收方的聊天ID、消息和解析模式作為參數(shù)傳遞給聊天機(jī)器人,從而向聊天機(jī)器人發(fā)送消息。
在我們的特定示例中,我們將把消息發(fā)送到存儲在chat_id上的ID,并發(fā)送保存在welcome變量上的消息。
如果它收到/led_on消息,打開LED并發(fā)送消息確認(rèn)我們已經(jīng)收到消息。另外,用新狀態(tài)更新ledState變量。
對/led_off消息執(zhí)行類似的操作。
最后,使用/狀態(tài)檢查接收到的消息,檢查當(dāng)前GPIO狀態(tài),并相應(yīng)地發(fā)送消息。
初始化Wi-Fi,并將ESP連接到我們之前定義的網(wǎng)絡(luò)SSID和密碼。
在loop()中,我們每1000毫秒檢查一次新消息,即1秒。
當(dāng)新消息到達(dá)時,調(diào)用handleNewMessages()函數(shù)。
這就結(jié)束了我們代碼的工作?,F(xiàn)在,您只需要通過從Arduino IDE中選擇適當(dāng)?shù)陌搴投丝趤砩蟼魉?,然后就可以了?
基于ESP32的電報機(jī)器人測試
現(xiàn)在我們已經(jīng)完成了所有的設(shè)置。通過Arduino IDE將上述代碼上傳到ESP32板上。上傳草圖時不要忘記選擇正確的板和端口。
上傳草圖后,按下單板上的EN/Reset按鈕,單板開始執(zhí)行代碼。打開串行監(jiān)視器,等待電路板與Wi-Fi路由器連接?,F(xiàn)在,打開Telegram,進(jìn)入Botfather提供的鏈接,輸入/start,開始與bot對話。
現(xiàn)在您可以通過輸入相應(yīng)的命令來控制LED或了解狀態(tài)。
本文編譯自iotdesignpro