O modelo W da Raspberry Pi Pico acrescenta o recurso de comunicação WiFi à poderosa e flexível Pi Pico, facilitando o seu uso em aplicações da Internet das Coisas (IoT). Neste post vamos dar os primeiros passos com a Pico W, instalar o MicroPython, conectar a a placa em uma rede WiFi e acessar um serviço simples na internet.
Conhecendo a Raspberry Pi Pico W
A Raspberry Pi é mais conhecida pelos seus modelos do tipo SBC – Single Board Computer ou computadores em uma única placa – como os modelos 1 a 4 e Zero. Estas placas normalmente rodam Linux e permitem a conexão de monitores, teclados e mouse.
As placas da linha Raspberry Pi Pico são placas baseadas em microcontrolador. Rodam normalmente em “bare metal” (sem sistema operacional) ou com sistemas operacionais de tempo real e são voltadas à conexão de sensores e controle de dispositivos.
A Raspberry Pi Pico W possui as mesmas dimensões e os mesmos pinos que a Pico original:
Ambas utilizam o microcontrolador RP2040 (desenvolvido pela Raspberry Pi Foundation), com dois cores ARM M0+, 264K de Ram e o recurso de E/S programável (PIO). Possuem um LED, um conector USB micro, um botão para entrada no modo de carga de software, um conector para debug (SWD) e uma Flash de 2M para armazenamento do programa e dados. Os pinos laterais fornecem até 25 entradas ou saídas digitais, 3 entradas analógicas e acesso às interfaces seriais UART, I2C e SPI (duas de cada):
A Raspberry Pi Pico W acrescenta o circuito necessário para a comunicação WiFi (localizado embaixo da proteção metálica). Uma outra diferença é que o LED presente na placa passa a estar ligado ao controlador do WiFi (Infineon 43439) ao invés do RP2040.
A programação da Pico W pode ser feita em C/C++, usando o SDK da Raspberry ou as bibliotecas do Arduino, e em MicroPython e CircuitPython.
Instalando o MicroPython na Pico W
A versão mais recente do MicroPython para a Pico W pode ser baixada do site oficial. No momento em que escrevo, a versão com suporte ao Pico W ainda está em beta (“unstable”) mas não existem relatos de problemas sérios. A instalação do software na placa é feita seguindo os passos abaixo:
- Com a placa desconectada do micro, aperte o botão BOOT e o mantenha apertado
- Conecte a placa ao micro usando um cabo micro USB
- Solte o botão BOOT
- A placa será reconhecida como uma unidade de nome RPI-RP2
- Copie o arquivo .uf2 que você baixou do site oficial para esta unidade
Ao final da carga a Pico W reiniciará e passará a se apresentar como uma porta serial. Nas versões atuais de Windows, MacOS e Linux não é necessário instalar um driver.
Instalando a IDE Thonny no PC
O MicroPython utiliza a porta serial criada na USB para receber comandos (conexão REPL – Read Evaluate Print Loop). A aplicação Thonny utiliza isto para fornecer um ambiente integrado de desenvolvimento.
O Thonny deve ser baixado do site oficial. Estão disponíveis versões para Windows, MacOS e Linux. Para o Windows atual, basta baixar a versão “Installer with 64-bit Python 3.10” da página inicial e executá-la. Se você for um usuário avançado, o site do Thonny descreve outras opções.
A primeira vez que você escutar o Thonny ele vai dar o erro “Couldn’t find the device automatically”. Use Ferramentas Opções para acessar a tela de configuração, escolha a aba Interpretador e selecione “MicroPython (Raspberry Pi Pico):
Clique em OK. Na tela principal clique no ícone STOP (🛑). Na área “Shell” da tela deve aparecer a identificação da versão do MicroPython que você instalou na Pico W:
Conectando a Pico W a uma Rede WiFi
Digite o programa abaixo na parte principal do Thonny (identificada como “<untitled>”, colocando o nome da sua rede (ESSID) e a senha correspondente:
import rp2 import network from time import sleep rp2.country('BR') wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect('rede', 'senha') print ("Conectando...") while not wlan.isconnected() and wlan.status() >= 0: sleep(1) if wlan.isconnected(): print ("Conectado") print("IP: "+wlan.ifconfig()[0])
Pressione o botão de execução (o triângulo verde), selecione Raspberry Pi Pico e forneça o nome t1.py.
Vamos entender o que estamos fazendo:
- Os comandos import carregam as bibliotecas que vamos usar.
- rp2.country(‘BR’) informa que vamos usar a placa no Brasil. Se isto não for feito o módulo WiFi usará somente os canais que estão disponíveis em todos os países.
- A interface de comunicação (WLAN) será usada no modo station (se conectando a uma rede).
- O método connect() dispara uma tentativa de conexão, que prosseguirá em paralelo ao seu programa. Os métodos isconnected() e status() permitem verificar se uma conexão ou erro ocorreu.
- Neste exemplo estamos aguardando indefinidamente a conexão. No próximo exemplo colocaremos um tempo limite para a conexão
- Conseguida a conexão, wlan.ifconfig() informa o IP obtido (e outras informações).
Acessando um Serviço na Internet
Para esse exemplo vamos usar um serviço gratuito e aberto de consulta a informações sobre os filmes da série Star Wars. Este serviço é um exemplo bem simples de API REST, a documentação completa pode ser vista em https://swapi.dev/documentation. A consulta que vamos usar é feita acessando o endereço https://swapi.dev/api/films/{filme}/ onde {filme} é o número do filme de 1 a 9 (em ordem de lançamento). A resposta vem no formato json:
{ "characters": [ "https://swapi.dev/api/people/1/", ... ], "created": "2014-12-10T14:23:31.880000Z", "director": "George Lucas", "edited": "2014-12-12T11:24:39.858000Z", "episode_id": 4, "opening_crawl": "It is a period of civil war...", "planets": [ "https://swapi.dev/api/planets/1/", ... ], "producer": "Gary Kurtz, Rick McCallum", "release_date": "1977-05-25", "species": [ "https://swapi.dev/api/species/1/", ... ], "starships": [ "https://swapi.dev/api/starships/2/", ... ], "title": "A New Hope", "url": "https://swapi.dev/api/films/1/", "vehicles": [ "https://swapi.dev/api/vehicles/4/", ... ] }
No nosso exemplo vamos consultar o primeiro filme e mostrar o seu título e o texto apresentado na abertura.
import rp2 import network import time import urequests import json filme = 1 url = 'https://swapi.dev/api/films/{0}/'.format(filme) TIMEOUT = 10 rp2.country('BR') wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect('rede', 'senha') print ('Conectando...') timeout = time.ticks_add(time.ticks_ms(), TIMEOUT*1000) while not wlan.isconnected() and wlan.status() >= 0 and \ time.ticks_diff(timeout, time.ticks_ms()) > 0: time.sleep(0.2) if wlan.isconnected(): print ('Conectado') print ('Consultando filme {0}'.format(filme)) r = urequests.get(url) if r.status_code == 200: resposta = json.loads(r.text) print ('Episodio {0}: {1}'.format(resposta['episode_id'], resposta['title'])) print (resposta['opening_crawl']) else: print ('ERRO: {0}'.format(r.status_code)); r.close() else: print ('ERRO: Nao conseguiu conectar ao WiFi!') wlan.active(False)
Conclusão
Neste artigo vimos os primeiros passos com a Pico W, como conectá-la em uma rede WiFi e usá-la para acessar serviços disponíveis na internet. O MicroPython torna bastante simples isso, protegendo o programador das complexidades dos protocolos e formatos envolvidos.
Alguns exemplos de operações que podemos fazer com a Pico W:
- Registrar na “nuvem” informações coletadas de sensores conectados a ela, para posterior processamento e visualização.
- Acionar dispositivos conectados a ela conforme comandos recebidos pela rede (diretamente de um outro dispositivo ou de um site na internet).
- Implementar um mini web server para apresentar informações de sensores e/ou controlar dispositivos conectados a ela.
Conte para a gente nos comentários o que você pretende fazer com a Pico W e siga a MakerHero no Instagram para se manter atualizado sobre nosso blog e produtos!
Bacana Daniel, implementei aqui com sucesso.
Obrigado por compartilhar.
Olá Diorgenes.
Obrigado pelo feedback.
Ficamos a disposição.
Att.
Vitor Mattos.
MakerHero.