Sistema de alimentação de animais de estimação usando WhatsApp (protocolo em ponte com MQTT)

Sistema de alimentação de animais de estimação usando WhatsApp (protocolo em ponte com MQTT)

Neste artigo estaremos criando um sistema de alimentação para animais de estimação que pode ser controlado pelo WhatsApp.

Componentes necessários
Ferramentas necessárias/bibliotecas necessárias

Máquina baseada em Linux
API WhatsApp baseada em Python
Baseado em MQTT
IDE Python
IDE do Arduino

Informações técnicas
O projeto completo conta com três tipos de comunicação e dispositivos. XMPP (WhatsApp, MQTT e Arduino Serial) também pode ser categorizado como comunicação M2M (comunicação máquina a máquina).

Os desafios técnicos eram criar um dispositivo que pudesse ser controlado com uma interface que estivesse prontamente disponível para todos. Portanto, usaremos o WhatsApp com MQTT para controlar o comedouro dos animais de estimação.

Diagrama de bloco

Figura 1 Sistema de alimentação de animais de estimação usando WhatsApp

A caixa de alimentação para animais de estimação é controlada por uma porta controlada por Atmega328 (Arduino UNO) e ESP. Arduino está recebendo comandos via MQTT usando ESP. Existe uma máquina baseada em Linux que executa a API do WhatsApp para ler mensagens do WhatsApp e enviá-las ao corretor MQTT. O ESP recebe comandos do corretor para controlar o servo conectado à porta do sistema de alimentação.

Diagrama de circuito

Conexão para servo
Como funciona o sistema
Quando uma mensagem é enviada do dono do animal para o sistema de alimentação do animal usando o WhatsApp, a mensagem vai primeiro para a máquina Linux, onde a mensagem é lida do WhatsApp usando API. A mensagem é verificada se algum comando estiver disponível para controlar o sistema. O comando é extraído e enviado ao sistema usando MQTT. A mensagem é recebida pelo ESP e enviada ao Arduino via Serial, e se a mensagem disser para abrir a porta do sistema de alimentação, o servo se move e a porta é aberta.

Entendendo o código-fonte
Como o projeto tem duas partes

  • Leia mensagens pelo WhatsApp e envie-as para MQTT: Inclui código para máquinas Linux e instalação da API do WhatsApp e implementação do MQTT.
  • Leia mensagens pelo MQTT e controle o servo motor: código Arduino para controlar o servo e ESP para comunicação pelo MQTT.

Vamos primeiro entender a comunicação com WhatsApp e MQTT.

Código para script Python
O script python é instalado com a API “Yowsup” do WhatsApp para ler e enviar mensagens do WhatsApp.

Existem dois arquivos neste script run.py e camada.py.

Compreendendo o arquivo Run.py
Chamaremos nossas bibliotecas no topo do arquivo

de yowsup.stacks importar YowStackBuilder
de yowsup.layers.auth importar AuthError
de yowsup.layers importar YowLayerEvent
de yowsup.layers.network importar YowNetworkLayer
de yowsup.env importar YowsupEnv

  • Também anexaremos o arquivo da camada no topo porque a classe principal “Ecocamada” existe dentro desse arquivo.

Da importação da camada EchoLayer

  • Podemos nomear qualquer arquivo de camada, mas devemos colocar o mesmo nome aqui.
  • Dentro de py, declararemos nossa variável principal para senha e eventos que queremos que ocorram.

credenciais = (“91xxxxxxxxxx”, “HkhWVW5/Wnr493HXK8NKl/htpno=”)

  • Agora passamos para a camada e construímos a pilha. Além disso, o loop que manterá a conexão ativa é chamado.

stack.setCredentials(credenciais)
stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CO
NNECT)) #enviando o sinal de conexão
stack.loop #este é o programa mainloop

Compreendendo o arquivo layer.py
Este arquivo contém a biblioteca de protocolos para MQTT e pode receber mensagens do WhatsApp.

Entendendo como as mensagens são recebidas do WhatsApp
Este arquivo contém a classe que receberá todas as mensagens recebidas para este número, e que será uma entidade de retorno de chamada para que qualquer outro loop possa ser executado dentro do arquivo.

@ProtocolEntityCallback(“mensagem”)
def onMessage(self, messageProtocolEntity):
se for verdade:

Os dados da mensagem e o número de onde veio a mensagem podem ser obtidos abaixo.
incomming_message_data = mensagemProtocolEntity.getBody

Isso obterá o corpo da mensagem, que é a mensagem real. Ele será armazenado em uma variável string “incomming_message_data”
incomming_message_sender = mensagemProtocolEntity.getFrom

Esta linha irá armazenar o número de contato da mensagem recebida na variável string “incomming_message_sender”

Compreendendo as camadas MQTT para envio e recebimento
Em primeiro lugar, importaremos as bibliotecas necessárias para o MQTT.
importar paho.mqtt.client como mqtt
importar paho.mqtt.publish como publicar

agora iremos declarar uma variável chamada client com mqtt client.
cliente = mqtt.Cliente

Agora faremos dois retornos de chamada de função 1. Para receber mensagens, 2. Fazer algo na conexão bem-sucedida.
cliente.on_connect=on_connect
cliente.on_message=on_message

Finalmente, nos conectaremos ao broker MQTT em uma porta e iniciaremos o cliente dentro de um loop sem bloqueio
cliente.connect(“corretor.hivemq.com”, 1883, 60)
cliente.loop_start

Depois que a conexão for bem-sucedida, podemos enviar mensagens usando este
publicar.single(tópico, message_data, hostname=”broker.hivemq.com”)

Então, agora quando qualquer mensagem é recebida no WhatsApp, ela é armazenada em uma string, e então essa string é escaneada em busca de algumas palavras-chave que definem aquela mensagem como um comando para ligar/desligar o servo.
elif(“luzes acesas” em incomming_msg):
#Faça algo na partida

Agora, se a condição for atendida, enviamos o comando de controle para o corretor MQTT.
publicar.single(“ts/dog”, “feed”, hostname=”broker.hivemq.com”)

Quando alguma mensagem não reconhecida é recebida, a mensagem no WhatsApp é respondida que é inválida.

Código para Arduino
O Arduino é instalado com um código que recebe dados em série e controla o servo de acordo.

Primeiro adicionamos uma biblioteca “Servo” para controlar o servo facilmente
#include Tentão conectamos o servo de acordo com o diagrama do circuito e podemos controlar o servo enviando o ângulo para o objeto servo.

meuservo.attach(5); // anexa o servo no pino 9 ao objeto servo
meuservo.write(0);

Além disso, quando uma string específica for recebida como “feed” ele irá girar o Servo onde a porta estará aberta e ao receber “ok” irá fechar a porta.
if (rec == “alimentar”) {
meuservo.write(180);
}
if (rec == “ok”) {
meuservo.write(0);

}

Código para ESP
O ESP está conectado ao Arduino na porta serial e inscrito em um tópico MQTT para recebê-lo. Ele envia os dados recebidos no tópico MQTT para a porta serial e os dados da serial para o tópico MQTT.

Para saber mais sobre ESP e MQTT, consulte nossos artigos anteriores.

Conteúdo Relacionado

ESP32-CAM é um módulo de câmera compacto que combina...
A Infineon Technologies AG apresenta os novos MOSFETs CoolSiC...
Uma rede de sensores é incorporada em todos os...
O controlador do motor é um dos componentes mais...
A evolução dos padrões USB foi fundamental para moldar...
A SCHURTER anuncia um aprimoramento para sua conhecida série...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Você provavelmente já se deparou com o termo “diodo”,...
Se você desempenhar o papel de um Ventilador transformadorInicialmente...
Quando você explora a área de Controle V/F dos...
Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.