Instalando o pyFirmata
O Python não contém no seu conjunto de módulos e bibliotecas o pyFirmata.
Para instalar o módulo, utilizaremos o pip.
Abra o terminal e execute o comando:
# pip install pyfirmata
Ou:
# pip2.7 install pyfirmata
Toda a documentação do módulo pode ser encontrada em:
Com o módulo pyFirmata instalado podemos continuar.
Configuração
Passos para realizar toda a configuração do Arduino:
1. Conectar o LED no pino digital 13 do Arduino:
2. Conectar o Arduino na porta USB.
3. Abrir o IDE do Arduino.
Observação: é necessário executar o IDE como root, só assim o programa terá permissão para reconhecer a porta USB.
* Atenção: note que a porta que o Arduino está conectado é:
/dev/ttyACM0
4. Carregar o programa StandardFirmata no Arduino:
No IDE do Arduino clique em: File → Examples → Firmata → StandardFirmata
5. Fazer o upload do StandardFirmata:
Configuração do Arduino finalizada.
Código Python
Estou disponibilizando o código no GitHub também:
#!/usr/bin/env python2.7
# -*- encoding: utf-8 -*-
##############################################
# Controlando o arduino via IRC #
# por: Marcos Rodrigues de Carvalho #
# nickname: warlock #
# VOL: www.vivaolinux.com.br/~marcos_warlock #
##############################################
import socket, time, sys
from re import search
from pyfirmata import Arduino
class Controle:
def __init__(self, board=Arduino(raw_input('Informe a porta USB: '))):
self.board = board
def ligar(self):
self.board.digital[13].write(1) # envia sinal 1 para a porta digital 13 do arduino
def desligar(self):
self.board.digital[13].write(0) # envia sinal 0 para a porta digital 13 do arduino
# Cria uma instancia da classe Controle
action = Controle()
# definir o servidor
server = 'irc.freenode.net'
porta = 6667 # port utilizado pelo IRC no linux
canal = '#ControleArduinoPython'
nick = 'Servidor'
senha = 'senha1234'
class Servidor:
def __init__(self):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.connect((server, porta))
self.s.send('NICK %s\r\n' %nick)
self.s.send('USER ' + nick + ' ' + nick + ' ' + nick + ' .:\n')
self.s.send('Join %s\r\n' %canal)
time.sleep(2)
print(self.s.recv(1024))
def testar(self):
self.teste = False
while self.teste != True:
self.msg = self.s.recv(5000)
print (self.msg)
if self.msg[0:4] == 'PING':
self.s.send(self.msg.replace('PING', 'PONG'))
if search('@conectar %s' %senha, self.msg):
self.teste = True
self.s.send('PRIVMSG %s : Conectado com sucesso!\r\n' %canal)
while True:
self.msg = self.s.recv(5000)
print (self.msg)
if self.msg[0:4] == 'PING':
self.s.send(self.msg.replace('PING', 'PONG'))
if search('@ligar', self.msg):
action.ligar()
self.s.send('PRIVMSG %s : Led ligado\r\n' %canal)
if search('@desligar', self.msg):
action.desligar()
self.s.send('PRIVMSG %s : Led desligado\r\n' %canal)
Servidor().testar()
Ajustes finais
Após ter realizado todo o processo de configuração e com o código em mãos, vamos finalizar.
Execute o programa como usuário root:
# python2.7 arduino.py
Informe a porta USB, no exemplo, estou usando
/dev/ttyACM0.
Acessando o canal do botnet no IRC
Execute no terminal:
irssi
Após o programa abrir, digite os seguintes comandos:
/connect irc.freenode.net
/join #ControleArduinoPython
@conectar senha1234
Feito isso, execute:
- Para ligar o LED: @ligar
- Para desligar: @desligar
Pronto, terminamos!
Críticas e sugestões são bem-vindas!