quarta-feira, 12 de julho de 2017

Usando o ESP8266-Pro da RobotDyn



Você já deve ter visto algumas placas diferentes com o ESP8266 rolando por aí (como o módulo wifi-serial de 8 pinos, os módulos como o ESP12-E que devem ser soldados em uma PCI, o WeMos, NodeMCU e variantes). Esse é um deles. No começo ele parece esquisito, porque passa a impressão de que bastaria ligar um adaptador USB-Serial e começar a usar, mas aí você solda os pinos, conecta o USB-Serial e... nada. Nenhum sinal de vida. Você tira outro da embalagem pra ver se só pegou um ruim, e o resultado é o mesmo: nenhum sinal de vida.


O fato é que o mais provável é que ele esteja funcionando perfeitamente bem. Apesar de parecer um arduino pro ou coisa parecida, é certos pinos precisam estar em níveis lógicos determinados antes que ele comece a funcionar, assim como um ESP12-E. Se você pesquisar a respeito, descobrirá que o ESP8266 tem mais de um modo de boot: em um deles ele aceita ser programado via serial, em um deles ele roda o programa gravado na memória flash e em outro ele roda um programa armazenado em um cartão SD ou coisa do tipo. Ainda não descobri se é possível fazer essa plaquinha bootar de um cartão SD, então vou deixar aqui apenas como colocá-la no modo de programação via serial e no de execução normal do firmware.

Execução normal do programa:
EN: HIGH (resistor de 1-10k)
IO15: LOW ( resistor de 1-10k)
IO0: HIGH ( resistor de 1-10k)
IO2: HIGH ( resistor de 1-10k)
Execução do bootloader serial (modo de programação do firmware):
EN: HIGH (resistor de 1-10k)
IO15: LOW ( resistor de 1-10k)
IO0: LOW
IO2: HIGH ( resistor de 1-10k)

É basicamente isso. Vou mostrar aqui como gravar o firmware NodeMCU na dita cuja. Ela tem 1mb de memória, o que é o bastante para o próprio firmware (que ocupa cerca de 500 kbytes) e para os arquivos (scripts, páginas leves em html, etc).


Eu já tinha uma aplicação em mente: um monitor climático que publicasse os dados na Internet. Solicitei uma build personalizada apenas com alguns módulos (GPIO, HTTP e DHT, além dos padrões) e, enquanto esperava o arquivo estar disponível para download, preparei o ESP8266 para receber o programa. A primeira coisa que fiz foi apagar a memória flash usando o esptool.py e o comando erase_flash. Esse passo serve para apagar configurações que podem provocar ciclos infinitos de wdt resets inexplicáveis, e também é uma forma de constatar que está tudo funcionando normalmente. Para apagar a memória flash, primeiro coloca-se o esp8266 para rodar o bootloader serial colocando o pino IO0 em LOW e resetando o mesmo. O nodemcu possui um circuito para resetá-lo utilizando o dtr e o rts do usb-serial embutido, mas como esta plaquinha não possui esta parte é preciso resetá-la manualmente, apertando no botãozinho de reset.


 Depois que a memória flash está apagada e você já tem o arquivo do firmware, é hora de gravá-lo na memória da plaquinha usando o ESP8266 Flasher. Mais uma vez você coloca a placa em modo de programação serial (pino IO0 em low + botão de reset). No ESP8266 Flasher você escolhe a opção de memória adequada (no caso é 1mb) e começa a fazer o upload.





Pronto. Agora é possível programar a plaquinha em Lua pelo Esplorer.






Pra facilitar a minha vida, construí uma placa de circuito impresso para encaixar o ESP8266-Pro e  um display de OLED, que ainda estou esperando receber. Usei um DHT22 normal e dois leds para indicar o que o ESP8266 está fazendo em uma mini-protoboard em uma base de acrílico. Usei o IFTTT com o applet Maker Webhooks para publicar as leituras em uma conta do Twitter (@aroldorosenberg, que não uso para nada além de exibir as leituras). O IFTTT aceita uma requisição POST e faz alguma coisa, dependendo de qual ela for, aceitando alguns parâmetros. Poderia servir para avisar quando seu gato usa a caixa de areia (com um sensor PIR), quando alguém abre uma porta, um armário e por aí vai.



E é só isso! Obviamente também é possível programar a placa pela IDE Arduino, respeitando o tamanho da memória flash, mas pela minha experiência ele fica muito mais estável com o firmware NodeMCU, muito provavelmente porque eu não tenho tanta familiaridade assim com a API do ESP8266 para programar do jeito certo.

sábado, 17 de junho de 2017

Conhecendo o mundo mágico do Pogo Pin


Alguns de vocês já devem ter feito a seguinte pergunta: "Como eu programo o microcontrolador depois que ele está na placa?". Uma solução óbvia seria soldar na placa alguns pinos só pra isso, como é o caso do conector de 6 pinos que fica no meio das placas Arduino Uno/Mega. Muito que bem: existe outro jeito de fazer isso sem deixar os pinos soldados na própria placa, e é o uso do "pogo pin".

O pogo pin nada mais é do que um pino com uma cabeça, que serve como contato, um tubo oco e uma mola interna. A compressão dessa mola faz com que seja estabelecido um contato elétrico temporário, o que basta para programar um chip na própria placa ou testá-la, sem que nada seja soldado além do próprio "aparato testador".

Comprei os meus no Aliexpress (link do anúncio aqui) a algum tempo atrás com o intuito de construir alguns testadores para as coisinhas que eu vendo no Mercado Livre, mas nunca realmente tive tempo de fazer isso até agora.



Primeiro desenhei uma placa de circuito impresso no Eagle. Desenhei os pads com um alongamento muito maior para poder usar mais solda, garantindo uma resistência mecânica maior. Furei com uma broca com diâmetro próximo do diâmetro do próprio pogo-pin (ele é mais grosso que os pinos das barras de terminais com as quais a maioria das pessoas está acostumada) e fui tentar soldar.

Demorei algum tempo para descobrir uma maneira de alinhar os malditos, mas consegui obter um resultado satisfatório e funcional. Os pinos ficaram inclinados em relação à placa e não ficaram todos com a mesma altura, mas não tem problema: a mola deles também serve para isso.


A minha "técnica" consistiuem furar um pedaço de acrílico usando a placa de fenolite como guia, colocar dois pedaços de espuma dentro (para segurar os pogo pins na posição correta) e ir espetando um por um até chegarem no outro lado. Estando todos na posição, coloquei uma placa semelhante às que eu vou testar em cima deles e grudei tudo com fita crepe. Soldei os pinos, e... simplesmente funcionou!


Confiram o vídeozinho:


quarta-feira, 31 de maio de 2017

Mais de um joystick ao mesmo tempo com o Arduino Leonardo



Vocês já devem conhecer essa plaquinha. Ela tem um Atmega32u4, que possui uma interface USB nativa, podendo funcionar como teclado, mouse, joystick ou controlador MIDI.

Agora, vocês sabiam que um só deles pode se comportar como 2 ou mais joysticks ao mesmo tempo? Sim, graças a alguma magia negra com descritores HID ele pode fazer isso. Existe uma biblioteca pronta que faz toda a parte difícil.

Ela pode ser baixada no seguinte link:

https://github.com/MHeironimus/ArduinoJoystickLibrary/tree/version-1.0

Depois de colocar as pastas Joystick, Joystick2 e Joystick3, experimente rodar o seguinte código no seu Arduino Leonardo:


Abra algum visualizador de joystick da sua preferência e perceba que o seu computador reconhecerá não um, mas dois joysticks ao mesmo tempo:


O Leonardo tem poucos pinos, mas utilizando o barramento SPI é possível construir uma interface para dois joysticks de SNES (que utiliza um 4021 e um barramento SPI para ler os botões dos dois controles), ou usar alguns 74xx166/165 para ler dois controles de arcade ao mesmo tempo.