Controlando Arduino via IRC

Esse artigo tem como objetivo, mostrar como controlar o Arduino via internet de forma simples. Dentro do contexto, será tratado sobre a criação de um botnet em Python, que será responsável em filtrar os comandos digitados no IRC e enviá-los ao Arduino.

[ Hits: 11.421 ]

Por: mrxrobot em 08/12/2014 | Blog: https://notabug.org/mrxrobot_


Instalação / Configuração / Código / Ajustes



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:
Linux: Controlando Arduino via IRC

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.
Linux: Controlando Arduino via IRC

* 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:
Linux: Controlando Arduino via IRC

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
Linux: Controlando Arduino via IRC

Informe a porta USB, no exemplo, estou usando /dev/ttyACM0.
Linux: Controlando Arduino via IRC

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!

Página anterior    

Páginas do artigo
   1. Introdução
   2. Instalação / Configuração / Código / Ajustes
Outros artigos deste autor

Introdução ao clib (Command Line Book)

LibreOffice no Slackware - Edição 2017

Leitura recomendada

7 melhores práticas para quem é iniciante em Arduino

Arduino - Uma plataforma open source para desenvolvimento de eletrônica

Guia de referência do ISOLINUX (parte 1)

Security Hacks: Linux & BSD

Servidor de impressão com Ubuntu e Pykota

  
Comentários
[1] Comentário enviado por fabio em 08/12/2014 - 15:46h

Sensacional! Um dia ainda vou aprender Arduino.

[2] Comentário enviado por mrxrobot em 08/12/2014 - 16:04h


[1] Comentário enviado por fabio em 08/12/2014 - 15:46h:

Sensacional! Um dia ainda vou aprender Arduino.


Aprenda sim. No site do arduino tem toda a documentação incluindo a programação da placa. http://arduino.cc/en/Reference/HomePage
Com o Arduino você consegue desenvolver projetos que sem ele seria bem complexo de ser feito.
Desde que comecei a usar o Arduino não parei mais rsrs. Recomendo a todos do VOL.


[3] Comentário enviado por Lisandro em 10/12/2014 - 20:16h

Parabéns Marcos. Bem legal o artigo, também gosto de fazer projetos com Arduino.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts