Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauche tiefer in die Welt des Raspberry Pi, Arduino und ESP32 ein mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Löse Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Austausch von Tipps und Tutorials zur Verbesserung deiner Fähigkeiten.
Exklusive Vorschauen: Erhalte frühen Zugang zu neuen Produktankündigungen und Einblicke.
Sonderangebote: Genieße exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nimm an Gewinnspielen und Feiertagsaktionen teil.
👉 Bist du bereit, mit uns zu erkunden und zu kreieren? Klicke auf [hier] und trete heute bei!
8.3 Temperatur- und Feuchtigkeitsüberwachung über @AdafruitIO
In diesem Projekt wirst du Adafruit IO erkunden, eine leistungsstarke und benutzerfreundliche IoT-Plattform. Mit MicroPython verbindet sich dein Raspberry Pi Pico W mit Wi-Fi und integriert sich in Adafruit IO, um seine Echtzeitkommunikations- und Steuerungsfähigkeiten zu demonstrieren.
Das Projekt verwendet einen DHT11-Sensor, der Temperatur und Feuchtigkeit misst und die Daten mithilfe des MQTT-Protokolls an das Adafruit IO-Dashboard sendet. Zusätzlich ermöglicht der Status eines virtuellen Schalters auf dem Dashboard die Fernsteuerung einer LED. Der Code nutzt auch die Adafruit IO REST API während der Einrichtung, um den Zustand der LED mit der Hardware zu synchronisieren und so einen reibungslosen Betrieb zu gewährleisten.
Durch die Kombination von MQTT für den Echtzeitaustausch von Daten und REST-APIs für die Einrichtungssynchronisation bietet dieses Projekt eine hervorragende Einführung in die Konzepte der IoT-Programmierung.
1. Baue den Schaltkreis
Benötigte Komponenten
Für dieses Projekt benötigst du die folgenden Komponenten.
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
Name |
ITEMS IN THIS KIT |
LINK |
|---|---|---|
Pico 2 W Starter Kit |
450+ |
Du kannst sie auch separat über die unten stehenden Links kaufen.
SN |
COMPONENT |
QUANTITY |
LINK |
|---|---|---|---|
1 |
1 |
||
2 |
Micro USB Cable |
1 |
|
3 |
1 |
||
4 |
Mehrere |
||
5 |
1 |
- |
2. Einrichtung des Adafruit IO-Dashboards
Besuche Adafruit IO und klicke auf Start for Free, um ein kostenloses Konto zu erstellen.
Fülle das Anmeldeformular aus, um dein Konto zu erstellen.
Sobald dein Konto erstellt ist, navigiere zurück zu Adafruit IO. Klicke auf Dashboards, dann wähle New Dashboard.
Erstelle ein New Dashboard.
Betrete das neu erstellte Dashboard und erstelle einen neuen Block.
Füge einen Toggle Block zu deinem Dashboard hinzu.
Erstelle einen neuen Feed für diesen Block. Dieser Feed wird die LED steuern, benenne ihn also LED.
Wähle den LED-Feed aus und fahre mit dem nächsten Schritt fort.
Vervollständige die Blockeinstellungen (hauptsächlich Blocktitel, Text für Ein und Text für Aus), dann klicke unten rechts auf den Create block-Knopf, um fertigzustellen.
Erstelle zwei zusätzliche Text Blocks, um Temperatur und Feuchtigkeit anzuzeigen. Für diese Blöcke erstelle Feeds namens temperature und humidity.
Nachdem du die Blöcke erstellt hast, sollte dein Dashboard ähnlich aussehen wie dieses:
Passe das Layout nach Bedarf mit der Option Edit Layout an.
Klicke auf API Key, um deinen Benutzernamen und API-Schlüssel anzuzeigen. Notiere dir diese Anmeldeinformationen, da sie in deinem Code benötigt werden.
3. Führe den Code aus
Dann verbinde das Pico 2 W-Board mit dem Computer über das USB-Kabel.
Öffne die Datei
8.3_adafruitio.pyunter dem Pfadpico-2w-kit/micropython/iot/8.3_adafruitio, oder kopiere diesen Code in deine IDE.Bemerkung
Dieser Code hängt von der Datei
lib/umqtt/simple.mpyab. Stelle sicher, dass du sie auf das Pico-Board hochgeladen hast, bevor du das Skript ausführst.Bemerkung
Bevor du den Code ausführst, stelle sicher, dass du die Wi-Fi-Anmeldeinformationen und die Adafruit IO-Konfiguration (wie in Schritt 2.13 erwähnt) aktualisiert hast.
import network import time from umqtt.simple import MQTTClient from machine import Pin import utime import dht import urequests # Wi-Fi-Konfiguration SSID = "your_wifi_ssid" # ändere dies PASSWORD = "your_password" # ändere dies # Adafruit IO-Konfiguration AIO_SERVER = "io.adafruit.com" AIO_PORT = 1883 AIO_USER = "your_name_adafruitIO" # ändere dies AIO_KEY = "aio_xxxxxxxxx" # ändere dies AIO_FEED_HUM = "humidity" AIO_FEED_TEMP = "temperature" AIO_FEED_LED = "led" # DHT11 und LED-Konfiguration sensor = dht.DHT11(Pin(15)) led = Pin("LED", Pin.OUT) # Zeitstempel für periodische Aufgaben last_update = time.ticks_ms() # Verbinde mit Wi-Fi def connect_wifi(): wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(SSID, PASSWORD) while not wlan.isconnected(): print("Connecting to WiFi...") time.sleep(1) print("WiFi Connected:", wlan.ifconfig()) # Behandle empfangene MQTT-Nachrichten def message_callback(topic, msg): global led message = msg.decode() print("Received message on topic {}: {}".format(topic, message)) if message.lower() == "on": led.value(1) # LED einschalten elif message.lower() == "off": led.value(0) # LED ausschalten # Verbinde mit Adafruit IO def connect_adafruit(): client = MQTTClient("pico", AIO_SERVER, AIO_PORT, AIO_USER, AIO_KEY) client.set_callback(message_callback) client.connect() print("Connected to Adafruit IO") return client # Hole den letzten Wert aus einem Feed def get_feed_value(feed_name): url = f"https://io.adafruit.com/api/v2/{AIO_USER}/feeds/{feed_name}/data/last" headers = {"X-AIO-Key": AIO_KEY} try: response = urequests.get(url, headers=headers) if response.status_code == 200: data = response.json() print(f"Feed {feed_name} last value: {data['value']}") return data["value"] else: print(f"Failed to get feed value: {response.status_code}") return None except Exception as e: print("Error fetching feed value:", e) return None # Hauptprogramm def main(): global last_update connect_wifi() client = connect_adafruit() # Abonnieren des LED-Feeds led_topic = f"{AIO_USER}/feeds/{AIO_FEED_LED}" client.subscribe(led_topic) print(f"Subscribed to {led_topic}") # Anfänglichen LED-Zustand synchronisieren led_state = get_feed_value(AIO_FEED_LED) if led_state: if led_state.lower() == "on": led.value(1) elif led_state.lower() == "off": led.value(0) while True: # Überprüfe neue MQTT-Nachrichten client.check_msg() # DHT11-Daten alle 10 Sekunden aktualisieren if time.ticks_diff(time.ticks_ms(), last_update) > 10000: try: sensor.measure() temperature = str(sensor.temperature) # Temperatur humidity = str(sensor.humidity) # Feuchtigkeit print("Temperature: {}C Humidity: {}%".format(temperature, humidity)) # Daten an Adafruit IO senden client.publish(f"{AIO_USER}/feeds/{AIO_FEED_TEMP}", temperature) client.publish(f"{AIO_USER}/feeds/{AIO_FEED_HUM}", humidity) last_update = time.ticks_ms() # Zeitstempel aktualisieren except Exception as e: print("Error:", e) try: main() except Exception as e: print("Error:", e)
Sobald der Code erfolgreich auf das Pico gespeichert und ausgeführt wurde, siehst du die folgende Nachricht im seriellen Monitor, die eine erfolgreiche Kommunikation mit Adafruit IO bestätigt.
Navigiere zurück zu Adafruit IO. Du kannst jetzt die Temperatur- und Feuchtigkeitswerte auf dem Dashboard anzeigen oder den LED-Umschalter verwenden, um den Ein-/Ausschaltzustand der externen LED, die mit dem Schaltkreis verbunden ist, zu steuern.