segunda-feira, 4 de novembro de 2019

RIOT para NINA B302

RIOT no NINA B112

O objetivo deste BLOG é demonstrar como é possível utilizar o RIOT para programação do NINA B112. Foi utilizado o EVK-NINA-B1 para o teste.

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 pegada 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 B112 E RIOT

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

No link abaixo, há um roteiro muito interessante para que você possa preparar o ambiente para programar o NINA B112 com o RIOT.


Roteiro




Instale Python 3 e the pip3
sudo apt-get install -y python3-all
sudo apt-get install -y python-pip3

Se voce tem python 2 instalado
echo "alias python=python3" >> ~/.bashrc
 
Instale um deste programas, dependendo do programador que voce estive utilizando 
Opcao 1: Install the J-Link or J-Link OB toolchain 
Opcao 2: Install the DAPLink toolchain
Esteja certo que voce instalou ele pelo comando pip3
 
Clone RIOT OS do repositorio e altere dentro do diretorio RIOT/examples/hello-world
git clone github.com/RIOT-OS/RIOT.git
cd RIOT/examples/hello-world
 
Ache o caminho do seu conector USB-to-UART executando o comando (removendo previamente o conector)
ls /dev/ttyUSB*
, plugando novamente o conector USB-to-UART de volta no seu PC, entao executando o comando novamente
ls /dev/ttyUSB*

Altere permissoes para o conector USB-to-UART connector.
Substitua o
$USB_PORT
com o caminho do conector USB-to-UART para /dev/ttyUSB0
sudo chmod 777 $USB_PORT
 
Grave o exemplo 'hello world' no seu microcontrolador.
Substitua o 
$BOARD AND $USB_PORT
com o nome da sua placa e o caminho do connector como /dev/ttyUSB0
BOARD=BOARD PORT=/dev/ttyUSB0 make flash term
 
O exemplo

#include <stdio.h>

int main(void)
{
    puts("Hello World!");

    printf("You are running RIOT on a(n) %s board.\n", RIOT_BOARD);
    printf("This board features a(n) %s MCU.\n", RIOT_MCU);

    return 0;
} 
 
Voce vera algo do tipo:

2019-08-27 09:17:09,359 - INFO # main(): This is RIOT! (Version: 2019.10-devel-488-g1b1c9) 2019-08-27 09:17:09,359 - INFO # Hello World! 2019-08-27 09:17:09,361 - INFO # You are running RIOT on a(n) nrf52832-mdk board.

TESTANDO NO NINA B112 (UBUNTU)

Altere UART gpio map para o NINA B112 em periph_conf.h



osboxes@osboxes:~/RIOT/boards/nrf52832-mdk/include$ ls
board.h  gpio_params.h  periph_conf.h
osboxes@osboxes:~/RIOT/boards/nrf52832-mdk/include$ 
**
 * @name    UART configuration
 * @{
 */
#define UART_NUMOF          (1U)
#define UART_PIN_RX         GPIO_PIN(0,19)
#define UART_PIN_TX         GPIO_PIN(0,20)
/** @} */

#define UART_PIN_RX         GPIO_PIN(0,5)
#define UART_PIN_TX         GPIO_PIN(0,6)

Compile
osboxes@osboxes:~/RIOT/examples/hello-world$ make BOARD=nrf52832-mdk
Building application "hello-world" for "nrf52832-mdk" with MCU "nrf52".

"make" -C /home/osboxes/RIOT/boards/nrf52832-mdk
"make" -C /home/osboxes/RIOT/core
"make" -C /home/osboxes/RIOT/cpu/nrf52
"make" -C /home/osboxes/RIOT/cpu/cortexm_common
"make" -C /home/osboxes/RIOT/cpu/cortexm_common/periph
"make" -C /home/osboxes/RIOT/cpu/nrf52/periph
"make" -C /home/osboxes/RIOT/cpu/nrf5x_common
"make" -C /home/osboxes/RIOT/cpu/nrf5x_common/periph
"make" -C /home/osboxes/RIOT/drivers
"make" -C /home/osboxes/RIOT/drivers/periph_common
"make" -C /home/osboxes/RIOT/sys
"make" -C /home/osboxes/RIOT/sys/auto_init
"make" -C /home/osboxes/RIOT/sys/div
"make" -C /home/osboxes/RIOT/sys/newlib_syscalls_default
"make" -C /home/osboxes/RIOT/sys/stdio_uart
"make" -C /home/osboxes/RIOT/sys/xtimer
   text    data     bss     dec     hex filename
  11896     116    2584   14596    3904 /home/osboxes/RIOT/examples/hello-world/bin/nrf52832-mdk/hello-world.elf
osboxes@osboxes:~/RIOT/examples/hello-world$ 
bin main.c Makefile README.md
osboxes@osboxes:~/RIOT/examples/hello-world$ cd bin
osboxes@osboxes:~/RIOT/examples/hello-world/bin$ ls
bluepill  nrf52832-mdk
osboxes@osboxes:~/RIOT/examples/hello-world/bin$ cd nrf52832-mdk/
osboxes@osboxes:~/RIOT/examples/hello-world/bin/nrf52832-mdk$ ls
application_hello-world    core.a                   cpu_common       hello-world.hex            periph.a         sys.a
application_hello-world.a  cortexm_common           cpu_common.a     hello-world.map            periph_common    xtimer
auto_init                  cortexm_common.a         div              newlib_syscalls_default    periph_common.a  xtimer.a
auto_init.a                cortexm_common_periph    div.a            newlib_syscalls_default.a  riotbuild
board                      cortexm_common_periph.a  drivers          nrf5x_common_periph        stdio_uart
board.a                    cpu                      drivers.a        nrf5x_common_periph.a      stdio_uart.a
core                       cpu.a                    hello-world.elf  periph                     sys
osboxes@osboxes:~/RIOT/examples/hello-world/bin/nrf52832-mdk$ find -name *.hex
./hello-world.hex
osboxes@osboxes:~/RIOT/examples/hello-world/bin/nrf52832-mdk
 
Grave no NINA B112 (WINDOWS) e execute 


   
DÚVIDAS

suporte@smartcore.com.br


REFERÊNCIAS
 

Sobre a SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portifó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