用智能手机远程控制你的 Raspberry Pi

用智能手机远程控制 Raspberry Pi 的 GPIO。
60 位读者喜欢这篇文章。
How to turn a Raspberry Pi into an eBook server

Opensource.com

如果能用智能手机远程控制 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 上,你可以使用板载工具。

  1. 插入 SD 卡并通过键入 lsblk -p 检查它显示在哪个设备下。

    Using lsblk -p to check under which device your SD card shows
  2. 在上面的屏幕截图中,SD 卡设备是 /dev/sdc,我的系统自动挂载了在它上面找到的两个分区。如果发生这种情况,请键入 umount /dev/sdc1 && umount /dev/sdc2 将其卸载。
  3. 使用以下命令刷新 SD 卡:dd if=~/Downloads/Pythonic-1.7.img of=/dev/sdc bs=32M, conv=fsync

    注意这将删除 SD 卡上的所有以前的文件。
  4. 刷新过程需要一段时间。

    该过程完成后,将 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。

Viewing active connections

在我的网络中,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 连接。

Establishing a UART connection

默认连接参数为

  • TxD:GPIO14
  • RxD:GPIO15
  • 地线:引脚 6 或 14
  • 波特率:115200
  • 数据位:8
  • 奇偶校验位:无
  • 停止位:1

你可以在 elinux.org 上找到更多信息。

上传配置

要继续执行即将到来的步骤,请从 github 下载示例文件到你的本地硬盘驱动器。

GitHub example files repository

该示例由几种基本类型的文件组成

  • *.py-files—包含特定功能的实际实现。
  • current_config.json—此文件描述配置的元素、元素之间的链接以及元素的变量配置。

此示例是已经可用的参考实现的一个略微修改的版本。你可以通过将文件从左侧边栏拖放到工作区来访问它。

现在将配置上传到你的目标

Pythonic GUI overview

使用蓝色标记的按钮,你上传current_config.json 到目标。你只能上传有效的配置文件。上传后,你可以在目标上的 /home/pythonic/Pythonic/current_config.json 下找到该文件。

使用绿色标记的按钮,你上传每个 *.py-files。之后,*.py-files 可以在 /home/pythonic/Pythonic/executables 下找到。

可以将任何类型的文件上传到 executables 文件夹,因为我计划将来支持二进制可执行文件。

但是,为了使配置正常工作,每个 current_config.json 中描述的元素都必须具有实际的实现。

设置 Telegram 机器人

现在,配置应该如下所示

Pythonic GPIO remote configuration

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

Pop-up for Phythonic GPIO remote Telegram

你必须提供一个 Telegram 机器人令牌才能与服务器通信。在 core.telegram.org 上描述了创建机器人令牌的过程。

简而言之:与 BotFather 开始聊天,并使用 /newbot 命令创建一个机器人。在此过程结束时,BotFather 将为你提供一个令牌,你可以将其复制并粘贴到 Telegram 元素中。

就是这样。现在你应该可以通过单击 ManualScheduler - 0x5f8125f5 元素上的播放按钮来启动 Telegram 元素。Telegram 元素现在应该处于活动状态,可以从绿色框架中看到。

 Active RPI Telegram element

底部信息行上的旋转条指示与后端的工作连接。

通过在 Telegram 的搜索字段中键入 @<你机器人的名字> 来与你新创建的机器人开始聊天。点击 开始 以获取 GPIO 的初始状态。我将我的机器人命名为 RPIremoteIO

Start RPI Telegram

调试和修改

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

RPI code server IDE

你现在应该可以开始调试并像在以下屏幕录像中那样跟踪执行路径

https://youtu.be/IjJehKq7YCc

Telegram 元素使用一个 内联键盘,它显示 GPIO4 和 GPIO5 的目标状态。这样,多个用户可以控制 GPIO 的状态而不会互相干扰,因为 GPIO 的新目标状态始终提供给所有订阅者。

结论

通过此示例,你应该了解一切是如何连接的。你可以根据自己的喜好调整示例:更改或添加其他 GPIO,使用模拟功能或按需获取输入状态。如果连接合适的继电器,你也可以使用 Raspberry Pi 驱动更高的负载。我相信你会用它做一些很棒的事情!

接下来读什么
User profile image.
Stephan 是一位技术爱好者,他欣赏开源技术,因为它能让人深入了解事物的工作原理。Stephan 是一名全职支持工程师,主要从事工业自动化软件(大多为专有软件)领域的工作。如果可能,他会致力于他基于 Python 的开源项目,撰写文章或骑摩托车。

评论已关闭。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.