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

Raspberry Pi Pico W ligado a um ADXL343

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.

Pode descarregá-lo aqui.

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()
main.py substitui os valores com a leitura actual quando se liga ao servidor do Pico W.

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.

1 comentário

  1. Ken Anderson em Julho 15, 2022 às 7:24 am

    Seria certamente agradável usar as características do HTML5 para que pudéssemos ver como o HTML5 é feito

Deixe um comentário