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.
Raspberry Pi Pico W
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:
A Pico original (esquerda) e a Pico W (direita)
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):
Funções dos pinos da Pico W
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!
Daniel Quadros é Engenheiro Eletrônico pela Poli-USP, trabalha com desenvolvimento de software. Sócio fundador do Garoa Hacker Clube, brinca com eletrônica, microcontroladores, retrocomputação e sistemas embarcados. Compartilha as suas aventuras no seu blog pessoal, e agora também no site da FilipeFlop.