W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第1张图片

转发: Rust-based TCP socket communication in W5500-EVB-Pico (with embassy)

 


项目介绍

介绍

我发现了一个名为 embassy 的基于 Rust 的框架,由于该框架提供了 W5500-EVB-Pico 库和示例,所以我决定对其进行测试。

去年六月,我介绍了embassy-net-w5500项目。

  • embassy-net-w5500

当我搜索关键字时,出现了大使馆的网站。 因此,您无需搜索 embassy,而是可以通过搜索 embassy rust 立即找到该页面。

一个名为 embassy-rs 的组织已在 Github 上成立,并且正在积极进行更新。 embassy-rs 

本文使用W5500-EVB-Pico配置环境并运行TCP套接字通信示例。

先决条件

  • Linux环境
    • 使用虚拟机
  • W5500-EVB-Pico
  • 任何类型的额外 Pico 板
    • 用作 pico 探针
    • 我们这里使用的是 WizFi360-EVB-Pico。
  • 面包板
  • 大力神工具
    • 用于socket通信测试

开发环境

我尝试在WSL2环境中使用它,但由于USB端口问题而在VM环境中完成。

有一种方法可以在 WSL 中启用 USB 端口,但我不想碰它,所以我使用了我配置的 VM。

VirtualBox(免费)或 VMware(付费)程序允许您将连接到主机 Windows 的硬件设备拉入虚拟机。

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第2张图片

Ubuntu 20.04 虚拟机

使用 lsusb 命令检查时,W5500-EVB-Pico 被识别如下。

作为参考,将 picoprobe.uf2 安装到 Pico 板后,识别的名称略有变化,如下所示。

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第3张图片

微微探头配置

参考官方指导文档,我如下连接板子。

  • 官方 Pico 指南链接:https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第4张图片

构建并刷新 picoprobe

  • 似乎可以省略,因为提供了已经构建的图像,但我直接继续。
    • GitHub - raspberrypi/picoprobe

如果未安装 Toolchain,请先安装该软件包。

$ sudo apt update
$ sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential

克隆 picoprobe 存储库并构建它。

以下命令参考自Raspberry Pi Pico官方指导文档。

cd ~/pico
git clone https://github.com/raspberrypi/picoprobe.git 
cd picoprobe
mkdir build 
cd build
cmake ..
make -j4

货物

Cargo 是 Rust 的官方包管理器,充当 Rust 项目的构建系统和包管理器。

它似乎被认为包含与 Python 的 pip 相同的角色。

官方指南很好地解释了开发环境配置和测试方法。

  • The Cargo Book - Installation

环境设置是根据指南进行的。

安装 Rust 和 Cargo

curl https://sh.rustup.rs -sSf | sh

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第5张图片

First Steps with Cargo

安装Cargo后,进行简单的操作测试。

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第6张图片

Embassy

使馆的官网也起到了指导作用,所以我们就按照要求进行了操作。

: Getting started :: Embassy Docs

先决条件

这是您需要的:

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第7张图片

rustup

rustup.rs - The Rust toolchain installer

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

probe-run

sudo apt install -y libusb-1.0-0-dev libudev-dev
cargo install probe-rs-cli

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第8张图片

source "$HOME/.cargo/env"

embassy 下载

现在,让我们下载 embassy 源代码并运行示例。

git clone https://github.com/embassy-rs/embassy
cd embassy

Blinky

cd examples/rp
cargo run --release --bin blinky
# This takes a few minutes

这里存在Cargo无法识别探针板的问题。

这个问题不容易解决,所以我查了很多资料,似乎有不少人遇到和我类似的问题,但我找不到明确的解决方案。

因此,Github Issues 和博客文章非常有帮助。

博文引用了中间的内容。

  • Getting started with rust on a Raspberry Pi Pico
  • Github - picoprobe issue page

打开两个终端并运行:

Terminal 1

$ cd ~/pico/openocd
$ src/openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -s tcl -c "adapter speed 5000"

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第9张图片

Terminal 2

$ cd ~/pico/rp2040-project-template
$ gdb-multiarch -q -ex "target extended-remote :3333" target/thumbv6m-none-eabi/debug/rp2040-project-template

您可以在 gdb 中使用以下命令加载并运行它。

(gdb)

load
continue

至此,我们已经验证了板卡连接的运行情况。

回到大使馆,以同样的方式运行示例。

我们从基本的例子开始,眨眼的例子。

cd ~/pico/cargo/embassy/examples/rp
cargo run --release --bin blinky

有用! :)

W5500示例

使用W5500-EVB-Pico以太网功能的TCP服务器和客户端示例已被执行和测试。

ethernet_w5500_tcp_server

首先进行了TCP服务器应用测试。

我在应用程序代码中修改并引用了以下内容。

  • 修改mac地址识别
  • IP设置为由DHCP分配
  • LED 设置为在建立 TCP 连接时亮起

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第10张图片

$ vi src/bin/ethernet_w5500_tcp_server.rs

let mac_addr = [0x00, 0x08, 0xdc, 0x01, 0x02, 0x03];

$ **cargo run --release --bin ethernet_w5500_tcp_server**

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第11张图片

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第12张图片

我检查了板所连接的路由器上的 MAC 地址和分配的 IP 地址,如下所示。 (192.168.50.100, 00-08-dc-01-02-03)

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第13张图片

默认情况下,它运行在环回模式下。

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第14张图片

ethernet_w5500_tcp_client

以下是TCP客户端应用程序。

修改代码后执行如下。

  • host_addr 我将该值设置为我的环境的主机 PC IP 地址值。
$ vi src/bin/ethernet_w5500_tcp_client.rs

        let **host_addr** = embassy_net::Ipv4Address::from_str("192.168.50.81").unwrap();

$ cargo run --release --bin ethernet_w5500_tcp_client

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第15张图片

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第16张图片

它的实现是为了让客户端立即执行并定期发送 hello world 消息。

到这里,第二次运行就停止了,看来板子已经断开了。

此时请使用reset重新识别单板。

ethernet_w5500_multisocket

最后是多socket操作测试。

$ cargo run --release --bin ethernet_w5500_multisocket

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第17张图片

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第18张图片

⚠️cmsis-dap 无法识别问题的日志

测试过程中,出现OpenOCD突然无法识别USB的情况。 此时如果使用lsusb命令查看,设备被识别。

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第19张图片

W5500-EVB-Pico(与大使馆)中基于 Rust 的 TCP 套接字通信_第20张图片

如果 openocd 无法工作,即使使用 lsusb 检查时识别为相同,请在重置板后,在 VirtualBox 中再次将 USB 连接到虚拟机。

复位应在调试板连接到 USB 电源的一侧完成。 按 RUN 按钮可将其重置。

也许因为使用VirtualBox所以有不稳定的部分,但是如果以后有机会在真实的Linux环境下测试的话,我会尝试一下。

结论

到目前为止,我已经基于Rust环境测试了与W5500-EVB-Pico板的TCP套接字通信,并且运行良好。

既然已经测试了基本操作,我想继续进行通过附加函数来连接某些东西的测试。

参考

W5500-EVB-Pico 示例

https://github.com/embassy-rs/embassy-net-w5500/tree/main/examples

你可能感兴趣的:(rust,tcp/ip,开发语言)