Führen Sie einen LWIP -Webserver auf einem PICO W mit einer C ++ Pico_W_Connection_Manager -Klasse und einer Befehlszeilenschnittstelle aus, um die Verbindung zum AP zu verwalten.
Mit dem CLI -Programm können Sie nach dem LittleFS -Dateisystem nach SSID -Anschlüssen scannen, Connect und Trennen, Lesen von RSSI und SSID -Informationen im Pico W -Programm Flash lesen.
Der Quellcode ist so gestaltet, dass Sie die Klasse Pico_w_connection_manager mit Ihrer eigenen Benutzeroberfläche verwenden können. Verwenden Sie die Klasse Pico_w_connection_manager_cli als Handbuch. Der Code setzt eine "Super-Schleife" an und verwendet keine RTOs.
Sobald die Verbindung zum AP aktiv ist, startet das Demo-Programm einen Webserver, mit dem Sie die LED der PICO W an Bord ein- oder ausschalten können. Das Programm demonstriert eine Seite, auf der SSI und CGI die LED umschalten, und eine zweite Seite, auf der AJAX dasselbe tut.

Das Demo -Programm verwendet eine serielle Portkonsole, um Benutzereingaben und Druckausgaben zu akzeptieren. Geben Sie help in die Eingabeaufforderung ein, um eine Liste von Befehlen zu erhalten. Alle Befehle zur Verwaltung der Wi-Fi-Verbindung stammen aus der Form wifi- . Die anderen Befehle dienen zum Verwalten des LittleFS -Flash -Dateisystems.
Das Demo -Programm verwendet eine UART -serielle Portkonsole. Sie müssen CMakeLists.txt ändern, wenn Sie den MicroSB-Anschluss von Pico-W als serielle Portkonsole verwenden möchten. Siehe die Kommentare in 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 ein und befolgen Sie die Eingabeaufforderungen, eine Verbindung herzustellen. Wenn Ihr AP über eine versteckte SSID verfügt, verwenden Sie den Befehl wifi-connect um eine Verbindung herzustellen.Link Up IP address= Nachricht an. Geben Sie diese IP -Adresse in Ihren Browser ein, um die Startseite des Webservers anzuzeigen.Wenn Sie den Switch umschalten, wird eine wahrnehmbare Verzögerung stattfinden, da die gesamte Seite für jede CGI -Anforderung nachgeladen wird.
Abgesehen von den Abhängigkeiten auf der PICO C/C ++ SDK verwendet die Klasse PICO_W_CONNECTION_MANAGER den folgenden externen Code:
parson JSON -Bibliothek zur Serialisierung und Deserialisierung der Einstellungen zum JSON -FormatLittleFs Dateisystem zum Speichern von Wi-Fi-Einstellungen im JSON-Format in einer kleinen reservierten Menge an Pico Board-Programm-Flash.LwIP -Bibliothek für einen TCP/IP -Stapel.Das Demo -Programm verwendet den folgenden externen Code:
EmbeddedCli -Bibliothek für die Haupt -CLI -Implementierunggetsn() Implementierung für die Benutzereingabe von Zahlen und Zeichenfolgen als Antwort auf Eingabeaufforderungenperl unterstützen, damit die Datei index.html in die Datei my_fsdata.c konvertiert.Weitere Informationen finden Sie im Quellcode.
Stellen Sie sicher, dass Sie das pico-sdk installiert haben und dass es funktioniert. Führen Sie die folgenden Befehle aus. Die folgenden Befehle gehen davon aus, dass der pico-sdk in ${PICO_SDK_PATH} gespeichert ist und Sie möchten das Verzeichnis pico-w-connection-manager-demo auf derselben Verzeichnisebene wie das 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
Laden Sie das erstellte Bild in Ihr Pico-W. Wenn Sie während des Tests auf Probleme stoßen, wenden Sie alle im Abschnitt Bekannten Probleme beschriebenen Patches an und bauen Sie sie wieder auf.
Überprüfen Sie für alle bekannten Probleme das Datum. Wenn Sie dies bauen, können sie repariert werden.
Wenn Sie initialize() aufrufen, nachdem Sie deinitialize() angerufen haben, hängt die Software auf. Dies ist ein Problem der pico-sdk . Verwenden Sie die pico-sdk development und Patch gemäß der Diskussion in SDK-Ausgabe Nr. 980, um dieses Problem zu umgehen:
cd ${PICO_SDK_PATH}
git fetch origin
git checkout -b develop origin/develop
git submodule update lib/cyw43-driver/
Bearbeiten Sie die Datei 'pico-sdk/src/rp2_common/pico_cyw43_arch/cyw43_arch_threadsafe_background.c`. Code in der Nähe von Zeile 194 ersetzen
#if CYW43_LWIP
lwip_init();
#endif
mit
#if CYW43_LWIP
static bool done_lwip_init;
if (!done_lwip_init) {
lwip_init();
done_lwip_init = true;
}
#endif
Die Webseiten, die der Webserver dient, werden im fsdata/fs -Verzeichnis gespeichert. Wenn Sie eine Webseite oder eine CSS-Datei ändern, müssen Sie cmake erneut ausführen, um die fsdata/fsdata.c-Datei zu generieren, die die Seiten für die LWIP-HTTPD-App codiert und vor make make clean . Das Build -System sollte dies automatisch tun, aber nicht, weil ich nicht herausgefunden habe, wie die Abhängigkeiten korrekt sind.
Das Demo Prgram ist für Ausübung von Funktionen der pico-w-connection-manager Klasse ausgelegt, die unten als "Klasse" bezeichnet wird.
Befehle: wifi-country und wifi-initialize .
Befehle: wifi-deinitialize
Befehle wifi-scan-connect
Befehle: wifi-connect
Befehle: wifi-autoconnect
HINWEIS: Das Demo -Programm führt das Äquivalent dieses Befehls automatisch beim Start aus.
Befehle: wifi-disconnect
Befehle: Keine; Das Pico-W wird dies automatisch tun. Um dieses Verhalten abzusagen, müssen Sie nach Linkverlust explicly wifi-deinitialize oder wifi-disconnect laufen lassen