11个版本 (7个破坏性更新)

0.7.1 2024年7月17日
0.6.0 2024年6月4日
0.4.0 2024年3月12日
0.1.1 2023年11月27日

#89 in 嵌入式开发

Download history 407/week @ 2024-05-02 339/week @ 2024-05-09 308/week @ 2024-05-16 288/week @ 2024-05-23 502/week @ 2024-05-30 367/week @ 2024-06-06 318/week @ 2024-06-13 415/week @ 2024-06-20 296/week @ 2024-06-27 232/week @ 2024-07-04 615/week @ 2024-07-11 463/week @ 2024-07-18 414/week @ 2024-07-25 347/week @ 2024-08-01 312/week @ 2024-08-08 368/week @ 2024-08-15

1,506 每月下载量

MIT/Apache

3MB
71K SLoC

esp-wifi

Crates.io docs.rs MSRV Crates.io Matrix

Espressif微控制器的WiFi、BLE和ESP-NOW驱动程序

当前支持

如果单元格包含破折号(—),则表示该功能不支持该芯片。勾号(✓)表示存在某些驱动程序实现。波浪号(˜)表示已实现但存在错误。空单元格表示该功能在芯片中存在但尚未实现。

WiFi BLE Coex ESP-NOW
ESP32
ESP32-C2
ESP32-C3
ESP32-C6
ESP32-H2
ESP32-S2
ESP32-S3

最低支持的Rust编译器版本:1.72.0.0

使用方法

导入

确保为您的芯片启用了正确的功能。有关更多示例,请参阅[示例]。

[dependencies.esp-wifi]
# A supported chip needs to be specified, as well as specific use-case features
features = ["esp32s3", "wifi", "esp-now"]

请确保包含目标rom函数

# .cargo/config.toml
rustflags = [
    "-C", "link-arg=-Tlinkall.x",
    "-C", "link-arg=-Trom_functions.x",
]

截至编写本文时,如果您已使用cargo generate,则您将已具有linkall标志。从模板生成不包括rom_functions标志。

优化级别

必须使用2或3级优化进行构建,否则可能甚至无法连接或广播。

要使它对您的调试构建也生效,请将以下内容添加到您的Cargo.toml

[profile.dev.package.esp-wifi]
opt-level = 3

Xtensa注意事项

在此crate中,使用CCOMPARE0 CPU计时器进行计时,请确保在您的应用程序中您没有使用此CPU计时器。

USB-SERIAL-JTAG

当使用USB-SERIAL-JTAG时(例如,通过在esp-println中选择jtag-serial),您必须激活功能phy-enable-usb

如果您使用USB-SERIAL-JTAG,则不要使用此功能,因为它可能会降低WiFi性能。

功能

功能 含义
wifi-logs 记录驱动程序的WiFi日志,日志级别为info(需要夜间编译器)
wifi-default 一个方便的功能,用于启用WiFi使用的一些合理默认设置。
dump-packets 在日志级别info下转储数据包信息
smoltcp 提供smoltcp特质的实现
utils 提供smoltcp初始化的实用工具。添加smoltcp依赖项
ble 启用BLE支持
wifi 启用WiFi支持
esp-now 启用esp-now支持
coex 启用WiFi-BLE共存支持
ipv4 IPv4支持。包括utils功能
ipv6 IPv6支持。包括utils功能
tcp TCP套接字支持。包括ipv4功能
udp UDP套接字支持。包括ipv4功能
igmp IGMP(多播)支持。包括ipv4功能
dns DNS支持。包括udp功能
dhcpv4 DHCPv4支持,包括创建套接字和自动配置网络设置。包括utils功能
phy-enable-usb 参见上面的USB-SERIAL-JTAG
ps-min-modem 启用最小调制解调器睡眠。仅影响STA模式
ps-max-modem 启用最大调制解调器睡眠。仅影响STA模式
log 将日志输出路由到logcrate
defmt 添加defmt::Format实现,并通过defmt输出日志
embedded-svc 实现嵌入式-svc WiFi特质

注意,并非所有功能都适用于每个MCU。例如,ble(以及因此,coex)在ESP32-S2上不可用。

当使用dump-packets功能时,您可以使用extras/esp-wifishark中的extcap在Wireshark中分析帧。有关更多信息,请参阅extras/esp-wifishark/README.md

调整

esp-wifi和示例中使用的默认值相当保守。可以更改一些重要的设置。

有关详细信息,请参阅调整

缺失/待完成

  • 非开放SoftAP支持

目录结构

  • src/timer/:用于计时和任务切换的系统计时器代码
  • src/preemt/:一个基本的RISCV和Xtensa循环任务调度器
  • src/compat/:用于模拟足够的(RT)OS以使用驱动程序所需的代码
    • common.rs:如信号量和多级互斥锁等基础知识
    • timer_compat.rs:模拟计时器相关功能的代码
  • examples/*.rs:示例

驱动程序版本

这使用来自https://github.com/esp-rs/esp-wireless-drivers-3rdparty的WiFi驱动程序

v5.1.2-602-gdb1e54a0c5-dirty commit db1e54a0c537d8b2cc2bd109ee88b50e1ca0ea80

https://github.com/esp-rs/esp-wireless-drivers-3rdparty/ (commit ca2809144cf6d2f89d413f1d415f1c4454ee6249)

许可

在以下任一项许可下:

由您选择。

贡献

除非您明确说明,否则根据Apache-2.0许可证定义的您有意提交以包含在作品中的任何贡献,应双重许可,如上所述,不附加任何额外条款或条件。

依赖项

~94MB
~357K SLoC