Transmissão de dados de sensores via WiFi com Raspberry Pi Pico W

Uma das melhores utilizações para o Raspberry Pi Pico W envolve a sua capacidade de servir uma página web.
Isto significa que pode utilizá-lo para monitorizar os dados dos sensores do seu telefone, desde que esteja no alcance WiFi.
Este projecto fornecerá uma base simples sobre como pode monitorizar os dados de aceleração e também criar um dado digital, que é activado quando se toca no sensor ADXL343.
Vídeo
Peças necessárias
- Tabuleiro do pão
- Fios de salta
O que é o ADXL343?
O ADXL343 da Analog Devices é um seguimento do seu predecessor, o ADXL345.
O sensor pode medir três eixos de medição e tem quatro ajustes de sensibilidade,+-2g, +-4g, +-8g ou +-16g. O alcance inferior dá mais resolução para movimentos lentos, o alcance superior é bom para o rastreio de alta velocidade.
O ADXL343 também tem uma biblioteca CircuitPython que podemos utilizar em MicroPython, tornando muito mais fácil o seu arranque.
Será necessário ter os cabeçalhos soldados no ADXL343, bem como no Pico W, para fazer este projecto.
Ligação do ADXL343 ao Pico W
Há quatro pinos que precisa de ligar ao Raspberry Pi.
Ligue o VIN pino a um Saída 3.3V no seu Raspberry Pi Pico W;
Ligue o GND a um pino de terra no seu Pico W;
Ligue o SDA pino para GPIO0;
Ligue o SCL pino para GPIO1.
Firmware MicroPython Intermitente para o Raspberry Pi Pico W

Em primeiro lugar, terá de fazer piscar o firmware de MicroPython para o Pico W, se ainda não o fez.
Em seguida, mantenha premido o botão BOOTSEL e ligue o seu Pico ao seu computador. Deverá ver uma nova unidade. Copie o ficheiro .UF2 que descarregou para essa unidade.
Criar o Thonny para o Raspberry Pi Pico W
Abrir a Thonny. Se ainda não o descarregou, obtê-lo aqui.
Definir o intérprete para MicroPython (Raspberry Pi Pico) na parte inferior esquerda da janela do Thonny IDE.
Copiar bibliotecas para o Pico W

Descarregue as bibliotecas e ficheiros aqui a partir do nosso repo Github.
Pode descarregar um ficheiro ZIP indo a esse link e clicando no verde "Código" e clicando Descarregar ZIP.
Uma vez descarregado, descomprima-o em algum lugar que se lembre.
Depois, no seu Thonny IDE, clique em Ver > Ficheiros para ver o seu sistema de ficheiros e o sistema de ficheiros do Pico W.
Navegar para os ficheiros descomprimidos e ir para a pasta MicroPython > II Pico W Sensor Server. Copie tudo no seu Pico W clicando com o botão direito do rato em cada item e clicando em "Upload to /".
Modificando o código
Para conseguir que o Raspberry Pi Pico se ligue à sua rede WiFi, terá de se abrir secrets.py e modificar o ssid e pwvalor do produto. Introduza o SSID (nome) da sua rede no primeiro e a palavra-passe no segundo. Guardar o ficheiro.
O index.html é a página web que será servida. A linha "<p>X AccX | Y AccY | Z AccZ</p>" e <p>Resultado DiceVal</p> serão substituídos por dados de sensores quando o projecto for executado.
Ligue o seu Raspberry Pi Pico a WiFi
O main.py é onde a acção acontece.
Estas linhas ligam-no ao seu WiFi. Não se esqueça de mudar a corda em rp2.país se o seu país não for a Alemanha (DE).
# Definir país para evitar possíveis erros
rp2.country('DE')
wlan = rede.WLAN(network.STA_IF)
wlan.active(Verdadeiro)
# Se precisar de desactivar o modo de poupança de energia
# wlan.config(pm = 0xa11140)
# Ver o endereço MAC no chip sem fios OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
imprimir('mac = ' + mac)
# Outras coisas a consultar
# print(wlan.config('canal'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))
# Carregar dados de login de ficheiros diferentes por razões de segurança
ssid = segredos['ssid']
pw = segredos['pw']
wlan.connect(ssid, pw)
O LED de bordo piscará três vezes se uma ligação WiFi for bem sucedida, graças a estas linhas de código. Irá também imprimir uma mensagem e o seu endereço IP que pode ser visualizado em Thonny. Este endereço IP é útil para aceder ao servidor mais tarde.
led = machine.Pin('LED', machine.Pin.OUT)
para i no intervalo(wlan.status()):
led.on()
time.sleep(0.2)
led.off()
time.sleep(0.2)
print('Connected')
status = wlan.ifconfig()
imprimir('ip = ' + estado[0])
Se houver um erro, o LED piscará com base no valor do código de erro.
Significados de erro
- 0 = Link Down
- 1 = Link Join
- 2 = Link NoIp
- 3 = Ligar
- -1 = Link Fail
- -2 = Link NoNet
- -3 = Link BadAuth
Ligar o Pico W a ADXL343
Esta linha inicializa um objecto I2C:
# Inicializar I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.GP0)
Em seguida, estas duas linhas criam o acelerómetro e permitem a detecção de torneira (para leitura de dados).
# Criar objecto Acelerómetro
acelerómetro = adafruit_adxl34x.ADXL343(i2c)
acelerómetro.enable_tap_detection()
Tempo para executar o código
Para executar o código, prima o botão Executar em Thonny, que é o botão com um ícone de reprodução num botão verde na barra de ferramentas superior.
Depois, ligue-se ao endereço IP do seu Raspberry Pi Pico W. Se tiver a casca do Thonny aberta, pode vê-la lá. Ou então, pode entrar no seu router e descobrir qual é o endereço IP do Pico W.
O Pico W executa um servidor HTTP com uma ligação socket e ouve as ligações, definidas aqui:
addr = socket.getaddrinfo('0.0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
Quando se liga ao endereço IP do seu Pico W, este código irá activar este código que actualizará index.html com os dados mais recentes a cada segundo.
cl, addr = s.accept()
print('Client connected from', addr)
cl_file = cl.makefile('rwb', 0)
embora Verdadeiro:
linha = cl_file.readline()
se não linha ou linha == b'\r\n':
pausa
resposta = get_html('index.html')
dados = acelerómetro.aceleração
tapped = acelerómetro.events['tap']
resposta = resposta.replace('AccX', str(data[0]))
resposta = resposta.replace('AccY', str(data[1]))
resposta = resposta.replace('AccZ', str(data[2]))
se explorado:
dice_val = str(random.randint(1,6))
resposta = resposta.replace('DiceVal', dice_val)
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n')
cl.send(resposta)
cl.close()

Como pode ver, substitui AccX, AccY e AccZ com os dados do seu sensor.
Se o sensor for tocado, então imprimirá um inteiro aleatório de 1 a 6 na string "DiceVal" na página HTML.
O que se segue?
Este tutorial representa uma forma simples de transmitir dados de sensores para uma página web.
Na verdade, este é o código que também pode utilizar para outros sensores.
A metodologia continua a ser a mesma. É necessário encontrar as bibliotecas correctas para os seus sensores, depois modificar o main.py e index.html para que possam obter os dados dos sensores e empurrar os valores certos para a página web.
Há muitos outros projectos em que pode embarcar, tais como um projecto de sensor de temperatura e humidade com um DHT22 ou BME688, ou um sensor de luminosidade com uma resistência à luz.
Seria certamente agradável usar as características do HTML5 para que pudéssemos ver como o HTML5 é feito