Estação meteorológica remota Raspberry Pi Pico W (alimentada por energia solar)

Estação meteorológica do softap Raspberry Pi Pico W

Uma caraterística muito especial do Raspberry Pi Pico W é a funcionalidade SoftAP.

SoftAP significa ponto de acesso ativado por software, que lhe permite transmitir uma rede WiFi diretamente a partir do Raspberry Pi Pico W.

Foi por isso que optámos por fazer este projeto com energia solar.

Como um projeto de energia solar se cruza com o SoftAP

A questão é a seguinte.

Se quisesse criar um projeto que medisse dados fora de casa, descobriria que não conseguiria obter esses dados sem fios.

Mais vale utilizar o Pico normal neste cenário, uma vez que não poderá utilizar a sua capacidade sem fios.

Um projeto de energia solar é provavelmente um deles, uma vez que é necessário colocá-lo numa zona de exposição solar, que normalmente é ao ar livre.

É aqui que entra o SoftAP. Digamos que quer saber como está o tempo lá fora. Então, liga-se ao SoftAP que o Raspberry Pi Pico W está a transmitir e, em seguida, inicia sessão no endereço IP que apresenta os dados.

Este é praticamente o melhor cenário de como podemos explorar as vantagens do Raspberry Pi Pico W.

Quer dizer, é possível comprar um complemento LTE ou um complemento sem fios de longo alcance, mas nesse caso não seria realmente um tutorial do Pico W, uma vez que poderia utilizar esses componentes no Pico normal.

E quanto ao Bluetooth no Raspberry Pi Pico W?

Seria ótimo se pudesse utilizar o Bluetooth, mas à data de publicação deste tutorial, o Bluetooth não está ativado no Raspberry Pi Pico W.

Em 1 de julho de 2022, o engenheiro de Raspberry Pi e moderador do fórum jamesh disse: "Já começámos a trabalhar no software para o BT, ainda não há um calendário que possa oferecer. O software precisa de ser escrito, testado e os tutoriais escritos."

Peças

O projeto completo com o painel solar na parte inferior da placa de ensaio

Atualizar o firmware do Raspberry Pi Pico W

O firmware do Raspberry Pi Pico W continua a evoluir constantemente, pelo que seria melhor utilizar o firmware mais recente. Por exemplo, o primeiro MicroPython UF2 público para o Pico W tem alguns problemas de segurança, uma vez que as redes estão sempre abertas.

Siga esta ligação para saber como actualizá-la. A ligação também mostra um método de início rápido para transmitir a sua própria rede WiFi.

Instalação solar

Um painel solar que alimente o Pico W deve produzir 6V e 150mA, no mínimo.

O painel solar deve produzir pelo menos 6 volts e 150mA.

A bateria deve ser uma bateria de lítio da série 18650 com uma tensão nominal de 3,7V.

Módulo de carregamento USB-C TP4056

O módulo TP4056 protegerá a bateria e alimentará o Pico W.

Dispositivo de controlo meteorológico

Placa breakout BME688 por pi3g.

Para este projeto, estamos a utilizar o nosso Placa breakout BME688 concebida internamente.

Pode utilizar qualquer sensor meteorológico, como um DHT11 ou DHT22, mas o código e a cablagem deste artigo destinam-se realmente a um BME688.

Cablagem

Coloque o Pico W e o BME688 numa placa de ensaio.

Há quatro pinos que precisa de ligar: 3.3V, GND, SCL e SDA no BME688.

Eis o que utilizámos:

Pico W's GP1 liga-se a SCL;

GP0 liga-se a SDA;

GND liga-se a GND;

Estes três pinos devem estar em linha, junto à ranhura micro-USB.

3V3 liga-se a 3V3que se encontra do outro lado da placa.

Módulo de carregamento USB-C TP4056

É necessário soldar os fios no TP4056.

É uma boa prática soldar os fios de cor vermelha às ligações positivas e os fios pretos às negativas.

Projeto de painel solar Raspberry Pi Pico W

Os pinos ao lado do conetor USB-C destinam-se a uma ligação de alimentação externa, como o nosso módulo solar.

Ligue estes pinos ao seu painel solar.

Do outro lado, existem pinos que se destinam à saída de energia. Os pinos designados por B+ e B- devem ser ligados à bateria.

Decidimos usar pinças para ligar o nosso suporte de pilhas ao TP4056 no caso de precisarmos de alterar o circuito, mas pode soldar o suporte de pilhas diretamente ao TP4056 se quiser.

Díodo Schottky

Ligar um díodo Schottky ao pino VSYS do Pico W.

Certifique-se de que o anel cinzento do díodo está virado para o Pico W e que a outra extremidade está ligada ao carril positivo da placa de ensaio.

Uma vez que estamos a alimentar o Pico com duas entradas de energia, USB e o sistema solar, precisamos de utilizar um díodo Schottky.

Um díodo Schottky evita a retroalimentação e permite-lhe utilizar duas tensões. Saiba mais aqui.

Ligar o TP4056 à placa de ensaio

Raspberry Pi Pico W alimentado por energia solar completo!
Raspberry Pi Pico W alimentado por energia solar completo!

Ligue a saída positiva do TP4056 ao carril positivo da placa de ensaio, onde se encontra o díodo Schottky.

De seguida, ligue a saída negativa do TP4056 a um pino negativo do Raspberry Pi Pico W.

Código para executar a estação meteorológica Raspberry Pi Pico W

Carregámos todo o nosso código para o nosso Repositório do Github aqui.

Aqui está um guia sobre como carregar ficheiros para o seu Pico W.

Se tiver ligado os componentes tal como está escrito acima, poderá executar o código sem quaisquer alterações.

Dito isto, eis alguns aspectos que poderá querer alterar.

bme68x.py

Este script modifica a saída do BME688.

Para obter leituras exactas de temperatura e altitude, terá de modificar estas linhas, destacadas a negrito:

 # change this to match the location's pressure (hPa) at sea level
        # bme68x.sea_level_pressure = 1013.25
       <strong> self.bme68x.sea_level_pressure = 1013</strong>

        # You will usually have to add an offset to account for the temperature of
        # the sensor. This is usually around 5 degrees but varies by use. Use a
        # separate temperature sensor to calibrate this one.
        <strong>self.temperature_offset = -9</strong>

main.py

O ficheiro main.py inicia um ponto de acesso e também executa um servidor que entrega um ficheiro HTML a qualquer pessoa que se ligue.

O ficheiro HTML é onde se podem ver as leituras do BME688.

Ao receber uma ligação (via sockets), o Pico W enviará o ficheiro index.html, mas antes de o enviar, substituirá algumas strings pelos dados retirados do BME688, através deste bloco de código:

data = {
    'T': 0,
    'P': 0,
    'A': 0,
    'H': 0,
    'G': 0,
    }
...
def get_html(html_name):
    with open(html_name, 'r') as file:
        html = file.read()
        
    return html
...
sensor = bme68x.BME68X()
... 
response = get_html('index.html')
    data = sensor.save_data('data.json')
    blink_onboard_led(1, 0.2)
    response = response.replace('id_temp', str(data['T']))
    response = response.replace('id_pres', str(data['P']))
    response = response.replace('id_alti', str(data['A']))
    response = response.replace('id_humi', str(data['H']))
    response = response.replace('id_gas', str(data['G']))
    print_data(data)
    conn.send(response)
    conn.close()

Como pode ver, a linha onde diz dados = sensor.save_data('data.json') é onde obtemos os dados do sensor e, em seguida, o código modifica o ficheiro HTML com as leituras corretas de temperatura, pressão, altitude, humidade e condutividade do gás.

Há uma atualização automática de três em três segundos.

Segue-se o bloco de código necessário para transmitir o ponto de acesso no Raspberry Pi Pico W:


essid = 'Pico-W-Weather-Station'
password = '#FreeThePicoW'

ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid=essid, password=password)

while ap.active() == False:
    pass

print('Connection successfull')
print(ap.ifconfig())

# Create sensor object
sensor = bme68x.BME68X()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(3)
blink_onboard_led(3, 0.2)

Nota: se estiver a utilizar o firmware original, deve actualizá-lo, caso contrário não conseguirá mudar o nome do SSID ou ter segurança sem fios. Testámo-lo na versão nocturna de 15 de julho de 2022 e finalmente funcionou. Há mais algumas peculiaridades e erros, por isso não deixe de ler o nosso guia aqui.

CLIQUE AQUI: Difusão de uma rede WiFi (ponto de acesso SoftAP)

Ligação ao seu ponto de acesso Pico W

Após a transmissão bem sucedida do PA, o Pico W piscará três vezes com o código fornecido.

Ligue-se ao seu PA, que deve ter o nome Pico-W-Weather-Station.

Introduzir a palavra-passe #FreeThePicoW

Ligue-se ao seu Pico utilizando o endereço IP. Se o executou a partir do Thonny, verá o endereço IP na shell.

Caso contrário, pode tentar 192.168.4.1 uma vez que este é normalmente o endereço IP do Pico W e deverá ver a imagem do ecrã à direita:

Está feito

Neste projeto, aprendeu a transmitir uma rede a partir da funcionalidade SoftAP do Raspberry Pi Pico W. Também aprendeu a ligar um painel solar e uma bateria ao Pico W.

Se quiser saber mais sobre o Pico W, porque não ler o nosso mega artigo aqui?

CLIQUE AQUI: Tudo o que precisa de saber sobre o Raspberry Pi Pico W

7 comentários

  1. Carlos em Julho 25, 2022 às 8:34 am

    As especificações do TP4056 dizem para manter a tensão de entrada em 5.5v ou 6V, o painel solar de 6V pode dar 6V e provavelmente 7V+ nalguns casos. Estou um pouco confuso em relação a este ponto. Podem esclarecer-me?

    Obrigado!

  2. Bigalbo em Julho 28, 2022 às 8:12 am

    Realizei este projeto e obtive excelentes resultados, com leituras muito precisas. Mas encontrei um problema: só funciona durante cerca de 10 a 15 minutos e depois pára. Descobri que, se apagar o ficheiro json, é a única forma de o fazer voltar a funcionar
    Existe alguma forma de o impedir de os armazenar e de enviar apenas dados
    Tenho de dizer que bom trabalho, continuem a vir, por favor.

    • Nabla em Agosto 8, 2022 às 1:14 pm

      No ficheiro bme68x.py, o método save_data continua a adicionar linhas ao ficheiro Jason. A dada altura, este deve estar a ficar demasiado grande. Pode modificar para manter apenas as últimas x linhas de data_list antes de guardar o ficheiro. Terá de descobrir o x ideal. Também pode manter apenas a medição atual. Desta forma, o ficheiro mantém-se suficientemente pequeno.

  3. Thomas em Setembro 6, 2022 às 11:31 am

    Após 4.104 caracteres, o 'data.json' enche a memória do pequeno pico .-/

    A questão é: como limitar isto para que o projeto acima referido seja concluído de forma funcional?
    Um exemplo / adição de código (como uma atualização) seria muito apreciado!

    TiA - e continuem o bom trabalho...
    PS: também foi publicada uma Issue correspondente no GitHub Repo.

  4. BigMac em Setembro 14, 2022 às 6:43 pm

    Utilizar o TP 4056 para um projeto deste tipo não é uma solução eficaz, ver:
    https://www.best-microcontroller-projects.com/tp4056.html

    Design construtivo, talvez usando um MPTT Set Switch, como o Waveshare,
    Descrição aqui:
    https://www.waveshare.com/solar-power-manager.htm

    Saúde!

  5. Mark Beans em Julho 9, 2023 às 9:01 pm

    Grande ideia de projeto! Alguém desenhou uma caixa impressa em 3D para isto que queira partilhar?

  6. Pavlo em Fevereiro 22, 2024 às 11:32 am

    Hi,
    obrigado pelo manual.
    De acordo com as especificações TP4056 LED-Anzeige Rot: (Ladevorgang), LED-Anzeige Blau: (Standby, Ladevorgang abgeschlossen)
    No meu caso, tenho ambos os LEDs acesos no TP4056 quando o painel solar é colocado sob luz direta. É esse o objetivo?
    É possível que a bateria possa ser carregada a partir de energia solar e possa fornecer energia ao Pico em simultâneo?

Deixe um comentário