Badge

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar

REV. 0

Badge com o logo Garoa

Hardware:

  • ESP8266
  • 4 botões (1 de Reset, outros 3 conectados às portas GPIO 0, 12 e 13)
  • Display OLED (128x64)
  • Buzzer ou LED IR conectado no GPIO 16
  • Socket Micro SD card
  • Socket FTDI para programação

É um projeto de hardware aberto e a PCB está disponível no GitHub em https://github.com/garoa/BadgeGaroa_r2


Idéias de Uso

  • Crachá de evento
  • Jogo da cobrinha

Cuidados na montagem

Uma trilha acabou saindo errado no PCB. É preciso interromper um curto e soldar um jumper ligando 2 trihas.

É preciso interromper o curto indicado em preto e soldar um jumper ligando as trilhas indicadas em azul


Após essa alteração a montagem demora por volta de 1 hora e 40 minutos para o restante dos componentes. Alguns outros cuidados são:

  • Desgastar as trilhas indicadas para soldar um jumper (eu usei o terminal restante dos compontes).
  • Interromper a trilha que está cruzando no lugar indicado na imagem.
  • Cortar os dois pinos de plastico embaixo da chave liga e desliga que fica na lateral.

Firmware

Para gravar coisas é preciso deixar o ESP8266 em modo programação segurando o botão prog (direita) e pressionar rapidamente o reset (cima).

Arduino

  • Adicionar a placa no Arduino
  • Biblioteca para controlar o display: ESP8266_and_ESP32_OLED_driver_for_SSD1306_displays [1]


MicroPython

É possível instalar o MicroPython no ESP8266 e controlar o display OLED utilizando a biblioteca https://github.com/robert-hh/SH1106

Instalando pelo terminal
python -m venv venv
source venv/bin/activate
pip install esptool
  • Faça o flash do firmware na placa usando o esptool:
sudo esptool --port /dev/ttyUSB0 --chip esp8266 --baud 115200 write_flash --flash_mode keep --flash_size keep --erase-all 0x0 ESP8266_GENERIC-20250911-v1.26.1.bin
Instalando pelo Thonny

Instale o thonny:

sudo apt install thonny
  1. Abrir o Thonny
  2. Clicar no canto inferior direito (Normalmente escrito Local Python3)
  3. Clicar em Configure interpreter
  4. Trocar "Local Python3" para "MicroPython (ESP8266)"
  5. Clicar em "Install or update MicroPython (esptool)" abrirá outra janela.
    1. Colocar a porta
    2. ESP8266
    3. Clicar em Install
  6. Clicar em OK
 ATENÇÃO A Instalação pelo MicroPython pode algumas vezes dar problema onde o ESP8266 entra em reset em loop escrevendo na serial a um bound de 74880.

Caso isso aconteça siga esses passos:

  • Baixe o firmware em https://micropython.org/download/ESP8266_GENERIC/
  • Abra o Thonny e vá para a tela de instalação do MicroPython
  • Clique em ≡ e Show install options e depois select local MicroPython image
  • coloque as configurações da imagem

Badge-micropython-configuração.png


Um script cheio de gambiarras e péssimas práticas de programação para testar o display, os botões e o buzzer encontra-se abaixo. O script quando executado, exibe um texto na tela, aciona o buzzer e se apertado um botão muda o texto na tela.

TODO: melhorar o código para além de exibir na tela fazer um barulho diferente para cada botão para caso o display OLED não esteja funcionando mas o buzzer sim.

from machine import Pin, I2C
from time import sleep
import sh1106


##  BOTÕES  ##
btn_pins = [Pin(0, Pin.IN, Pin.PULL_UP),
            Pin(12, Pin.IN, Pin.PULL_UP),
            Pin(13, Pin.IN, Pin.PULL_UP)]

btn_last_state = [False] * len(btn_pins)

##  Display  ##
i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000)
display = sh1106.SH1106_I2C(128, 64, i2c, Pin(16), 0x3c)

display.sleep(False)
display.fill(0)
display.flip()
display.text('Garoa', 40, 00, 1)
display.text('Hacker', 40,20, 1)
display.text('Clube', 40, 40, 1)
display.show()

display.fill(0)
display.text('B0',0,0,1)
display.text('B12',0,10,1)
display.text('B13',0,20,1)  #Não exibe


## Buzzer ##

buz = Pin(16, Pin.OUT)
   
def buzzer(freq=1,time=1):
    for i in range(time*freq):
        buz.value(0)
        sleep(1/(2*freq))
        buz.value(1)
        sleep(1/(2*freq))
       
def morse_read(morse, t = 0.05, freq = 400):
    for i in morse:
        if i ==' ':
            sleep(3*t)
        elif i =='.':
            buzzer(freq, t)
            sleep(t)
        elif i == '-':
            buzzer(freq, 3*t)
            sleep(t)

morse = '--. .- .-. --- .-'
morse_read(morse)

## Teste dos botões ##

while True:
    sleep(0.1)
    for i, btn in enumerate(btn_pins):
        state = btn.value()
        # Lógica invertida (LOW = pressionado) se usar pull-up
        if state == 0 and not btn_last_state[i]:
            btn_last_state[i] = True
            print("Botão PRESSIONADO -->", i)
            display.fill_rect(30,i*10,30,10,0)
            display.text('ON',30,i*10,1)
        elif state == 1:
            btn_last_state[i] = False
            display.fill_rect(30,i*10,30,10,0)
            display.text('OFF',30,i*10,1)
        display.show()

Coisas a implementar na próxima revisão

  • Às vezes a bateria acaba e não fica possível mais programar, mesmo com o cabo FTDI conectado. Seria possível alimentar pelo FTDI? -- User:Gabriel_Almeida
  • Alinhar os furos dos pinos do FTDI para colocar uma barra de pinos. Ou tem um conector melhor para colocar ali? -- User:DaniloEFBento
    • Se quiser deixar os pinos em zig-zag tudo bem. Mas acho que seria bom adicionar um footprint normal ao lado pra quem quiser soldar um conector normal. -- User:Juca
  • Tentar usar GPIOs independentes para o infra-vermelho e o buzzer. Do jeito que está, se endendi bem, fica impossível ter infravermelho e buzzer funcionais simultaneamente. -- User:Juca
  • Colocar um footprint de chip FTDI ligado nessa USB que hoje em dia é só pra carregar. Quem quiser soldar o chip opcional, ganha a facilidade de poder instalar firmware direto pelo mesmo USB que usa para carregar a bateria. -- User:Juca


Material de Estudos / Playground / Projetos Individuais

Tutorial da Juliana Karoline: https://github.com/julianaklulo/garoa-badge