Page 9 - Revista_60.pub
P. 9
TEMA DA CAPA
RASPBERRY PI + ESP8266 = “LIGHT”
} def arp_monitor_callback(pkt):
} if ARP in pkt and pkt[ARP].op in (1,2):
} mac= pkt.sprintf("%ARP.hwsrc%")
} for key, val in data.items():
if val == mac:
} command="lighton"
#lê as boas vindas
void processCommand(String command) tn.read_until("Yellow! ")
{ #escreve o comando
//ligaluz tn.write(command + "\n")
if (command.indexOf("lighton") > -1) #sai
{ tn.write("exit\n")
digitalWrite(Relay1, LOW); //Turn ON return pkt.sprintf("%ARP.hwsrc%")
//relay sniff(prn=arp_monitor_callback, filter="arp",
server.println("Ligado" ); store=0)
commandString = "";
return; Esclarecendo alguma dúvida que ainda possa existir
} nesta fase do projecto… Para se obterem os endereços
//desligaluz MAC de todos os devices que se ligam à rede, usamos o
if (command.indexOf("lightoff") > -1) código python descrito, recorrendo ao scapy, de forma sim-
{ plificada fazendo um scaner de ARP. A comunicação do lado
server.println("Desligado" );
digitalWrite(Relay1, HIGH); //Turn OFF do Raspberry Pi é feita implementado um cliente de telnet
//relay que se ligará ao nodeMCU e enviará os comandos por ele
commandString = ""; suportados. Para comparar os MAC's conhecidos com os
return;
} MAC's dos devices conectados, é utilizado um ficheiro de
commandString = ""; texto e por simplicidade, a comunicação entre o Raspberry e
} o nodeMCU, optámos por usar o protocolo telnet. Mais uma
vez pelo motivo da simplicidade e exemplo educacional, uma
Com esta parte já carregada no ESP8266, passemos vez que é dos protocolos mais conhecidos que proporciona
à próxima parte do código. Para executarmos o código no facilmente a comunicação baseada em texto interativo bidire-
Raspberry, podemos recorrer a um editor de texto. Neste cional usando uma conexão de terminal virtual.
caso foi usado o Scapy. Caso não tenham instalado o mes-
mo, basta executar o comando:
Hoje em dia, muito
$ sudo pip3 install scapy
Uma vez instalado o scapy podemos colocar o código se tem falado do con-
em execução “permanente” recorrendo ao comando:
$ screen -S rpi -d -m /usr/bin/python3 /home/pi/ ceito de casa inteli-
abracadabra.py
gente através de IoT.
Código do Raspberry PI
Isto é, tornar a nossa
#! /usr/bin/env python
import csv
from scapy.all import * casa inteligente atra-
import getpass
import sys
import telnetlib vés de pequenos pro-
#globalvars
HOST = "esp8266" jectos. Se pesquisar-
#cria telnet object
tn = telnetlib.Telnet(HOST) mos um pouco, facil-
mac=""
command=""
mente temos acesso
#readMacsFile
data={}
with open('mypll.txt') as fin: aos mais variados
reader=csv.reader(fin, skipinitialspace=True,
quotechar="'")
for row in reader: exemplos dos passos a
data[row[0]]=row[1:]
#for key, val in data.items():
# print (key,val) seguir para de facto
9