O Twilio é uma plataforma com intuito de facilitar desenvolvedores a criarem soluções integradas com voz, mensagens de texto, vídeo, notificações e facilidades de comunicação em geral. O mesmo conta com uma API (Application Programming Interface) capaz de enviar mensagens bidirecionais do app Whatsapp de maneira autônoma.
Aplicação
Neste post iremos controlar um led através de mensagens enviadas pelo Whatsapp com intuito de simular uma situação onde todo ambiente poderá ser controlado por mensagens enviadas pelo app. Por meio de uma interface criada em Python os dados serão tratados e um Arduino se responsabilizará por receber os comandos e controlar o status do LED.
Materiais e montagem
Para conclusão de todo o projeto será necessário termos em mãos os seguintes materiais:
- Arduino
- LED
- Jumpers MM
- Protoboard
Segue abaixo o esquema para montagem do protótipo:
Configurando o Twilio
Antes de mais nada é necessário inscrever-se no Twilio. Para isso clique aqui. Após o registro, faremos o login e seremos direcionado a dashboard da plataforma. Para configuração do acesso é necessário seguir este simples tutorial. Uma vez configurado não será mais necessário fazê-lo novamente. Após a conclusão clique na opção “Sendbox” no menu lateral esquerdo.
Abaixo um fluxograma ilustra como funcionará a execução dos processos.
O Whatsapp envia uma mensagem para o Twilio, através de um webhook a interface recebe o texto da mensagem, envia o comando para o Arduino e retorna um feedback para o Twilio que por sua vez encaminha o mesmo em forma de mensagem para o usuário do Whatsapp.
Programação
Levando em consideração que o Python e o Pip estejam instalados em sua máquina, é necessário baixarmos a biblioteca do Twilio, Flask e a Pyserial. Para isso execute os comandos abaixo, caso tenha problemas com o método de instalação do Twilio consulte a biblioteca aqui.
pip install twilio pip install flask pip install pyserial
Feito isso crie o arquivo whats.py, on.py e off.py. O whats.py receberá o algoritmo que fará a interface entre o app e o Arduino, o aquivo on.py será responsavel por acender o led e por fim o off.py se responsabilizará por apagar o led.
Copie o código abaixo e cole-o dentro do arquivo whats.py. O mesmo é responsável por criar um servidor local na porta 5000, criar uma rota chamada led, receber mensagens através do método POST, fazer a verificação da mensagem recebida, retornar uma mensagem de feedback e executar o algoritmo que define o status do led.
from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse
import os
app = Flask(__name__)
@app.route("/led", methods=['POST'])
def sms_reply():
msg = request.form.get('Body')
resp = MessagingResponse()
if(msg == "Acender"):
resp.message("Led ON")
os.system("python on.py")
if(msg == "Apagar"):
resp.message("Led Off")
os.system("python off.py")
if(msg != "Acender" and msg != "Apagar"):
resp.message("Digite Acender para LED ON\nE Apagar para LED OFF")
return str(resp)
if __name__ == "__main__":
app.run(debug=True)
Em seguida preencha o arquivos on.py com o seguinte algoritmo.
#on.py
import serial
import time
ser = serial.Serial('COM3', 9600)
def led_on_off():
print("LED is on...")
time.sleep(0.1)
ser.write(b'H')
time.sleep(2) # Aguarde para que se inicialize a conexão com a serial.
led_on_off()
E para o arquivo off.py.
#off.py
import serial
import time
ser = serial.Serial('COM3', 9600)
def led_on_off():
print("LED is off...")
time.sleep(0.1)
ser.write(b'L')
led_on_off()
Ao conectar o Arduino na USB verifique se o mesmo estará alocado na porta COM3 caso seja outra porta é necessário fazer a alteração no parâmetro da variável “ser”. Feito isso abra a IDE do Arduino e compile o algoritmo abaixo.
const int ledPin = 12;
int incomingByte;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == 'H') {
digitalWrite(ledPin, HIGH);
}
if (incomingByte == 'L') {
digitalWrite(ledPin, LOW);
}
}
}
O mesmo é responsável por ler as informações que chegam na Serial e acionar o led de acordo com os comandos recebidos. Para fazer download de todos algoritmos basta clicar aqui.
Para finalizar faça download do ngrok, necessário para criar uma URL no servidor localhost. Para fazer download basta clicar aqui, descompacte o arquivo executável e adicione-o à pasta do projeto. Após o procedimento execute o arquivo whats.py em seguida execute o ngrok e efetue o seguinte comando:
ngrok http 5000
Se tudo ocorrer bem, você visualizará informações parecidas com a imagem abaixo.
Copie o link que contém o https e cole-o no input do “Sendbox” dentro da plataforma do Twilio, complete o link com “/led” em seguida clique em save. Certifique-se que o campo foi preenchido corretamente.
Conclusão
Se todos os procedimentos foram executados de maneira adequada, basta enviar uma mensagem para o número do Twilio salvo no smartphone e ele lhe responderá com as seguintes mensagens.
Sinta-se a vontade para fazer alterações no algoritmo, adicionando novas funcionalidades. A plataforma Twilio oferece uma vasta gama de ferramentas, aproveite para fazer uso das demais. Abaixo o vídeo demonstra a solução final do projeto executado com maestria.






Parabéns, excelente matéria! Amigo daria fazer isto pela ide arduino sem usar python?
Boa tarde. Gostaria de tirar umas duvidas. Pode passar o watsapp:?
Tenho um projeto onde preciso coletar a informação da temperatura atual pelo Arduino e enviar para o WhatsApp , essa plataforma seria indicada para o meu projeto ?
Olá,
É possível enviar mensagens para Twilio sem conectar o Arduino na porta serial do computador?
Toda vez que ligo o computador, tenho que rodar o ngrok pra ele gerar uma nova URL, entrar no twilio e informar essa nova URL… Existe algum outro jeito de criar uma URL fixa? Vi alguma coisa na internet sobre um tal de “serveo”, como alternativa ao ngrok.
É possível instalar ele em algum server na nuvem e ele fica rodando diretamente
Olá, gostaria de saber se voce tem algum projeto nesse seguimento de whats app com Twilio porem trabalhado com um teclado membrana e enviando mensagens de acordo com o numero apertado no mesmo.
Att.
Neste seguimento eu ainda não vi nada. Mas é possível ser desenvolvido com as mesmas ferramentas demonstradas neste post
Bom dia Allef
Seria possível fazer um projeto no qual se apertasse um botão no arduino e fosse enviada uma mensagem para o WhatsApp?
Desde já grato pela atenção
gostaria de saber também
Também fiquei na dúvida se isso é possível!
Claro! É bem possível. Vcs teriam interesse caso eu escreve sobre isso?
Sim!!
com certeza!!!!
Só é possível com Arduino nano?
Bom dia! É possível utilizar qualquer Arduino.
Boa Noite!
Na parte que pede para executar o arquivo whats.py e em seguida ngrok, o whats.py pode ser em qualquer IDE python?
Eu executei no sublime e também executei no terminal de comandos
Parabéns ! Muito útil!!
Vlw Luiz. Muito obrigado!
Boa noite, nunca programei em python, consigo fazer? Qual IDE sugere para fazer o codigo em python?
Ola Ronaldo. Claro que consegue, basta procurar outros tutoriais aqui no embarcados mesmo para se ambientar com o Python. Para programação do mesmo é possível usar qualquer editor de código. Eu utilizo o Sublime, mas também é possível programar direto do prompt de comando.
Olá Allef. Parabéns!!!! Excelente matéria. Da para executar usando a IDE do próprio arruino e não usando Python? Outra coisa. Se desejar desvincular o pc do arruino, como fazer para ele funcionar sem estar conectado ao pc?