segunda-feira, 1 de abril de 2019

Criando rede Mesh no U-BLOX NINA B302 com OpenThread

Criando rede Mesh  no U-BLOX NINA B302 com OpenThread

Plano: 3 end devices


O objetivo deste BLOG é demonstrar de forma resumida como é possível fazer com que o módulo U-BLOX NINA B302 possa rodar o OpenThread (modo JOIN). Foram utilizados 2 módulos Breakout U-BLOX NINA B302 para os testes.


Por favor, participe do FORUM



-1 NCP Dongle (espestado na USB do Raspberry) - U-BLOX NINA B302
-1 Joiner - U-BLOX NINA B302
-1 APP Android (commissioning)
Sobre o OpenThread

A Internet das Coisas (IoT) visa transformar a vida das pessoas através de casas inteligentes e empresas. Em casa, o objetivo é uma rede de aparelhos conectados, luzes, controles climáticos, segurança e sistemas de entretenimento, que trabalham juntos para tornar a vida mais conveniente e gratificante para os consumidores. Em edifícios comerciais, a IoT visa melhorar a eficiência, funcionalidade, automação e segurança de edifícios, como escritórios, instalações de saúde, hotéis e escolas.

O encadeamento foi desenvolvido para atender aos desafios exclusivos de interoperabilidade, segurança, energia e arquitetura da IoT.

Thread traz a Internet para a Internet das Coisas (IoT). É por isso que o Thread foi projetado com os padrões abertos e comprovados da Internet para criar uma rede de malha baseada em IPv6 (Internet Protocol versão 6), com a 6LoWPAN como base.

As interfaces padronizadas e os protocolos IP do Thread beneficiam os desenvolvedores de ecossistema da IoT de várias maneiras:

Construa um sistema sem fio rapidamente. Como uma rede IP completa de ponta a ponta, o Thread acelera o ritmo no qual os aplicativos e serviços são desenvolvidos, já que o mesmo conjunto avançado de ferramentas disponíveis para a Internet pode ser usado para desenvolver dispositivos e sistemas Thread.

Produtos e plataformas à prova de futuro. O thread é independente da camada de aplicativos, o que significa que a camada de aplicativo e os serviços de nuvem nos dispositivos Thread podem ser alterados com o tempo. Os dispositivos de thread podem crescer e evoluir com os ecossistemas e o setor, enquanto a base principal de IP será bem suportada indefinidamente.

Crie facilmente um ecossistema flexível, independente de plataforma. Os desenvolvedores podem selecionar várias pilhas certificadas, plataformas de silício ou módulos para criar produtos Thread ou escolher entre muitos produtos de thread certificados para criar um ecossistema. De qualquer forma, o ecossistema aberto, interoperável e diversificado da Thread oferece flexibilidade de longo prazo.

Fique conectado aos usuários finais e dados. O thread é baseado em IP, permitindo que os dispositivos falem diretamente com a nuvem, além de outros produtos IoT, controladores de automação residencial e predial e dispositivos móveis. Ter essa conexão direta permite que os fabricantes mantenham uma conexão com seus produtos e seus usuários, ao mesmo tempo em que possibilita acesso valioso a dados de uma ampla variedade de dispositivos inter-setoriais conectados.


A Internet é executada em IP. De telefones a roteadores a conexões em todo o mundo, o IP é a tecnologia que permite que os dispositivos se comuniquem diretamente entre si, independentemente de quais tecnologias de conectividade eles usam (por exemplo, ethernet, Wi-Fi, 4G e LTE). E, muitas vezes, suas comunicações viajam sem problemas por todas essas tecnologias de rede, interligadas por meio de IP.

Thread traz conectividade IP para os dispositivos sem fio de baixa potência que compõem a IoT, seja em casas inteligentes ou edifícios comerciais.

Os dispositivos thread integram-se perfeitamente a redes IP maiores, tornando-se parte integrante de dispositivos como Ethernet, Wi-Fi, celular ou várias outras opções de rede IP.
Os dispositivos de thread não precisam de gateways ou tradutores proprietários, mas podem fazer conexões diretas com os outros dispositivos com os quais estão interagindo e com a Internet.

Isso reduz as necessidades e investimentos em infraestrutura, possíveis pontos de falha e encargos de manutenção, ao mesmo tempo em que permite a segurança de ponta a ponta do dispositivo para a nuvem. Também facilita a conexão de produtos Thread a dispositivos pessoais, como telefones celulares e tablets.

O Thread é um protocolo de rede de malha sem fio de baixa potência, baseado no protocolo IP (protocolo de Internet) universalmente suportado e construído usando padrões abertos e comprovados.
O segmento permite comunicações de dispositivo para dispositivo e de dispositivo para a nuvem e conecta de forma confiável centenas (ou milhares) de produtos e inclui recursos de segurança obrigatórios.
As redes de encadeamentos não têm ponto único de falha, podem se auto-recuperar e reconfigurar quando um dispositivo é adicionado ou removido, e são simples de configurar e usar.
O encadeamento é baseado no padrão de rádio IEEE 802.15.4 amplamente aceito, projetado desde o início para consumo de energia extremamente baixo e baixa latência.

Um facilitador chave para a IoT é a interoperabilidade. O segmento aborda esse desafio fornecendo um programa de certificação que valida a conformidade de um dispositivo com a especificação, bem como sua interoperabilidade em relação a uma rede combinada composta de várias pilhas certificadas.
 OpenThread liberado pelo Nest é uma implementação de código aberto do Thread®. A Nest lançou o OpenThread para tornar a tecnologia de rede usada nos produtos Nest mais amplamente disponível para os desenvolvedores, a fim de acelerar o desenvolvimento de produtos para a casa conectada.

Com uma camada de abstração de plataforma estreita e um pequeno espaço de memória, o OpenThread é altamente portátil. Ele suporta designs de sistema no chip (SoC) e de coprocessador de rede (NCP).


Mais sobreThread!

O Thread® é um protocolo de rede baseado em IPv6 projetado para dispositivos de Internet das Coisas de baixa potência em uma rede de malha sem fio IEEE 802.15.4-2006, comumente chamada de Wireless Personal Area Network (WPAN). Thread é independente de outros protocolos de rede de malha 802.15.4, como ZigBee, Z-Wave e Bluetooth LE.

Os principais recursos do segmento incluem:

Simplicidade - Instalação, inicialização e operação simples

Segurança - Todos os dispositivos em uma rede Thread são autenticados e todas as comunicações são criptografadas

Confiabilidade - Rede de malha de auto-recuperação, sem ponto único de falha, e técnicas de espalhamento espectral para fornecer imunidade à interferência

Eficiência - Dispositivos de rosca de baixa potência podem dormir e operar com energia da bateria por anos

Escalabilidade - redes de encadeamento podem escalar até centenas de dispositivos

Se você é novo no Thread, entender os fundamentos é fundamental para usar o OpenThread em seus próprios aplicativos. O objetivo deste blog é explicar os conceitos por trás do Thread e como ele funciona e fornecer um trampolim para o desenvolvimento do OpenThread.

Supõe-se que você tenha um bom conhecimento prático do seguinte:

IEEE 802.15.4
Conceitos de rede e roteamento

IPv6

O protocolo de rede Thread foi projetado para facilitar e conectar com segurança centenas de dispositivos uns aos outros e a nuvem usando protocolos reais da Internet por um baixo consumo de energia, rede de malha sem fio. Construído em padrões abertos e com Protocolos IPv6 / 6LoWPAN, a abordagem da Thread para redes sem fio rede oferece uma rede de malha segura e confiável sem ponto único de falha, conectividade simples e baixa potência. o Padrão de linha é uma pilha construída sobre o bem estabelecido protocolos e tecnologias, como IEEE 802.15.4, 6LoWPAN, IPv6 e UDP. Thread fornece meios para segurança de rede e
comissionamento, mas não especifica o protocolo da aplicação. É um protocolo de rede semelhante ao WiFi, mas projetado para baixo potência e recursos dispositivos restritos. No entanto, o Thread Grupo tem vários contatos com diferentes camadas de aplicação por exemplo, OCF, Zigbee dotdot

Características

O OpenThread implementa todas as camadas de rede Thread (IPv6, 6LoWPAN, IEEE 802.15.4 com segurança MAC, estabelecimento de link de malha, roteamento de malha) e funções de dispositivo, bem como suporte a roteador de borda.

SERVIÇOS DE APLICAÇÃO

Configuração IPv6 e interface de dados brutos
Soquetes UDP
Cliente e servidor CoAP
Cliente e servidor DHCPv6
Cliente DNSv6

BORDER ROUTER
Web UI para configuração e gerenciamento
Agente de limite de linha para apoiar um comissário externo
NAT64 para se conectar a redes IPv4

Resumo de Instalação

Instale o SEGGER J-Link

Usamos o SEGGER J-Link para programar as placas U-BLOX NINA B302, que possuem módulos JTAG onboard. 
Baixe o pacote apropriado para sua máquina e instale-o no local adequado. 

Instalar as ferramentas de linha de comando nRF5x

OpenThread 

Antes de começar, você pode querer percorrer o OpenThread Simulation Codelab, para se familiarizar com os conceitos básicos do Thread e com o OpenThread CLI.

Terminais de porta serial

Qualquer outro software de terminal pode ser usado, no caso foi utilizado  o Teraterm.

BorderRouter

Para criar uma REDE mesh, primeiramente baixe uma imagem do Linux para Raspberry, coloque ele na rede e então execute
curl https://raw.githubusercontent.com/HomeSmartMesh/raspi/master/get_raspi.sh -o get_raspi.sh && sudo bash get_raspi.sh
cd raspi
sudo bash setup.sh
O Raspberry solicitará boot algumas vezes! Aguarde a instalação!

Pronto, todas as ferramentas para OpenThread foram instaladas e OTBR (OpenThread Border Router) server está pronto para ser acessado, permitindo conecta uma rede Thread a outras redes baseadas em IP, como Wi-Fi ou Ethernet. 

O Border Router destina-se a fins de desenvolvimento, para facilitar que os desenvolvedores conectem sua rede Thread à Internet na fase de desenvolvimento. Ele também suporta o procedimento de comissionamento nativo thread utilizando NFC para iniciar o processo. Também é suportada a funcionalidade do Border Router, que permite a realização de um procedimento de comissionamento externo, conforme descrito no Comissionamento.

Agora será necessário que você tenha um DONGLE RCP OpenThread conectado na USB do seu raspberry, no caso, utilizei o U-BLOX NINA B302 via USB.


Grave o firmware  com o Segger J-LINK no U-BLOX NINA B302


Será então criado um Disco Virtual...com o NRFCONNECT DESKTOP - PROGRAMMER, ache o disco virtual e copie o arquivo



Pronto, agora conecte no USB do seu Raspberry e com o comando lsusb voce é verá o DONGLE RCP na lista de dispositivos USB.


Siga o roteiro abaixo para criar a Rede Thread (FORM)



Configurando os FTDs (end devices que querem entrar na tua rede Thread)

Você pode pegar o exemplo no OpenThread no SDK OpenThread a Nordic, compilar e gravar com o SEGGER STUDIO, já com função USB nativa, criando assim uma COMM virtual para interagir com NCP Joiner.

C:\openthread\examples\thread\cli\ftd\usb\pca10056\blank\ses\thread_cli_ftd_usb_pca10056.ses


Este end device é um  JOINER, um dispositivo usa a função Joiner para ser autenticado e comissionado com segurança em uma rede Thread. O USB nativo permite o uso do USB CDC ACM como um transporte serial entre o U-BLOX NINA B302 e o host, no caso, um terminal burro,  o Teraterm.

Para o end device (Joiner) ser autenticado e comissionado, vamos utilizar o APP Thread para Android.


Circuito construído! Por enquanto apenas um módulo foi montado!

Da esquerda para direita, NCP Dongle e FTD Joiner


Vamos por em prática

Use a GUI da Web

Agora, você pode usar a GUI da Web do OpenThread Border Router (OTBR) para configurar e formar, ingressar ou verificar o status de uma rede Thread.

Conecte-se à rede Wi-Fi BorderRouter-AP e acesse a GUI da Web visitando o endereço IPv4 local do OTBR em um navegador móvel:

Formar uma rede de threads

Use a opção de menu Formulário para criar uma nova rede Thread.


Border Router Comissionamento

O OpenThread Border Router (OTBR) possui um Thread Border Agent, que suporta o Thread Comissionamento externo. No Comissionamento de Thread externo, um dispositivo fora da rede Thread (por exemplo, um telefone celular) comissiona novos dispositivos na rede.

Preparar o dispositivo Joiner

Conecte a nova placa U-BLOX NINA B302 (JOINER) ao seu PC usando o cabo USB. Abra o terminal burro (Teraterm) para ter acesso à ela.


Quando o dispositivo Joiner estiver pronto, recupere o IEEE EUI-64 atribuído de fábrica. Use o eui64comando na CLI do OpenThread:

> eui64
f4ce3638d6b665ce
Done

Use o aplicativo de comissionamento

O comissionamento externo é suportado pelo Thread Commissioning App, disponível para download na Google Play Store para dispositivos Android.


Aplicativo de comissionamento

Conecte seu telefone ao ponto de acesso Wi-Fi BorderRouter-AP e inicie o aplicativo Thread Commissioning.

Selecione o Border Router de destino na lista disponível. O nome é o mesmo da rede Thread criada pelo OTBR Web GUI. Se o mesmo Border Router aparecer várias vezes com diferentes endereços IPv4 e IPv6, selecione aquele com o endereço IPv4 estático usado para a configuração do ponto de acesso Wi-Fi.

Quando uma senha for solicitada, insira a senha (Credencial do Comissário) definida pelo OTBR Web GUI.

Passphrase/Commissioner Credential

Comissionando o JOINER

Depois de conectado ao Border Router, o aplicativo oferece a opção de escanear um Connect QR Code ou inserir uma senha de acesso manualmente.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> <script> jQuery(function(){ jQuery( "#btn_generate" ).click(function() { var text = $('#text_usr').val(); if(text != "") { jQuery('#output').empty(); jQuery('#output').qrcode({width: 200,height: 200,text: text}); } }); }) </script>

ficando

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> <script> jQuery(function(){ jQuery( "#btn_generate" ).click(function() { var text = $('#v=1 && eui=f4ce3638d6b665ce && cc=J01NU5').val(); if(text != "") { jQuery('#output').empty(); jQuery('#output').qrcode({width: 200,height: 200,text: text}); } }); }) </script>

Use 

Escolha URL

Os códigos QR do Thread Connect são criados com o seguinte formato de string de texto:

v=1&&eui=f4ce3638d6b665ce&&cc=12345678 

Onde eui é o valor EUI64 do dispositivo Joiner e cc é a Credencial Joiner, este último podes definir em


No aplicativo Thread Commissioning, escaneie o Connect QR Code gerado. 


Enquanto o aplicativo está esperando, entre na OpenThread CLI no dispositivo JOINER e inicie a função Joiner com a mesma Credencial Joiner:

> ifconfig up
Done
> joiner start J01NU5 <===senha definida acima! Por exemplo, 12345678
Done

Aguarde a conclusão do handshake DTLS entre o Comissário e o JOINER

> Join success


Junte-se à rede

No dispositivo Joiner, inicie o protocolo Thread para ingressar automaticamente na rede.

> thread start
done

Verifique o estado após alguns momentos para confirmar. Ele pode iniciar inicialmente como um filho, mas em dois minutos, ele será atualizado para um roteador.

> state
router
Done


Obtenha os endereços do JOINER digitando ipaddr:

> ipaddr
fd11:1111:1122:0:0:ff:fe00:4800
fd11:22:0:0:f8f8:d11:2fe1:64c
fd11:1111:1122:0:86ab:6ec9:2c76:b685
fe80:0:0:0:a8f7:dc05:2d33:c107
Done


Verifique a conectividade com a Internet

Teste a conectividade entre o dispositivo Joiner na rede Thread e a Internet executando ping em um endereço IPv4 público. Para alcançar o endereço IPv4 do dispositivo Thread, um prefixo conhecido de 64:ff9b::/96e um endereço IPv4 do destino são usados.

Por exemplo, para pingar o DNS do Google 8.8.8.8 a partir do endereço IPv6, anexe uma forma hexadecimal do IPv6 ao prefixo conhecido, resultando em: 64:ff9b::808:808.

> ping 64:ff9b::808:808
 > 16 bytes de 64:ff9b:0:0:0:0:808:808: icmp_seq=1 hlim=43 time=234ms


> ping 64:ff9b::808:808
 > 16 bytes de 64:ff9b:0:0:0:0:808:808: icmp_seq=2 hlim=43 time=229ms

> ping 64:ff9b::808:808
 > 16 bytes de 64:ff9b:0:0:0:0:808:808: icmp_seq=3 hlim=44 time=225ms

> ping 64:ff9b::808:808
 > 16 bytes de 64:ff9b:0:0:0:0:808:808: icmp_seq=4 hlim=45 time=221ms

Parabéns!

Topologia


Suporte: suporte@smartcore.com.br

Fontes:


Thanks to all support
Wassim

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