terça-feira, agosto 30, 2022

Usando o WiFi da Raspberry Pi PIco W (Parte 1)

Como comentei algum tempo atrás,  a Raspberry Pico W acrescenta à Pi Pico o recurso de comunicação WiFi (e possivelmente Bluetooth no futuro). Finalmente consegui colocar a mão em uma placa e o objeto de estudo agora é como usar o WiFi.


A minha atenção inicial é para a programação em C/C++. A documentação do SDK e os exemplos no github oficial são o primeiro passo para entender a implementação do WiFi e como usar. Para quem quer resultados mais fáceis e rápidos, existe também suporte no MicroPython.

Como comentei no post anterior, o chip de WiFi é uma solução no nível MAC (Media Access Control). Isto significa que ele implementa a camada física com o respectivo endereçamento (o endereço MAC) e a forma como vários dispositivos compartilham um meio de comunicação comum.

Para a maioria dos usos práticos é necessário colocar outras camadas em cima do nível MAC. A implementação destas camadas é no RP2040. Nos dias de hoje, o protocolo mais comum para os níveis seguintes é o TCP/IP.

A grosso modo, o suporte a WiFi e TCP/IP no SDK é composto de três partes:

  • pico_cyw43_arch: é a responsável por interligar as outras duas partes, para que elas sejam potencialmente intercambiáveis por outras implementações equivalentes. Além da comunicação WiFi, esta parte cuida também do acesso ao LED que está ligado ao chip de WiFi.
  • o stack TCP/IP: a Raspberry está usando o lwIP.
  • cyw43_driver: é o driver para comunicação com o chip WiFi
Tanto o driver como o stack TCP/IP tem rotinas que precisam ser chamadas periodicamente. Existem duas versões do pico_cyw43_arch com soluções diferentes para isso:

  • 'poll': nesta versão é responsabilidade da aplicação chamar periodicamente a rotina cyw43_arch_poll. As rotinas de comunicação não são seguras para uso em interrupção ou em múltiplos cores.
  • 'thread_safe_background': esta versão é mais sofisticada com o tratamento sendo feito automaticamente em background. As rotinas podem ser usadas sem problema em interrupção e nos múltiplos cores. Existe uma variação desta versão para uso com o FreeRTOS.
Existe ainda uma terceira versão do pico_cyw43_arch que implemente apenas o suporte ao LED (para quem não necessita de comunicação WiFi).

A aplicação não deve acessar diretamente pico_cyw43_arch, existem várias bibliotecas pico_* para as funções de uso de WiFi mais comuns.

Nenhum comentário: