# Raspberry Pi Pico 2 + W5500 + E22-900M30S - Meshtastic Variant Meshtastic support for a **Raspberry Pi Pico 2** (RP2350, 4 MB flash) with an external **W5500** Ethernet module and an **EBYTE E22-900M30S** LoRa module. --- ## Required Hardware | Component | Model | Notes | | --------- | ------------------- | ---------------------------------------- | | MCU | Raspberry Pi Pico 2 | RP2350 @ 150 MHz, 512 KB RAM, 4 MB flash | | Ethernet | W5500 module | Any WIZnet W5500 breakout board | | LoRa | EBYTE E22-900M30S | SX1262 + 30 dBm PA, 868/915 MHz | --- ## Pinout ### System pins (Pico 2, fixed) | GPIO | Function | | ---- | --------------------------------------- | | GP24 | VBUS sense - HIGH when USB is connected | | GP25 | User LED (heartbeat) | | GP29 | ADC3 - VSYS/3, measures supply voltage | ### W5500 Ethernet (SPI0) | W5500 signal | Pico 2 GPIO | | ------------ | ----------- | | MISO | GP16 | | CS / SCS | GP17 | | SCK | GP18 | | MOSI | GP19 | | RST | GP20 | | INT | - (nc) | | VCC | 3.3V | | GND | GND | > SPI0 is reserved for the W5500. ### E22-900M30S LoRa (SPI1) | E22 signal | Pico 2 GPIO | Notes | | ---------- | ----------- | ------------------------------------------ | | SCK | GP10 | SPI1 clock | | MOSI | GP11 | SPI1 TX | | MISO | GP12 | SPI1 RX | | NSS / CS | GP13 | Chip select | | RESET | GP15 | Active LOW reset | | DIO1 | GP14 | IRQ interrupt | | BUSY | GP2 | Module busy indicator | | RXEN | GP3 | LNA enable - held HIGH permanently | | TXEN | ← DIO2 | See wiring note below | | VCC | 3.3V | Add a 100 µF capacitor close to the module | | GND | GND | - | > See `wiring.svg` in this directory for the full connection diagram. --- ## Special wiring: DIO2 → TXEN bridge on the E22 module The E22-900M30S does **not** connect DIO2 to the TXEN pin of its PA internally. They must be bridged with a short wire or solder bridge **on the module itself**: ```text E22 DIO2 pin ──┐ ├── wire / solder bridge on the module E22 TXEN pin ──┘ ``` With this bridge in place, `SX126X_DIO2_AS_RF_SWITCH` causes the SX1262 to drive DIO2 HIGH automatically during TX, enabling the PA without needing an RP2350 GPIO for TXEN. **Without this bridge the module will not transmit.** --- ## Build ```bash pio run -e pico2_w5500_e22 ``` ### Flash - BOOTSEL mode 1. Hold the **BOOTSEL** button on the Pico 2. 2. Connect USB to the PC - it appears as a `RPI-RP2` storage drive. 3. Copy the `.uf2` file: ```text .pio/build/pico2_w5500_e22/firmware-pico2_w5500_e22-*.uf2 ``` Or directly with picotool: ```bash pio run -e pico2_w5500_e22 -t upload ``` --- ## Network usage This board uses Ethernet (no Wi-Fi). From the Meshtastic app: - **Enable Ethernet** under `Config → Network → Ethernet Enabled` - **DHCP** by default; static IP can also be configured Services available once connected: | Service | Details | | ------- | --------------------------- | | NTP | Time synchronization | | MQTT | Messages to external broker | | API | TCP socket on port 4403 | | Syslog | Remote logging (optional) | --- ## Technical notes ### LoRa - RF control | Define | Effect | | ------------------------------ | ----------------------------------------------------------- | | `SX126X_ANT_SW 3` | GP3 (RXEN) driven HIGH at init and never toggled again | | `SX126X_DIO2_AS_RF_SWITCH` | SX1262 drives DIO2 HIGH during TX → enables TXEN via bridge | | `SX126X_DIO3_TCXO_VOLTAGE 1.8` | E22 TCXO controlled by DIO3 | | `-D EBYTE_E22_900M30S` | Sets `TX_GAIN_LORA=7`, max power 22 dBm | > RXEN and TXEN may both be HIGH simultaneously during TX - this is safe for the E22 RF switch. ### Ethernet - Library: `arduino-libraries/Ethernet@^2.0.2` (supports W5100/W5200/W5500 auto-detection). - SPI0 is explicitly initialized with pins GP16/18/19 before `Ethernet.init()`. - DHCP timeout is set to 10 s (instead of the default 60 s) to avoid blocking LoRa startup. ### HW_VENDOR Mapped to `meshtastic_HardwareModel_PRIVATE_HW` - no dedicated model exists in the Meshtastic protobuf for this hardware combination yet. --- ## Memory usage (reference build) | Resource | Used | Total | % | | -------- | ------ | ------- | ----- | | RAM | 94 KB | 512 KB | 18% | | Flash | 964 KB | 3.58 MB | 26.3% |