Manual

do

Maker

.

com

Biblioteca para AFSmart Home Automation

Biblioteca para AFSmart Home Automation

Aproveito o início desse post para anunciar a primeira biblioteca para o AFSmart rodando MicroPython; isso mesmo - você solicita sua AFSmart com MicroPython e ela já vem pronta para uso, incluindo a biblioteca que tive a honra de escrever. E isso significa que você terá toda a facilidade para interagir com sua AFSmart sem precisar desenvolver tudo do zero; é pegar e usar. Mostrarei em um video ao final do artigo como utilizá-la. E em breve disponibilizarei a biblioteca para utilizar com Sming e NodeMCU, bastando você solicitar ao vendedor o firmware desejado.

Se ainda não conhece o MicroPython, dê uma olhada nesse artigo onde discorro a respeito, mostrando todas as excelentes características desse magnífico firmware. Sério, você não quererá utilizar outro.

Se desejar compilar seu próprio firmware MicroPython, basta reproduzir os passos desse artigo. O processo não é rápido mas é descomplicado, seguindo o tutorial e pode ser instalado em qualquer ESP8266, desde o ESP-01.

Abro mais um parágrafo breve para dizer que os intervalos dos posts se extenderam um pouco por conta da complexidade envolvida no desenrolar do conteúdo. Quanto à qualidade, procuro melhorar constantemente, e o post de hoje é uma boa demonstração disso.

Pinout

Retornando ao foco do artigo, vejamos os recursos que você terá nessa placa, afinal não o fiz no post de apresentação.

Pinout da board

afSmart_pinout_01.webp

Da esquerda para a direita e de cima para baixo. À esquerda estão localizados os inputs dos relés. Os primeiros 2 pinos são entradas da fonte de alimentação entre 9V e 15V.

Ao energizar a board, o LED do lado esquerdo superior se acende. Logo ao lado esquerdo do ESP8266 está localizada a entrada analógica para um LDR ou qualquer par metálico que desejar obter informação analógica.

No canto superior direito tem o botão de programação e o botão de reset para gravar o ESP8266, como mostraremos aqui. O slot preto no canto superior direito é a entrada para o conversor USB-serial, para fazer a comunicação entre o computador e o ESP8266.

A saída OneWire está disposta no canto direito superior, logo abaixo da área dedicada à comunicação com o ESP8266. Você pode utilizar qualquer dispositivo OneWire (desde que consiga efetuar a comunicação com ele dentro do ESP8266 através de programação, claro). Perceba que logo atrás da conexão OneWire um LED azul de propósito geral está disponível e logo abaixo, um botão conectado ao GPIO 4, também para uso geral! Dá pra brincar ou não dá?

Ao centro da placa você vê o PCF8574 e o "zoom" mostra de ambos os lados os slots que dão acesso aos GPIO do ESP8266. Por isso digo que essa placa foi muito bem projetada; além do controle I²C (que já abre um universo de possibilidades) ainda você conta com os demais GPIO para adicionar sensores digital ou ainda interligar com outro dispositivo através de comunicação por bits. É muito recurso!

Uma coisa que é pouco comum (apesar de estar disponível, apenas não utilizado) é a conexão do INT do PCF8574 a um GPIO. No caso dessa board, está conectado ao GPIO 5 e permite tratar interrupções advindas das PCFs quando ligada a placa de expansão I²C. Só isso já é o suficiente pra coçar minhas mãos, mas não para por ai.

Pinout da placa de expansão

afSmart_expansion_board.webp

A placa de expansão primeiramente lhe dá acesso aos GPIO disponíveis na board, então, se começar a empilhar expansão, poderá acessar o GPIO lá no último nível (exceto o esteja utilizando em outro nível, claro). Quanto ao I²C, você tem 3 bits de endereçamento, como mostrado no artigo anterior (você pode acessá-lo clicando aqui).

Ligando o módulo de expansão ao módulo de relés, você pode controlar as interrupções desse módulo através do GPIO 5, mas tudo ficará transparente para você, utilizando a biblioteca que escrevi para esse módulo.

Repare nos slots brancos. Do lado direito o primeiro slot é uma expansão para I²C, mas acautele-se de manter o nível em 3V3, exceto utilize um conversor de nível lógico no meio. Os demais slots são expansões de P0 à P7.

Aproveitando o ensejo, a placa de expansão agora conta com a opção alternativa de slot. Invés dos conectores brancos com travas, você pode optar por headers comumente utilizados em boards Arduino e shields, basta informar o vendedor a opção desejada.

Tendo apresentado a placa e sua expansão, vamos aos recursos da biblioteca.

Recursos da biblioteca

Por mais que você seja um excelente programador, o que mais você quer na hora de desenvolver soluções é praticidade, afinal você não vive de diversão, não é mesmo?

Essa biblioteca lhe dará acesso rápido aos recursos da placa de modo que você pode implementar apenas a lógica de operação. Vejamos os recursos.

Controle dos relés

Primeiramente você cria seu programa para o MicroPython, então faz inclui a biblioteca:

import AFLib

#em alguma parte do codigo...
af = AFLib.AFLib()

Agora basta chamar os recursos da biblioteca. No caso dos relés, basta chamar:

af.relay(1,af.ON)

Dessa meneira você liga o relé 1 (considerando que está usando o NO).  As opções são:

  • af.ON - Ligar o relé
  • af.OFF - Desligar o relé
  • af.INVERT - Inverte o estado atual do relé (ON vira OFF e vice-versa. Declarado, mas não implementado ainda)
Leitura analógica

Para fazer uma leitura da porta analógica é tão simples quanto acionar um relé:

af.analog(5)

O ESP8266 só tem 1 pino analógico, de forma que passar um parâmetro numérico significa pedir para a lib que faça a média de 5 amostras. Você pode escolher a média de qualquer número de amostras, inclusive 1. Se escolher 0, não devolve nada.

Ler status do sistema

Você pode ler o estado dos bits de qualquer PCF interligado à board, inclusive o PCF dos relés, além de obter outras informações do sistema. Para tal, basta fazer uma leitura assim:

af.status()
OneWire

Nesse artigo discorri sobre o sensor de temperatura DS18B20 usando NodeMCU. Ele funciona também no MicroPython, mas não ainda no modo parasitário. Porém é mais simples fazê-lo funcionar com o MicroPython, como você poderá ver nesse outro artigo.

A biblioteca está pronta para imprimir valores lidos de um sensor DS18B20, chamando:

af.tempOneWire(loop,interval)

Onde "loop" é o número de impressões e "interval" é o intervalo entre cada amostragem (em milissegundos).

selfTest

Esse é um método que executa todos os recursos implementados até o momento para fazer o auto-teste da board. É bom que ao receber a placa você faça primeiramente um auto-teste para não ter dúvidas de que tudo está funcioando, assim qualquer falha lhe assegurará que o problema está em seu código e você não precisará se preocupar em debugar a board.

af.selfTest()
GPIO

Os GPIO são manipuláveis da forma tradicional no MicroPython. Para acender um LED no GPIO X você pode fazer algo como:

import machine
pin = machine.Pin(X, machine.Pin.OUT)
pin.high()
pin.low()

Já para acender o LED onboard de propósito geral (de cor azul), basta chamar (declarado, mas não implementado ainda):

af.onboardLED(af.ON)

Lembrando que af.OFF e af.INVERT são macros da lib.

E tudo é tão simples quanto você está vendo. Devemos seguir?

Configurar WiFi

Para configurar o WiFi, simplesmente chame (não implementado ainda):

af.connectTo("redeSelecionada","senhaDaRede")

Muitos recursos disponíveis no próprio MicroPython podem ser vistos nesse outro artigo, onde você encontra também a referência de como fazer upload de arquivos para o ESP8266 através do browser ou salvar em fluxo.

WEBREPL

O client WEBREPL lhe dá a possibilidade de acessar o console Python pelo browser, além de permitir transferência de arquivos, de modo que você pode previamente programar "in flow" no ESP8266 e com a função depurada, escrever o código completo no computador para depois transferí-lo ao sistema de arquivos disponibilizado pelo MicroPython.

Antes de utilizar o serviço, é necessário habilitá-lo e configurar uma senha. Para fazer o setup, basta importar o módulo:

import webrepl_setup

Será questionado sobre a inicialização do daemon em brackground. Responda com E. Uma senha então será solicitada (uma senha curta). Eu optei por 1234, escolha a sua. Ao término, será solicitado um reboot do ESP8266 e já estará habilitado o serviço.

Se deseja (e desejará, certamente) fazer uso desse recurso, clone o git do projeto:

cd && git clone https://github.com/micropython/webrepl.git

Entre no diretório webrepl e execute o help para maiores informações, é simples e será o suficiente para você também.

cd webrepl && python webrepl_cli.py --help

Basicamente, para transferir a lib para dentro do sistema de arquivos basta executar a linha a seguir (considerando você conectado ao ESP8266 e ele com o IP default 192.168.4.1):

python webrepl.py script_origem.py 192.168.4.1:script_destino.py
#ou...
python webrepl.py script_origem.py 192.168.4.1:/dir_destino/

demonstração

Agora que já discorri sobre todos os detalhes dessa board, assista o video e veja a interação entre o notebook e o AFSmart 7 Relés (isso mesmo, clique aqui para adquirir seu tesourinho). Pra finalizar a decoração com a cereja desse bolo, o preço caiu assustadoramente !!! Clique aqui e aproveite antes que acabe, porque depois só no próximo lote e dou minha palavra, não é comércio não - as placas estão acabando MESMO!

https://youtu.be/R9Goez2789o

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.