Manual
do
Maker
.
com
Escrever sobre ESP8266 se tornou um padrão. Cada dia que passa, mais novidades surgem e são realmente baseadas nas necessidades que se apresentam. Esse módulo da AF Eletrônica é o melhor exemplo disso, e é da industria nacional, o que dá mais orgulho!
Esse módulo diminuto (compare seu tamanho na foto) foi projetado para ser embutido na caixa de interruptores/tomadas. Um slot para ESP8266-01 foi disposto do mesmo lado do relé e logo adiante, o slot para o USB-serial. Ao lado do ESP8266 você encontrará os botões para colocar o ESP8266 em modo de gravação, de modo que você não precisará sequer removê-lo para gravar um novo firmware ou subir um programa.
O modulo AFIntelliLight tem uma fonte protegida integrada, assim você poderá entrar diretamente com tensão AC (de 100V à 240V @50-60Hz) diretamente, em qualquer lugar do Brasil e em países com frequência de 50Hz.
O nome AFIntelliLight é apenas uma lembrança a um recurso disponível nesse módulo. Repare que ele possui 2 bornes verdes, que podem ser utilizados para acionamento do relé, simplesmente fechando o circuito em ground. Isso possibilita colocar um botão de momento qualquer para acionar o relé (um botão tipo campainha, botão de reset etc). Claro, a reação é tratada pelo ESP8266, portanto é necessário programação, e aproveitando essa apresentação, disponibilizarei o código para que você possa utiliz á-lo com nenhum (ou com o mínimo de) esforço.
Hoje o AFIntelliLight tem um apk para Android, caso você não pretenda se dar ao trabalho de programar nada. É um programa com mudança de estado parecido com o MQTT Dashboard, mas de comunicação direta com o dispositivo, ou seja, você compra, instala e usa. Todavia, se desejar programá-lo e integrá-lo à sua IoT utilizando MQTT ou se desejar rodar um webserver nele, você encontra os passos aqui no site.
No video abaixo você vê a praticidade de instalação e a operação através do botão pulsador e também pelo aplicativo.
https://www.youtube.com/watch?v=wmiuhFacV5I&feature=youtu.be
Para programá-lo, podemos utilizar o Aptana Studio, Pycharm, ESPlorer, entre outros. Eu gosto de utilizar o ESPlorer porque é uma IDE criada para ESP8266 para programação em Lua e Python. Vou apresentar um pouco mais da IDE antes de seguirmos para o código, talvez eu consiga lhe mostrar as benéfices propiciadas por ela.
Normalmente eu coloco o firmware MicroPython, cujo firmware disponibilizo nesse link do github. Já mostro em outro tópico mais abaixo como fazer o flashing do firmware, não há riscos, você poderá fazê-lo tranquilamente.
Tendo instalado o firmware, você poderá então iniciar a utilização do ESPlorer IDE - uma IDE desenvolvida pelos russos. Faça o download nesse link, então execute-o após sua extração. Eu só utilizo Linux e chamo o programa por linha de comando, abrindo um terminal. O processo pós download é o seguinte:
cd ~/Downloads
unzip ESPlorer.zip
cd ESPlorer
java -jar ESPlorer.jar
E a IDE se abrirá, ainda configurada para utilização com NodeMCU, ou seja, para programação em Lua.
Essa imagem é de outro artigo que escrevi, onde exemplifiquei a utilização da IDE utilizando NodeMCU e por conseqüente, a linguagem Lua (perdoe-me pela trema, mas é incabível a utilização da palavra 'conseqüente' sem ela).
Nessa interface, a única configuração que voce precisará modificar é justamente a escolha do firmware em questão. No nosso caso, devemos selecionar "MicroPython" em "Settings".
Essa é uma ótima oportunidade para falarmos outra vez sobre interrupções. A vez mais recente que discorremos a respeito foi no "Controle de maturação da cerveja". No caso, a interrupção foi utilizada para reiniciar o ESP8266 após um deep sleep. Agora a interrupção será externa, isto é, uma interrupção de origem periférica, advinda de um botão, por exemplo. Mas como escrever uma interrupção para o ESP8266? - É isso que veremos agora.
Indo por partes, a primeira coisa que você deve ter em mente é que uma interrupção externa deverá adentrar o sistema através de um GPIO. Assim sendo, é necessário configurar o pino do ESP8266 de modo que ele possibilite a recepção de um sinal. Nesse caso, a configuração básica do pino deve ser algo como:
from machine import Pin
pulse = Pin(2,Pin.IN)
Ou seja, criamos um objeto "pulse", que é o GPIO 2, configurado como INPUT.
O objeto "pulse" tem um método chamado "irq". Esse método recebe 2 parâmetros, sendo:
Normalmente o handler acaba sendo uma função convencionada "callback". Claro que pode ter o nome que desejar, mas seguindo o legado, vejamos um exemplo da função de callback:
def callback(p):
print("Mudanca de estado do pino ",p)
Quando ocorrer o evento, essa função será chamada. Agora precisamos preparar o "trigger", que na tradução direta é o gatilho, propriamente dito. A linha que ativará a interrupção no pino 0 fica assim:
pulse.irq(trigger=Pin.IRQ_RISING, handler=callback)
Desse modo, o botão deve ser pressionado e somente quando liberado a interrupção é gerada. Todavia, existem 3 modos de configuração para reagir a um evento do pino:
#Quando o botão é pressionado, na descida já reage
pulse.irq(trigger=Pin.IRQ_FALLING, handler=callback)
#Só reage na liberacao do botao
pulse.irq(trigger=Pin.IRQ_RISING, handler=callback)
#Reage em ambos os estados do pino, gerando 2 interrupcoes nesse caso
pulse.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=callback)
Tendo esses conceitos, já podemos iniciar o teste do pulsador da nossa AFIntelliLight.
Nosso callback funcionará assim:
from machine import Pin
import time
#criar uma classe
class relay:
#declaracao do init
def __init__(self):
#coisas para acontecer ao instanciar o objeto
self.turn = 0
self.rele = Pin(0,Pin.OUT)
self.rele.high()
self.pulse = Pin(2,Pin.IN)
#metodo de callback das interrupcoes
def callback(self,p):
#para as interrupcoes
self.pulse = Pin(2,Pin.IN,Pin.PULL_UP)
#debug
print("Interrupt!")
#turn eh um modo de contornar a mudanca de estado dupla
if self.turn == 1:
val = self.rele.value()
if val > 0:
self.rele.low()
print("Ligado")
else:
self.rele.high()
print("Desligado")
self.turn = 0
else:
self.turn += 1
#o delay evita uma nova interrupcao seguida
time.sleep_ms(1000)
self.pulse = Pin(2,Pin.IN)
def start(self):
#inicia a interrupcao no gatilho de subida, chamando o callback
self.pulse.irq(trigger=Pin.IRQ_RISING,handler=self.callback)
Você pode tanto copiar esse código aí acima como baixar o arquivo do github, criado para o parceiro AFEletronica, nesse link.
Para utilizá-lo, claro que você precisará instalar o firmware MicroPython. Eu disponibilizo um firmware que compilei para os parceiros, que você encontra aqui.
O tutorial para instalar o firmware está nesse outro artigo, na sessão "Trocando o firmware NodeMCU por MicroPython". Não se preocupe, o procedimento é o mesmo para trocar qualquer firmware.
para habilitar a transferência de arquivos para o ESP8266, sugiro esse outro artigo, na sessão WEBREPL.
Quando você estiver com o programa dentro do MicroPython, bastarão 3 linhas:
import interrupts
control = interrupts.relay()
control.start()
Por fim, conecte um fio ao borne verde da esquerda (cuidado com a corrente alternada!) e toque-a rapidamente no borne da direita. Após um breve delay, o relé será acionado. É o que acontece quando você utiliza um botão de momento; ele fecha e abre o circuito.
Essa é fácil de responder. Quando você utiliza interrupções, não precisa ficar preso a um loop. Além disso, seu programa pode executar outras tarefas e ao ocorrer uma interrupção, todas as demais tarefas param e o processador vai atender a interrupção.
O outro método de analisar pinos de GPIO é através de polling, verificando o estado de um a um, mas utilizar isso gasta recursos desnecessariamente.
No próximo post relacionado vou disponibilizar uma classe completa para controlá-lo utilizando MQTT.
Essa belezinha pode ser adquirida na AFEletronica, e clicando aqui você vai direto para a página de especificações do produto. Se desejar fazer zeroconf, então você pode adquirir esse produto com o app Android (consideravelmente mais caro). Se desejar fazer "zerocusto", motive-se a implementar MQTT ou um webserver, que mostrarei no próximo artigo relacionado!
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.