C ++ Pico_W_Connection_Managerクラスとコマンドラインインターフェイスを使用して、Pico WでLWIP Webサーバーを実行して、APへの接続を管理します。
CLIプログラムでは、SSIDのスキャン、接続と切断、RSSIの読み取り、およびLittleFSファイルシステムを使用してPico WプログラムフラッシュにSSID情報を保存することができます。
ソースコードは、独自のユーザーインターフェイスでPico_w_connection_managerクラスを使用できるように設計されています。 GuideとしてPico_w_connection_manager_cliクラスを使用してください。コードは「スーパーループ」を想定しており、RTOを使用しません。
APへの接続がアクティブになると、デモプログラムはWebサーバーを開始し、Pico WのオンボードLEDをオンまたはオフにすることができます。このプログラムは、SSIとCGIを使用してLEDを切り替えるページと、Ajaxを使用して同じことを行うページを示しています。

デモプログラムは、シリアルポートコンソールを使用して、ユーザー入力と印刷出力を受け入れます。コマンドのリストのコマンドプロンプトでhelpを入力します。 Wi-Fi接続を管理するためのすべてのコマンドは、フォームwifi-です。他のコマンドは、LittleFSフラッシュファイルシステムを管理するためのものです。
デモプログラムは、UARTシリアルポートコンソールを使用します。 PICO-WのMicroUSBポートをシリアルポートコンソールとして使用する場合は、 CMakeLists.txt変更する必要があります。 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コマンドを入力し、プロンプトに従って接続します。 APにSSIDが隠されている場合は、 wifi-connectコマンドを使用して接続します。Link Up IP address=が表示されます。ブラウザにそのIPアドレスを入力して、Webサーバーのホームページを表示します。スイッチを切り替えると、CGIリクエストごとにページ全体がリロードされるため、知覚可能な遅延が発生します。
PICO C/C ++ SDKの依存関係は別として、PICO_W_CONNECTION_MANAGERクラスは次の外部コードを使用します。
parson JSONライブラリLittleFsファイルシステムは、Wi-Fi設定をJSON形式で保存し、少量のPicoボードプログラムフラッシュに保存します。LwIPライブラリ。デモプログラムは、次の外部コードを使用します。
EmbeddedCli CLIライブラリgetsn()実装index.htmlファイルをmy_fsdata.cファイルに変換するためにperlコマンドをサポートする必要があります。詳細については、ソースコードを参照してください。
pico-sdkをインストールしていることを確認してください。次のコマンドを実行します。以下のコマンドは、 pico-sdkが${PICO_SDK_PATH}に保存されており、 pico-sdkと同じディレクトリレベルでpico-w-connection-manager-demoディレクトリが必要であると想定しています。
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
構築された画像をPico-Wにロードします。テスト中に問題が発生した場合は、既知の問題セクションに記載されているパッチを適用して再構築します。
既知のすべての問題については、日付を確認してください。あなたがこれを構築するまでに、それらは修正されるかもしれません。
deinitialize initialize() deinitialize()を呼び出すと、ソフトウェアが切れます。これはpico-sdk問題です。この問題を回避するには、SDK Issue#980での議論に従ってpico-sdk developmentブランチとパッチを使用します。
cd ${PICO_SDK_PATH}
git fetch origin
git checkout -b develop origin/develop
git submodule update lib/cyw43-driver/
ファイル 'pico-sdk/src/rp2_common/pico_cyw43_arch/cyw43_arch_threadsafe_background.c`を編集します。 194行近くのコードを交換します
#if CYW43_LWIP
lwip_init();
#endif
と
#if CYW43_LWIP
static bool done_lwip_init;
if (!done_lwip_init) {
lwip_init();
done_lwip_init = true;
}
#endif
Webサーバーが提供するWebページはfsdata/fsディレクトリに保存されます。 WebページまたはCSSファイルを変更すると、 cmake再実行して、LWIP HTTPDアプリのページをエンコードし、 make前にmake cleanを実行するFSDATA/FSDATA.Cファイルを生成する必要があります。ビルドシステムはこれを自動的に行う必要がありますが、依存関係を正しくする方法を解決していないからではありません。
デモPRGRAMは、以下の「クラス」と呼ばれるpico-w-connection-managerクラスの特徴を行使するように設計されています。
コマンド: wifi-country and wifi-initialize 。
コマンド: wifi-deinitialize
wifi-scan-connectをコマンドします
コマンド: wifi-connect
コマンド: wifi-autoconnect
注:DEMOプログラムは、起動時にこのコマンドに相当するものを自動的に実行します。
コマンド: wifi-disconnect
コマンド:なし; Pico-Wはこれを自動的に行います。この動作をキャンセルするには、リンクの損失後にwifi-deinitializeまたはwifi-disconnectを説明する必要があります