树莓派 Pico 是一款很棒的设备。它具有出彩的特性,拥有强大的 SDK 和文档,而且成本很低。美中不足的是,它没有网络功能。
几款基于 RP2040 的 MCU 目前已上市。但是与 Pico 的价格相比,这几款开发板比较贵,而且它们也不具有网络功能。
本文将向你介绍如何通过几个简单的步骤,使用树莓派为树莓派 Pico 添加网络功能。我们将使用 Telemetrix 树莓派 Pico 包和两个开源网络实用程序,无需额外的硬件。
你只需按照下面列出的步骤操作即可。另外,你也可以使用 Python 脚本来控制和监视 Pico 的 GPIO 引脚。
硬件部分
- 树莓派 Pico
- 支持 WiFi 或以太网的树莓派
- USB-A 转 Micro USB 数据线
- 一台 Linux、macOS 或 Windows 10 PC
用到的软件和在线服务
- Raspberry Pi OS
- Telmetrix4RpiPico(适用于 树莓派 Pico 的开源服务器固件)
- Telemetrix-rpi-pico(适用于 PC 的开源 Python 客户端 API)
- ser2net(适用于树莓派点免费开源串行端口网络代理)
- sosat(适用于 PC 的开源免费多功能中继工具)
原理
Telemetrix 项目允许你通过 USB/串行 将消息从 PC 中上传到 Pico 的固件中,从而监控和控制树莓派 Pico 的 GPIO。
如果我们可以将串行数据流转换为 TCP/IP 流,通过 TCP 中继串行数据会怎样?
没错,这正是我们将要做的,所以让我们现在就开始吧。
第 1 步:给 Pico 上传 Telemetrix
安装步骤很简单,只需按照 Telemetrix 用户指南上描述的步骤操作即可:
1、下载 Telemetrix4RpiPico.uf2 文件。
2、按住 Pico 开发板上的 BOOTSEL 按钮,然后将 Pico 插入树莓派或 PC 的 USB 接口,然后松开 BOOTSEL 按钮。
3、Pico 会被识别为大容量存储设备。
4、将下载的 MicroPython UF2 文件放入 RPI-RP2 卷上。你的 Pico 将自动重启,然后程序就开始运行了。
第 2 步:更新 Raspberry Pi OS
在树莓派上打开一个终端窗口,并执行以下命令:
sudo apt-get update
然后运行命令(如果系统已经是最新的话,可选,运行这个命令会很耗时):
sudo apt-get upgrade
完成后,可以继续下面的步骤。
第 3 步:查找树莓派的 IP 地址
打开终端窗口并输入以下命令:
ifconfig
eth0是为以太网分配的 IP 地址,wlan0是为 WiFi 分配的 IP 地址。由于我用网线把树莓派连接到路由器,并将树莓派连接到 WiFi,因此这两个条目都分配了 IP 地址。当然,我可以选择使用这两个地址中的任何一个,但是由于我想在本演示中使用 WiFi,所以我使用了wlan0地址192.168.2.126。
请记下树莓派列出的 IP 地址,我们在后面的步骤中会用到。
第 4 步:在树莓派上安装配置 ser2net
ser2net 是一个串行转网络的代理。它将 IP 数据流转换为串行数据,并将数据重定向到特定的串行端口。它还把来自串行端口的数据转换为 TCP/IP 流。ser2net 作为守护进程运行,安装之后,它会在每次启动树莓派时自动运行。
要安装 ser2net,请在终端中输入以下命令:
sudo apt-get install ser2net
接下来,我们需要通过修改配置文件来配置 ser2net。首先,在终端中输入以下命令来停止守护进程:
sudo systemctl stop ser2net
然后,在终端中输入以下命令来修改/etc/ser2net.config
文件:
sudo nano /etc/ser2net.config
请将以下内容添加到文件的最后:
3333:raw:0:/dev/ttyACM0:115200,remctl
保存文件并退出编辑器。
添加的这行内容告诉 ser2net 将在 IP 端口 3333 上接收到的 IP 数据重定向到 COM 端口 /dev/ttyACM0
上的串行设备。要了解 ser2net 的更多信息,请输入以下内容来参考其手册页:
man ser2net
现在,让我们重启 ser2net 守护进程。在终端窗口中,输入:
sudo systemctl start ser2net
第 5 步:用 USB 数据线连接 Pico 和树莓派
连接两个设备之间的数据线后,然后输入:
ls -l /dev/ttyA*
你应该会看到列出的 ttyACM0。
ls -l /dev/ttyA* crw-rw---- 1 root dialout 166, 0 Jun 12 19:17 /dev/ttyACM0 crw-rw---- 1 root dialout 204, 64 Jun 12 19:40 /dev/ttyAMA0
第 6 步:你的客户端计算机是否基于 Windows?
如果你使用 Linux 或 macOS,请跳转到第 7 步。
如果你使用 Windows,你需要在计算机上安装适用于 Linux 的 Windows 子系统 (WSL)。
WSL 可以让开发人员直接在 Windows 上运行 GNU/Linux 环境——包括大多数命令行工具、实用工具和应用程序,免去了使用传统虚拟机或配置双引导的麻烦。
要安装 WSL,请按照此教程进行操作。在选择 Linux 版本时,请选择 Ubuntu 20.04。
安装后,请转到第 7 步。使用 WSL 终端窗口执行所有后续步骤。
第 7 步:安装 Socat
Socat 是基于命令行的实用程序,它建立两个双向字节流并在它们之间传输数据。Socat 是树莓派服务器计算机上使用的 ser2net 的对等点。我们将把它安装在客户端 PC 上。
在客户端计算机的终端窗口中,键入:
sudo apt-get install socat
第 8 步:安装 Telemetrix 客户端
请检查你的计算机上是否安装了 Python3。
python3 -V
如果没有,请先安装。
接下来,通过输入以下命令来检查是否已安装 pip3:
pip3 -V
pip3 的版本会显示在终端中。如果显示空行或有关安装 pip3 的错误消息,请输入以下命令来安装 pip3:
sudo apt-get install python3-pip
我们现在准备从 PyPi 安装 Telemetrix。请在终端窗口中,输入:
sudo pip3 install telemetrix-rpi-pico
第 9 步:下载并修改 Telemetrix 示例脚本
访问 GitHub 项目:
https://github.com/MrYsLab/telemetrix-rpi-pico
下载源码。
保存并解压缩 .zip 文件。解压后进入examples目录,编辑 blink.py。我们之所以使用这个例子,是因为它不需要任何额外的硬件。
请将文件中的以下几行
# Create a Telemetrix instance. board = telemetrix_rpi_pico.TelemetrixRpiPico()
更改为:
# Create a Telemetrix instance. board = telemetrix_rpi_pico.TelemetrixRpiPico(com_port='/home/afy/MyProxySerialPort')
修改后的行包含在一行代码中。然后保存文件。
正如我们将在第 10 步中看到的那样,Socat 将创建一个名为 /home/afy/MyProxySerialPort
的虚拟 com 端口。
在这里,我们告诉 Python 脚本使用该 COM 端口。
第 10 步:启动 Socat 并运行 Blink 示例
在终端窗口中,复制并粘贴以下命令。在执行命令之前,请把其中的 IP 地址改为你的树莓派的 IP 地址。
socat pty,link=$HOME/MyProxySerialPort,waitslave tcp:192.168.2.126:3333,forever,reuseaddr,keepalive &
该命令包含在一行中。在该行的末尾,& 符号使命令在后台运行,以便你可以在同一终端窗口中运行 blink.py 脚本。
现在运行修改后的 blink.py,你会看到 Pico 上的 LED 开始闪烁。
python3 blink.py
总结
恭喜你,完成了!现在,你可以编写自己的程序了。如果你愿意,也可以运行一些其他的 demo。请记住一定要像第 9 步中那样指定 com_port 参数。
另外,如果你想编写自己的脚本,请参阅 Telemetrix API 和用户指南。
发表评论