#wifi #rp2040 #espressif #driver #series #embedded-hal #esp32-wroom

无std esp32-wroom-rp

基于Rust的Espressif ESP32-WROOM WiFi驱动框架,用于RP2040系列微控制器板

1 个不稳定版本

0.3.1 2023年1月13日

#753 in 嵌入式开发

BSD-2-Clause-Patent

71KB
1K SLoC

Build & Test Crate + Examples

esp32-wroom-rp

一个基于Rust的RP2040系列驱动程序,通过Espressif ESP32-WROOM-32U/UE WiFi子控制器/板提供WiFi功能。

支持ESP32-WROOM-32EESP32-WROOM-32UE模块。

未来的实现将支持ESP32-WROOM-DA模块。

使用方法

use rp2040_hal as hal;

use esp32_wroom_rp::{wifi::Wifi, gpio::EspControlPins};
use embedded_hal::blocking::delay::DelayMs;

use embedded_hal::spi::MODE_0;
use fugit::RateExtU32;
use hal::{clocks::Clock, pac};

let _spi_miso = pins.gpio16.into_mode::<hal::gpio::FunctionSpi>();
let _spi_sclk = pins.gpio18.into_mode::<hal::gpio::FunctionSpi>();
let _spi_mosi = pins.gpio19.into_mode::<hal::gpio::FunctionSpi>();

let spi = hal::Spi::<_, _, 8>::new(pac.SPI0);

// Exchange the uninitialized SPI driver for an initialized one
let spi = spi.init(
    &mut pac.RESETS,
    clocks.peripheral_clock.freq(),
    8_000_000u32.Hz(),
    &MODE_0,
);

let esp_pins = EspControlPins {
    // CS on pin x (GPIO7)
    cs: pins.gpio7.into_mode::<hal::gpio::PushPullOutput>(),
    // GPIO0 on pin x (GPIO2)
    gpio0: pins.gpio2.into_mode::<hal::gpio::PushPullOutput>(),
    // RESETn on pin x (GPIO11)
    resetn: pins.gpio11.into_mode::<hal::gpio::PushPullOutput>(),
    // ACK on pin x (GPIO10)
    ack: pins.gpio10.into_mode::<hal::gpio::FloatingInput>(),
};

let wifi = Wifi::init(spi, esp_pins, &mut delay).unwrap();
let version = wifi.firmware_version();

硬件

为了运行此代码,您需要购买一些硬件。本节提供最低所需的硬件列表,以及一些建议的物品以使您的生活更加轻松。

所需硬件

  1. 带预焊接引脚的Raspberry Pi Pico (2个)

  2. Pimoroni Pico Wireless Pack (1个)

  3. 面包板 (1个)

    • 注意:如果您已经拥有中型/大型面包板,则无需担心购买此特定型号。

可选但有用的硬件

  1. 断开式引脚 (1个)

    • 如果您想将引脚焊接至上述第2项的非预焊接BME280传感器板
  2. 多长度跳线套装 140个 (1个)

  3. 直插式7英寸跳线 M/M (1个)

    • 手头上有一些这些很有用
  4. 直插式6英寸跳线 M/F (1个)

    • 手头上有一些这些很有用
  5. Saleae Logic 8 (1个)

    • 注意:仅当您想参与开发/调试此项目中的SPI/I2C总线通信部分时才需要

接线细节

从本文中的Pico到Pico接线部分开始,设置使用两个Pico一起工作,一个作为Picoprobe(闪存/调试),另一个作为您的嵌入式目标。

一旦正确接线,其外观应类似于以下内容

IMG_3747

IMG_3746

Pico到ESP32 WiFi

以下表格列出了Pico板和ESP32 WiFi之间正确接线所需的引脚名称和引脚编号。这可以在如上所列的面包板上完成。请注意,V+/-轨表示面包板上的+/-列,分别用作+5 VDC和GND。

Pico ESP32 WiFi Adafuit Airlift 面包板
GND(引脚3) GND(引脚3) V-轨
GP2(引脚4) GPIO0(引脚4) GP0(引脚10)
GP7(引脚10) ESP_CSn(引脚10) CS(引脚7)
GP8(引脚11)
GP9(引脚12)
GP10(引脚14) ACK(引脚14) Busy(引脚8)
GP11(引脚15) RESETn(引脚15) RSTn(引脚9)
GP12(引脚16) SW_A(引脚16) N/A
GND(引脚18) V-轨
VBUS(引脚40) VBUS(引脚40)
VSYS(引脚39) VSYS(引脚39) VIN(引脚1) V+轨
GND(引脚38) GND(引脚38) V-轨
3V3(OUT)(引脚36) 3V3(引脚36) 3Vo(引脚2)
GP19(引脚25) MOSI(引脚25) MOSI(引脚5)
GP18(引脚24) SCLK(引脚24) SCK(引脚4)
GND(引脚23) V-轨
GP16(引脚21) MISO(引脚21) MISO(引脚5)

软件要求

  • 您可以从https://rustup.rs/安装的标准Rust工具(cargo,rustup)。

  • 对rp2040中的cortex-m0+处理器(thumbv6m-none-eabi)的工具链支持。

  • flip-link - 这允许您检测第一个核心上的堆栈溢出,目前它是唯一受支持的目标。

安装开发依赖项

rustup target install thumbv6m-none-eabi
cargo install flip-link
cargo install probe-run

构建crate和运行示例

要构建esp32-wroom-rp crate

cargo build

要构建所有示例

cd cross
cargo build

要构建特定示例(例如get_fw_version)

cd cross
cargo build --bin get_fw_version

要运行特定示例(例如get_fw_version)

cd cross
cargo run --bin get_fw_version

运行crate的单元测试

cargo test

参与其中

该项目于2022年4月启动)。有关如何为该项目和Rust Never Sleeps社区做出贡献的更多信息,请参阅主页的参与其中部分。

要参与其中,请在此处请求加入GitHub社区,然后开始为目前正在进行的研究和设计讨论做出贡献。

项目团队

依赖项

~2.5MB
~43K SLoC