quinta-feira, 21 de janeiro de 2021

Acessando SX1276 com NINA B302 via RIOT

 Acessando SX1276 com NINA B302 via RIOT


O objetivo deste BLOG é demonstrar como é possível utilizar o RIOT para programação do NINA B302. Foi utilizado o BREAKOUT para o teste. O exemplo mostrará como é possível utilizar  RIOT para envio de mensagens LoRa via linha de comandos.
 
Testado no MSYS2 (WINDOWS - MSYS2)





RIOT: O sistema operacional amigável para a Internet das Coisas.

O RIOT alimenta a Internet das Coisas, como o Linux alimenta a Internet. O RIOT é um sistema operacional gratuito e de código aberto desenvolvido por uma comunidade de base que reúne empresas, universidades e entusiastas, distribuídos em todo o mundo.

O RIOT é um sistema operacional de IoT com recursos em tempo real. Foi desenvolvido por um consórcio de universidades na Alemanha e na França, que incluía a Universidade Livre de Berlim, o Instituto Francês de Pesquisa em Ciência da Computação e Automação e a Universidade de Ciências Aplicadas de Hamburgo. É lançado sob a Licença Pública Geral Menor GNU (LGPL).

É baseado na arquitetura de microkernel e é executado em microcontroladores de 8 a 32 bits. O RIOT suporta multithreading e toda a pilha de rede IoT.

O RIOT suporta a maioria dos dispositivos IoT de baixa potência e arquiteturas de microcontroladores (32 bits, 16 bits, 8 bits). O RIOT tem como objetivo implementar todos os padrões abertos relevantes que suportam uma Internet das Coisas conectada, segura, durável e amiga da privacidade.

O RIOT é um desenvolvimento amigável

Programe como você está acostumado. Não perca tempo com ambientes novos ou complexos.

Programação padrão em C ou C ++
Ferramentas padrão como gcc, gdb, valgrind
Código dependente de hardware minimizado
Zero curva de aprendizado para programação incorporada
Codifique uma vez, execute em plataformas de 8 bits (por exemplo, Arduino Mega 2560), plataformas de 16 bits (por exemplo, MSP430) e em plataformas de 32 bits (por exemplo, ARM)
Conformidade parcial com POSIX. Rumo à conformidade total com POSIX.
Desenvolva no Linux ou Mac OS usando a porta nativa, implemente no dispositivo incorporado

O RIOT é favorável aos recursos

Beneficie-se de uma arquitetura de microkernel e de um agendador sem marcação em dispositivos muito leves.

Robustez e flexibilidade da footprint de código
Permitindo a máxima eficiência energética
Capacidade em tempo real devido à latência de interrupção ultra baixa (~ 50 ciclos de clock) e agendamento com base em prioridades
Multiencadeamento com sobrecarga de encadeamento ultra baixo (<25 bytes por encadeamento)

O RIOT é amigável à Internet das coisas

Prepare seus aplicativos para as coisas menores da Internet com suporte comum ao sistema.

6LoWPAN, IPv6, RPL e UDP
CoAP e CBOR
Alocação de memória estática e dinâmica
Temporizadores de alta resolução e longo prazo
Ferramentas e utilitários (shell do sistema, SHA-256, filtros Bloom, ...)

Estrutura do RIOT



NINA B302 E RIOT

Como o módulo NINA B302 é baseado no chip NRF52840 (cpu), será possível rodar o RIOT sem problemas. O usuário deve dar atenção ao mapeamento de GPIOS da U-BLOX.


O link abaixo, é roteiro Básico para que você possa preparar o ambiente para programar o NINA B302 com o RIOT.


Durante o processo você "deverá" instalar

git, J-link, Arm Toolchain, gcc, make, python3, pip3, pyocd (caso use ST-LINK), putty

Se você tem python 2 instalado
echo "alias python=python3" >> ~/.bashrc
Clone RIOT OS do repositorio

mkdir test
cd test
git clone github.com/RIOT-OS/RIOT.git
cd RIOT/tests/driver_sx127x
make BOARD=feather-nrf52840
(aqui o exemplo será compilado para feather-nrf52840, mas requer alterações para rodar no NINA B302)
Na pasta
/home/Usuario/test/RIOT/boards/feather-nrf52840/include, insira em board.h
#define SX127X_PARAM_SPI_NSS                GPIO_PIN(0, 13)      // IO1
#define SX127X_PARAM_RESET                  GPIO_PIN(1, 12)      // IO21
#define SX127X_PARAM_DIO0                   GPIO_PIN(0, 14)      // IO2
#define SX127X_PARAM_DIO1                   GPIO_PIN(0, 16)      // IO4
#define SX127X_PARAM_DIO2                   GPIO_PIN(0, 24)      // IO5
Na mesma pasta, altere periph_conf.h
static const spi_conf_t spi_config[] = {
    {
        .dev  = NRF_SPIM0,
        .sclk = 7,  // P0.07 IO45
        .mosi = 15, // P0.15 IO3
        .miso = 32, // P1.00 IO8
    }
};

TESTANDO NO NINA B302
Compile

Não esqueça (msys2)

pacman -S mingw-w64-x86_64-arm-none-eabi-gcc
e no arquivo /etc/profile MSYS2_PATH="/usr/local/bin:/usr/bin:/bin:/mingw64/bin"
$ make BOARD=feather-nrf52840
Building application "tests_driver_sx127x" for "feather-nrf52840" with MCU "nrf52".

"make" -C /home/Usuario/test/RIOT/boards/feather-nrf52840
"make" -C /home/Usuario/test/RIOT/core
"make" -C /home/Usuario/test/RIOT/cpu/nrf52
"make" -C /home/Usuario/test/RIOT/cpu/cortexm_common
"make" -C /home/Usuario/test/RIOT/cpu/cortexm_common/periph
"make" -C /home/Usuario/test/RIOT/cpu/nrf52/periph
"make" -C /home/Usuario/test/RIOT/cpu/nrf52/vectors
"make" -C /home/Usuario/test/RIOT/cpu/nrf5x_common
"make" -C /home/Usuario/test/RIOT/cpu/nrf5x_common/periph
"make" -C /home/Usuario/test/RIOT/drivers
"make" -C /home/Usuario/test/RIOT/drivers/periph_common
"make" -C /home/Usuario/test/RIOT/drivers/sx127x
"make" -C /home/Usuario/test/RIOT/sys
"make" -C /home/Usuario/test/RIOT/sys/auto_init
"make" -C /home/Usuario/test/RIOT/sys/auto_init/usb
"make" -C /home/Usuario/test/RIOT/sys/event
"make" -C /home/Usuario/test/RIOT/sys/fmt
"make" -C /home/Usuario/test/RIOT/sys/frac
"make" -C /home/Usuario/test/RIOT/sys/iolist
"make" -C /home/Usuario/test/RIOT/sys/isrpipe
"make" -C /home/Usuario/test/RIOT/sys/luid
"make" -C /home/Usuario/test/RIOT/sys/malloc_thread_safe
"make" -C /home/Usuario/test/RIOT/sys/newlib_syscalls_default
"make" -C /home/Usuario/test/RIOT/sys/od
"make" -C /home/Usuario/test/RIOT/sys/ps
"make" -C /home/Usuario/test/RIOT/sys/shell
"make" -C /home/Usuario/test/RIOT/sys/shell/commands
"make" -C /home/Usuario/test/RIOT/sys/tsrb
"make" -C /home/Usuario/test/RIOT/sys/usb/usbus
"make" -C /home/Usuario/test/RIOT/sys/usb/usbus/cdc/acm
"make" -C /home/Usuario/test/RIOT/sys/ztimer
   text    data     bss     dec     hex filename
  40632     168    7016   47816    bac8 C:/msys64/home/Usuario/test/RIOT/tests/driver_sx127x/bin/feather-nrf52840/tests_driver_sx127x.elf

Usuario@DESKTOP-SCSSFIF MSYS ~/test/RIOT/tests/driver_sx127x
$
msys2
Grave no NINA B302 (WINDOWS) o bin e execute, esta na pasta
/home/Usuario/test/RIOT/tests/driver_sx127x/bin/feather-nrf52840

Conecte na USB o NINA B302, abra a COM VIRTUAL (USB)



Abrindo com TERATERM o SHELL


Registradores OK!

SX1276 conectado ao NINA B302



P2P entre NINA B302 + SX1276 com LOM204A02


Sobre a SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portfólio inclui modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS / GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e sensores.
Mais detalhes em www.smartcore.com.br

Nenhum comentário:

Postar um comentário