电报机器人与ESP32 -控制GPIO引脚通过电报聊天
扫描二维码
随时随地手机看文章
Telegram是自由和开源的,它在2015年宣布了新的Telegram bot API,允许第三方为ESP32创建利用消息应用程序作为主要通信接口的Telegram bot。这意味着我们可以用它控制我们的智能家居应用程序和其他智能设备。因此,在本文中,我们将讨论一种控制智能设备并了解其状态的新方法。你说得对,我们会用社交媒体应用“电报”控制他们。
之前我们做过这样的项目,
•使用Telegram Bot与树莓派:共享文本和文件
•树莓派GPIO控制使用电报应用程序
所以,如果你感兴趣的话,一定要去看看。
什么是Telegram?
Telegram是一个跨平台的基于云的即时消息、视频电话和VoIP服务,端到端加密聊天仅用于秘密聊天,而服务器-客户端/客户端-服务器加密用于云聊天。
但它与其他此类消息平台的不同之处在于创建机器人的能力。
Telegram bots是基于人工智能的应用程序,可以配置为提供许多不同的功能,例如,发送有关天气或有用的新闻文章的相关信息,有些是预先配置为发送提醒,还有一些可以播放音乐或创建待办事项列表,等等。
今天我们还将创建一个这样的机器人,它将与我们的ESP32通信。
项目概述
在本教程中,我们将使用Telegram bot控制LED, LED连接到ESP32板。而不是LED,你可以控制任何引脚连接到任何其他设备或组件。
构建基于ESP32的电报机器人的要求
由于这个项目是一个软件繁重的项目,它不需要那么多的硬件,但是在软件方面有相当多的步骤需要遵循,我们将在本文中讨论这些步骤。
硬件需求:
ESP32开发板
软件要求:
Arduino IDE
特定的Arduino库
电报应用
制作一个电报机器人
正如我们前面所讨论的,Telegram允许我们创建几个具有不同功能的机器人。对于我们的项目,我们将使用Telegram创建一个简单的bot。其余的命令声明和回复将在ESP板本身编码,它将使用聊天ID与我们的bot通信。我们将在本文中进一步讨论这些问题。解决了这个问题后,我们可以将注意力转向在Telegram中构建bot。
•从Play Store安装Telegram。
•安装之后,如果你还没有一个帐户,请创建一个帐户,然后按照下面的步骤让你的TG机器人工作。
•首先,搜索“botfather”并单击botfather,如下所示。或者在你的智能手机上打开这个链接t.me/botfather。
•Botfather是一个预先构建的电报机器人,可以让您创建,管理和删除您的机器人。
•单击开始按钮并选择/newbot
•给你的机器人一个名字和用户名。
•如果成功创建了bot,您将收到一条消息,其中包含访问新创建的bot和bot令牌的链接。Bot令牌是一个唯一的id,稍后我们将使用它与Bot进行通信。
获取你的Telegram聊天id
telegram用户id是每个聊天、组和用户的唯一号码,可以帮助telegram识别用户和聊天。在我们的这个项目中,任何拥有bot链接的人都可以与bot进行交互。为了防止任何未经授权的访问,我们可以使用唯一的用户id对其进行加密。
通过这样做,每次ESP从bot接收消息时,它都会检查id是否与存储在其中的id相对应,然后只执行命令。
获取Telegram用户ID的步骤:
•在你的Telegram账户中,搜索“IDBot”或在你的智能手机上打开这个链接t.me/myidbot。
•与该机器人开始对话并输入/getid。您将得到一个带有您的用户ID的回复。
•注意用户id,因为我们稍后会用到它。
安装Telegram Bot库
我们将使用Arduino IDE对ESP32板进行编程。因此,请确保您的PC上安装了IDE和电路板包。我们需要在Arduino IDE中安装两个库,使用这些库将使编码过程更加简单和方便。
为了与Telegram bot建立通信,我们将使用Brian Lough创建的通用Telegram bot库,该库为Telegram bot API提供了一个简单的接口。
按照下面的步骤安装库的最新版本。
1. 点击此链接下载通用Arduino Telegram Bot库。
2. 去素描>包括库> Add.ZIP库…
3. 添加刚刚下载的库。就是这样。完成库的安装。
有关库的详细信息,您可以查看Universal Arduino Telegram Bot library GitHub页面。
ArduinoJson库:
你还必须安装ArduinoJson库。按照下面的步骤安装库。
1. 进入草图>包括库>管理库。
2. 搜索“ArduinoJson”。
3. 选择可用的最新版本。
4. 安装库。
我们已经安装了所有必需的库。
基于ESP32的电报机器人编程
我们必须以这样一种方式闪烁ESP32,即它接收从bot发送的任何消息,比较用户id,并根据收到的消息打开或关闭LED。
在代码的第一部分,我们从导入所需的库开始。
之后,我们初始化变量来存储您的Wi-Fi的SSID和密码。
类似地,我们定义了保存bot令牌和聊天id的变量。您需要将您的凭据放入这些变量中。
之后,我们用wiificlientsecure创建一个新的WiFi客户端。
使用令牌和客户端创建bot,我们在前面已经保存了这些内容。
两个变量botRequestDelay和lastTimeBotRan用于每隔x秒检查新的电报消息。在我们的示例中,我们将每隔1000毫秒检查一次新消息。我们可以通过更改botRequestDelay变量将延迟时间更改为我们的特定需求。
handleNewMessages()函数保存新消息到达时发生的情况的选项卡。
我们需要获取该消息的聊天ID并将其存储在chat_id变量中。这个ID允许我们识别是谁发送了这条消息。
如果chat_id与您的聊天ID (chat_id)不同,则意味着其他人已向您的bot发送了消息。如果是这种情况,我们需要忽略所有消息并等待新的消息。
否则,这意味着消息是从一个有效的用户发送的,因此我们将把它保存在text变量中并检查其内容。
from_name变量保存发送者的名称。
如果我们收到/start消息,我们将向ESP32发送一个有效的命令。如果您忘记了控制电路板的特定命令,则此功能非常有用。
我们可以非常简单地通过在聊天机器人对象上使用sendMessage()方法并将接收方的聊天ID、消息和解析模式作为参数传递给聊天机器人,从而向聊天机器人发送消息。
在我们的特定示例中,我们将把消息发送到存储在chat_id上的ID,并发送保存在welcome变量上的消息。
如果它收到/led_on消息,打开LED并发送消息确认我们已经收到消息。另外,用新状态更新ledState变量。
对/led_off消息执行类似的操作。
最后,使用/状态检查接收到的消息,检查当前GPIO状态,并相应地发送消息。
初始化Wi-Fi,并将ESP连接到我们之前定义的网络SSID和密码。
在loop()中,我们每1000毫秒检查一次新消息,即1秒。
当新消息到达时,调用handleNewMessages()函数。
这就结束了我们代码的工作。现在,您只需要通过从Arduino IDE中选择适当的板和端口来上传它,然后就可以了。
基于ESP32的电报机器人测试
现在我们已经完成了所有的设置。通过Arduino IDE将上述代码上传到ESP32板上。上传草图时不要忘记选择正确的板和端口。
上传草图后,按下单板上的EN/Reset按钮,单板开始执行代码。打开串行监视器,等待电路板与Wi-Fi路由器连接。现在,打开Telegram,进入Botfather提供的链接,输入/start,开始与bot对话。
现在您可以通过输入相应的命令来控制LED或了解状态。
本文编译自iotdesignpro