Ejecute un servidor web LWIP en un PICO W usando una clase C ++ Pico_W_Connection_Manager e interfaz de línea de comando para administrar la conexión a la AP.
El programa CLI le permite escanear para SSID, manejar conectar y desconectar, leer RSSI y almacenar información SSID en Pico W del programa Flash utilizando el sistema de archivos LittleFS.
El código fuente está diseñado para que pueda usar la clase Pico_w_connection_manager con su propia interfaz de usuario. Use la clase Pico_w_connection_manager_cli como guía. El código asume un "super-loop" y no usa un RTOS.
Una vez que la conexión al AP está activa, el programa de demostración inicia un servidor web que le permite activar o desactivar el LED a bordo de Pico W. El programa demuestra una página que usa SSI y CGI para alternar el LED y una segunda página que usa AJAX para hacer lo mismo.

El programa de demostración utiliza una consola de puerto serie para aceptar la entrada del usuario y la salida de impresión. Escriba help en el símbolo del sistema para obtener una lista de comandos. Todos los comandos para administrar la conexión Wi-Fi son de la forma wifi- . Los otros comandos son para administrar el sistema de archivos flash LittleFS.
El programa de demostración utiliza una consola de puerto serie UART. Deberá modificar CMakeLists.txt si desea utilizar el puerto microUSB de Pico-W como consola de puerto serie. Vea los comentarios en CMakeLists.txt .
pico-w-wifi-setup demo
Cli is running.
Type "help" for a list of commands
Use backspace and tab to remove chars and autocomplete
Use up and down arrows to recall previous commands
> new country code XX=Worldwide
new country code XX=Worldwide
Version: 7.95.49 (2271bb6 CY) CRC: b7a28ef3 Date: Mon 2021-11-29 22:50:27 PST U0
cyw43 loaded ok, mac 28:cd:c1:06:3d:29
API: 12.2
Data: RaspberryPi.PicoW
Compiler: 1.29.4
ClmImport: 1.47.1
Customization: v5 22/06/24
Creation: 2022-06-24 06:55:08
No SSID specified
failed to connect to
wifi-scan-connect y siga las indicaciones para conectarse. Si su AP tiene un SSID oculto, use el comando wifi-connect para conectarse.Link Up IP address= mensaje. Ingrese esa dirección IP en su navegador para mostrar la página de inicio del servidor web.Cuando alterne el conmutador, habrá un retraso perceptible porque toda la página se vuelve a cargar para cada solicitud CGI.
Además de las dependencias de la clase PICO C/C ++, la clase Pico_W_Connection_Manager usa el siguiente código externo:
parson JSON para serializar y deserializar la configuración del formato JSONLittleFs para almacenar la configuración de Wi-Fi en formato JSON a una pequeña cantidad reservada de Flash del programa Pico Board.LwIP para una pila TCP/IP.El programa de demostración utiliza el siguiente código externo:
EmbeddedCli para la implementación principal de la CLIgetsn() para la entrada del usuario de números y cadenas en respuesta a las indicacionesperl en orden convertir el archivo index.html en el archivo my_fsdata.c .Consulte el código fuente para obtener más detalles.
Asegúrese de haber instalado el pico-sdk y que funcione. Ejecutar los siguientes comandos. Los comandos a continuación suponen que el pico-sdk se almacena en ${PICO_SDK_PATH} y desea el directorio pico-w-connection-manager-demo en el mismo nivel de directorio que el pico-sdk .
export PICO_BOARD=pico_w
cd ${PICO_SDK_PATH}/..
git clone https://github.com/rppicomidi/pico-w-connection-manager-demo.git
cd pico-w-connection-manager-demo
git submodule update --recursive --init
mkdir build
cd build
cmake ..
make
Cargue la imagen construida en su pico-w. Si se encuentra con problemas durante las pruebas, aplique cualquier parche descrito en la sección de problemas conocidos y reconstruya.
Para todos los problemas conocidos, consulte la fecha. Cuando construyes esto, pueden ser arreglados.
Si llama initialize() después de llamar deinitialize() , el software colgará. Este es un problema el pico-sdk . Para trabajar en torno a este tema, use la rama development pico-sdk y el parche según la discusión en el tema SDK #980:
cd ${PICO_SDK_PATH}
git fetch origin
git checkout -b develop origin/develop
git submodule update lib/cyw43-driver/
Edite el archivo 'pico-sdk/src/rp2_common/pico_cyw43_arch/cyw43_arch_threadsafe_background.c`. Reemplace el código cerca de la línea 194
#if CYW43_LWIP
lwip_init();
#endif
con
#if CYW43_LWIP
static bool done_lwip_init;
if (!done_lwip_init) {
lwip_init();
done_lwip_init = true;
}
#endif
Las páginas web que sirve el servidor web se almacenan en el directorio fsdata/fs . Si cambia cualquier página web o archivo CSS, deberá volver a ejecutar cmake para generar el archivo FSDATA/FSDATA.C que codifica las páginas para la aplicación LWIP HTTPD y ejecuta make clean antes de make . El sistema de compilación debería hacer esto automáticamente, pero no lo hace porque no haya resuelto cómo obtener las dependencias correctas.
La demostración Prgram está diseñada para ejercer características de la clase pico-w-connection-manager , que se llama "la clase" a continuación.
Comandos: wifi-country y wifi-initialize .
Comandos: wifi-deinitialize
Comandos wifi-scan-connect
Comandos: wifi-connect
Comandos: wifi-autoconnect
Nota: El programa de demostración ejecuta el equivalente de este comando automáticamente al inicio.
Comandos: wifi-disconnect
Comandos: ninguno; El Pico-W lo hará automáticamente. Para cancelar este comportamiento, debe ejecutar explícitamente wifi-deinitialize o wifi-disconnect después de la pérdida de enlace