Sistema de monitoramento da planta usando AWS IoT
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Ferramentas e máquinas necessárias
|
Aplicativos e serviços online
| ||||
| ||||
| ||||
| ||||
| ||||
|
Sobre este projeto
Imagine que você está saindo de férias por uma semana ou mais e está preocupado com a planta da sua casa em casa. Este é um ótimo projeto para realizar uma semana antes de sair de férias.
Construa você mesmo um sistema de monitoramento e notificação da planta com o seguinte recurso
- Monitore a temperatura, o valor da luz e o valor da umidade do solo usando dweet.io
- OU usando o novo serviço Amazon IoT para registrar dados no AWS - DynamoDB
- Use a notificação AWS -SNS para enviar um e-mail para você mesmo, para que possa informar seu primo / vizinho para regar rapidamente a planta ou verificar seu termostato em casa.
Além disso, projetei um gabinete impresso em 3D para abrigar o Arduino Yun, o escudo do bosque e os sensores.
Se você estiver interessado em verificar como está a minha planta aqui está o link
http://dweet.io/follow/PlantMonitorTorontoON
Aqui estão as etapas que você precisará realizar para concluir a construção
# 1 Construa o circuito usando a blindagem do conector Grove como mostrado na seção esquemática do projeto, basicamente conecte o
- Sensor de temperatura para A0
- Sensor de umidade do solo para A1
- Sensor de luz para A2
- E usando um resistor de 220 Ohms, conecte um LED ao pino 2
# 2 Imprima os arquivos STL em 3D, anexado no peça personalizada e seção de gabinete , aqui você tem 3 arquivos STL para imprimir, defina seu software de corte para altura de camada de 0,3 mm e uma densidade de preenchimento de pelo menos 25% ou mais alto
A impressão 3D deve levar cerca de 2 horas, então baixe os arquivos STL e ligue sua impressora 3D enquanto conclui as outras etapas abaixo
# 3 Determinação do valor de umidade do solo
Carregue o código anexado abaixo (valor de umidade do solo) para seu Arduino Yun e determine o tooDryValue no código abaixo. Basicamente, se o valor da umidade do solo cair abaixo de tooDryValue, você precisa regar a planta. (E esse valor é o valor que você usará na condição AWS-SNS para enviar um e-mail)
Aqui está o vídeo mostrando o método que usei para determinar o valor toodry
# 4 Faça upload do código do Arduino para Yun para postar dados para dweet.io
Agora, depois de decidir sobre o toodryvalue, carregue o arquivo ArduinoYunDweetIO.ino no Yun e, como parte do código, substitua "PlantMonitorTorontoON" por algo mais completo e significativo para você.
Aqui está o vídeo testando o upload dos dados do sensor para dweet.io
# 5 Configurando AWS CLI em seu computador (aqui estou usando um Mac)
Agora, para registrar dados usando AWS IoT no DyanamoDB, você terá que criar uma conta em https://aws.amazon.com/free, aqui você também terá que fornecer os detalhes do seu cartão de crédito, mas para o tutorial abaixo você não deve incorrer em qualquer custo (mais uma vez, isso depende da região de configuração da AWS)
Uma vez feito isso, crie uma pasta " AWS "no seu mac e siga o link abaixo para baixar e instalar o AWS CLI
http://docs.aws.amazon.com/iot/latest/developerguide/installing-aws-cli.html
Estou usando um mac, aqui estão as instruções que segui
$ 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
Nota:no terminal, você precisa estar na pasta AWS que acabou de criar
# 6 Criar algo usando a CLI que deve ser mostrado no console AWS IoT
Agora vamos criar algo no AWS IoT usando o seguinte comando
aws iot create-thing -thing-name "plantSystem"
Para mais informações consulte o link
http://docs.aws.amazon.com/iot/latest/developerguide/create-thing.html
# 7 Criação de certificados
Para criar e ativar os certificados de que você precisa, dê o seguinte comando
aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile cert.pem --public-key-outfile publicKey.pem --private-key-outfile privateKey .pem
este comando criará os certificados (3 arquivos pem) para você na pasta AWS, conforme mostrado na captura de tela abaixo
# 8 Crie e anexe uma política AWS IoT aos seus certificados
Comece criando um arquivo json na pasta AWS, usando seu editor de texto favorito (eu prefiro o texto sublime 2) - nomeie o arquivo policy.json
{"Versão":"2012-10-17", "Declaração":[{"Efeito":"Permitir", "Ação":["iot:*"], "Recurso":[ "*"]}]}
Em seguida, copie e cole o seguinte comando no seu editor de texto
aws iot create-policy --policy-name "PubSub" --policy-document file://./policy.json
# 9 Anexe a política ao certificado, seguido de anexar o certificado ao dispositivo
Dê os comandos abaixo um após o outro
$ aws iot attach-principal-policy --principal "arn:aws:iot:xxxxxxxxxxxxxxxxxxxxxxxxxx" --policy-name "PubSub" $ aws iot attach-thing-principal --thing-name "PlantSystem" --principal "arn:aws:iot:xxxxxxxxxxxxxxxxxxxxxxxxxx"
Aqui, uma maneira fácil de obter seu certificado, caso você não o tenha anotado, é acessar o console do AWS IoT, clicar em seu certificado e acessar os detalhes no lado direito da tela. A partir daqui você pode copiar e colar o arn no terminal
Para obter mais informações, consulte a documentação sobre
http://docs.aws.amazon.com/iot/latest/developerguide/secure-communication.html
# 10 Verificando / testando sua configuração em seu computador e testando-a usando MQTT.fx
Agora, para afirmar que a configuração foi feita em seu computador, baixe e instale MQTT.fx do link abaixo para testar se a configuração está funcionando e se somos capazes de publicar e assinar dados via AWS IoT
http://mqttfx.jfx4ee.org/index.php/download
Para obter mais informações de configuração e para baixar o certificado raiz, use o link abaixo
http://docs.aws.amazon.com/iot/latest/developerguide/verify-pub-sub.html
- aqui em MQTT.fx você terá que configurar seu perfil de conexão
- e vincule seus certificados que você baixou como parte das etapas acima
Aqui está um vídeo rápido que mostra como você pode testar sua configuração em seu computador, que no meu caso é um MAC usando a ferramenta MQTT.fx.
Depois de concluir e testar se sua configuração está correta, siga as etapas abaixo para fazer o upload do certificado para o Arduino Yun
# 11 Configurando o Arduino Yun para se comunicar com a nuvem AWS IoT
Baixe a versão mais recente do Arduino Yun SDK do github e descompacte na pasta "Bibliotecas" do Arduino
https://github.com/aws/aws-iot-device-sdk-arduino-yun
Se você estiver usando o Arduino Yun pela primeira vez, siga as instruções de configuração em
https://www.arduino.cc/en/Guide/ArduinoYun
Basicamente, usando o link, você aprenderá como configurar o Arduino Yun para se conectar à rede WiFi doméstica.
Em seguida, carregue o Arduino IDE de esboço de exemplo de processo em seu YUN (Arquivo-> Exemplos-> Ponte -> Processo), isso irá confirmar que o Yun tem acesso à internet
Coloque seu arquivo rootCA, chave privada e certificado na pasta certs, conforme mostrado na captura de tela abaixo
Em seguida, modifique codebase_upload.sh e environment_setup.sh e substitua [your_boards_IP] pelo endereço IP da sua placa e [your_boards_IP] pela sua senha
No seu terminal, execute os seguintes comandos para dar permissão aos arquivos .sh, isso levará cerca de 5 a 10 minutos, o que move os certificados e instala a distribuição, python-openssl, pip, paho-mqtt no Yun. Estes são os pacotes de que você precisa para se comunicar com a nuvem AWS de seu Yun (também conhecido como PlantSystem em nosso caso)
$ chmod 755 codebase_upload.sh $. / codebase_upload.sh $ chmod 755 environment_setup.sh $. / environment_setup.sh
Para instalação em Linux / Windows siga o link em
https://github.com/aws/aws-iot-device-sdk-arduino-yun#installation
Agora, como parte do próximo casal usando AWS CLI, vamos criar uma tabela no DynamoDB para postar dados do sensor
# 12 Criação de uma função IAM e concessão de permissões
Basicamente, para inserir dados na tabela de sensores do DynamoDB que criaremos como parte da próxima etapa, precisamos criar uma regra de IoT que atuará sobre a mensagem MQTT recebida pela AWS, para isso precisamos criar uma função e conceder são necessárias permissões
Crie um arquivo json rolePolicy.json
{"Versão":"2012-10-17", "Declaração":[{"Sid":"", "Efeito":"Permitir", "Principal":{"Serviço":" iot.amazonaws.com "}," Action ":" sts:AssumeRole "}]}
e para criar a função, execute o seguinte comando no terminal
aws iam create-role --role-name iot-actions-role --assume-role-policy-document file://./rolePolicy.json
Crie outro arquivo json policy.json
{"Version":"2012-10-17", "Statement":[{"Effect":"Allow", "Action":["dynamodb:*", "lambda:InvokeFunction"] , "Recurso":["*"]}]}
em seguida, chame create-policy e especifique o documento de política IAM
aws iam create-policy --policy-name iot-actions-policy --policy-document file://./policy.json
E, finalmente, anexe a política à função usando - modifique o ARN da política para o ARN que você recebeu como parte da etapa anterior
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 Configurando tabela no DynamoDB no console AWS
Como parte desta etapa, vamos criar um DynamoDB no console AWS
Nome da tabela:plantSensor
Chave de partição:chave
Chave de classificação:carimbo de data / hora
e também definir suas unidades de capacidade de leitura e capacidade de gravação para 1.
# 14 Criação de uma regra para inserir dados na Tabela PlantSensor
Crie um arquivo json - plantdatarule.json (aqui modifique o valor roleArn na seção abaixo, vá para IAM-> Roles-> iot-action-role para obter o arn)
{"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 "}}]}
em seguida, execute o seguinte comando em seu terminal
aws iot create-topic-rule --rule-name plantDataToDynamoDB --topic-rule-payload file://./plantdatarule.json
Agora, se você for para o console AWS IoT, deverá ver uma regra criada chamada "PlantDataToDynamoDB" conforme mostrado na captura de tela abaixo ('' ignore a regra de envio de e-mail que vem como parte das etapas abaixo.)
usando MQTT.FX execute um teste rápido para ver se os registros estão sendo criados na tabela criada.
# 15 Faça upload do esboço do Arduino para publicar dados no AWS IoT do Yun
Aqui, primeiro comece baixando a biblioteca ArduinoJSON do github em
https://github.com/bblanchon/ArduinoJson
Agora baixe os arquivos YunAWSIoTDynamoDB, ino e aws_iot_config.h da seção de código abaixo e envie-os para o Yun.
Abra seu monitor serial e você deverá ver a temperatura, valor de luz e valor de umidade do solo postado no DynamoDB.
Se você já foi AWS, pode fazer todos os tipos de coisas incríveis configurando a função Lambda e postando dados cinéticos ...
Nota: Se você planeja tornar esta configuração permanente, não se esqueça de aumentar o atraso no final do loop, para aumentar o intervalo de tempo de postagem no DynamoDB para que você não incorra em custos adicionais. Para obter mais informações sobre preços, consulte https://aws.amazon.com/iot/pricing/
# 16 Configurando uma regra AWS-IoT SNS para receber e e-mail se o valor da umidade do solo cair abaixo de um limite.
Basicamente, esta etapa inclui a configuração de uma base de notificação SNS simples na regra AWS IoT.
Comece atribuindo as seguintes políticas à função AWS (iot-action-role) que você criou na etapa anterior no console IAM
-AmazonSNSRole
-AmazonSNSFullAccess
Uma vez feito no console SNS, crie um tópico chamado sendMail e crie uma assinatura e forneça a configuração do seu e-mail no telefone para ser notificado quando o valor da umidade do solo for BAIXO.
Agora volte para o console AWS IoT e usando o botão + Create Resource crie uma regra chamada Email Send e forneça as seguintes informações
- Nome:EmailSend
- Atributo:mositValue (deve corresponder ao valor json que você está postando como parte de seu tópico no código do Arduino)
- Filtro de tópico:topic / plantdata
- Condição:as moistval <250 (este é o valor que você determinou nas primeiras etapas do tutorial)
- Escolha a ação:enviar mensagem como SNS de notificação push
- Destino SNS:sendEmail
- Função:iot-action-role
Uma vez feito isso, seu console deve se parecer com a captura de tela abaixo
Aqui está um exemplo de e-mail que recebi quando removi o sensor de umidade do solo de um copo d'água
Para ler mais sobre AWS-SNS
https://aws.amazon.com/sns/faqs/
# 15 Juntar as partes impressas em 3D e adicioná-las ao pote.
Você precisará de um parafuso e uma porca 4x40 para prender a parte impressa em 3D do Black Solo Poker na base do Arduino Yun
A parte superior se encaixa facilmente, aqui lembre-se de apontar a abertura superior em direção à sua janela e inserir a umidade do solo na panela. E ligue o Yun com um plugue de cabo micro USB a uma tomada de parede.
Observe que ainda estou explorando e aprendendo sobre o incrível mundo da AWS, e estou maravilhado com os recursos do console da AWS, portanto, se você já usa a AWS há algum tempo, poste um comentário ou sugestão de recurso que gostaria de ter gostei de ver / aplicável ao projeto de monitoramento da planta. Obrigado ..
Código
- SoilMoistureValue
- ArduinoYunDweetio
- ArduinoYunAWSIoTDynamodb
- aws_iot_config.h
SoilMoistureValue Arduino
Esboço do Arduino para determinar o valor ideal de umidade do solo para a planta da sua casa// @ CarmelitoA -Projeto de monitoramento da planta da casa que determina o valor da umidade do soloconst int moistPin =A1; // Sensor de umidade da Grove conectado a A1 no Grove Shieldconst int ledPin =2; int moisturValue =0; int tooDryValue =250; // altere este valor com base no que você encontrar com a configuração de vazio () {Serial.begin (9600); pinMode (ledPin, OUTPUT); digitalWrite (ledPin, LOW);} void loop () {moisturValue =analogRead (moisturPin); Serial.print ("Moisture sensor ="); Serial.println (moisturValue); // Verifique o valor para com areia seca e depois com Wet Sandif (moisturValueArduinoYunDweetio Arduino
Postando dados do Sensor para dweet.io usando Arduino Yun// Criado por @CarmelitoA para o projeto House Plant Monitoring - enviando dados para dweet.io. (CC BY-SA https://creativecommons.org/licenses/by-sa/4.0/)#include#include #define SITE_URL "www.dweet.io" #include ArduinoYunAWSIoTDynamodb Arduino
esboço para postar dados do sensor para AWS -DynamoDB, você também precisará adicionar o aws_iot_config.h como uma nova guia no IDE Arduino.// Criado por @CarmelitoA 01-16-2016 para o projeto House Plant Monitoring. Sinta-se à vontade para remixar e modificar # include#include #include "aws_iot_config.h" #include char data [80]; StaticJsonBuffer <200> jsonBuffer; // # define SITE_URL "www.dweet.io" // combinando o YunClient.h com este exemplo para postar para dweet causando confilitos, consulte ArduinoYunDweetio.ino # include // Adicionado para cálculos de temperaturaconst int moistPin =A1; // Sensor de umidade da Grove conectado a A1 no Grove Shieldconst int ledPin =2; int moisturValue =0; // variável para armazenar o valor proveniente do sensorconst int tooDryValue =250; // ALTERE este valor com base em seus testes de quanta umidade o solo deve ter, menos que este valor acenderá o LED, o que significa que você precisa regar a plantafloat tooLowTemp =20; // MUDANÇA, temperatura em graus C com base no tipo de planta da sua casa, se a temperatura for inferior ao valor, o LED ficará vermelho // Sensor de temperatura defsconst int B =4275; // valor B do termistorconst int R0 =100000; // R0 =100kconst int pinTempSensor =A0; // Grove - Sensor de temperatura conectado ao A5 // Sensorconst int lightPin =A2; não assinado long lastConnectionTime =0; const unsigned long postedInterval =10L * 1000L; // mude este valor para aumentar o intervalo de postagem_iot_mqtt_client myClient; // init iot_mqtt_clientchar msg [32]; // bufferint de leitura e gravação cnt =0; // loop countsint rc =-100; // valor de retorno placeholderbool success_connect =false; // se está conectado // Função de retorno de chamada básica que imprime o messagevoid msg_callback (char * src, int len) {Serial.println ("CALLBACK:"); int i; para (i =0; i aws_iot_config.hArduino
Add as a new tab in the Arduino IDE/* * Copyright 2010-2015 Amazon.com, Inc. or its affiliates. Todos os direitos reservados. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. *///@carmelitoA modified the value for the plant monitoring project#ifndef config_usr_h#define config_usr_h// Copy and paste your configuration into this file//===============================================================#define AWS_IOT_MQTT_HOST "XXXXXXXXXXX.iot.us-west-2.amazonaws.com" // your endpoint#define AWS_IOT_MQTT_PORT 8883 // your port#define AWS_IOT_CLIENT_ID "clientYun2" // your client ID#define AWS_IOT_MY_THING_NAME "PlantSystem" // your thing name#define AWS_IOT_ROOT_CA_FILENAME "rootCA.pem" // your root-CA filename#define AWS_IOT_CERTIFICATE_FILENAME "cert.pem" // your certificate filename#define AWS_IOT_PRIVATE_KEY_FILENAME "privateKey.pem" // your private key filename//===============================================================// SDK config, DO NOT modify it#define AWS_IOT_PATH_PREFIX "./certs/"#define AWS_IOT_ROOT_CA_PATH AWS_IOT_PATH_PREFIX AWS_IOT_ROOT_CA_FILENAME // use this in config call#define AWS_IOT_CERTIFICATE_PATH AWS_IOT_PATH_PREFIX AWS_IOT_CERTIFICA TE_FILENAME // use this in config call#define AWS_IOT_PRIVATE_KEY_PATH AWS_IOT_PATH_PREFIX AWS_IOT_PRIVATE_KEY_FILENAME // use this in config call#endif
Peças personalizadas e gabinetes
Esquemas
Connect the sensors to the Grove starter kit that is- Temperature sensor to A0
- Soil Moisture sensor to A1
- Light sensor to A2
In addition, using a 220 Ohms resistor connect an LED to pin#2. Connect the
Temperature sensor to A0
Soil Moisture sensor to A1
Light sensor to A2
And using a 220 Ohms resistor connect an LED to pin#2
Processo de manufatura
- C# usando
- Monitoramento remoto do clima usando Raspberry Pi
- Botão AWS IoT controlado por movimento
- Como construir uma operação mais inteligente usando a tecnologia IoT de monitoramento de tanque
- Sistema de gestão florestal IoT de dupla finalidade
- Sistema de monitoramento remoto de tanque de óleo e diesel baseado em IoT
- 8 Benefícios do Sistema de Monitoramento de Peso da Frota baseado em IoT
- Importância do uso do monitoramento de ativos habilitado para IoT na indústria de petróleo e gás
- Melhore o armazenamento de leite com uma pitada de IoT:sistema de monitoramento de nível de leite
- Usando um sistema de monitoramento de nível de rio alimentado por IoT para gerenciamento eficiente de água