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. O exemplo piscará o LED a cada 1 segundo e também mandará uma mensagem pela Uart.
Testado no UBUNTU 20 e 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 de 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 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.
O link abaixo, é roteiro Básico para que você possa preparar o ambiente para programar o NINA B112 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 e altere dentro do diretorio RIOT/examples/hello-world
git clone github.com/RIOT-OS/RIOT.git
cd RIOT/examples/hello-world
Altere o código para
#include <stdio.h> #include <xtimer.h> #define GPIO_BASE 0x50000000 #define GPIO_OUTSET (*((uint32_t*) (GPIO_BASE + 0x508))) #define GPIO_OUTCLR (*((uint32_t*) (GPIO_BASE + 0x50C))) #define GPIO_PIN_CNF(pin) (*((uint32_t*) (GPIO_BASE + 0x700 + pin * 4))) unsigned int LED = 31; //P0.31, IO20, U-BLOX NINA B112 int main(void) { GPIO_PIN_CNF(LED) = 1; while(1) { printf("You are running RIOT on a(n) %s board.%c%c", RIOT_BOARD,13,10); GPIO_OUTSET = (1 << LED); xtimer_usleep(1000000); printf("This board features a(n) %s MCU.%c%c", RIOT_MCU,13,10); GPIO_OUTCLR = (1 << LED); xtimer_usleep(1000000); } return 0; }
Altere permissões para o conector USB-to-UART connector.
sudo chmod 777 /dev/ttyUSB*
TESTANDO NO NINA B112
Altere UART gpio map para o NINA B112
em periph_conf.h
osboxes@osboxes:~/RIOT/boards/nrf52dk/include$ ls
board.h gpio_params.h periph_conf.h osboxes@osboxes:~/RIOT/boards/nrf52dk/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)
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"
osboxes@osboxes:~/RIOT/examples/hello-world$ make BOARD=nrf52dk Building application "hello-world" for "nrf52dk" with MCU "nrf52". "make" -C /home/osboxes/RIOT/boards/nrf52dk "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/nrf52dk/hello-world.elf osboxes@osboxes:~/RIOT/examples/hello-world$
msys2
linux
osboxes@osboxes:~/RIOT/examples/hello-world$ cd bin osboxes@osboxes:~/RIOT/examples/hello-world/bin$ ls bluepill nrf52dk osboxes@osboxes:~/RIOT/examples/hello-world/bin$ cd nrf52dk/ osboxes@osboxes:~/RIOT/examples/hello-world/bin/nrf52dk$ 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
Grave no NINA B112 (WINDOWS) e execute
Imagem no VIRTUAL BOX (UBUNTU)
DÚVIDAS
suporte@smartcore.com.br
REFERÊNCIAS
https://www.riot-os.org/#features
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