Tachibana

PicoWiFiModemUSB — full feature list

USB CDC WiFi modem for the Raspberry Pi Pico W · Hayes AT commands · TLS termination · GPL-3.0 license

This page lists every feature. The GitHub repository is the authoritative, up-to-date source; the AT command reference and the TLS / HTTPS guide cover usage.

Contents

1. USB CDC interface

Native serial over USB

Native USB CDC serial interface — no RS-232 hardware needed. A bare Pico W is enough. The Pico enumerates as a serial port (/dev/ttyACM* on Linux, a COM port on Windows). Connect with any serial terminal (picocom -b 115200 /dev/ttyACM0, minicom, PuTTY). USB CDC ignores the actual baud rate, but the AT-level speed (AT$SB) must match your terminal for UART-style setups.

2. Hayes AT commands

Full command set

Hayes AT command set: dial (ATDT), answer (ATA), speed dial (AT&Z/ATDS), Telnet, status (ATI), NIST clock (ATRD/ATRT), flow control (AT&K), DTR handling (AT&D). Multiple commands per line, word/number result codes (ATV) and verbosity (ATX), online escape (+++), repeat (A/).

3. 2.4 GHz WiFi

Station mode

2.4 GHz WiFi station mode, credentials (AT$SSID=/AT$PASS=) stored in flash. Scan for in-range networks (AT$SCAN: one access point per line, indexed, de-duplicated by SSID) — meant to drive a numbered menu (see the Oric configurator wificonf.bas). Auto-reconnect at power-up, mDNS name (AT$MDNS=), inbound TCP server (AT$SP=), password for incoming connections.

4. TLS / HTTPS in the dongle

TLS 1.2 termination (mbedTLS)

This fork's key contribution. The Pico W acts as a modem and as the TLS endpoint: the host computer never sees encrypted traffic. ATGET https://… performs the TLS 1.2 handshake then streams the decrypted response over the serial link — even an 8-bit machine can reach HTTPS services. The ATPOST command enables HTTP/HTTPS POST requests.

Certificate verification

By default verification is off (AT$CV0, insecure). To verify the server certificate against a trusted root: upload a CA in PEM form (AT$CA=), enable (AT$CV1 — returns ERROR if no CA is present, so it never fails open), persist (AT&W). A connection whose certificate does not chain to that CA is refused. There is no on-board clock: certificate expiry dates are not checked; trust is established via the CA chain and hostname (SNI). Details: TLS / HTTPS guide.

5. Flash storage (LittleFS)

Settings & CA in flash

On-board flash storage via LittleFS (settings + CA certificate), in the area not used by the firmware. Save to NVRAM (AT&W), reset to defaults (AT&F), display current/stored settings (AT&V).

6. Architecture

The Pico W is both the modem and the TLS endpoint; the host only ever sees cleartext.

   Oric 8-bit            LOCI               Pico W modem              Internet
 ┌────────────┐  bus   ┌────────┐ USB CDC ┌────────────────┐  WiFi  ┌──────────┐
 │  host /    │◀──────▶│  LOCI  │◀───────▶│ PicoWiFiModemUSB│◀──────▶│  server  │
 │  software  │        │        │ serial  │   + mbedTLS     │  TLS   │ (HTTPS…) │
 └────────────┘        └────────┘         └────────────────┘        └──────────┘
                       └─ cleartext serial ─┘ └──── TLS terminated here ────┘

Role of LOCILOCI is the USB host interface for Oric 8-bit computers; it carries the plain AT-command / data serial stream over USB. It is transparent with respect to TLS: it only ever handles already-decrypted bytes, so adding HTTPS required no change on the LOCI side — all the crypto lives in the firmware. (Any USB-CDC-capable host works the same way; LOCI is simply the Oric-oriented one.)

7. Installation & flashing

Flashing the firmware

A pre-built firmware is attached to each release. Unplug the Pico W, then plug it back in while holding BOOTSEL (it appears as a USB drive named RPI-RP2), copy wifi_modem-vX.Y.Z.uf2 onto it; the Pico reboots and enumerates as a serial port.

8. First-time setup

Default serial configuration: 9600 bps, 8N1.

AT$SSID=your WiFi network name     set the network to join at power-up
AT$PASS=your WiFi network password set the password (case sensitive)
ATC1                               connect now
AT&W                               save settings to NVRAM

After AT&W, the modem auto-connects on power-up and can dial out (ATDT) or fetch pages (ATGET). Options: serial speed (AT$SB=), format (AT$SU=), Telnet (ATNET), flow control (AT&K).

9. Telnet (real vs fake)

Two Telnet modes

With real Telnet, a CR sent by the modem is followed by a NUL; some BBS implementations don't strip that NUL (use fake Telnet for those). Inbound, real Telnet strips a NUL following a CR; fake Telnet passes it through. Setting: ATNET0 (off), ATNET1 (real), ATNET2 (fake), or a +/=/- prefix on ATDT for the call.

10. Building

cmake -S src -B src/build
cmake --build src/build -j
# firmware produced at: src/build/wifi_modem.uf2
# Wokwi variant (UART console): -DWOKWI=1

The Pico SDK and dependencies are vendored under src/; the ARM toolchain must be installed.

11. Lineage & license

Direct ancestry (this fork is at the bottom):

  1. jsalin/esp8266_modem — Jussi Salin's original ESP8266 virtual modem.
  2. mecparts/RetroWiFiModemmecparts/PicoWiFiModem — the Paul Rickards / mecparts lineage, ported to the Pico.
  3. sodiumlb/PicoWiFiModemUSBdirect parent: the native USB-CDC variant for the Pico W, designed to pair with LOCI.
  4. benedictemarty/PicoWiFiModemUSBthis fork: adds TLS/SSL termination (mbedTLS) and the ATGET https, AT$CA, AT$CV commands.

License GNU GPL v3.0 — a derivative work of the projects above, distributed under the same terms.

← Back to PicoWiFiModemUSB · Technical documentation →