Include PPP (Point-to-Point Protocol) Support in MicroPython Firmware for Raspberry Pi Pico W / Pico 2W
Description
Background:
Currently, the official MicroPython firmware for Raspberry Pi Pico W and Pico 2W supports network connectivity via the onboard WiFi chip. However, some projects require network connectivity via external modems (e.g., 4G/LTE/3G GSM modules) using UART and PPP. The PPP module is not currently included in the official builds.
Use Case:
- Connecting Pico W or Pico 2W to the internet via a serial modem using PPP (e.g., when WiFi is unavailable or not suitable).
- Enabling MQTT and other network protocols over mobile data networks.
Request:
- Please consider adding PPP (Point-to-Point Protocol) support (as a module or built-in) to the official MicroPython firmware for Raspberry Pi Pico W and Pico 2W.
Benefits:
- Allows greater flexibility for IoT projects.
- Enables use of Pico W/2W in remote areas with cellular connectivity.
- Unifies network API for both WiFi and modem scenarios.
References:
Thank you!
Code Size
I am unsure
Implementation
I would like to sponsor development of this feature
Code of Conduct
Yes, I agree
ports/rp2: Add support for MICROPY_PY_NETWORK_PPP_LWIP.
Add the new PPP LWIP interface into RP2's mpconfigport.h as a first-class interface.
This joins MICROPY_PY_NETWORK_NINAW10, MICROPY_PY_NETWORK_WIZNET5K and MICROPY_PY_NETWORK_CYW43 and ensures that any interface specific caveats - so far we just have a dependency on MICROPY_PY_SOCKET_EXTENDED_STATE - are dealt with.
Note: I've also included commit to add the socket state constants into the PPP module, since these are returned verbatim by ppp.status() but there's currently no means to disambiguate them. I figured I'd get away with this, but shout if you'd prefer a separate PR.
Testing
So far this bringup has been tested downstream in my RP2350 builds.
TODO: Build and test a regular Pico (RP2040) firmware depending upon this change.