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