Plantbewakingssysteem met AWS IoT
Componenten en benodigdheden
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Benodigde gereedschappen en machines
|
Apps en online services
| ||||
| ||||
| ||||
| ||||
| ||||
|
Over dit project
Stel je voor dat je een week of zo op vakantie gaat en je je zorgen maakt over je kamerplant thuis. Hier is een geweldig project om een week voordat je op vakantie gaat te ondernemen.
Bouw een installatiebewakings- en meldingssysteem voor jezelf met de volgende functie
- Bewaak de temperatuur, lichtwaarde en bodemvochtwaarde met dweet.io
- OF de nieuwe Amazon IoT-service gebruiken om gegevens te loggen in AWS - DynamoDB
- Gebruik AWS -SNS-melding om een e-mail naar jezelf te sturen, zodat je je neef/buurman kunt informeren om de plant snel water te geven of thuis je thermostaat te controleren.
Daarnaast heb ik een 3D-geprinte behuizing ontworpen om de Arduino Yun, grove schild en sensoren te huisvesten.
Als je geïnteresseerd bent om te zien hoe mijn plant het doet, is hier de link
http://dweet.io/follow/PlantMonitorTorontoON
Dit zijn de stappen die u moet uitvoeren om de build te voltooien
#1 Bouw het circuit met behulp van het Grove-connectorschild zoals weergegeven in het schematische gedeelte van het project, sluit u in principe de
- Temperatuursensor tot A0
- Bodemvochtsensor tot A1
- Lichtsensor naar A2
- En gebruik een weerstand van 220 Ohm om een LED aan te sluiten op pin #2
#2 3D print de STL-bestanden , bijgevoegd in de sectie aangepast onderdeel en behuizing , hier heb je 3 STL-bestanden om af te drukken, stel je snijsoftware in op 0.3 mm laaghoogte en een vuldichtheid van ten minste 25% of hoger
3D-printen duurt ongeveer 2 uur, dus download de STL-bestanden en start uw 3D-printer terwijl u de andere stappen hieronder uitvoert
#3 De bodemvochtwaarde bepalen
Upload de onderstaande code (bodemvochtwaarde) naar uw Arduino Yun en bepaal de tooDryValue in de onderstaande code. Als de waarde van het bodemvocht onder tooDryValue komt, moet u de plant water geven. (en deze waarde is de waarde die u zal gebruiken in AWS-SNS-conditie om een e-mail te verzenden)
Hier is de video waarin ik de methode laat zien die ik heb gebruikt om de toodry-waarde te bepalen
#4 Upload Arduino-code naar Yun om gegevens naar dweet.io te posten
Zodra je de toodryvalue hebt gekozen, upload je het ArduinoYunDweetIO.ino-bestand naar de Yun en vervang je als onderdeel van de code ook "PlantMonitorTorontoON" door iets dat meer betekenisvol voor je is.
Hier is een videotest voor het uploaden van sensorgegevens naar dweet.io
#5 AWS CLI instellen op uw computer (hier gebruik ik een Mac)
Als u nu gegevens wilt loggen met AWS IoT in DynamoDB, moet u een account maken op https://aws.amazon.com/free. Hier moet u ook uw creditcardgegevens opgeven, maar voor de onderstaande zelfstudie hoeft u dat niet te doen kosten met zich meebrengen (ook dit is weer afhankelijk van de regio van de AWS-configuratie)
Als u klaar bent, maakt u een map "AWS . aan " op uw mac en volg de onderstaande link om AWS CLI te downloaden en te installeren
http://docs.aws.amazon.com/iot/latest/developerguide/installing-aws-cli.html
Ik gebruik een mac, hier zijn de instructies die ik heb gevolgd
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"$ unzip awscli-bundle.zip$ sudo ./awscli -bundle/install -i /usr/local/aws -b /usr/local/bin/aws
Opmerking:op de terminal moet je in de AWS-map zijn die je zojuist hebt gemaakt
#6 Een ding maken met behulp van de CLI die moet worden weergegeven in de AWS IoT-console
Nu gaan we iets maken in AWS IoT met de volgende opdracht
aws iot create-thing --thing-name "plantSystem"
Voor meer info zie de link
http://docs.aws.amazon.com/iot/latest/developerguide/create-thing.html
#7 Certificeringen maken
Om de benodigde certificaten te maken en te activeren, geeft u de volgende opdracht
aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile cert.pem --public-key-outfile publicKey.pem --private-key-outfile privateKey .pem
deze opdracht maakt de certificaten (3 pem-bestanden) voor u in de AWS-map, zoals weergegeven in de onderstaande schermafbeelding
#8 Creëer en voeg een AWS IoT-beleid toe aan uw certificaten
Begin met het maken van een json-bestand in de AWS-map, met behulp van je favoriete teksteditor (ik geef de voorkeur aan sublieme tekst 2) - noem het bestand policy.json
{ "Versie":"2012-10-17", "Statement":[{ "Effect":"Toestaan", "Actie":["iot:*"], "Bron":[ "*"] }]}
Kopieer vervolgens de volgende opdracht in uw teksteditor
aws iot create-policy --policy-name "PubSub" --policy-document file://./policy.json
#9 Beleid toevoegen aan certificaat gevolgd door certificaat aan apparaat koppelen
Geef de onderstaande commando's een voor een
$aws iot attach-principal-policy --principal "arn:aws:iot:xxxxxxxxxxxxxxxxxxxxxxxx" --policy-name "PubSub"$ aws iot attach-thing-principal --thing-name "PlantSystem" --principaal "arn:aws:iot:xxxxxxxxxxxxxxxxxxxxxxxx"
Hier is een gemakkelijke manier om je certificaat te krijgen als je het nog niet hebt genoteerd, door naar de AWS IoT-console te gaan, op je certificaat te klikken en naar de details aan de rechterkant van je scherm te gaan. Vanaf hier kun je de arn naar de teminal kopiëren en plakken
Raadpleeg voor meer informatie de documentatie op
http://docs.aws.amazon.com/iot/latest/developerguide/secure-communication.html
# 10 Uw instellingen verifiëren/testen op uw computer en testen met MQTT.fx
Om nu te beweren dat de installatie op uw computer is uitgevoerd, downloadt en installeert u MQTT.fx via onderstaande link om te testen of de installatie werkt en kunnen we gegevens publiceren en abonneren via AWS IoT
http://mqttfx.jfx4ee.org/index.php/download
Gebruik de onderstaande link voor meer installatie-informatie en om het rootcertificaat te downloaden
http://docs.aws.amazon.com/iot/latest/developerguide/verify-pub-sub.html
- hier in MQTT.fx moet je je verbindingsprofiel instellen
- en koppel uw certificaten die u heeft gedownload als onderdeel van de bovenstaande stappen
Hier is een korte video die laat zien hoe u uw installatie kunt testen op uw computer, in mijn geval een MAC met behulp van de MQTT.fx-tool.
Als je eenmaal hebt voltooid en getest dat je installatie in orde is, volg je de onderstaande stappen om het certificaat naar de Arduino Yun te uploaden
#11 De Arduino Yun instellen om te communiceren met de AWS IoT-cloud
Download de nieuwste versie van de Arduino Yun SDK van github en pak het uit in de map 'Bibliotheken' van Arduino
https://github.com/aws/aws-iot-device-sdk-arduino-yun
Als je de Arduino Yun voor de eerste keer gebruikt, volg dan de installatie-instructies op
https://www.arduino.cc/en/Guide/ArduinoYun
Met behulp van de link leert u in principe hoe u de Arduino Yun instelt om verbinding te maken met het wifi-thuisnetwerk.
Laad vervolgens de procesvoorbeeldschets Arduino IDE naar uw YUN (Bestand->Voorbeelden->Brug -> Proces), dit zal bevestigen dat de Yun toegang heeft tot internet.
Plaats uw rootCA-bestand, privésleutel en certificaat in de map certs zoals weergegeven in de onderstaande schermafbeelding
Wijzig vervolgens codebase_upload.sh en environment_setup.sh en vervang [your_boards_IP] door het IP-adres van je board en [your_boards_IP] door je wachtwoord
Voer in uw terminal de volgende opdrachten uit om toestemming te geven voor de .sh-bestanden, dit duurt ongeveer 5-10 minuten, waardoor de certificaten worden verplaatst en de installatie van distribueren, python-openssl, pip, paho-mqtt op de Yun. Dit zijn de pakketten die je nodig hebt om te communiceren met de AWS-cloud vanuit je Yun (in ons geval ook wel het PlantSystem-ding genoemd)
$chmod 755 codebase_upload.sh$./codebase_upload.sh$chmod 755 environment_setup.sh$./environment_setup.sh
Voor installatie op Linux/Windows volgt u de link op
https://github.com/aws/aws-iot-device-sdk-arduino-yun#installation
Als onderdeel van het volgende paar dat AWS CLI gebruikt, gaan we een tabel maken in DynamoDB om sensorgegevens te posten
#12 Een IAM-rol maken en machtigingen verlenen
Om gegevens in te voeren in de DynamoDB-sensortabel die we gaan maken als onderdeel van de volgende stap, moeten we een IoT-regel maken die zal reageren op het MQTT-bericht dat door AWS is ontvangen, hiervoor moeten we een rol maken en verlenen het heeft toestemming nodig
Maak een json-bestand rolePolicy.json
{"Versie":"2012-10-17", "Statement":[{ "Sid":"", "Effect":"Toestaan", "Principaal":{ "Service":" iot.amazonaws.com" }, "Actie":"sts:AssumeRole" }]}
en voer de volgende opdracht uit in de terminal om de rol aan te maken
aws iam create-role --role-name iot-actions-role --assume-role-policy-document file://./rolePolicy.json
Maak nog een json-bestand policy.json
{ "Versie":"2012-10-17", "Statement":[{ "Effect":"Toestaan", "Actie":[ "dynamodb:*", "lambda:InvokeFunction"] , "Bron":["*"] }]}
bel vervolgens create-policy en specificeer het IAM-beleidsdocument
aws iam create-policy --policy-name iot-actions-policy --policy-document file://./policy.json
En voeg tenslotte het beleid toe aan de rol met behulp van - wijzig het beleid-ARN naar het ARN dat u hebt ontvangen als onderdeel van de vorige stap
aws iam attach-role-policy --role-name iot-actions-role --policy-arn "arn:aws:xxxxxxxxxxxxx:policy/iot-action-policy"
http://docs.aws.amazon.com/iot/latest/developerguide/config-and-test-rules.html
#13 Tabel opzetten in DynamoDB in AWS-console
Als onderdeel van deze stap gaan we een DynamoDB maken in de AWS-console
Tabelnaam:plantSensor
Partitiesleutel :sleutel
Sorteersleutel:tijdstempel
en stel ook uw Leescapaciteitseenheden en Schrijfcapaciteit in op 1.
#14 Een regel maken om gegevens in de PlantSensor-tabel in te voegen
Maak een json-bestand - plantdatarule.json (wijzig hier de roleArn-waarde in het onderstaande gedeelte, ga naar IAM->Roles->iot-action-role om de arn te verkrijgen)
{ "sql":"SELECT * FROM 'topic/plantdata'", "ruleDisabled":false, "actions":[{ "dynamoDB":{ "tableName":"plantSensor", "hashKeyField" :"key", "hashKeyValue":"${topic(2)}", "rangeKeyField":"timestamp", "rangeKeyValue":"${timestamp()}", "roleArn":"arn:aws:iam ::XXXXXXXXXXXX:role/iot-actions-role" } }]}
voer vervolgens de volgende opdracht uit op uw terminal
aws iot create-topic-rule --rule-name plantDataToDynamoDB --topic-rule-payload file://./plantdatarule.json
Als u nu naar de AWS IoT-console gaat, ziet u een gemaakte regel met de naam "PlantDataToDynamoDB" zoals weergegeven in de onderstaande schermafbeelding ('' negeer de regel voor het verzenden van e-mail, deze komt als onderdeel van de onderstaande stappen.)
voer met MQTT.FX een snelle test uit om te zien of er records worden aangemaakt in de aangemaakte tabel.
#15 Upload de Arduino-schets om gegevens vanuit de Yun naar AWS IoT te publiceren
Hier begint u eerst met het downloaden van de ArduinoJSON-bibliotheek van github op
https://github.com/bblanchon/ArduinoJson
Download nu de YunAWSIoTDynamoDB,ino- en aws_iot_config.h-bestanden uit het codegedeelte hieronder en upload deze naar de Yun.
Open uw seriële monitor en u zou de temperatuur, lichtwaarde en bodemvochtigheidswaarde moeten zien die op de DynamoDB zijn geplaatst.
Als je AWS bent geweest, kun je allerlei geweldige dingen doen door de Lambda-functie in te stellen en datakinesis te posten ...
Opmerking: Als u van plan bent om dit een permanente configuratie te maken, vergeet dan niet om de vertraging aan het einde van de lus te vergroten, om het tijdsinterval van posten naar DynamoDB te verlengen, zodat u geen extra kosten maakt. Ga voor meer informatie over prijzen naar https://aws.amazon.com/iot/pricing/
#16 Een AWS-IoT SNS-regel instellen om te ontvangen en te e-mailen als uw bodemvochtwaarde onder een drempel komt.
In principe omvat deze stap het opzetten van een eenvoudige SNS-meldingsbasis op de AWS IoT-regel.
Begin met het toewijzen van de volgende beleidsregels aan de AWS-rol (iot-action-rol) die u in de vorige stap in de IAM-console hebt gemaakt
-AmazonSNSRool
-AmazonSNSFullAccess
Als u klaar bent in de SNS-console, maakt u een onderwerp met de naam sendMail en maak een abonnement aan en geef je e-mailadres op je telefoon om een melding te krijgen wanneer de bodemvochtwaarde LAAG is.
Ga nu terug naar de AWS IoT-console en maak met de knop +Create Resource een regel met de naam Email Send en geef de volgende informatie op
- Naam:EmailSend
- Kenmerk:mositValue (dit moet overeenkomen met de json-waarde die u plaatst als onderdeel van uw onderwerp in de Arduino-code)
- Onderwerpfilter: onderwerp/plantgegevens
- Conditie:as moistval <250 (dit is de waarde die je in de eerste paar stappen van de tutorial hebt bepaald)
- Kies actie:bericht verzenden als pushmelding-SNS
- SNS-doel:sendEmail
- Rol:iot-action-role
Als je klaar bent, zou je console eruit moeten zien als de onderstaande schermafbeelding
Hier is een voorbeeld-e-mail die ik heb ontvangen toen ik de bodemvochtsensor uit een glas water verwijderde
Om meer te lezen over AWS-SNS
https://aws.amazon.com/sns/faqs/
#15 De 3D-geprinte onderdelen in elkaar zetten en toevoegen aan de pot.
Je hebt een 4x40 schroef en moer nodig om het zwarte aarde poker 3D-geprinte deel aan het basisdeel van de Arduino Yun te bevestigen
Het bovenste deel klikt gewoon vast, vergeet niet om de bovenste opening naar je raam te richten en het bodemvocht in de pot te prikken. En sluit de Yun aan met een micro-usb-kabelstekker op een stopcontact.
Let op, ik ben nog steeds aan het ontdekken en leren over de geweldige wereld van AWS, en ik sta versteld van de functies op de AWS-console, dus als je AWS al geruime tijd gebruikt, plaats dan een opmerking of suggestie voor een functie die je zou hebben leuk om te zien/van toepassing op het plantmonitoringproject.Bedankt ..
Code
- SoilMoistureValue
- ArduinoYunDweetio
- ArduinoYunAWSIoTDynamodb
- aws_iot_config.h
SoilMoistureValueArduino
Arduino-schets voor het bepalen van de ideale bodemvochtwaarde voor uw kamerplant//@CarmelitoA -Huisplantmonitoring project bepaling bodemvochtwaardeconst int vochtPin =A1; // Grove Vochtsensor aangesloten op A1 op de Grove Shieldconst int ledPin =2;int moisturValue =0;int tooDryValue =250;// verander deze waarde op basis van wat je bedenktvoid setup() {Serial.begin(9600); pinMode(ledPin,OUTPUT);digitalWrite(ledPin,LOW);}void loop() {moisturValue =analogRead(moisturePin);Serial.print("Vochtsensor =");Serial.println(moisturValue); //Controleer de waarde voor met Droog zand en vervolgens met Wet Sandif(moisturValueArduinoYunDweetioArduino
Sensorgegevens naar dweet.io posten met Arduino Yun//Gemaakt door @CarmelitoA voor het House Plant Monitoring-project - gegevens uploaden naar dweet.io. (CC BY-SA https://creativecommons.org/licenses/by-sa/4.0/)#include#include #define SITE_URL "www.dweet.io"#include
Productieproces
- C# met behulp van
- Bewaking op afstand van het weer met Raspberry Pi
- Bewegingsgestuurde AWS IoT-knop
- Hoe bouw je een slimmere operatie met behulp van tankmonitoring IoT-technologie
- Dual Purpose IoT-bosbeheersysteem
- Op IoT gebaseerd extern olie- en dieseltankbewakingssysteem
- 8 Voordelen van een op IoT gebaseerd Fleet Weight Monitoring System
- Belang van het gebruik van IoT-enabled Asset Monitoring in de O&G-industrie
- Verbeter melkopslag met een snufje IoT:melkniveaubewakingssysteem
- Een door IoT aangedreven rivierniveaubewakingssysteem gebruiken voor efficiënt waterbeheer
- Systeem maakt contactloze bewaking van hartritme mogelijk met behulp van slimme luidsprekers