quarta-feira, setembro 03, 2025

Placa Super Mini nRF52840, Parte 2: Usando CircuitPython

A primeira opção que vamos ver de programação é o CircuitPython.  Para minha surpresa, existe uma versão específica para esta placa e razoável documentação sobre ela.


Temos uma pequena pegadinha para gravar o interpretador CircuitPython na placa. Como documentado no site, o CircuitPython cresceu demais e requer versões mais recentes do bootloader. O processo fica assim:
  • Conecte um botão entre o pino de Reset e o GND.
  • Ligue a placa a um micro, via USB, e aperte duas vezes o botão.
  • O micro vai reconhecer um drive; dentro dele tem o arquivo INFO_UF2.TXT.
  • Neste arquivo tem a versão do bootloder, precisa ser 0.6.1 ou maior.
  • Se for menor que 6, baixe a versão mais atual (procure update-nice_nano_bootloader-x.x.x_nosd  em https://github.com/adafruit/Adafruit_nRF52_Bootloader/releases/latest) e copie para o drive.
  • Após a placa reiniciar, aperte novamente o botão duas vezes e confira novamente a versão.

No caso da minha placa, ela se identificou inicialmente como o drive "NICENANO", com bootloader versão 0.6.0.:


Após atualizar com update-nice_nano_bootloader-0.9.2_nosd.uf2:

Estando o bootloader correto instalado, basta copiar o arquivo uf2 do CircuitPython para o drive. Instalado o CircuitPython, você deve conseguir conectar com a IDE Thonny (configurada para CircuitPython generic).

Entre outras coisas, o CircuitPython possui suporte a BLE. Para isto é preciso instalar no diretório lib da placa os arquivos que estão em adrafruit_ble e adrafruit_hid do Adafruit CircuitPython Bundle.

Mova o botão que foi usado para o reset para entre o pino 009 e GND, carregue e rode o programa abaixo (adaptação de um dos exemplos do CircuitPython):
import time
import board
from digitalio import DigitalInOut, Direction, Pull

import adafruit_ble
from adafruit_ble.advertising import Advertisement
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.standard.hid import HIDService
from adafruit_ble.services.standard.device_info import DeviceInfoService
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
from adafruit_hid.keycode import Keycode

button = DigitalInOut(board.P0_09)
button.direction = Direction.INPUT
button.pull = Pull.UP

hid = HIDService()

device_info = DeviceInfoService(software_revision=adafruit_ble.__version__,
                                manufacturer="DQSoft Industries")
advertisement = ProvideServicesAdvertisement(hid)
# Advertise as "Keyboard" (0x03C1) icon when pairing
# https://www.bluetooth.com/specifications/assigned-numbers/
advertisement.appearance = 961
scan_response = Advertisement()
scan_response.complete_name = "Magic Button"

ble = adafruit_ble.BLERadio()
if not ble.connected:
    print("advertising")
    ble.start_advertising(advertisement, scan_response)
else:
    print("already connected")
    print(ble.connections)

k = Keyboard(hid.devices)
kl = KeyboardLayoutUS(k)
while True:
    while not ble.connected:
        pass
    print("Start typing:")

    while ble.connected:
        if not button.value:  # pull up logic means button low when pressed
            print("Sending")
            kl.write("DQSoft")  # use keyboard_layout for words
            time.sleep(0.4)

    ble.start_advertising(advertisement)

A placa vai se apresentar como um teclado BLE. Uma vez pareado e conectado a um micro, vai digitar DQSoft sempre que o botão for apertado.


Nenhum comentário: