quinta-feira, 21 de janeiro de 2021

Comunicação P2P entre 2 NINA B302 via IPV6 - Rádio

Comunicação P2P entre 2 NINA B302 via IPV6 - Rádio


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 IPV6 via linha de comandos.

Este exemplo mostra como testar as comunicações entre instâncias DE RIOT com protocolos de camada MAC com duty-cycled (GoMacH e LWMAC) para dispositivos IEEE 802.15.4.
Este exemplo é geralmente baseado em 'gnrc_networking', mas incorpora o GoMacH (ou LWMAC) para suportar a operação de duty-cycled baixos para economizar energia. Além disso, ele pretende mostrar que o protocolo MAC com ciclo de serviço pode suportar protocolos populares de camada superior, como UDP e RPL.

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/examples/gnrc_networking_mac
make BOARD=feather-nrf52840
(aqui o exemplo será compilado para feather-nrf52840)
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/radio/nrf802154
"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/netdev
"make" -C /home/Usuario/test/RIOT/drivers/netdev_ieee802154_submac
"make" -C /home/Usuario/test/RIOT/drivers/periph_common
"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/div
"make" -C /home/Usuario/test/RIOT/sys/event
"make" -C /home/Usuario/test/RIOT/sys/evtimer
"make" -C /home/Usuario/test/RIOT/sys/fmt
"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/net/crosslayer/inet_csum
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/link_layer/gomach
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/link_layer/mac
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/netapi
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/netif
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/netif/hdr
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/netif/ieee802154
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/netif/init_devs
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/netif/pktq
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/netreg
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/icmpv6
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/icmpv6/echo
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/ipv6
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/ipv6/hdr
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/ipv6/nib
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/ndp
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/sixlowpan
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/sixlowpan/ctx
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/sixlowpan/frag
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/sixlowpan/frag/fb
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/sixlowpan/frag/rb
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/sixlowpan/iphc
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/network_layer/sixlowpan/nd
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/pkt
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/pktbuf
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/pktbuf_static
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/pktdump
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/priority_pktqueue
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/routing/rpl
"make" -C /home/Usuario/test/RIOT/sys/net/gnrc/transport_layer/udp
"make" -C /home/Usuario/test/RIOT/sys/net/link_layer/csma_sender
"make" -C /home/Usuario/test/RIOT/sys/net/link_layer/eui_provider
"make" -C /home/Usuario/test/RIOT/sys/net/link_layer/ieee802154
"make" -C /home/Usuario/test/RIOT/sys/net/link_layer/l2util
"make" -C /home/Usuario/test/RIOT/sys/net/netif
"make" -C /home/Usuario/test/RIOT/sys/net/network_layer/icmpv6
"make" -C /home/Usuario/test/RIOT/sys/net/network_layer/ipv6/addr
"make" -C /home/Usuario/test/RIOT/sys/net/network_layer/ipv6/hdr
"make" -C /home/Usuario/test/RIOT/sys/net/network_layer/sixlowpan
"make" -C /home/Usuario/test/RIOT/sys/net/transport_layer/udp
"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/random
"make" -C /home/Usuario/test/RIOT/sys/random/tinymt32
"make" -C /home/Usuario/test/RIOT/sys/shell
"make" -C /home/Usuario/test/RIOT/sys/shell/commands
"make" -C /home/Usuario/test/RIOT/sys/trickle
"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/xtimer
   text    data     bss     dec     hex filename
  98980     196   23532  122708   1df54 C:/msys64/home/Usuario/test/RIOT/examples/gnrc_networking_mac/bin/feather-nrf52840/gnrc_networking_mac.elf

Usuario@DESKTOP-SCSSFIF MSYS ~/test/RIOT/examples/gnrc_networking_mac
$
Grave nos dois NINA B302 (WINDOWS) o bin e execute, esta na pasta
/home/Usuario/test/RIOT/examples/gnrc_networking_mac/bin/feather-nrf52840

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


Abra dois terminais burro nas COMM criadas (TERATERM)


Coloca um NINA B302 escutando na Porta UDP 8808
udp server start 8808

Obtendo IPV6

Coloca outro NINA B302 como transmissor na Porta UDP 8808 e endereço IPV6 fe80::ecaa:9930:50e:b5c
udp send fe80::ecaa:9930:50e:b5c 8808 testmessage


P2P via IPV6 entre dois NINA B302


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