Execute um servidor da web LWIP em um pico w usando uma classe C ++ Pico_W_Connection_Manager e interface da linha de comando para gerenciar a conexão com o AP.
O programa da CLI permite que você digitalize o SSID, manuseie a conexão e a desconexão, leia RSSI e armazene informações SSID no programa Pico W Flash usando o sistema de arquivos Littlefs.
O código -fonte foi projetado para que você possa usar a classe Pico_w_connection_manager com sua própria interface de usuário. Use a classe Pico_w_connection_manager_cli como um guia. O código assume um "super-loop" e não usa um RTOS.
Depois que a conexão com o AP estiver ativa, o programa de demonstração inicia um servidor da web que permite que você ligue ou desative o LED a bordo do Pico W. O programa demonstra uma página que usa SSI e CGI para alternar o LED e uma segunda página que usa o Ajax para fazer a mesma coisa.

O programa de demonstração usa um console de porta serial para aceitar a entrada do usuário e a saída de impressão. Digite help no prompt de comando para uma lista de comandos. Todos os comandos para gerenciar a conexão Wi-Fi são do formulário wifi- . Os outros comandos são para gerenciar o sistema de arquivos flash Littlefs.
O programa de demonstração usa um console da porta serial do UART. Você precisará modificar CMakeLists.txt se desejar usar a porta microUSB do pico-w como o console da porta serial. Veja os comentários em 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 e siga os prompts para se conectar. Se o seu AP tiver um SSID oculto, use o comando wifi-connect para conectar-se.Link Up IP address= mensagem. Digite esse endereço IP no seu navegador para exibir a página inicial do servidor da web.Quando você alterna o comutador, haverá um atraso perceptível porque a página inteira recarrega para cada solicitação CGI.
Além das dependências do SDK pico c/c ++, a classe Pico_W_Connection_Manager usa o seguinte código externo:
parson para serializar e desserializar as configurações para o formato JSONLittleFs para armazenar configurações Wi-Fi no formato JSON para uma pequena quantidade reservada de flash do programa Pico Board.LwIP para uma pilha TCP/IP.O programa de demonstração usa o seguinte código externo:
EmbeddedCli para a implementação principal da CLIgetsn() para entrada do usuário de números e strings em resposta a instruçõesperl para converter o arquivo index.html no arquivo my_fsdata.c .Veja o código -fonte para obter mais detalhes.
Certifique-se de instalar o pico-sdk e que ele funcione. Execute os seguintes comandos. Os comandos abaixo assumem que o pico-sdk está armazenado em ${PICO_SDK_PATH} e você deseja o diretório pico-w-connection-manager-demo no mesmo nível de diretório que o 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
Carregue a imagem construída no seu pico-w. Se você tiver problemas durante o teste, aplique patches descritos na seção de problemas conhecidos e reconstruir.
Para todos os problemas conhecidos, verifique a data. Quando você construir isso, eles podem ser consertados.
Se você chamar initialize() depois de ligar deinitialize() , o software será desligado. Este é um problema que o pico-sdk . Para contornar esse problema, use o ramo e patch development pico-sdk de acordo com a discussão na edição SDK #980:
cd ${PICO_SDK_PATH}
git fetch origin
git checkout -b develop origin/develop
git submodule update lib/cyw43-driver/
Edite o arquivo 'pico-sdk/src/rp2_common/pico_cyw43_arch/cyw43_arch_threadsafe_background.c`. Substitua o código próximo à linha 194
#if CYW43_LWIP
lwip_init();
#endif
com
#if CYW43_LWIP
static bool done_lwip_init;
if (!done_lwip_init) {
lwip_init();
done_lwip_init = true;
}
#endif
As páginas da web que o servidor Web serve são armazenadas no diretório fsdata/fs . Se você alterar algum arquivo da página da Web ou CSS, precisará executar novamente cmake para gerar o arquivo fsdata/fsdata.c que codifica as páginas do aplicativo LWIP HTTPD e a execução make clean antes make . O sistema de compilação deve fazer isso automaticamente, mas não é porque eu não descobri como resolver as dependências.
O prgram de demonstração foi projetado para exercer recursos da classe pico-w-connection-manager , que é chamada de "a classe" abaixo.
Comandos: wifi-country e wifi-initialize .
Comandos: wifi-deinitialize
Comandos wifi-scan-connect
Comandos: wifi-connect
Comandos: wifi-autoconnect
Nota: O programa de demonstração é executado automaticamente o equivalente a este comando na inicialização.
Comandos: wifi-disconnect
Comandos: nenhum; O pico-w fará isso automaticamente. Para cancelar esse comportamento, você precisa executar explicação wifi-deinitialize ou wifi-disconnect após a perda de link