透过树莓派为 Pico 添加 WiFi 功能

树莓派 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 和用户指南。

via