Controle de LED RGB com Arduino e Asterisk

Para quem não conhece, Asterisk é um PBX por software, utilizado em muitas empresas de até grande porte, simplesmente distribuindo ramais dentro da rede ou fazendo interface com callcenters. Nesse artigo demonstro como o Arduino poderia ser controlado remotamente através de um telefone fixo ou celular, discando para o Asterisk em sua residência. No exemplo simplesmente farei o controle de LED RGB com Arduino e Asterisk, porém seria possível acender e apagar lâmpadas, abrir ou fechar portas, ajustar o ar condicionado da adega, etc.
Não vou dar aula de Asterisk, pois estou aprendendo agora, mas os procedimentos básicos foram os descritos a seguir.
Inicialmente, compilei a versão 1.8.5.0 do Asterisk com o DAHDI Linux 2.4.1.2. O Asterisk pode ser baixado do site oficial ou instalado via apt.
Criei um ramal SIP em /etc/asterisk/sip.conf com o seguinte conteúdo:
[1000]
callerid=Djames Suhanko
secret=1234
host=dynamic
type=friend
context=casa
E no plano de discagem (em /etc/asterisk/extensions.conf) fiz o seguinte:
exten => 8888,1,Goto(arduino,s,1)
Claro que não criei esse contexto apenas para redirecionar para outro, mas os demais planos de discagem que criei não tem relação com esse artigo, portanto omiti.
Discando para 8888, a ligação será redirecionada para o contexto chamado arduino, onde criei uma URA (Unidade de Resposta Audivel):
[arduino] exten => s,1,Answer() exten => s,2,NoOp(Ligação entrou na URA) exten => s,3,Background(ar) exten => s,4,NoOp(Digite a opção...) exten => s,5,WaitExten(10) exten => 1,1,AGI(udp.py,553255) exten => 1,2,GoTo(arduino,s,4) exten => 2,1,AGI(udp.py,9997755557) exten => 2,2,GoTo(arduino,s,4) exten => 3,1,AGI(udp.py,255) exten => 3,2,GoTo(arduino,s,4) exten => 3,1,AGI(udp.py,00000000000000000000) exten => 3,2,Hangup()
Como se pode notar, existem 4 opções na URA (assista ao video para entender). Quando se escolhe uma opção, a extensão executa os passos 1 e 2, que é executar o script python para comunicação na rede e posteriormente voltar ao menu no passo 4, onde se pode escolher outra opção.
Finalizada a configuração do asterisk. Agora é necessário copiar o script udp.py para /var/lib/asterisk/agi-bin, que é o diretório padrão do Asterisk onde ele lê os scripts chamados com o comando AGI.
Seu conteúdo:
#!/usr/bin/env python import socket import sys UDP_IP="10.0.0.1" UDP_PORT=8888 MESSAGE = sys.argv[1] try: if not sys.argv[1]: print "Passe o r,g,b como parametro" print "" except: print "Passe o R,G,B como parametro no formato decimal separado por virgula" print "" #print "UDP target IP:", UDP_IP #print "UDP target port:", UDP_PORT #print "message:", MESSAGE sock = socket.socket( socket.AF_INET, # Internet socket.SOCK_DGRAM ) # UDP for i in range(3): sock.sendto( MESSAGE, (UDP_IP, UDP_PORT) )
O que fiz foi basicamente abrir uma conexão UDP para se comunicar com o Arduino (que também está configurado para comunicação UDP) e enviar o comando para ele (vindo do argumento). Como UDP não garante a entrega do pacote, optei por fazer um loop para enviar 3 vezes o comando ao Arduino.
Em relação ao python, é uma linguagem absurdamente simples e creio que seja a mais fácil de se aprender, porém devido a necessidade de programar o Arduino, os tutoriais se basearam em C, mas recomendo o aprendizado de python.
O softphone que utilizei para discar para o Asterisk foi o SFLPhone. Em distribuições baseadas em Debian, apt-get install sflphone deve instalá-lo. Em distribuições baseadas em Red Hat, utilize o gerenciador de pacotes de sua distribuição.
Configure uma conta SIP, utilizando o ramal criado em sip.conf. No host name, utilize 127.0.0.1.
Discando 8888 a ligação deve ser redirecionada para a URA imediatamente. Depois disso, é só diversão.
O código utilizado no Arduino é o mesmo do artigo anterior.
E por fim, o video (horrível pra variar, mas é do meu canal antigo):
Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.
Siga-nos no Do bit Ao Byte no Facebook.
Prefere twitter? @DobitAoByte.
Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.
Nossos grupos:
Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/
Próximo post a caminho!
1 thought on “Controle de LED RGB com Arduino e Asterisk”