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

352 阅读7分钟

用你的智能手机远程控制Raspberry Pi的通用输入/输出(GPIOs)不是很好吗?如果你能肯定地回答这个问题,我想向你介绍一种简单的方法来实现这一点。在写这篇文章时,我没有想到具体的应用,但我可以想到与草坪灌溉、任何照明或车库门开关相结合。

总之,你所需要的是一个树莓派和一个智能手机,就可以开始了。实际的逻辑已经在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镜像没有预装的桌面。整个配置是基于网络的,所以你必须建立一个TCP/IP连接。使用一个普通的互联网路由器进行连接是很直接的。如果你不能使用这样的路由器,你也可以通过板载的通用异步接收/发送器 (UART)设备建立连接,配置以太网或WiFi接口。

本地DNS

默认情况下,Pythonic图像被配置为通过DHCP获得一个IP地址。你家里的互联网路由器通常运行一个DHCP服务器,将IP地址分配给连接的设备。在你的互联网路由器的空闲以太网端口和你的Raspberry Pi的以太网端口之间建立一个连接,然后启动它。

现在你可以尝试从本地网络中的设备访问基于Web的GUI。如果你本地网络中的DNS工作正常,打开浏览器并导航到http ://PythonicRPI:7000/,打开编程GUI。

本地IP

我想你的路由器也提供了一个图形化的配置GUI。配置GUI提供了关于您本地网络中的设备的信息。你可以通过输入ip route 找到你本地路由器的 IP 地址。

在我的例子中,路由在192.168.188.1下可用。现在登录到你的路由器的配置页面,检查Raspberry Pi的IP是哪个。

Viewing active connections

在我的网络中,树莓派在192.168.188.63下可用,所以我可以通过http ://192.168.188.63:7000/访问GUI。

UART

把SD卡放回读卡器中,挂上启动分区。打开启动分区上的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元素上的Play来启动这个配置。连接的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/。这将打开预装的代码服务器IDE。在左边的窗格中,点击文件按钮,打开telegram_2ca7cd73.py

RPI code server IDE

现在你应该能够开始调试,并像下面的屏幕记录一样跟踪执行路径。

youtu.be/IjJehKq7YCc

Telegram元素使用一个内联键盘,显示GPIO4和GPIO5的目标状态。这样一来,几个用户可以控制GPIO的状态而不互相干扰,因为GPIO的新目标状态总是提供给所有用户。

总结

通过这个例子,你应该感觉到一切是如何连接的。你可以根据自己的喜好来调整这个例子。改变或增加额外的GPIOs,使用模拟功能或按要求获得输入状态。如果你连接一个合适的继电器,你也可以用Raspberry Pi驱动更高的负载。我相信你会用它做一些伟大的事情