7. IoT zařízení - RPi Pico - WiFi

Cíle cvičení

  • Připojení RPI Pico k IoT Brokeru, odesílání zpráv z RPI Pico
  • Zachytávání zpráv z vlastního topicu
  • Připojení DHT k RPI Pico
  • Publikování a zachytávání dat z DHT

Důležité odkazy

Raspberry Pi Pico W

Import balíčků:

  • umqtt.simple - pro práci s MQTT protokolem.
  • network - pro práci s Wi-Fi sítí.
  • time - pro práci s časem.
  • json - pro práci s JSON daty.
  • machine - přístup k nízkoúrovňovým funkcím zařízení.
Přehled modulů instalovaných na zařízení lze získat příkazem 'help('modules')'.

Raspberry Pi Pico W - konfigurace Wi-Fi

Aktivace Wi-Fi rozhraní:

Aktivace Wi-Fi rozhraní na Raspberry Pi Pico. network.WLAN(network.STA_IF) vytvoří instanci Wi-Fi rozhraní pro STA (Station) režim, což znamená, že zařízení bude fungovat jako klient Wi-Fi sítě. wlan.active(True) pak aktivuje toto rozhraní.

wlan = network.WLAN(network.STA_IF)
wlan.active(True)

Přípojení k Wi-Fi síti:

Pokus o připojení Raspberry Pi Pico k Wi-Fi síti s daným SSID a heslem.

wlan.connect(SSID, PASSWORD)

Čekání na připojení:

Kontorla, zda je Raspberry Pi Pico úspěšně připojen k Wi-Fi síti. Pokud není, program čeká na dobu 1 sekundy a poté zkontroluje znovu. Tento proces se opakuje, dokud není připojení úspěšné.

while wlan.isconnected() == False:
    print('Waiting for connection...')
    sleep(1)

Výpis konfigurace síťového rozhraní

Po úspěšném připojení k Wi-Fi síti se vypíše konfiguraci síťového rozhraní, která zahrnuje IP adresu, masku podsítě, bránu a DNS servery.

print(wlan.ifconfig())

Raspberry Pi Pico W - konfigurace MQTT

Inicializace MQTT klienta

Inicializace MQTT klienta s daným client_id, adresou SERVER a PORT MQTT brokeru. client_id je jedinečný identifikátor klienta v síti MQTT.

client = MQTTClient(client_id="RaspberryPiPico", server=SERVER, port=PORT)
client.connect()

Příprava zprávy

Zpráva je vytvořena jako JSON objekt, který obsahuje aktuální časové razítko a teplotu. Časové razítko je převedeno na celé číslo pro kompatibilitu s JSON.

current_timestamp = int(time())
MESSAGE = json.dumps({"time": current_timestamp, "temp": 23.5})

Publikování zprávy

client.publish() publikuje připravenou zprávu na daný TOPIC pomocí MQTT klienta.

client.publish(TOPIC, MESSAGE)

Výpis publikované zprávy

print(f'Published message [{TOPIC}]: {MESSAGE}')

Tento kód vypíše publikovanou zprávu a její topic pro potvrzení, že zpráva byla úspěšně odeslána.

Raspberry Pi Pico W - Ukončení spojení

# Odpojení od MQTT brokeru
client.disconnect()
 
# Odpojení od Wi-Fi sítě
wlan.disconnect()

Připojení DHT11/22

Pro měření teploty a vlhkosti lze využít DHT11/22, který je připojen prostřednictvím 1-wire sériové sběrnice. Modul 'dht' je v Micropythonu vestavěn.

Pokud má senzor 4 vývody, jedná se o starší typ a je třeba použit externí pull-up rezistor nebo zapnout interní. Modul s třemi vývody má pull-up rezistor integrován, takže je možné připojení přímo k GPIO pinu mikrokotroléru, v tomto případě GP4.

from dht import DHT22
from machine import Pin
 
p = Pin(4)
 
d = DHT22(p)
 
d.measure()
d.temperature()
d.humidity()

Při připojování dejte pozor na volbu správných vývodů. GP4 je fyzicky 6. vývod, pro napájení využijte pin VBUS na 40. vývodu, na který je routováno napěti +5V z mikroUSB konektoru. Pin GND volte dle potřeby, např. 3. vývod.

Pokud čtení informace ze senzoru trvá příliš dlouho a docházi k timeoutu, lze kód zlepšit:

from machine import Pin
from dht import DHT22
import time, sys
 
p = Pin(4)
 
d = DHT22(p)
 
while True:
  try:
    d.measure()
    time.sleep(2)
    tem = d.temperature() 
    hum = d.humidity()
    print('Temp:', hum, 'C\tHumidity', tem, '%')
    time.sleep(1)
  except OSError as e:
    print("Cant read:", e)
    sys.print_exception(e)

Další informace:

Zadání 5. miniprojektu

Rozšiřte svou IoT platformu o podporu MQTT komunikace přes internet. Vytvořte program pro Raspberry Pi Pico W který se přípojí k dostupné Wi-Fi sítí pomocí které bude Pico publikovat zprávy s daty (timestamp, teplota) do MQTT topicu. Z tohoto topicu bude Flask aplikace odebírat zprávy nad kterými provede kontrolu, zda jsou ve správném formátu. Pokud budou data správně formátovaná, pak se uloží do databáze a budou dostupna skrze webové rozhraní i REST API.

MQTT komunikace NENAHRAZUJE UART komunikaci. Bude možné posílat data jak prostřednictvím MQTT, tak i UART.

Bonus:

  • Vytvořte obousměrnou komunikaci tak, aby bylo možné měnit periodu odesílání dat z Raspberry Pi
  • Do webového rozhraní implemetujte indikaci komunikace na rozhraní. Na webovém rozhraní bude zobrazeno, jaké komunikační rozhraní je aktivní (UART, MQTT) a kdy z daného rozhraní přišla poslední data
courses/b0b37nsi/tutorials/07.txt · Last modified: 2024/04/08 15:47 by viteks