quarta-feira, 27 de janeiro de 2021

Programando u-blox NINA-B302 com o RIOT - acessando funções do Arduino

 Programando u-blox NINA-B302 com o RIOT - acessando funções do Arduino


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 piscará o LED a cada 1 segundo e também mandará uma mensagem pela Uart. A rotina que fará o LED piscar fará uso das funções Clássicas do Arduino (CPP, .H).

Este módulo permite que os usuários executem esboços Arduino não modificados em RIOT. 

O suporte da API Arduino no RIOT é útil por várias razões:

-ponto de partida para iniciantes
-executar seus esboços existentes em qualquer hardware não-Arduino suportado pela RIOT
-facilita a mudança de Arduino para RIOT
-usar drivers de dispositivo Arduino em RIOT
-é divertido implementar :-)

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 e altere dentro do diretorio RIOT/examples/hello-world

git clone github.com/RIOT-OS/RIOT.git
cd RIOT/examples/arduino_hello-world
Altere o código de hello-world.sketch para
#define LED     D0

#ifdef STDIO_UART_BAUDRATE
#define SERIAL_BAUDRATE STDIO_UART_BAUDRATE
#else
#define SERIAL_BAUDRATE 115200
#endif


void setup(void)
{
    // configure the LED pin to be output
    pinMode(LED, OUTPUT);
    // configure the first serial port to run with the previously defined
    // baudrate
    Serial.begin(SERIAL_BAUDRATE);
    // say hello
    Serial.println("Hello Arduino!");
}

void loop(void)
{
    printf("You are running RIOT on a(n) %s board.\n", RIOT_BOARD);
    printf("This board features a(n) %s MCU.\n", RIOT_MCU);
    printf("Hello %s\n","World");
    Serial.println("hello");
    digitalWrite(LED, LOW);
    delay(1000); //aqui voce pode colocar xtimer :)
    digitalWrite(LED, HIGH);
    delay(1000); //aqui voce pode colocar xtimer :)
}

Entre em 
/RIOT/sys/arduino/include

E copie/altere arduino_pinmap.h para

/* * Copyright (C) 2017 HAW Hamburg * * This file is subject to the terms and conditions of the GNU Lesser * General Public License v2.1. See the file LICENSE in the top level * directory for more details. */ /** * @ingroup boards_stm32f4discovery * @{ * * @file * @brief Mapping from MCU pins to Arduino pins * * You can use the defines in this file for simplified interaction with the * Arduino specific pin numbers. * * @author Sebastian Meiling <s@mlng.net> */ #ifndef ARDUINO_PINMAP_H #define ARDUINO_PINMAP_H #include "periph/gpio.h" #include "periph/adc.h" #ifdef __cplusplus extern "C" { #endif /** * @name Mapping of MCU pins to Arduino pins * @{ * UBLOX NINA B302
* D0..D6 foram associados às GPIOS (PAD) IO0,IO1,IO2,IO3,IO4,IO5 e IO7 */ #define D0 0 #define D1 1 #define D2 2 #define D3 3 #define D4 4 #define D5 5 #define D6 6 #define GPIO1 GPIO_PIN(0, 13) #define GPIO2 GPIO_PIN(0, 14) #define GPIO3 GPIO_PIN(0, 15) #define GPIO4 GPIO_PIN(0, 16) #define GPIO5 GPIO_PIN(0, 24) #define GPIO6 GPIO_PIN(0, 25) /** @ */ /** * @name Mapping of Arduino analog pins to RIOT ADC lines * @{ */ #define ARDUINO_A0 ADC_LINE(0) #define ARDUINO_A1 ADC_LINE(1) #define ARDUINO_A2 ADC_LINE(2) #define ARDUINO_A3 ADC_LINE(3) /** @} */ #ifdef __cplusplus } #endif #endif /* ARDUINO_PINMAP_H */ /** @} */

E copie/altere arduino_pinmap.h para

/* * Copyright (C) 2017 HAW Hamburg * * This file is subject to the terms and conditions of the GNU Lesser * General Public License v2.1. See the file LICENSE in the top level * directory for more details. */ /** * @ingroup boards_stm32f4discovery * @{ * * @file * @brief Mapping from MCU pins to Arduino pins * * You can use the defines in this file for simplified interaction with the * Arduino specific pin numbers. * * @author Sebastian Meiling <s@mlng.net> */ #ifndef ARDUINO_PINMAP_H #define ARDUINO_PINMAP_H #include "periph/gpio.h" #include "periph/adc.h" #ifdef __cplusplus extern "C" { #endif /** * @name Mapping of MCU pins to Arduino pins * @{ * UBLOX NINA B302 */
// D0..D6 foram associados às GPIOS (PAD) IO0,IO1,IO2,IO3,IO4,IO5 e IO7
#define D0 0 #define D1 1 #define D2 2 #define D3 3 #define D4 4 #define D5 5 #define D6 6 #define GPIO1 GPIO_PIN(0, 13) #define GPIO2 GPIO_PIN(0, 14) #define GPIO3 GPIO_PIN(0, 15) #define GPIO4 GPIO_PIN(0, 16) #define GPIO5 GPIO_PIN(0, 24) #define GPIO6 GPIO_PIN(0, 25) /** @ */ /** * @name Mapping of Arduino analog pins to RIOT ADC lines * @{ */ #define ARDUINO_A0 ADC_LINE(0) #define ARDUINO_A1 ADC_LINE(1) #define ARDUINO_A2 ADC_LINE(2) #define ARDUINO_A3 ADC_LINE(3) /** @} */ #ifdef __cplusplus } #endif #endif /* ARDUINO_PINMAP_H */ /** @} */


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"
Usuario@DESKTOP-SCSSFIF MSYS ~/RIOT/examples/arduino_hello-world $ make BOARD=feather-nrf52840 CONTINUE_ON_EXPECTED_ERRORS=1 clean $ make BOARD=feather-nrf52840 CONTINUE_ON_EXPECTED_ERRORS=1 There are unsatisfied feature requirements: arduino EXPECT ERRORS! Building application "arduino_hello-world" for "feather-nrf52840" with MCU "nrf52". "make" -C /home/Usuario/RIOT/boards/feather-nrf52840 "make" -C /home/Usuario/RIOT/core "make" -C /home/Usuario/RIOT/cpu/nrf52 "make" -C /home/Usuario/RIOT/cpu/cortexm_common "make" -C /home/Usuario/RIOT/cpu/cortexm_common/periph "make" -C /home/Usuario/RIOT/cpu/nrf52/periph "make" -C /home/Usuario/RIOT/cpu/nrf52/vectors "make" -C /home/Usuario/RIOT/cpu/nrf5x_common "make" -C /home/Usuario/RIOT/cpu/nrf5x_common/periph "make" -C /home/Usuario/RIOT/drivers "make" -C /home/Usuario/RIOT/drivers/periph_common "make" -C /home/Usuario/RIOT/examples/arduino_hello-world/bin/feather-nrf52840/arduino_sketches "make" -C /home/Usuario/RIOT/sys "make" -C /home/Usuario/RIOT/sys/arduino "make" -C /home/Usuario/RIOT/sys/auto_init "make" -C /home/Usuario/RIOT/sys/auto_init/usb "make" -C /home/Usuario/RIOT/sys/div "make" -C /home/Usuario/RIOT/sys/event "make" -C /home/Usuario/RIOT/sys/isrpipe "make" -C /home/Usuario/RIOT/sys/newlib_syscalls_default "make" -C /home/Usuario/RIOT/sys/tsrb "make" -C /home/Usuario/RIOT/sys/usb/usbus "make" -C /home/Usuario/RIOT/sys/usb/usbus/cdc/acm "make" -C /home/Usuario/RIOT/sys/xtimer text data bss dec hex filename 26852 128 5756 32736 7fe0 C:/msys64/home/Usuario/RIOT/examples/arduino_hello-world/bin/feather-nrf52840/arduino_hello-world.elf Usuario@DESKTOP-SCSSFIF MSYS ~/RIOT/examples/arduino_hello-world

Grave no NINA B302 (WINDOWS) e execute 


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





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

Nenhum comentário:

Postar um comentário