如果能用智能手机远程控制 Raspberry Pi 的通用输入/输出(GPIO),岂不是很棒?如果你觉得不错,我想向你介绍一种简单的实现方法。写这篇文章时,我并没有考虑具体的应用,但我想可以将其与草坪灌溉、照明或车库门开启器结合使用。
无论如何,开始所需的一切就是 Raspberry Pi 和智能手机。实际逻辑已在 GitHub 上可用,因此即使没有编程技能,你也可以按照本文中描述的步骤进行操作。
架构
我们主要使用 Pythonic——我在业余时间开发的图形化 Python 编程框架。Pythonic 带来了一个 Telegram 机器人编程元素,它充当我们的智能手机界面。这种设置的一个显着优势是它在客户端数量方面是可扩展的:你可以决定是否只自己控制 GPIO,与你的亲戚或朋友分享,或者与公众分享控制能力。当然,前提是需要永久的互联网访问才能在 Telegram 服务器和客户端之间进行通信。为了建立互联网连接,你可以使用以太网接口或 Raspberry Pi 的 WiFi 功能。
安装 Pythonic
要开始使用,你必须在 Raspberry Pi 上安装 Pythonic。最简单的方法是用在 sourceforge.net 上提供的预配置 Pythonic 镜像刷新 SD 卡。
下载并解压镜像,然后将其刷新到 Raspberry Pi 的 SD 卡。在 Windows 上,你可以使用 balenaEtcha。在 Linux 上,你可以使用板载工具。
- 插入 SD 卡并通过键入
lsblk -p
检查它显示在哪个设备下。
- 在上面的屏幕截图中,SD 卡设备是
/dev/sdc
,我的系统自动挂载了在它上面找到的两个分区。如果发生这种情况,请键入umount /dev/sdc1 && umount /dev/sdc2
将其卸载。 - 使用以下命令刷新 SD 卡:
dd if=~/Downloads/Pythonic-1.7.img of=/dev/sdc bs=32M, conv=fsync
。
注意:这将删除 SD 卡上的所有以前的文件。 - 刷新过程需要一段时间。
该过程完成后,将 SD 卡放回你的 Raspberry Pi 并启动它。
建立连接
Pythonic 镜像没有预安装的桌面。整个配置是基于 Web 的,因此你必须建立一个 TCP/IP 连接。使用普通的互联网路由器连接非常简单。如果你无法访问这样的路由器,你也可以通过板载通用异步收发器 (UART) 设备建立连接来配置以太网或 WiFi 接口。
Locale DNS
默认情况下,Pythonic 镜像配置为通过 DHCP 获取 IP 地址。你家中的互联网路由器通常运行一个 DHCP 服务器,该服务器将 IP 地址分配给连接的设备。在你互联网路由器的空闲以太网端口和 Raspberry Pi 上的以太网端口之间建立连接并启动它。
你现在可以尝试从本地网络中的设备访问基于 Web 的 GUI。如果本地网络中的 DNS 正常工作,请打开一个浏览器并导航到 http ://PythonicRPI:7000/ 以打开编程 GUI。
Locale IP
我假设你的路由器也提供图形配置 GUI。配置 GUI 提供有关本地网络中设备的信息。你可以通过键入 ip route
找到本地路由器的 IP 地址。
在我的例子中,该路由在 192.168.188.1 下可用。现在登录到路由器的配置页面,并检查 Raspberry Pi 被赋予了哪个 IP。

在我的网络中,Raspberry Pi 在 192.168.188.63 下可用,因此我可以在 http ://192.168.188.63:7000/ 访问 GUI。
UART
将 SD 卡放回读卡器中并挂载 boot 分区。打开 boot 分区上的 config.txt 并将以下行添加到末尾
enable_uart=1
将 SD 卡放回 Raspberry Pi 并启动它。你现在可以使用 UART-USB 转换器建立控制台连接,以设置静态 IP 地址或配置 WiFi 连接。

默认连接参数为
- TxD:GPIO14
- RxD:GPIO15
- 地线:引脚 6 或 14
- 波特率:115200
- 数据位:8
- 奇偶校验位:无
- 停止位:1
你可以在 elinux.org 上找到更多信息。
上传配置
要继续执行即将到来的步骤,请从 github 下载示例文件到你的本地硬盘驱动器。

该示例由几种基本类型的文件组成
*.py-files
—包含特定功能的实际实现。current_config.json
—此文件描述配置的元素、元素之间的链接以及元素的变量配置。
此示例是已经可用的参考实现的一个略微修改的版本。你可以通过将文件从左侧边栏拖放到工作区来访问它。
现在将配置上传到你的目标

使用蓝色标记的按钮,你上传current_config.json 到目标。你只能上传有效的配置文件。上传后,你可以在目标上的 /home/pythonic/Pythonic/current_config.json
下找到该文件。
使用绿色标记的按钮,你上传每个 *.py-files
。之后,*.py-files
可以在 /home/pythonic/Pythonic/executables
下找到。
可以将任何类型的文件上传到 executables
文件夹,因为我计划将来支持二进制可执行文件。
但是,为了使配置正常工作,每个 current_config.json
中描述的元素都必须具有实际的实现。
设置 Telegram 机器人
现在,配置应该如下所示

做得好!但是此设置还无法工作。尝试通过单击 ManualScheduler - 0x5f8125f5 元素上的播放来启动此配置。连接的 Telegram 元素将启动,然后立即退出。这是因为 Telegram 元素需要一些额外的配置:右键单击 Telegram 元素。你现在应该看到这样的弹出窗口

你必须提供一个 Telegram 机器人令牌才能与服务器通信。在 core.telegram.org 上描述了创建机器人令牌的过程。
简而言之:与 BotFather 开始聊天,并使用 /newbot
命令创建一个机器人。在此过程结束时,BotFather 将为你提供一个令牌,你可以将其复制并粘贴到 Telegram 元素中。
就是这样。现在你应该可以通过单击 ManualScheduler - 0x5f8125f5 元素上的播放按钮来启动 Telegram 元素。Telegram 元素现在应该处于活动状态,可以从绿色框架中看到。

底部信息行上的旋转条指示与后端的工作连接。
通过在 Telegram 的搜索字段中键入 @<你机器人的名字> 来与你新创建的机器人开始聊天。点击 开始 以获取 GPIO 的初始状态。我将我的机器人命名为 RPIremoteIO

调试和修改
在浏览器中打开一个新选项卡,然后导航到 http ://PythonicRPI:8000/。这将打开预安装的 code-server IDE。在左侧窗格中,单击文件按钮并打开 telegram_2ca7cd73.py

你现在应该可以开始调试并像在以下屏幕录像中那样跟踪执行路径
Telegram 元素使用一个 内联键盘,它显示 GPIO4 和 GPIO5 的目标状态。这样,多个用户可以控制 GPIO 的状态而不会互相干扰,因为 GPIO 的新目标状态始终提供给所有订阅者。
结论
通过此示例,你应该了解一切是如何连接的。你可以根据自己的喜好调整示例:更改或添加其他 GPIO,使用模拟功能或按需获取输入状态。如果连接合适的继电器,你也可以使用 Raspberry Pi 驱动更高的负载。我相信你会用它做一些很棒的事情!
评论已关闭。