Hoe een Slimme Huisdierdoos te Bouwen met M5StickC Plus2
Invoering
Met de snelle ontwikkeling van Internet of Things (IoT) technologie is de Slimme Dierenbox ontstaan als een nieuw toepassingsgebied. Dierenbezitters maken zich steeds meer zorgen over de kwaliteit van het leven van hun huisdieren, maar traditionele dierenboxen missen geautomatiseerde controle en milieu monitoring. De Slimme Dierenbox kan, door sensoren en geautomatiseerde controlesystemen te integreren, de leefomgeving van huisdieren in real-time monitoren en aanpassen.
Dit project maakt gebruik van IoT-technologie en een verscheidenheid aan sensormodules om parameters zoals temperatuur, luchtvochtigheid, CO₂-concentratie en lichtintensiteit binnen de huisdierbox te monitoren, zodat de omgeving altijd binnen een comfortabel bereik blijft. Daarnaast omvat het project functionaliteit voor afstandsbediening via een cloudplatform, waardoor gebruikers milieugegevens kunnen bekijken en apparaten zoals luchtbevochtigers, ventilatoren en verwarmingskussens op elk moment kunnen aanpassen. De Slimme Huisdierbox maakt het gemakkelijker voor huisdiereigenaren om de omgeving van hun huisdieren te beheren, wat de algehele levenskwaliteit voor huisdieren verbetert.
Wat is de M5StickC Plus2?
-
Compact Ontwerp: Met een afmeting van slechts 54mm × 54mm is het gemakkelijk te dragen en te integreren in verschillende projecten.
-
Ingebouwd Display: Een 1,14-inch kleur TFT-display dat meerdere lettertypen en grafische weergaven ondersteunt.
-
Multifunctionele Sensoren: Bevat een versnellingsmeter, gyroscoop, temperatuur- en vochtigheidssensoren, onder andere, geschikt voor diverse toepassingsscenario's.
-
Ingebouwde luidspreker: Ondersteunt audioweergave, ideaal voor geluidsfeedback en alarmfuncties.
-
Rijke Interfaces: Ondersteunt GPIO, I2C, UART en andere communicatieinterfaces, wat perifere uitbreiding vergemakkelijkt.
-
Batterij-Aangedreven: Geïntegreerde batterij ondersteunt langdurige werking, geschikt voor mobiele toepassingen.
Deze sectie beschrijft de hardware en bouwt de omgeving.
1. Gebruikte hardware
2. Verbinding Methode
M5StickC Plus 2 en PaHub Verbinding:
PaHub en Sensorverbindingen:
-
Kanaal 0 op de PaHub is verbonden met de SCD40 CO2 Sensor.
-
Kanaal 1 op de PaHub is verbonden met de MLX90614 InfraroodTemperatuursensor.
-
Kanaal 2 op de PaHub is verbonden met PbHub.
PbHub en Perifeer Verbindingen:
-
Kanaal 0 op de PbHub is verbonden met een lichtsensor.
-
Kanaal 2 op de PbHub is verbonden met de camera module (alleen gebruikt voor stroom).
-
Kanaal 3 op de PbHub bestuurt de luchtbevochtiger via een relais.
-
Kanaal 4 op de PbHub bestuurt het verwarmingskussen via een relais.
-
Kanaal 5 op de PbHub bestuurt het UVA licht via een relais.
-
Kanaal 1 op de PbHub bestuurt de ventilator via een relais (optioneel).
Software-installatie
1. Softwareomgeving
Ontwikkeling Omgeving:
Voor sommige van de bibliotheken die door de sensor worden gebruikt, ga direct naar PIO Home -> Bibliotheken -> Register -> en zoek naar een trefwoord.
Vereiste bibliotheken:
-
M5GFX – Gebruikt voor grafische en tekstweergave, het bedienen van de M5Stack-display.
-
M5Unified – Biedt een uniforme API-interface voor eenvoudigere controle van M5Stack-apparaten.
-
IRremote – Voor het ontvangen en verzenden van IR-signalen om te communiceren met andere apparaten.
-
M5StickCPlus2 – Beheert de M5StickC Plus2 board, en regelt de apparaatinitialisatie en werking.
-
Sensirion I2C SCD4x – Voor het aansturen van de SCD40-omgevingssensor om temperatuur, luchtvochtigheid en CO2-niveaus te meten.
-
ArduinoJson – Gebruikt voor het verwerken en parseren van JSON-gegevens om sensorgegevens naar het cloudplatform te uploaden.
-
M5Unit-HUB en M5Unit-PbHub – Voor interactie met PaHub en PbHub modules, het uitbreiden van I2C en GPIO interfaces, en het aansluiten van extra externe apparaten.
-
TimerOne – Voor het beheersen van tijdsintervallen, zodat regelmatige sensorgegevensverzameling wordt gegarandeerd.
-
PubSubClient – Implementeert MQTT-communicatie voor het uitwisselen van gegevens met het cloudplatform.
-
Adafruit MLX90614 Bibliotheek – Gebruikt voor het aansturen van de MLX90614 infrarood temperatuursensor om de ondertemperatuur van de huisdierdoos te lezen.
2. Codestructuur
-
WiFi-verbinding:Verbindt met het netwerk via WiFi, waardoor toegang tot het cloudplatform mogelijk is voor abonnement en publicatie van gegevens.
-
MQTT Communicatie:Maakt gebruik van de PubSubClient-bibliotheek om MQTT-communicatie te implementeren, waarbij omgevingsgegevens naar het cloudplatform worden geüpload en instructies van het platform worden ontvangen.
-
Sensor Data Retrieval: Elke sensor's gegevens worden periodiek gelezen en geüpload met behulp van een pollingmethode:
-
SCD40: Leest temperatuur, luchtvochtigheid en CO2-concentratie.
-
MLX90614:Leest de temperatuur sensor gegevens (ondertemperatuur).
-
Apparaatbediening:Beheert relais om apparaten in en uit te schakelen, zoals verwarmingskussens, luchtbevochtigers, UVA-lampen, enz. De apparaten kunnen automatisch of handmatig worden bediend door de doeltemperatuur en -vochtigheid in te stellen.
3. IoT-platform en gegevensupload
-
Platformselectie: We gebruiken Alibaba Cloud IoT om gegevens te uploaden en apparaten op afstand te beheren.
-
Apparaatverbinding en Binding: Volg de installatiehandleiding om uw apparaat met het cloudplatform te binden.
-
Gegevensupload: Sensorgegevens worden geüpload via het MQTT-protocol in JSON-indeling.
// Parse the received JSON message void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); // Convert the received payload to a string char msg[length + 1]; for (unsigned int i = 0; i < length; i++) { msg[i] = (char)payload[i]; } msg[length] = '\0'; // Null terminator for the string // Output the received message Serial.println(msg); // Parse the JSON data JsonDocument doc; // Use JsonDocument to parse JSON DeserializationError error = deserializeJson(doc, msg); // Parse the message into a JSON object // Check if parsing was successful if (error) { Serial.printf("deserializeJson() failed: "); Serial.println(error.f_str()); return; // Exit if parsing failed } // Get the temperature value and print it, correctly retrieving the target_temperature from the nested "params" field if (doc["params"]["target_temperature"].is()) { doel_temperatuur = doc["params"]["doel_temperatuur"]; Serial.print("Ontvangen target_temperature: "); Serial.println(doel_temperatuur); } // Get the humidity value and print it, correctly retrieving the target_humidity from the nested "params" field if (doc["params"]["target_humidity"].is ()) { target_humidity = doc["params"]["target_humidity"]; Serial.print("Ontvangen target_humidity: "); Serial.println(target_humidity); } }
4. Callback om Gegevens van het Cloudplatform te Ontvangen
// Parse the received JSON message void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); // Convert the received payload to a string char msg[length + 1]; for (unsigned int i = 0; i < length; i++) { msg[i] = (char)payload[i]; } msg[length] = '\0'; // Null terminator for the string // Output the received message Serial.println(msg); // Parse the JSON data JsonDocument doc; // Use JsonDocument to parse JSON DeserializationError error = deserializeJson(doc, msg); // Parse the message into a JSON object // Check if parsing was successful if (error) { Serial.printf("deserializeJson() failed: "); Serial.println(error.f_str()); return; // Exit if parsing failed } // Get the temperature value and print it, correctly retrieving the target_temperature from the nested "params" field if (doc["params"]["target_temperature"].is()) { doel_temperatuur = doc["params"]["doel_temperatuur"]; Serial.print("Ontvangen target_temperature: "); Serial.println(doel_temperatuur); } // Get the humidity value and print it, correctly retrieving the target_humidity from the nested "params" field if (doc["params"]["target_humidity"].is ()) { target_humidity = doc["params"]["target_humidity"]; Serial.print("Ontvangen target_humidity: "); Serial.println(target_humidity); } }
IoT Platformconfiguratie
1. Alibaba-wolk IoT:
-
Log in op het Alibaba Cloud IoT-platform, maak een nieuw project aan en configureer apparaatsnamen, productcodes, enz.
-
Haal de client-ID, gebruikersnaam, wachtwoord op en zorg ervoor dat de MQTT-communicatie-instellingen correct zijn.
2. App-beheer:
-
Maak een product op het Alibaba Cloud IoT-platform en configureer de interface voor apparaatbediening.
-
Gebruik de SDK van Alibaba Cloud om een mobiele app te ontwikkelen die realtime monitoring en afstandsbediening van apparaten mogelijk maakt.
Notities en Veelvoorkomende Problemen
1. Sensorinitialisatie:
-
De SCD40 CO2-sensor heeft ongeveer 6 seconden nodig voor de initialisatie voordat nauwkeurige metingen beschikbaar zijn.
-
De MLX90614-sensor vereist dat de I2C-bussnelheid op 100 kHz wordt ingesteld om correct te functioneren.
2. Apparaatconflicten:
-
Zorg ervoor dat de I2C-adressen voor PaHub en PbHub modules uniek zijn om conflicten te voorkomen.
-
Wijs verschillende kanalen toe voor sensoren en randapparatuur op PaHub om interferentie te voorkomen.
3. Debuggen en Optimalisatie:
-
Pas de apparaatverbinding en de gegevensuploadintervallen aan om overmatige gegevensuploads te voorkomen en de belasting van het cloudplatform te verminderen.
-
Als gegevens niet op het cloudplatform worden ontvangen, zorg dan voor stabiele apparaatverbindingen en controleer de MQTT-instellingen.
Gebruiksgevallen
1. Milieu Monitoring en Beheer:
2. Afstandsbediening en Aanpassingen:
3. Automatisering:
4. Huisdierenbewaking:
5. Veelzijdig gebruik:
Toekomstige Mogelijkheden en Uitbreiding
1. Aquatische Huisdieromgevingen:
2. DIY Kenmerken en Aanpassing:
3. Gezondheid Toezicht:
4. Cloudintelligentie en automatisering:
Conclusie
laat een reactie achter
Alle blogreacties worden vóór publicatie gecontroleerd