- Instalando o AWS IOT Device SDK para Python no Raspberry Pi:
- Diagrama de circuito:
- Programando seu Raspberry Pi:
- Testando o programa python por meio da janela Shell:
- Trabalhando:
Raspberry Pi sempre foi a primeira escolha para desenvolver aplicativos baseados em IoT se algum nível de computação estiver envolvido. Com a flexibilidade do python e uma forte comunidade de desenvolvedores, é muito fácil coletar, registrar, analisar ou relatar um conjunto de dados usando o Pi. Neste tutorial, aprenderemos como combinar o poder do Raspberry Pi com o serviço Amazon AWS para publicar dados online na Internet.
Neste tutorial, usaremos o sensor DHT11 para ler o valor de Temperatura e Umidade, em seguida, conectaremos ao serviço AWS IOT e atualizaremos os valores do sensor usando o SDK do AWS IOT. Esses dados podem ser visualizados no console do Amazon IOT para garantir que os dados sejam publicados na Internet.
Você também pode usar o serviço AWS Elastic Search para buscar esses valores de sensor e armazená-los em um banco de dados e, em seguida, usar o serviço Kibana Dashboard para visualizar os dados do sensor como um gráfico organizado. Interessante o suficiente? !!! Então, vamos começar…
Pré-requisitos:
Este tutorial assume que você já criou sua conta AWS gratuita e conhece os fundamentos sobre o serviço AWS IoT, como a criação de algo, certificado, política e publicação de valores usando-o. Caso contrário, leia o tutorial abaixo.
- Introdução ao Amazon AWS IOT com MQTT.fx
Também pressupõe que você saiba como conectar um sensor LCD e DHT11 ao Raspberry Pi e as bibliotecas para fazer o mesmo já estão instaladas em seu Pi. Caso contrário, prossiga com o tutorial abaixo.
- Interface do DHT11 com Raspberry Pi
No final do tutorial acima, você teria criado um item no AWS-IOT e também deveria ter o endereço do corretor do seu item, juntamente com os certificados necessários para acessar o seu item. Também presumimos que o seu Raspberry pi já esteja configurado com um sistema operacional e conectado à Internet. Com eles no lugar, vamos prosseguir com o tutorial. Se você for novo no Raspberry Pi, leia Primeiros passos com o Raspberry Pi.
Instalando o AWS IOT Device SDK para Python no Raspberry Pi:
Para usar o serviço AWS no Pi, podemos instalar qualquer um dos dois SDKs. Um é o JavaScript SDK que usa JavaScript como linguagem de programação e o outro é o Python SDK que obviamente usa o python como linguagem de programação. Aqui estamos escolhendo o Python como nosso SDK, já que estamos um pouco mais confortáveis com Python do que com JavaScript.
As informações completas sobre o AWS IOT SDK estão disponíveis em sua página GitHub.
Passo 1: Para instalar o SDK em seu Pi, abra o terminal e digite o seguinte comando
git clone
Etapa 2: Isso deve ter instalado o diretório aws em seu Pi, agora navegue até ele usando o seguinte comando.
cd AWS - IOT -device- SDK -python
Etapa 3: Dentro do diretório, instale o arquivo de configuração usando a linha abaixo
python setup.py install
Diagrama de circuito:
No lado do hardware, temos um Raspberry Pi conectado a um sensor DHT11 e uma tela LCD. O DHT11 é usado para obter o valor de Temperatura e Umidade e o LCD é usado para exibir os valores e informações de depuração. O diagrama de circuito para o mesmo é mostrado abaixo.
Ambos os sensores LCD e DHT11 funcionam com alimentação de + 5V, então usamos os pinos de 5V no Raspberry Pi para alimentar ambos. Um resistor pull up de valor 1k é usado no pino de saída do sensor DHT11, se você estiver usando um módulo, pode evitar esse resistor.
Um potenciômetro de corte de 10k é adicionado ao pino V do LCD para controlar o nível de contraste do LCD. Fora isso, todas as conexões são bastante diretas. Mas anote quais pinos GPIO você está usando para conectar os pinos, pois nós precisaremos em nosso programa. O gráfico abaixo deve permitir que você descubra os números dos pinos GPIO.
Use o gráfico e faça suas conexões de acordo com o diagrama de circuito. Usei uma placa de ensaio e fios de jumper para fazer minhas conexões. Como usei um módulo, conectei-o diretamente ao Raspberry Pi. Meu hardware era assim abaixo
Programando seu Raspberry Pi:
Em nosso programa python temos que ler o valor de temperatura e umidade, exibi-lo na tela LCD e também publicar ambos os valores no Amazon IOT que criamos já no tutorial anterior. Portanto, certifique-se de ter criado a coisa e de ter todos os três arquivos-chave e o endereço do corretor da coisa que criou.
Em nosso programa python, temos que vincular os três arquivos-chave para que Raspberry Pi possa obter acesso para publicar valores em nossa coisa. Portanto, copie todos os três arquivos principais e cole-os na área de trabalho do seu Raspberry pi, pois precisaremos do endereço do caminho em nosso programa.
O programa python completo pode ser encontrado na parte inferior desta página. Você pode usar o programa após editar o endereço do corretor e os diretórios de caminho de acordo com o que você criou. Mais abaixo, expliquei o código em pequenos trechos.
Começamos importando as bibliotecas necessárias para nosso projeto. As três bibliotecas principais são AWS SDK, biblioteca LCD e biblioteca DHT, certifique-se de ter instalado todos os três Pi. A biblioteca de tempo e data e hora será instalada por padrão.
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient #Import from AWS-IoT Library import time # Para criar atraso de data e hora de importação data, data e hora #Para obter data e hora importe Adafruit_CharLCD como LCD #Import LCD library import Adafruit_DHT #Importar biblioteca DHT para sensor
Na próxima linha, temos que fornecer os detalhes do Thing, como endereço do corretor, nome do cliente e caminho para o certificado e os arquivos de chave. Aqui eu usei o nome do cliente como new_Client, você pode usar o mesmo ou qualquer nome de sua escolha. O endereço do corretor deve ser alterado para o endereço da coisa que você criou e o diretório do caminho também deve ser alterado de acordo com a sua coisa. Além dessas duas coisas, você não precisa alterar nada nas linhas a seguir.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / pihing / CA / ESP32.phing" certificados "/ home / pi / Desktop / ESP32_Thing Certificados / private.pem.key", "/ home / pi / Desktop / ESP32_Thing Certificados / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Infinite offline Publish enfileiramento myMQTTClient. configureDrainingFrequency (2) # Draining : 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 seg myMQTTClient.configureMQTTOperationTimeout (5) # 5 seg
Em seguida, temos que especificar os detalhes do pino de nossa conexão. O número do pino GPIO de cada pino é alocado ao seu respectivo nome. Aqui, usamos o sensor DHT no pino 17 e o LCD no modo de 4 bits. O código para o mesmo é mostrado abaixo
sensor_name = Adafruit_DHT.DHT11 # estamos usando o sensor DHT11 sensor_pin = 17 #O sensor está conectado ao GPIO17 no Pi lcd_rs = 7 #RS do LCD está conectado ao GPIO 7 no PI lcd_en = 8 #EN do LCD está conectado ao GPIO 8 no PI lcd_d4 = 25 # D4 do LCD está conectado ao GPIO 25 no PI lcd_d5 = 24 # D5 do LCD está conectado ao GPIO 24 no PI lcd_d6 = 23 # D6 do LCD está conectado ao GPIO 23 no PI lcd_d7 = 18 # D7 de LCD está conectado ao GPIO 18 em PI lcd_backlight = 0 #LED não está conectado, então atribuímos a 0
Em seguida , inicializamos o LCD e exibimos uma pequena mensagem de introdução na tela LCD. Depois disso, tentaremos nos conectar com a coisa da AWS usando o endereço do corretor e os arquivos de chave inseridos acima. Se a conexão for bem-sucedida, o LCD exibirá “ Connected to AWS thing ” ou tentará por 10 segundos e, se falhar, exibirá a mensagem de erro. Se você receber uma mensagem de erro, certifique-se de ter criado o item com sucesso e vinculá-lo corretamente ao código. Você sempre pode voltar ao tutorial anterior para ver se criou a coisa corretamente na AWS.
if time.time () <Connecting_time: #tentar conectar-se à AWS por 10 segundos myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "connected", 0) imprimir "MQTT Client connection success!" lcd.message ('Conectado a \ n coisa AWS') #if conectado else: imprimir "Erro: Verifique os detalhes da AWS no programa" lcd.message ('Erro: \ nDetalhes inválidos') # se não estiver conectado
Uma vez que a conexão é estabelecida com sucesso, entramos no loop while infinito para publicar o valor de tempo, temperatura e umidade como uma carga útil. A carga útil aqui deve ser sempre uma string no formato JSON. Então, primeiro estamos lendo a data e hora atuais e salvando-as em uma variável usando as linhas abaixo
now = datetime.utcnow () #get data e hora current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') #get hora atual em formato de string
Em seguida, lemos os valores de umidade e temperatura do sensor DHT11 e os exibimos em uma tela LCD. A umidade e temperatura variáveis manterão o valor de umidade e temperatura, respectivamente
umidade, temperatura = Adafruit_DHT.read_retry (sensor_name, sensor_pin) #read from sensor
e salvar os respectivos valores em temperatura e umidade varibale
lcd.clear () #Limpar a tela LCD lcd.message ('Temp =%.1f C'% temperatura) # Exibir o valor da temperatura lcd.message ('\ nHum =%.1f %%'% umidade) #Display o valor de Humidity time.sleep (2) #Espere por 2 segundos e atualize os valores
Como dito anteriormente, a carga útil deve estar na forma de string com chaves ao redor, acrescentamos o valor de data, hora, temperatura e umidade após converter a variável em strings, conforme mostrado abaixo.
# preparar a carga útil no formato de string carga útil = '{"timestamp": "' + current_time + '", "temperatura":' + str (temperatura) + ', "umidade":' + str (umidade) + '}'
Finalmente, quando a carga útil está pronta, temos que publicá-la no MQTT Client. Isso pode ser feito usando o comando myMQTTclient.publish . Ao publicar algo, também devemos dar-lhe um nome, aqui eu o chamei de DHT11 / data, mas você pode nomeá-lo como quiser. Mas certifique-se de lembrar o nome, pois precisaremos se inscrever em nosso site para visualizar os dados.
Testando o programa python por meio da janela Shell:
Assim que o programa estiver pronto, inicie-o usando a sua escolha. Usei o Python IDE para iniciar o programa na janela do shell. Se tudo estiver bem, você deve obter uma conexão de mensagem bem-sucedida e toda a carga útil deve ser exibida na janela. Você pode verificar se os valores de temperatura e umidade estão sendo lidos corretamente. A carga útil será atualizada a cada 5 segundos. A janela do shell será semelhante a esta abaixo
Se você tiver qualquer problema, certifique-se de ter fornecido os detalhes da chave corretos e o endereço do corretor, também verifique se a coisa pode ser conectada usando o software MQTT.fx. Se o shell exibir sucesso de conexão do Cliente MQTT e travar ali, significa que o sensor DHT11 não está respondendo, verifique se você conectou ao pino correto e se o sensor está funcionando.
Trabalhando:
Depois de iniciar o programa e obter os detalhes acima na janela do shell, significa que o programa está respondendo corretamente e os valores estão sendo carregados para o servidor Amazon AWS. Você também pode observar a tela LCD para verificar se diz Publicado na AWS-IoT a cada 5 segundos, conforme mostrado abaixo.
Podemos entrar no aplicativo MQTT.fx e assinar o tópico DHT11 / data . Então, devemos ser capazes de obter todos os dados que estão sendo publicados pelo Raspberry Pi. Esses dados também serão atualizados a cada 5 segundos; sua tela MQTT será semelhante a esta abaixo
Como você pode ver, a carga útil está sendo recebida no software MQTT, conforme destacado em azul. Você também pode assistir ao vídeo abaixo para saber como funciona o projeto. Como agora temos nossos dados na internet, podemos usá-los com outras ferramentas fornecidas pela Amazon como Elastic search e Lambda para salvar os dados em um banco de dados ou visualizá-los em um gráfico. Existem muito mais aplicativos, com base em como temos que ser beneficiados pelos dados.
Espero que você tenha entendido o tutorial e gostado de construir algo semelhante, se você tiver algum problema em fazer isso, poste na seção de comentários abaixo ou use os fóruns para obter ajuda técnica.