quinta-feira, 22 de agosto de 2024

LSM110A - MESH embeNET - MQTT

 STM32 NUCLEO - MESH embeNET

      

embeNET e STM32WL: rede mesh baseada em 6TiSCH supera grandes desafios que assolam a Internet das Coisas

A ausência de um padrão popular capaz de conectar uma infinidade de dispositivos IoT em uma rede mesh é problemática. É por isso que a EMBETECH, uma empresa europeia e membro do ST Partner Program, criou o embeNET, uma pilha de rede baseada em 6TiSCH. Destinado a sistemas embarcados, o embeNET usa bibliotecas C para otimizar as operações entre dispositivos usando microcontroladores Cortex. Atualmente, a tecnologia é executada no MCU sem fio de 32 bits de longo alcance STM32WL (STM32 NUCLEO). Os desenvolvedores simplesmente usam APIs desenvolvidas pela EMBETECH para aproveitar os vários recursos do protocolo de rede. Assim, as equipes ignoram problemas de implementação altamente complexos para se concentrar na criação de uma infraestrutura original e eficiente.

Serviços de rede

Um serviço de rede no embeNET é uma funcionalidade separada construída em torno da comunicação em uma única porta UDP (raramente - múltiplas portas UDP). Três exemplos de serviços distribuídos com a pilha embeNET são:

Os usuários, entretanto, podem desenvolver facilmente seus próprios serviços usando UDP. Um exemplo desse serviço UDP personalizado é implementado nos nós de demonstração.

Serviço de demonstração MQTT-SN

O serviço de demonstração MQTT-SN usa o cliente MQTT-SN e faz três coisas:

  • publica periodicamente informações de tempo de atividade
  • ao pressionar o botão publica o contador de cliques do botão
  • reage a alguns comandos de texto simples que controlam os LEDs integrados - esses comandos são: led1on , led1off , led2on , led2off , led3on e led3off

Consulte Usando o serviço de demonstração MQTT-SN para obter mais informações sobre como esse serviço funciona e como usá-lo.

A arquitetura MQTT-SN requer um Gateway adicional, que basicamente traduz o protocolo MQTT-SN (que é baseado em UDP) para MQTT (que é baseado em TCP) (veja a parte superior da imagem abaixo).

Esse gateway geralmente é executado no roteador de borda, mas pode estar em qualquer lugar da rede.

Alguns imagens de testes com LSM110A (desligar FIREWALL)

SN-MQTT

MQTT 

NODE

Border Router

config.json
{ "serial_port": "COM14", "wan_interface": "embeNET", "log_level": "trace", "network": { "k1": "0xc08b766277099e7d7e9c0222f168cc9e", "panid": "0xe3be", "prefix": "0xaaaabbbbccccdddd" }, "join_rules": [ { "uid": 0, "psk": "0x46d7dc94e8ee7496ceaf54a3ab64cbeb" } ] }


Execução

Testes OK com Border Router e Node




Referências

Tradução, Adaptação e testes dos links

Discussões

Sem documentação entre Border Router com SN-MQTT

Ok, so it looks like the MQTT packets are received at the border router:


00:00:59.366 BR_RNC (V): Packet was decoded and handled successfuly; len: 85, rx: 0, received count: 85
00:00:59.369 EMBENET_PORT_WAN (D): Data request: {{v: 6, tc 0, fl 0, len: 34, nh: 17, hl: 64, src: aaaa:bbbb:cccc:dddd:0080:e115:051f:c14c, dst: aaaa:bbbb:cccc:dddd:0080:e115:0055:3ac8}, udp: {src: 1885, dst: 1885, len: 34, checksum: 0x8ea},  udp payload: {0x1a, 0x4, 0x4, 0x1, 0x0, 0x1e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x38, 0x30, 0x65, 0x31, 0x31, 0x35, 0x30, 0x35, 0x31, 0x66, 0x63, 0x31, 0x34, 0x63, }}


so the packets go to the network interface in Windows but somehow they do not pop up in the MQTT-SN Gateway socket (nor ENMS Visualizer).


If the MQTT-SN Gateway is on and operational on port 1885 then we have two hypothesis:

1. The firewall is blocking them - you can try to temporarily disable it and see if it helps
2. The IP forwarding is not working correctly in the system. To check this please refer to:
https://serverfault.com/questions/929081/how-can-i-enable-packet-forwarding-on-windows


Let me know if it helps or not.



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

sábado, 17 de agosto de 2024

LSM110A - MESH embeNET

STM32 NUCLEO - MESH embeNET

      

embeNET e STM32WL: rede mesh baseada em 6TiSCH supera grandes desafios que assolam a Internet das Coisas

A ausência de um padrão popular capaz de conectar uma infinidade de dispositivos IoT em uma rede mesh é problemática. É por isso que a EMBETECH, uma empresa europeia e membro do ST Partner Program, criou o embeNET, uma pilha de rede baseada em 6TiSCH. Destinado a sistemas embarcados, o embeNET usa bibliotecas C para otimizar as operações entre dispositivos usando microcontroladores Cortex. Atualmente, a tecnologia é executada no MCU sem fio de 32 bits de longo alcance STM32WL (STM32 NUCLEO). Os desenvolvedores simplesmente usam APIs desenvolvidas pela EMBETECH para aproveitar os vários recursos do protocolo de rede. Assim, as equipes ignoram problemas de implementação altamente complexos para se concentrar na criação de uma infraestrutura original e eficiente.

Os desafios por trás das redes mesh na Internet das Coisas (IoT)

Por que a eficiência energética e as interferências são problemáticas?

No livro Internet das Coisas: Desafios e Oportunidades , Maria Palattella et al. (2014) explicam como as redes industriais estão cada vez mais migrando para tecnologias baseadas em IP. A tendência é popular porque se baseia em conceitos familiares e ao mesmo tempo habilita muitos dispositivos na mesma rede. O desafio é que ele deve ser compatível com dispositivos de baixo consumo de energia, o que significa que os rádios nem sempre podem estar ligados. O padrão também deve lidar com interferências e desvanecimentos devido a vários dispositivos que usam a mesma frequência para comunicação sem fio. A resposta é o protocolo IEEE802.15.4-2011 Medium Access Control (MAC) chamado Timeslotted Channel Hopping (TSCH, pronunciado Tish).

O que é o TSC?

Como o nome indica, o TSCH depende da sincronização de horário. O padrão define um “intervalo de tempo” como uma unidade de tempo. Sua duração não é definida pela norma e pode, portanto, variar. Em um horário específico do intervalo de tempo, a rede enviará um pacote com componentes de temporização e cada nó registrará o horário em que recebeu aquele quadro. Com essas informações, todos os dispositivos podem sincronizar o relógio da rede, compensando assim qualquer desvio potencial. Graças a um contador, cada dispositivo também pode saber por quantos intervalos de tempo a rede passou. Chamado de Absolute Slot Number (ASN), ele aumenta após cada intervalo de tempo, usa um número inteiro de cinco bytes e pode, portanto, durar centenas de anos.

O outro componente principal do TSCH refere-se ao salto de canal, um mecanismo que permite a um dispositivo alternar frequências sem fio. Para garantir que nós próximos usem a mesma frequência e possam se comunicar, o padrão usa o ASN para calcular um deslocamento que determina qual frequência usar. Como todos os nós se beneficiam da sincronização de tempo rigorosa e todos conhecem o ASN, o salto de canal torna-se altamente confiável. Porém, no caso de falha na transmissão, a retransmissão ocorrerá em uma frequência diferente. Na verdade, a estratégia tem mais chances de sucesso do que reenviar o mesmo pacote na mesma frequência.

Por que o TSCH é importante?

Usar a sincronização de tempo significa que o TSCH é um padrão sem fio determinístico. As transmissões acontecem com precisão, o que significa que os microcontroladores sabem quando ligar o rádio e por quanto tempo, economizando muita energia. A coordenação do tempo também evita que um nó perca pacotes. Além disso, o salto de canal permite o uso de todos os canais disponíveis para rádios sub-GHz e 2,4 GHz. Os engenheiros podem, portanto, usar muitos dispositivos sem atrapalhar um canal, o que alivia o risco de interferências. Como resultado, o TSCH abre a porta para operações de escala massiva.

O que é 6TiSCH?

Em essência, 6TiSCH é uma rede TSCH que usa uma sub-rede IPv6. Como o protocolo utiliza endereços de 128 bits, as empresas podem aplicar um único identificador IPv6 para cada dispositivo sem medo de esgotamento, mesmo em grandes ambientes industriais. Nos bastidores, o 6TiSCH é bastante abrangente. Ele define como rotear e rastrear pacotes e implementa qualidade de serviço para priorizar determinados pacotes, bem como recursos de segurança, entre outras coisas. Simplificando, a IETF (Internet Engineering Task Force) concebeu o 6TiSCH para responder a uma ampla gama de aplicações. Seja para cidades inteligentes, transportes, edifícios ou fábricas, o 6TiSCH visa resolver os desafios inerentes às redes mesh.

embeNET, a solução para a democratização da rede Mesh na Internet das Coisas

Por que 6TiSCH ainda não é uma palavra da moda?

embeNET e as outras tecnologias EMBETECH
embeNET e as outras tecnologias EMBETECH

Embora o 6TiSCH resolva muitos problemas que afetam as redes mesh de dispositivos IoT, podemos perguntar por que a tecnologia ainda não é onipresente. Afinal, a primeira mailing list da IETF sobre o tema data de janeiro de 2013, e o livro de 2014 mencionado acima já descreve as vantagens e a importância da tecnologia. No entanto, muitos engenheiros ainda desconhecem a sua existência ou não têm muita experiência. A razão é que, embora academicamente fascinante, o 6TiSCH é comercialmente difícil de implementar. E é isso que a embeNET tenta resolver, oferecendo uma pilha de rede completa com APIs para maior facilidade de uso.

Como a embeNET está resolvendo o desafio de implementação?

O STM32WL
O STM32WL

As empresas muitas vezes têm dificuldade em implementar uma pilha de rede 6TiSCH em um microcontrolador. Embora a IETF tenha definido mecanismos voltados para dispositivos de baixo consumo de energia, ela não oferece soluções prontas para uso. Conseqüentemente, a EMBETECH pegou a tecnologia e melhorou as funções de agendamento, garantiu a estabilidade em um ambiente industrial e otimizou a pilha de rede para dispositivos com recursos limitados. Com todos os serviços habilitados, a biblioteca precisa apenas de 100 KB de flash. Portanto, como exemplo, tomemos o STM32WL (NUCLEO), o primeiro MCU com um transceptor LoRa multimodulação integrado. Neste caso, seus 256 KB de armazenamento são suficientes para o firmware, mecanismos de atualização e aplicativo.

A pilha de rede também usa o recurso de hardware do ST. Por exemplo, ele usa os recursos de modulação FSK/(G)FSK do STM32WL, o que simplifica o design geral. Da mesma forma, a biblioteca usa o núcleo criptográfico do ST e seu gerador de números verdadeiros para acelerar as operações criptográficas. Conseqüentemente, o embeNET pode ser executado em apenas um dos KIT STM32 NUCLEO. A pilha de rede pode ser executada no mesmo Arm® Cortex®-M4 que o aplicativo sem afetar negativamente o desempenho. Simplificando, os desenvolvedores desfrutam de um alto nível de otimização e podem reutilizar facilmente seu sistema em vários MCUs STM32 (STM32 NUCLEO). Por exemplo, uma rede mesh básica para uma aplicação de medidor inteligente que envia um pacote por dia poderia usar um STM32WL com baterias AA que durariam cerca de dez anos.

Começando

KIT LSM110A USADO PARA TESTE NO LUGAR DO KIT STM32 NUCLEO 

Os desenvolvedores podem começar a experimentar o embeNET pegando uma placa de desenvolvimento STM32WL como no KIT STM32 NUCLEO e baixando o pacote de software de demonstração EMBETECH . Uma versão de avaliação da pilha suporta até 10 nós e três saltos de rede. A empresa também oferece documentação para ajudar os desenvolvedores a começar. Além disso, um software de gateway é executado em PCs após conectar o KIT STM32 NUCLEO à máquina para criar uma rede virtual. Por fim, a empresa fornece uma solução em nuvem para ajudar a processar os dados dos nós da rede mesh.

Apresentando o Portal embeNET

Sua ferramenta para configurar, provisionar, monitorar e visualizar redes embeNET

O Portal embeNET  é uma aplicação web que coleta dados de todos os nós de campo conectados, permitindo visualizar as conexões e o status da rede. Ele fornece informações detalhadas sobre a operação da rede, permitindo detectar e depurar problemas de conexão desde o momento da instalação. Esta ferramenta também pode ser usada para provisionar e autorizar os dispositivos e executar ações de atualização de firmware em larga escala.  

A versão demo fornecida cobre todas as funcionalidades principais da plataforma e já vem preenchida com alguns dados de demonstração, para que você possa obter a experiência certa.

DEMO



O KIT STM32 NUCLEO oferece uma maneira acessível e flexível para os usuários experimentarem novos conceitos e construir protótipos com o microcontrolador da série STM32WL. Você pode usar essa plataforma para testar e conhecer facilmente a plataforma embeNET.


Informação importante: esta demonstração utiliza a banda de rádio europeia: 863-870MHz

Esta banda está disponível na maioria dos países europeus, mas não em todo o mundo. Contate-nos em caso de dúvidas!

O que você precisa?

Você vai precisar de pelo menos duas placas KIT STM32 NUCLEO (mais recomendadas) e um PC com Linux ou Windows. Uma placa será conectada ao PC e atuará como raiz da rede. A outra placa (ou placas) atuará como nós. 

Você também precisará do STM32CUBE  para usar os exemplos de software fornecidos e programar as placas.

Transferências

Código fonte e pacote binário para o KIT STM32 NUCLEO e Windows.

Como começar?

Introdução à demonstração embeNET para o KIT STM32 NUCLEO.

Está com problemas?

Está tendo problemas para executar a demonstração? Em caso de dúvidas entre em contato com nosso suporte.

O que você precisa

  • Computador com Windows
  • Um KIT STM32 NUCLEO conectada ao PC (via cabo USB TTL 3.3V) que atuará como raiz da rede
  • Pelo menos mais uma (até 10) KIT STM32 NUCLEO que atuarão como nós da rede
  • pacote de demonstração embeNET para KIT STM32 NUCLEO
  • STM32CubeIDE, disponível para download no site oficial da ST
  • (STM32CubeProgrammer disponível para download no site oficial da ST
  • (opcional)Qualquer terminal de porta serial, por exemplo Teraterm,  ExtraPutty , para visualizar os logs

Opcionalmente, para brincar com o serviço de demonstração MQTT-SN, você precisará de:

Opcionalmente, para interagir facilmente com o serviço UDP personalizado, você precisará

Arquitetura de demonstração

A imagem abaixo apresenta a arquitetura da rede embeNET apresentada nesta demonstração.


Arquitetura desta demonstração embeNET

O PC atua como um Border Router (Roteador de Fronteira) e se torna a porta de entrada para a rede. Um KIT STM32 NUCLEO executando o firmware Root é conectada ao PC via cabo USB TTL 3.3V e atua como uma interface de rede. Os demais KIT STM32 NUCLEO estão rodando o firmware Node . Ao executar a aplicação Border Router, ele se conecta à raiz através de conexão serial (COM no Windows) e uma nova interface de rede é registrada no sistema. Todas os outros KIT STM32 NUCLEO ingressam na rede como nós. Como o embeNET é uma rede mesh verdadeira , cada nó da rede é um roteador e pode estender a rede por meio de saltos sucessivos.

O pacote de demonstração embeNET

pacote de demonstração embeNET é distribuído como um único arquivo ZIP. Descompacte-o em um local conveniente no disco. Dentro você encontrará algumas pastas:

  • doc - contém esta documentação
  • embenet_br - contém o aplicativo Border Router para rodar no PC
  • embenet_demo_src - contém o projeto de firmware para os KIT STM32 NUCLEO
  • embenet_demo_hex - contém os arquivos de firmware já construídos para os KIT STM32 NUCLEO (formato Intel HEX), que você pode usar sem construí-los você mesmo
  • enms_visualizer - contém um aplicativo de demonstração para PC que visualiza a rede

Programando as placas sem construir (build) o firmware

Arquivos hexadecimais de firmware pré-construídos (build) estão disponíveis na pasta embenet_demo_hex . Você pode carregá-los nos fóruns usando uma ferramenta de sua escolha. Recomendamos o STM32CubeProgrammer. Aqui estão as etapas necessárias para começar.

Baixe e instale o STM32CubeProgrammer

Execute a ferramenta STM32CubeProgrammer e conecte o KIT STM32 NUCLEO ao seu PC. Em seguida, clique no botão "Conectar".

STM32CubeProgrammer: conectando à placa

Você deverá ver um log semelhante a este e um status de que a conexão foi bem-sucedida.

Registro de conexão do STM32CubeProgrammer

Em seguida, clique no botão "Open file" e selecione o arquivo de firmware que deseja carregar.

STM32CubeProgrammer: carregando o arquivo de firmware

Vá para a pasta embenet_demo_hex e selecione:

  • embenet_root_demo.hex para a placa que atua como nó raiz ( firmware raiz )
  • embenet_node_demo.hex para todas as outras placas ( firmware do nó )

Por fim, clique no botão "Download" para programar a placa.

STM32CubeProgrammer: baixando o firmware para a placa

Uma mensagem “File download complete” deve confirmar que o download do firmware foi realizado corretamente.

STM32CubeProgrammer: mensagem completa de download

Observe que, por padrão, o código não será executado até que você reinicie a placa.

Agora você deve ter o KIT STM32 NUCLEO executando o firmware Root e pelo menos uma ou mais KIT STM32 NUCLEO executando o firmware Node .

Programando a placa a partir do projeto de código-fonte CubeIDE

Baixe e instale o STM32CubeIDE .

Depois de instalado, abra-o e importe o projeto localizado na pasta embenet_demo_src .

Você deverá ver e navegar em um projeto chamado "embenet_node_demo".

STM32CubeIDE: explorador de projetos

Dentro do projeto haverá as seguintes pastas:

  • Core contém os arquivos no nível do aplicativo, incluindo main.c
  • Drivers contém arquivos de driver CMSIS e STM32 HAL
  • embenet_node_bsp contém pacote de suporte de placa para embeNET com algum código relacionado à placa
  • embenet_node_port contém a porta embeNET para o chip STM32WL
  • embenet_node_port_interface contém os arquivos de cabeçalho para a porta embeNET (interface da porta)
  • embenet_node contém a biblioteca portátil embeNET Node com cabeçalhos

O projeto possui duas configurações de build: Root e Node. Você pode alternar entre eles usando a opção de projeto "Build Configurations".

STM32CubeIDE: configurações de construção

Construindo e implantando aplicativo de demonstração embeNET no nó

Clique com o botão direito no nome do projeto e selecione "Build Configurations" -> "Set Active" -> "Node". Crie o aplicativo de demonstração usando a opção Build Project

STM32CubeIDE: Project Building

O aplicativo deve ser compilado sem erros. Conecte o KIT STM32 NUCLEO que deve funcionar como um nó. No menu Execute selecione a configuração embenet_node_demo para programar a placa. Se a configuração não estiver visível, marque-a como favorita no menu Organize Favorites...

STM32CubeIDE: atualizando a placa com firmware Node

Construindo e implantando o aplicativo de demonstração embeNET na raiz

Clique com o botão direito no nome do projeto e selecione "Build Configurations" -> "Set Active" -> "Root". Crie o aplicativo de demonstração usando a opção Build Project .

STM32CubeIDE: Project Building

O aplicativo deve ser compilado sem erros. Conecte o KIT STM32 NUCLEO que deve funcionar como raiz. No menu Execute selecione a configuração embenet_root_demo para programar a placa. Se a configuração não estiver visível, marque-a como favorita no menu Organize Favorites...

STM32CubeIDE: atualizando a placa com firmware Root

Iniciando a rede

Depois de programar as placas, você poderá ver a demonstração em ação.

Para iniciar a rede você precisa conectar a placa raiz do KIT STM32 NUCLEO ao PC. Deve ser registrado como uma porta COM. Em seguida vá até a pasta embenet_br e edite o arquivo config.json que contém a configuração do roteador de borda. O arquivo ficará semelhante a este:

{
"serial_port": "COMxx",
"interface_name": "embeNET",
"network": {
"k1": "0xc08b766277099e7d7e9c0222f168cc9e",
"panid": "0xe3be",
"prefix": "0xaaaabbbbccccdddd"
},
"join_rules": [
{
"uid": 0,
"psk": "0x46d7dc94e8ee7496ceaf54a3ab64cbeb"
}
]
}

O arquivo possui as seguintes entradas:

  • serial_port - define a interface COM para o nó raiz, no formato COMxx .
  • interface_name - define o nome da interface de rede que será criada dentro do SO para se comunicar com os nós da rede
  • panid - é o identificador de rede de 16 bits - deve ser exclusivo para cada raiz
  • k1 é uma chave de rede de 128 bits usada para autenticar a troca de informações na rede. Essa chave pode ser específica para a rede ou até mesmo para toda a organização.
  • prefixo - prefixo IPv6 de 64 bits da rede sem fio
  • join_rules - conjunto de regras de junção que definem quais nós podem ingressar na rede (veja abaixo)

‍Edite o arquivo para garantir que a entrada serial_port corresponda à porta COM registrada para a placa raiz.

Endereço IPv6 dos nós