01 Primeiros passos
O NINASENSE não é uma placa com USB integrado. A comunicação local ocorre por Bluetooth Low Energy; a gravação de baixo nível e a depuração podem ser feitas por SWD.
Alimentação
Alimente a placa com a tensão permitida, configure SW1 e conecte as antenas apropriadas antes de transmitir por LoRa.
Bluetooth
Use Chrome ou Edge em ambiente HTTPS para conectar ao Studio e ao terminal MicroPython via Web Bluetooth.
Programação
O bootloader BLE pode trocar a aplicação. J-LINK/ST-Link ficam disponíveis para instalar firmware por SWD ou depurar.
02 Escolha como deseja programar
Arduino IDE
Use bibliotecas do ecossistema Arduino, configure GPIO, sensores e BLE, compile um sketch e grave por SWD.
Instalar integração →Espruino
Programação interativa, console JavaScript e driver LLCC68 integrado ao fork NINASENSE.
Ver APIs LoRa →MicroPython
Interpretador com REPL UART e Nordic UART Service (NUS) sobre Bluetooth, validado em hardware.
Abrir REPL Web →nRFClaw
Descreva comportamento, compile em bytecode validado e programe automações BLE/LoRa.
Trabalhar com Studio →03 Trocar o firmware pelo navegador
Se o bootloader nRFClaw já estiver instalado na placa, você pode alternar entre nRFClaw, Espruino e MicroPython diretamente pelo navegador, sem J-LINK, ST-Link ou cabo UART.

Botão de recuperação: o botão a ser pressionado é o P0.21, indicado na imagem acima.
Deixe o NINASENSE sem alimentação operacional antes de iniciar o modo de recuperação.
Mantenha o botão pressionado antes de ligar a placa. Em seguida, ligue em SW1 e solte o botão após a inicialização.
Conecte ao dispositivo de programação/bootloader exposto pela placa e role até o final da página.
Use os botões nRFClaw, Espruino ou MicroPython, exatamente como mostrado na imagem abaixo. Se quiser usar um arquivo local, clique em Choose other firmware (.bin).
Após a gravação, reinicie a placa normalmente. O nome BLE e o comportamento do dispositivo passarão a corresponder ao firmware escolhido.

No Studio, entre em Devices e, no final da página, selecione o firmware apropriado em Programming & firmware.
P0.21, abrir studio.nrfclaw.cloud, clicar em Devices e escolher o firmware no final da página.Arquivos disponíveis para download
| Arquivo | Uso | Link |
|---|---|---|
nrfclaw_bootloader.bin | Instalação do bootloader nRFClaw por SWD | Baixar |
nrfclaw_bootloader.hex | Instalação do bootloader nRFClaw por SWD | Baixar |
nrfclaw_latest.bin | Aplicação nRFClaw mais recente | Baixar |
espruino_latest.bin | Aplicação Espruino mais recente para NINASENSE | Baixar |
micropython_latest.bin | Aplicação MicroPython mais recente para NINASENSE | Baixar |
nrfclaw_bootloader.bin ou nrfclaw_bootloader.hex. Depois disso, a troca entre firmwares de aplicação pode ser feita pelo navegador.04 Instalar a integração Arduino
O pacote NINASENSE Arduino Universal acrescenta a variante própria ao BSP Adafruit nRF52, SoftDevice S132 7.2.0, programador ST-Link/OpenOCD e monitor RTTSerial.
Pré-requisitos
| Ferramenta | Uso | Obrigatório? |
|---|---|---|
| Arduino IDE 1.8 ou 2.x | Editar e compilar sketches | Sim, para fluxo gráfico |
| Python 3.9+ | Instalador e utilitários | Sim |
| Adafruit nRF52 BSP | Core, bibliotecas e compilador | Sim; instalar primeiro pelo Gerenciador de Placas da Arduino IDE |
| SEGGER J-LINK | Programação SWD e RTT | Para J-LINK |
| OpenOCD | ST-Link SWD e RTT | Para ST-Link |
Etapa 1 — Instalar o BSP Adafruit nRF52
Antes de instalar o pacote NINASENSE FULL, configure o índice oficial da Adafruit na Arduino IDE e instale o pacote de placas Adafruit nRF52. Essa etapa é necessária porque a integração NINASENSE acrescenta uma variante ao core da Adafruit, não o substitui.
Na Arduino IDE 1.8: Arquivo → Preferências. Na Arduino IDE 2.x: Arquivo → Preferências (ou Settings na interface em inglês).
No campo URLs Adicionais para Gerenciadores de Placas (Additional Boards Manager URLs), cole o endereço abaixo. Se já houver outras URLs, mantenha-as e adicione esta como uma nova entrada.
https://adafruit.github.io/arduino-board-index/package_adafruit_index.jsonClique em OK, abra Ferramentas → Placa → Gerenciador de Placas (na IDE 2.x também é possível usar o ícone Boards Manager na barra lateral), pesquise por Adafruit nRF52 e instale o pacote de placas da Adafruit. Para o pacote NINASENSE V8.1.1, utilize uma versão compatível com a integração, como o core 1.7.0 empregado no desenvolvimento.
Após concluir a instalação do core, prossiga para o download e a execução do instalador NINASENSE Arduino Universal FULL, conforme seu sistema operacional.
Etapa 2 — Instalar o pacote NINASENSE FULL
NINASENSE_Arduino_Universal_v8.1.1_FULL.zip. Ele deve incluir o S132 7.2.0 e a licença Nordic. Se o arquivo FULL ainda não estiver publicado no site, utilize o repositório de desenvolvimento e as instruções do mantenedor.Baixar integração Arduino V8.1.1 FULL ↓
Instalação no seu sistema
Extraia o FULL, feche a IDE e execute no terminal:
cd NINASENSE_Arduino_Universal_v8.1.1
./install_linux.sh --install-depsO BSP Adafruit nRF52 deve estar instalado. O instalador pode oferecer Arduino CLI, OpenOCD e python3-tk. Use python3 setup.py --check para conferir sem modificar o sistema.
Instale Python 3 com launcher py, extraia o FULL e execute install_windows.bat, ou:
py -3 setup.py --install-depsPara ST-Link, instale também xPack OpenOCD e coloque o executável no PATH. O SEGGER J-LINK é opcional.
Instale Python 3 com Tkinter, extraia o FULL e execute:
./install_macos.command --install-depsCompatível com instalações Arduino15 em ~/Library/Arduino15. Se tiver Homebrew, o instalador pode oferecer OpenOCD.
Configuração na Arduino IDE
A variante é instalada no core nRF52 do Arduino. Para manter a versão do BSP compatível com a integração, siga as recomendações do release.
No menu Ferramentas → Placa, escolha NINASENSE nRF52832 (S132 7.2.0 / SWD). Identificador CLI: adafruit:nrf52:ninasense.
Use J-LINK for Bluefruit (SEGGER) ou NINASENSE ST-Link (OpenOCD) em Ferramentas → Programador.
Abra NINASENSE_GPIO ou RTTSerial_Basic do pacote. Use Sketch → Verificar/Compilar antes da gravação.
05 Compile e grave seu programa
Teste o GPIO do botão sem depender de um LED onboard (o NINASENSE não possui LED de usuário permanentemente conectado).
#include <Arduino.h>
#include "RTTSerialSelect.h"
void setup() {
pinMode(21, INPUT_PULLUP); // P0.21
Serial.begin(115200); // RTTSerial
Serial.println("NINASENSE ready");
}
void loop() {
Serial.print("Button P0.21: ");
Serial.println(digitalRead(21)); // 1 = released, 0 = pressed
delay(1000);
}Use Sketch → Carregar usando Programador. Ligue o adaptador J-LINK ou ST-Link ao header H1: SWDIO, SWCLK, VDDNRF e GND. A referência VDDNRF não substitui uma alimentação dimensionada para a placa.
0x26000..0x6BFFF. Não use eraseall, recover ou o bootloader da Feather para instalar um sketch NINASENSE. Gravar via SWD substitui a aplicação existente.Exemplos adicionais: BLE e temperatura
Os exemplos abaixo ilustram o uso do core Arduino com BLE e sensores. Compile e valide com a versão do BSP e do SoftDevice da sua placa antes de usar em campo.
Bluetooth LE Advertising com Bluefruit52Lib
#include <bluefruit.h>
void setup() {
Bluefruit.begin();
Bluefruit.setName("NINASENSE");
Bluefruit.Advertising.addFlags(
BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit.Advertising.addName();
Bluefruit.Advertising.setInterval(3200, 3200); // ~2 s
Bluefruit.Advertising.start(0);
}
void loop() { delay(1000); }Exemplo de referência; a compatibilidade entre core Adafruit 1.7.0 e S132 7.2.0 precisa ser confirmada no build e no hardware.
Sensor de temperatura DS18B20 no P0.20
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(20); // GPIO P0.20 / D20
DallasTemperature sensors(&oneWire);
void setup() { sensors.begin(); }
void loop() {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
// Envie tempC via RTTSerial, UART ou BLE de sua aplicação
delay(2000);
}Conecte o sensor conforme o datasheet da placa e utilize o pull-up correto na linha OneWire.
Gravar o SoftDevice separadamente
Abra NINASENSE Flash SoftDevice, selecione J-LINK ou ST-Link e confirme a verificação do arquivo s132_nrf52_7.2.0_softdevice.hex. A opção de gravação existe para preparar uma placa que ainda não tenha o SoftDevice adequado.
06 RTTSerial — depuração sem UART física
O RTTSerial permite visualizar logs na RAM por SWD. O caminho mais estável é usando J-LINK, mas o monitor também pode ser aberto com ST-Link + OpenOCD quando o firmware e a versão do OpenOCD suportarem RTT.

Ligação recomendada do J-LINK-OB ao conector H1 do NINASENSE. O alvo deve estar alimentado normalmente; o pino VTref do J-LINK é apenas referência da tensão da placa.
Mapa de conexão Segger J-LINK original → NINASENSE
| J-LINK | Sinal | NINASENSE H1 |
|---|---|---|
| Pin 1 | VTref | Pin 3 — VDDNRF / VTref |
| Pin 7 | SWDIO | Pin 1 — SWDIO |
| Pin 9 | SWCLK | Pin 2 — SWCLK |
| Pin 4 (ou qualquer GND) | GND | Pin 4 — GND |
SEGGER RTT
Usa JLinkExe e a conexão RTT TCP. Porta usada pelo monitor: 19021.
OpenOCD RTT
Funciona quando OpenOCD possui suporte a RTT e o firmware escreve dados via SEGGER_RTT. Porta TCP do monitor: 19022.
python3 ~/Arduino/tools/RTTSerial/rttserial_monitor.pyNa Arduino IDE 1.8, use Ferramentas → Open RTTSerial. Na IDE 2.x, inicie o programa independente. Escolha o probe na parte superior da janela e conecte. Feche o RTTSerial antes de gravar firmware, porque o programador precisa do acesso SWD.
SEGGER_RTT e escrever no canal 0. O exemplo RTTSerial_Basic foi criado justamente para validar isso.rtt setup 0x20004C28 0xB3B8 {SEGGER RTT}.07 Espruino no NINASENSE
O fork nearmeter/Espruino (branch nrfclaw) adiciona suporte ao hardware NINASENSE e ao bootloader de aplicação. Não confunda com uma compilação genérica do Espruino para outra placa nRF52832.
Pelo Studio/DFU, utilize o arquivo de aplicação espruino_..._ninasense.app.bin produzido pelo fork.
Use UART em P0.15 (TX) e P0.16 (RX), 115200 baud, ou abra a IDE BLE
O interpretador responde sem precisar recompilar o firmware a cada alteração de script.
1 + 2 // =3
NINASENSE.battery();
NINASENSE.batteryRaw();nrfclaw para a referência do firmware que estiver usando.08 LoRa no Espruino — APIs disponíveis
A build NINASENSE do fork Espruino expõe funções nativas de LoRa no objeto global NINASENSE. Não é necessário iniciar um driver SPI JavaScript genérico para usar essas funções.
| Função | Descrição | Exemplo |
|---|---|---|
loraInit() | Inicializa o LLCC68. | NINASENSE.loraInit() |
loraConfig({...}) | Define frequência, potência e perfil LoRa. | NINASENSE.loraConfig({...}) |
loraSend(texto) | Solicita transmissão de um pacote. | NINASENSE.loraSend("TEST") |
loraReceive(timeout) | Aguarda recepção pelo intervalo fornecido em ms. | NINASENSE.loraReceive(15000) |
loraSleep() | Coloca o rádio em modo de baixo consumo. | NINASENSE.loraSleep() |
Configurar, transmitir e receber
// Perfil LoRa privado de exemplo — não é LoRaWAN
NINASENSE.loraInit();
NINASENSE.loraConfig({
frequency: 915000000,
power: 14,
sf: 7,
bandwidth: 125,
cr: 1, // coding rate 4/5
syncWord: 0x12,
preamble: 8
});
print("TX:", NINASENSE.loraSend("HELLO NINASENSE"));
var packet = NINASENSE.loraReceive(15000);
print("RX:", packet);
NINASENSE.loraSleep();Para transmitir a cada dez segundos:
NINASENSE.loraInit();
var counter = 0;
setInterval(function () {
var message = "T" + counter++;
print("TX", message, NINASENSE.loraSend(message));
}, 10000);SPI1 diretamente em JavaScript simultaneamente a uma operação LoRa ativa. Use uma antena apropriada para sua versão de RF e cumpra as regras locais de frequência/potência.09 MicroPython pelo Web Bluetooth REPL
O port NINASENSE do MicroPython V0.3 foi validado com S132 7.2.0, console UART e NUS BLE bidirecional. Quando esse firmware está ativo, a placa aparece como NINA-MPY.
Sem adaptador serial
Conecte pelo navegador e execute comandos Python diretamente no NINASENSE.
Abrir Terminal Web BLE →Diagnóstico local
Porta UART a 115200 baud em P0.15/P0.16, usando adaptador USB-UART 3,3 V.
Usar o REPL no navegador
Não deixe P0.21 pressionado ao ligar para uso normal; com o botão pressionado antes do power-on, o dispositivo entra em recuperação DFU, não no REPL MicroPython.
É necessário Chrome/Edge com suporte a Web Bluetooth, computador com Bluetooth ligado e página servida por HTTPS.
NINA-MPY.O terminal acessa o serviço Nordic UART, habilita notificações e transmite código em pacotes limitados a 20 bytes.
Use Enter, Ctrl+C para interromper execução e Ctrl+D para soft reboot quando necessário.
import sys, gc
from machine import Pin
print(sys.platform) # nrf
gc.collect()
print(gc.mem_free())
button = Pin("BUTTON", Pin.IN, Pin.PULL_UP)
print(button.value()) # 1 = released, 0 = pressedNINASENSE_BLE_V03_OK e BLE_HEAP 33312. A aplicação enviou e recebeu dados pelo Bluetooth sem adaptador UART físico.Serviço NUS: 6e400001-b5a3-f393-e0a9-e50e24dcca9e. Escrita RX: ...0002...; notificações TX: ...0003.... No modo ATT MTU 23, o máximo usual de payload por escrita é 20 bytes.
10 nRFClaw + Studio
O nRFClaw é um firmware de máquina virtual orientado a eventos para BLE, LoRa, sensores e baixo consumo. Uma vez que o bootloader nRFClaw esteja instalado, você pode alternar entre nRFClaw, Espruino e MicroPython diretamente no Studio.
Com a placa desligada, mantenha o botão P0.21 pressionado e ligue a placa.
Conecte ao dispositivo exibido pelo bootloader/aplicação e role até a seção Programming & firmware.
Selecione nRFClaw, Espruino ou MicroPython. Para arquivos próprios, use Choose other firmware (.bin).
Se estiver usando o nRFClaw como aplicação principal, você poderá então programar comportamentos e enviar instruções ao dispositivo pelo Studio.
Read temperature and battery every 10 minutes,
format both values and transmit them using LoRa.
Repeat continuously after boot.Também é possível utilizar o nRFClaw CLI, por exemplo:
python3 nrfclaw_cli.py --device YOUR_DEVICE_ID \
firmware-upgrade ../build/ninasense/nrfclaw_ninasense.binOs binários mais recentes também podem ser obtidos diretamente em nearmeter.com/downloads: nrfclaw_latest.bin, espruino_latest.bin e micropython_latest.bin.
11 Pinagem e mapa de memória
Referência para NINASENSE nRF52832 / Rev. 1.1. Na variante Arduino, Dx corresponde a P0.x; respeite os pinos reservados para o rádio.
| Função | nRF52832 | Observação |
|---|---|---|
| Botão de recuperação | P0.21 | Ativo em nível baixo |
| UART TX / RX | P0.15 / P0.16 | 115200 baud |
| SPI LLCC68 SCK / MOSI / MISO | P0.02 / P0.04 / P0.05 | Compartilhado com LoRa |
| LLCC68 NSS / BUSY / DIO1 / NRST | P0.03 / P0.06 / P0.09 / P0.19 | Controle de rádio |
| LoRa RXEN / TXEN | P0.07 / P0.08 | Chaves RF |
| I²C SCL / SDA | P0.13 / P0.18 | Sensores externos / LIS2DH12 |
| DS18B20 | P0.20 | Sensor externo |
| ADC bateria | P0.28 | Divisor de medição |
| GPIO/ADC adicionais | P0.29 / 30 / 31 | Conforme conector da placa |
Header H1 — SWD
| Pino | Sinal | Função |
|---|---|---|
| 1 | SWDIO | Dados SWD |
| 2 | SWCLK | Clock SWD |
| 3 | VDDNRF | Referência da tensão do alvo |
| 4 | GND | Terra |
Memória flash — áreas que devem ser respeitadas
| Endereços | Uso | Operação permitida |
|---|---|---|
0x00000–0x25FFF | MBR + S132 7.2.0 | Ferramenta SoftDevice, quando necessário |
0x26000–0x6BFFF | Aplicação (280 KiB) | DFU BLE ou SWD da aplicação |
0x6C000–0x79FFF | Dados persistentes | Preservar |
0x7A000–0x7EFFF | Bootloader BLE | Preservar |
0x7F000–0x7FFFF | Metadados DFU | Preservar |
0x10001014 | UICR BOOTLOADERADDR | Valor esperado: 0x7A000 |
Orientações para projetos low power
Prefira interrupções e wake-up por evento, evite polling contínuo, coloque o LLCC68 em sleep quando não estiver transmitindo e não deixe GPIOs flutuantes ou periféricos externos energizados desnecessariamente. A autonomia depende do firmware carregado, intervalo de advertising, alimentação e sensores conectados; medidas feitas com nRFClaw não são automaticamente válidas para Arduino, Espruino ou MicroPython.
12 Problemas comuns
A placa não aparece como porta USB/COM
É esperado. O NINASENSE não traz uma interface USB-serial permanente. Use Bluetooth NUS, RTT via SWD ou uma interface USB-UART externa 3,3 V.
Não encontro NINA-MPY no navegador
Confirme que o firmware MicroPython está ativo (não o modo bootloader). Ligue com o botão P0.21 solto, ative Bluetooth, use navegador compatível e HTTPS. Se o dispositivo estiver conectado a outro cliente BLE, desconecte-o.
Não encontro nRFClaw-DFU após ligar com P0.21 pressionado
Confira se a placa contém o bootloader nRFClaw. Mantenha o botão pressionado antes de aplicar alimentação e solte após o início. Tente desligar completamente via SW1. Uma placa sem bootloader requer instalação inicial por SWD.
O BLE conecta, mas o MicroPython não recebe comandos
Ative notificações na característica TX e escreva na RX do NUS. Com MTU 23, divida comandos em blocos de até 20 bytes, preferencialmente com um intervalo curto entre escritas. O terminal Web BLE fornecido nesta wiki já aplica essa limitação.
RTTSerial conecta, porém não exibe atividade
A sonda pode estar conectada ao alvo, mas o firmware não está enviando RTT. Use o exemplo RTTSerial_Basic, confira a escolha do probe, a alimentação e se outros processos estão utilizando o dispositivo SWD.
OpenOCD informa “rtt setup <address> <size> <ID>”
A sintaxe exige o identificador. Use a correção V8.1.1 e confirme rtt setup 0x20004C28 0xB3B8 {SEGGER RTT}.
Erro ao gravar com NINASENSE ST-Link: program.params.verbose
Use a integração V8.1 ou posterior, que inclui program.params.verbose e program.params.quiet no recipe. Reinicie o Arduino IDE após atualizar os arquivos da plataforma.
O Arduino IDE 2.x não mostra os menus RTTSerial e Flash SoftDevice
É uma limitação da IDE 2.x com os antigos plugins Java de Ferramentas. Use os aplicativos independentes instalados pelo pacote; a seleção de placa e de programador continua disponível na IDE.
13 Links e arquivos úteis
Downloads diretos
| Arquivo | Descrição | URL |
|---|---|---|
nrfclaw_bootloader.bin | Bootloader nRFClaw para instalação por SWD | nearmeter.com/downloads/nrfclaw_bootloader.bin |
nrfclaw_bootloader.hex | Bootloader nRFClaw para instalação por SWD | nearmeter.com/downloads/nrfclaw_bootloader.hex |
nrfclaw_latest.bin | Última compilação da aplicação nRFClaw | nearmeter.com/downloads/nrfclaw_latest.bin |
espruino_latest.bin | Última compilação da aplicação Espruino | nearmeter.com/downloads/espruino_latest.bin |
micropython_latest.bin | Última compilação da aplicação MicroPython | nearmeter.com/downloads/micropython_latest.bin |
Validação registrada
| Componente | Situação |
|---|---|
| MicroPython V0.3 — UART + BLE NUS | ● PASS em hardware |
| Espruino — intérprete, BLE advertising, UART, LoRa init e DFU | ● PASS conforme documentação do fork |
| Espruino — LoRa TX/RX e consumo final | ● Validação complementar |
| Arduino IDE 1.8 Linux — menu RTTSerial e Flash SoftDevice | ● Confirmado em bancada |
| Arduino integração V8.1.1 — Windows/macOS e ST-Link RTT real | ● Testes finais pendentes |
Atualização editorial: 21 de outubro de 2026. Esta página documenta o fluxo de desenvolvimento e recuperação do NINASENSE usando bootloader nRFClaw, Studio, Arduino, Espruino e MicroPython.
