Exécutez un serveur Web LWIP sur un PICO W en utilisant une classe C ++ PICO_W_CONNECTION_MANager et une interface de ligne de commande pour gérer la connexion à l'AP.
Le programme CLI vous permet de rechercher le SSID, de gérer la connexion et de déconnecter, de lire RSSI et de stocker les informations SSID dans Pico W Program Flash à l'aide du système de fichiers Littlefs.
Le code source est conçu afin que vous puissiez utiliser la classe Pico_w_connection_manager avec votre propre interface utilisateur. Utilisez la classe Pico_w_connection_manager_cli comme guide. Le code suppose un "super boucle" et n'utilise pas de RTOS.
Une fois que la connexion à l'AP est active, le programme de démonstration démarre un serveur Web qui vous permet de tourner ou désactiver la LED embarquée du PICO W. Le programme démontre une page qui utilise SSI et CGI pour basculer la LED et une deuxième page qui utilise Ajax pour faire la même chose.

Le programme de démonstration utilise une console de port série pour accepter la sortie de l'entrée et de l'impression de l'utilisateur. Tapez help à l'invite de commande pour une liste de commandes. Toutes les commandes pour gérer la connexion Wi-Fi sont de la forme wifi- . Les autres commandes sont destinées à gérer le système Flash Flash Littlefs.
Le programme de démonstration utilise une console de port série UART. Vous devrez modifier CMakeLists.txt si vous souhaitez utiliser le port microUSB du PICO-W comme console de port série. Voir les commentaires dans 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 et suivez les invites pour se connecter. Si votre AP a un SSID caché, utilisez la commande wifi-connect pour vous connecter.Link Up IP address= Message. Entrez cette adresse IP dans votre navigateur pour afficher la page d'accueil du serveur Web.Lorsque vous basculez le commutateur, il y aura un délai perceptable car la page entière recharge pour chaque demande CGI.
Mis à part les dépendances sur le SDK PICO C / C ++, la classe PICO_W_CONNECTION_MANager utilise le code externe suivant:
parson pour sérialiser et désérialiser les paramètres au format JSONLittleFs pour stocker les paramètres Wi-Fi au format JSON à une petite quantité réservée de flash de programme PICO Board.LwIP pour une pile TCP / IP.Le programme de démonstration utilise le code externe suivant:
EmbeddedCli pour l'implémentation principale de la CLIgetsn() pour la saisie des nombres et les chaînes de l'utilisateur en réponse aux invitesperl pour convertir le fichier index.html en fichier my_fsdata.c .Voir le code source pour plus de détails.
Assurez-vous que vous avez installé le pico-sdk et qu'il fonctionne. Exécutez les commandes suivantes. Les commandes ci-dessous supposent que le pico-sdk est stocké dans ${PICO_SDK_PATH} et vous voulez le répertoire pico-w-connection-manager-demo au même niveau du répertoire que le 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
Chargez l'image construite dans votre pico-w. Si si vous rencontrez des problèmes pendant les tests, appliquez des correctifs décrits dans la section des problèmes connus et reconstruisez.
Pour tous les problèmes connus, vérifiez la date. Au moment où vous construisez cela, ils peuvent être réparés.
Si vous appelez initialize() après avoir appelé deinitialize() , le logiciel raccrochera. Ceci est un problème le pico-sdk . Pour contourner ce problème, utilisez la branche et le patch development pico-sdk selon la discussion dans le numéro SDK # 980:
cd ${PICO_SDK_PATH}
git fetch origin
git checkout -b develop origin/develop
git submodule update lib/cyw43-driver/
Modifiez le fichier 'pico-sdk / src / rp2_common / pico_cyw43_arch / cyw43_arch_threadsafe_background.c`. Remplacer le code près de la ligne 194
#if CYW43_LWIP
lwip_init();
#endif
avec
#if CYW43_LWIP
static bool done_lwip_init;
if (!done_lwip_init) {
lwip_init();
done_lwip_init = true;
}
#endif
Les pages Web que sert le serveur Web sont stockées dans le répertoire fsdata/fs . Si vous modifiez une page Web ou un fichier CSS, vous devrez ré-cours cmake pour générer le fichier FSDATA / FSDATA.C qui code pour les pages de l'application HTTPD LWIP et exécutez make clean avant make . Le système de construction doit le faire automatiquement, mais ce n'est pas le cas car je n'ai pas trouvé comment obtenir les dépendances correctes.
La démo Prgram est conçue pour exercer des caractéristiques de la classe pico-w-connection-manager , qui s'appelle "la classe" ci-dessous.
Commandes: wifi-country et wifi-initialize .
Commandes: wifi-deinitialize
Commandes wifi-scan-connect
Commandes: wifi-connect
Commandes: wifi-autoconnect
Remarque: Le programme de démonstration exécute automatiquement l'équivalent de cette commande au démarrage.
Commandes: wifi-disconnect
Commandes: aucun; Le Pico-W le fera automatiquement. Pour annuler ce comportement, vous devez exécuter explicitement wifi-deinitialize ou wifi-disconnect après une perte de liaison