MKR1000 met DHT22: Realtime temperatuur‑ en vochtigheidsmonitoring naar Azure
Onderdelen en benodigdheden
| Arduino MKR1000 | 1 |
| DHT22 Temperatuursensor | 1 |
Apps en online diensten
- Microsoft Azure
- Arduino IDE
- Microsoft Visual Studio 2015 (Community‑editie)
Over dit project
Paul DeCarlo heeft een geweldig artikel over het versturen van weergegevens van een Particle Photon naar Microsoft Azure. Ik wilde dit repliceren met de nieuwe Arduino MKR1000.
De Photon gebruikt een webhook om data van de Particle‑cloud naar Azure te sturen. Omdat de MKR1000 HTTPS ondersteunt, kan data direct naar Azure worden gestuurd. Deze handleiding laat je zien hoe je de MKR1000 met Azure verbindt en hergebruikt veel van de server‑side code uit het Microsoft "Connect the Dots"-project.
Hardware
Een DHT22‑sensor meet temperatuur en vochtigheid. Je kunt de code ook aanpassen voor de DHT11. Plaats de DHT‑sensor op het breadboard. Voed de eerste pin met 3,3 V van de MKR1000. Plaats een 10 kΩ pull‑up‑weerstand tussen 3,3 V en pin 2. Verbinden pin 3 met ground. Verbind pin 2 van de DHT22 met pin 6 van de MKR1000.
(Schema‑afbeelding is in de originele tutorial te vinden.)
Meer info over de DHT22: Adafruit DHT‑tutorial.
Arduino IDE
Open de Arduino IDE. Gebruik de Boards Manager om het MKR1000‑board te installeren. Gebruik de Library Manager om de WiFi101‑bibliotheek te installeren.
HTTPS
De Arduino MKR1000 ondersteunt HTTPS, maar we moeten handmatig de certificaten voor de sites die we bezoeken installeren. Dit is nodig omdat het geheugen van het apparaat beperkt is. Dit is een tweestapsproces: eerst een sketch op het bord laden, daarna een programma op de computer draaien om de certificaten te uploaden.
- Laad de Firmware Updater Sketch op je bord via de Arduino IDE.
- Download de WiFi101 Firmware Updater. Pak uit en start
winc1500-uploader-gui.exe. - Het HTTPS‑certificaat voor Azure Event Hubs is uitgegeven aan
servicebus.windows.net. Voerctd-ns.servicebus.windows.netin het tekstveld in. Kies je COM‑poort en upload de certificaten.
(Schermafbeelding van de uploader is in de originele tutorial te vinden.)
Arduino‑sketch
Kloon of download de Arduino‑sketch van GitHub. Bewerk het ssid-tabblad en pas ssid[] en password[] aan aan je netwerkinstellingen. Upload de sketch naar je MKR1000.
Als je fouten krijgt, installeer via de Library Manager de bibliotheken DHT sensor library, ArduinoJson en RTCZero.
Open de Serial Monitor (Tools → Serial Monitor) en controleer of data naar Azure wordt verstuurd.
(Schermafbeelding van de Serial Monitor is in de originele tutorial te vinden.)
De sketch hergebruikt een Event Hub uit het "Connect the Dots"-project. Daardoor kunnen we de bestaande Azure‑webapp gebruiken om onze data te bekijken. Open connectthedotsdx.azurewebsites.net in je browser. Je zou data van de MKR1000 moeten zien. Omdat dit een "publieke" Event Hub is, worden je sensordata gemengd met die van anderen. Als meerdere mensen deze code draaien, wil je misschien de displayname of guid in de createJSON-functie aanpassen.
(Schermafbeelding van de webapp is in de originele tutorial te vinden.)
Eigen Event Hub aanmaken
Het gebruik van de bestaande Event Hub is prima, maar je kunt ook een eigen Event Hub aanmaken voor je data. Dit vereist Visual Studio en een Azure‑abonnement. De gratis Visual Studio 2015 Community‑editie werkt prima. Je kunt je ook aanmelden voor een gratis Azure‑proefabonnement.
We gebruiken code uit het Connect the Dots‑project. Kloon de repository:
git clone https://github.com/Azure/connectthedots.git
Volg de instructies van Microsoft om de Azure‑resources aan te maken (duurt even, maar geeft diep inzicht). Ik raad aan om het AzurePrep-project uit de gekloonde repository te gebruiken om de resources automatisch aan te maken.
- Open de
AzurePrep-solution in Visual Studio (connectthedots\Azure\AzurePrep). - Draai het project in Release‑modus.
- Log in op Azure en geef toestemming. Beantwoord de vragen in de terminal om de resources aan te maken.
- Kies een naam voor de resources, bv.
ctd+ je initialen (bijv.ctddc). - Draai in Visual Studio de
CreateWebConfig-target vanAzurePrepom een configuratiebestand voor de website te maken. Log in, volg de prompts. Er wordt eenweb.configop het bureaublad geschreven. - Kopieer
web.confignaar het website‑project:connectthedots\Azure\WebSite\ConnectTheDotsWebSite. - Open de
ConnectTheDotsWebsite-solution in Visual Studio. - Voeg het nieuwe
web.config-bestand toe aan het project (rechtsklik solution → Add → Existing Item). - Draai het project in Microsoft Edge. Je ziet nog geen data totdat we de sketch op de MKR1000 bijwerken.
De Arduino‑sketch heeft een SAS‑key nodig om toegang te krijgen tot de Azure‑resources. Gebruik Sandrino Di Mattia's Event Hubs Signature Generator om de key in het juiste formaat te genereren. Download van GitHub. Pak uit en start RedDog.ServiceBus.EventHubs.SignatureGenerator.
Vul de UI in met de namespace die je eerder aanmaakte. Als ik ctddc gebruikte, is mijn namespace ctddc-ns. De hub‑naam is ehdevices. Publisher en sender key name zijn beide D1. Stel Token TTL in op 1 jaar (525.600 minuten). De handtekening is dan geldig voor de levensduur van het apparaat.
(Schermafbeeldingen van de generator zijn in de originele tutorial te vinden.)
Log in op de Azure Portal om de sender key op te halen: linker menu → Bladeren → filter op Event Hubs. Klik op je namespace → Event Hubs → ehdevices → Configureren → scroll naar beneden → kopieer de primaire key voor D1.
Plak de key in het veld "Sender Key" van de Signature Generator en klik Generate. Kopieer de gegenereerde handtekening.
Open de MKR1000‑Azure sketch in de Arduino IDE. Vervang hostname[] en authSAS[] met je eigen Event Hub‑instellingen. Plak de handtekening in char authSAS[]. Pas hostname aan, bv. char hostname[] = "ctddc-ns.servicebus.windows.net";.
Sla de sketch op en upload naar je MKR1000. Open optioneel de Serial Monitor om te controleren of data wordt verstuurd.
Schakel terug naar de Connect the Dots‑website in Edge; je zou nu data van je apparaat moeten zien.
IoT Hub
Azure IoT Hub is nieuwer dan Event Hub en misschien meer geschikt voor je project. IoT Hub ondersteunt device‑to‑cloud messaging (zoals dit project) en cloud‑to‑device messaging.
- Maak een nieuwe IoT Hub aan via de Azure Portal.
- Gebruik Device Explorer om handtekeningen te genereren voor toegang tot IoT Hub. Download
SetupDeviceExplorer.msivan GitHub. - In de Azure Portal: open de IoT Hub → sleutel‑icoon → selecteer
iothubowner→ kopieer de connection string van de primaire key. - Open Device Explorer, plak de connection string, klik Update.
- Ga naar tabblad Management. Klik Create onder Actions. Voer
D1in als Device ID en klik Create. - Selecteer de
D1-rij, klik SAS Token en genereer een nieuwe token. - Open de MKR1000‑Azure sketch in de Arduino IDE. Vervang
hostname[]met<jouw‑iot‑hub>.azure-devices.net. VervangauthSAS[]met de gegenereerde SAS‑token (alleen het deel naSharedAccessSignature=). Pas de URI aan naar IoT Hub-formaat:
char hostname[] = "hacksterdemo.azure-devices.net";
char authSAS[] = "SharedAccessSignature sr=hacksterdemo.azure-devices.net%2fdevices%2fD1&sig=...&se=1490944761";
String deviceName = "D1";
String uri = "/devices/" + deviceName + "/messages/events?api-version=2016-02-03";
Pas de code in de sendEvent-functie aan die checkt op een geldig antwoord. Event Hub stuurt HTTP 201 bij succes; IoT Hub stuurt HTTP 204.
// Verander:
if (response.startsWith("HTTP/1.1 201")) {
// Naar:
if (response.startsWith("HTTP/1.1 204")) {
Upload de sketch naar je Arduino MKR1000.
Ga in Device Explorer naar het tabblad Data, klik Monitor om data te zien die naar de Event Hub wordt gestuurd.
(Schermafbeelding van Device Explorer is in de originele tutorial te vinden.)
Omdat dit project data van device‑to‑cloud stuurt, gebruik ik HTTP POST. Er zijn ook bibliotheken voor het verzenden/ontvangen met Azure IoT Hub, maar die zijn m.i. nog niet erg "Arduino‑achtig" of gebruiksvriendelijk. Als je wilt dat je apparaat data van Azure ontvangt, kunnen die bibliotheken handiger zijn. Bekijk ook de blogpost van Mohan Palanisamy over het sturen van data van IoT Hub naar een MKR1000.
Deze handleiding liet zien hoe je sensordata van de MKR1000 naar Azure Event Hubs en IoT Hub stuurt. We herbruikten bestaande code om de data te visualiseren. Bekijk het Connect the Dots‑project voor meer manieren om data op te slaan, te manipuleren en te bekijken met Azure.
Nu je klaar bent, wil je misschien resources die je niet gebruikt uitschakelen of verwijderen om kosten te beperken. De AzurePrep-solution heeft een ClearResources-project om Azure‑services te verwijderen.
Code & Hulpmiddelen
- Device Explorer – Tool voor IoT Hub. Download
SetupDeviceExplorer.msi: GitHub - Connect the Dots – Azure‑voorbeeldcode: GitHub
- MKR1000‑Arduino – Arduino‑broncode: GitHub
- WiFi101 Firmware Updater – Tool om TLS‑certificaten toe te voegen aan MKR1000: GitHub
- Event Hubs Signature Generator – Tool om Azure‑credentials voor MKR1000 te genereren: GitHub
Schema's
Foto geplaatst omdat er geen MKR1000 Fritzing‑part is. Zie de artikeltekst voor aarddetails.
Productieproces
- Een geautomatiseerd aeroponisch systeem bouwen met Raspberry Pi en vochtigheidssensor
- Je vochtigheidssensor verifiëren en kalibreren voor nauwkeurige metingen
- DHT11 Temperatuur- & Vochtigheidsensor Project met LED-indicatoren en Piezo-luidspreker
- Arduino temperatuur- en vochtigheidslogger met DHT11 en Ethernet Shield
- Arduino Temperatuurbewaking & Realtime Klok met 3.2" TFT-display
- Bouw een Sensor Toren met Arduino Cloud: Temperatuur, Beweging & Gas Monitoring
- BME280 Temperatuur, Vochtigheid & Druk Weergeven op Nextion Touchscreen
- Temperatuur en Vochtigheid met DHT11 op Blynk - Stap-voor-Stap Arduino Tutorial
- Arduino Sensoren: Typen, Toepassingen en Real-World Projecten
- Luchtvochtigheidssensoren: Hoe Ze Werken en Belangrijke Toepassingen
- DHT11 Sensor: Hoe Het Werkt en Belangrijke Toepassingen