Pular para o conteúdo principal

Conectando ao Helium

Neste capítulo, veremos o uso básico da plataforma Helium e como retransmitir os dados do sensor pela plataforma Helium.

Atualizável para sensores industriais

Com o controlador S2110 SenseCAP e o registrador de dados S2100, você pode facilmente transformar o Grove em um sensor LoRaWAN®. A Seeed não só ajuda você na prototipagem, como também oferece a possibilidade de expandir seu projeto com a série SenseCAP de robustes industrial sensors.

A carcaça IP66, configuração via Bluetooth, compatibilidade com a rede global LoRaWAN®, bateria interna de 19 Ah e o forte suporte do APP fazem do SenseCAP S210x a melhor escolha para aplicações industriais. A série inclui sensores para umidade do solo, temperatura e umidade do ar, intensidade de luz, CO2, EC e uma estação meteorológica 8 em 1. Experimente o mais recente SenseCAP S210x no seu próximo projeto industrial bem-sucedido.

Sensor Industrial SenseCAP
S2100
Data Logger
S2101
Temp & Umidade do Ar
S2102
Luz
S2103
Temp & Umidade do Ar & CO2
S2104
Umidade & Temp do Solo
S2105
Umidade & Temp do Solo & EC
S2110
Controlador LoRaWAN®
S2120
Estação Meteorológica 8 em 1

Se você não tem nenhuma experiência com Helium, recomendamos que leia primeiro sobre o console Helium.

pir

Introdução ao Helium

Neste capítulo, apresentaremos os controles do console Helium que usamos para obter uma primeira impressão do console Helium.

Vamos começar >
nota

Antes de iniciar esta seção, certifique-se de que você tem cobertura Helium LoRaWAN® ao redor do seu ambiente de implantação, caso contrário você não conseguirá adicionar dispositivos ao Helium via LoRa®. Para mais detalhes, leia Helium LoRaWAN®.

Adicionando dispositivos Grove - Wio-E5 ao console Helium

Para retransmitir os dados do sensor para fora do Helium, o primeiro passo é adicionar o Grove - Wio-E5 ao console Helium para construir a conexão entre o dispositivo local e a plataforma Helium.

Para adicionar o Grove - Wio-E5, vá para Devices e clique no ícone + Add Device no canto superior direito da janela.

Conforme descrito acima para o dispositivo do console Helium, um trio de dados -- DevEUI, AppEUI e AppKey é gerado automaticamente neste ponto.

Começaremos preenchendo o nome do dispositivo, aqui vou chamá-lo de lora wio terminal.

nota

Baixe o ambiente necessário para Arduino e Wio Terminal em pre-approved content.

O Grove - Wio-E5 permite que os usuários definam seu próprio DevEUI, AppEUI e AppKey, portanto podemos preencher as informações do trio geradas pelo Helium acima nas colunas correspondentes.

Abra a IDE do Arduino e copie o seguinte código para a IDE do Arduino.

#include <Arduino.h>
#include "disk91_LoRaE5.h"

Disk91_LoRaE5 lorae5(&Serial); // Where the AT command and debut traces are printed

#define Frequency DSKLORAE5_ZONE_EU868
/*
Select your frequency band here.
DSKLORAE5_ZONE_EU868
DSKLORAE5_ZONE_US915
DSKLORAE5_ZONE_AS923_1
DSKLORAE5_ZONE_AS923_2
DSKLORAE5_ZONE_AS923_3
DSKLORAE5_ZONE_AS923_4
DSKLORAE5_ZONE_KR920
DSKLORAE5_ZONE_IN865
DSKLORAE5_ZONE_AU915
*/

char deveui[] = "2CF7FXXXXXX0A49F";
char appeui[] = "80000XXXXXX00009";
char appkey[] = "2B7E151628XXXXXXXXXX158809CF4F3C";

void setup() {

Serial.begin(9600);
uint32_t start = millis();
while ( !Serial && (millis() - start) < 1500 ); // Open the Serial Monitor to get started or wait for 1.5"

// init the library, search the LORAE5 over the different WIO port available
if ( ! lorae5.begin(DSKLORAE5_SEARCH_WIO) ) {
Serial.println("LoRa E5 Init Failed");
while(1);
}

// Setup the LoRaWan Credentials
if ( ! lorae5.setup(
Frequency, // LoRaWan Radio Zone EU868 here
deveui,
appeui,
appkey
) ){
Serial.println("LoRa E5 Setup Failed");
while(1);
}
}

void loop() {

}
nota

O código acima não tem restrições sobre a conexão do Grove - Wio-E5, ele irá procurar automaticamente a porta Grove à qual o Grove - Wio-E5 está conectado, mas o processo de busca pode levar um tempo (cerca de um minuto ou mais).

Selecione a banda LoRaWAN® que você deseja usar. Essa banda deve ser consistente com a banda do gateway que você está usando. As bandas de frequência disponíveis estão nos comentários do código abaixo. Nos tutoriais que usamos, o padrão é a banda EU868.

#define Frequency DSKLORAE5_ZONE_EU868
/*
Select your frequency band here.
DSKLORAE5_ZONE_EU868
DSKLORAE5_ZONE_US915
DSKLORAE5_ZONE_AS923_1
DSKLORAE5_ZONE_AS923_2
DSKLORAE5_ZONE_AS923_3
DSKLORAE5_ZONE_AS923_4
DSKLORAE5_ZONE_KR920
DSKLORAE5_ZONE_IN865
DSKLORAE5_ZONE_AU915
*/
dica

A banda EU868 é comumente usada na região Europeia.
A banda US915 é comumente usada na América do Norte.
A banda AU915 é comumente usada na região da Austrália.

Substitua o DevEUI, AppEUI e AppKey gerados pela Helium pelo código abaixo.

char deveui[] = "2CF7FXXXXXX0A49F";
char appeui[] = "80000XXXXXX00009";
char appkey[] = "2B7E151628XXXXXXXXXX158809CF4F3C";

Envie o código para o Wio Terminal e abra o monitor de porta serial da Arduino IDE, defina a taxa de baud para 9600 e observe a configuração.

Depois de se certificar de que as informações acima foram preenchidas, clique em Save Device abaixo para finalizar a adição do dispositivo.

Aguarde pacientemente a adição do dispositivo. (Isso levará cerca de 20 minutos.)

Escrever função de decodificador para diferentes sensores

Nas seções anteriores, instruímos você sobre como usar o Wio Terminal para ler os valores dos sensores individuais do kit. Para enviar os valores dos sensores para a Helium via Grove - Wio-E5, é necessário usar comandos AT para fazê-lo. Os dados enviados são recebidos pela Helium e precisam ser decodificados antes de se tornarem dados reais que possamos ler. Este é o motivo pelo qual escrevemos o decodificador.

Além disso, como o formato dos dados enviados não é uniforme, com sensores tendo dados inteiros, de ponto flutuante, positivos e negativos, etc., o código do decodificador necessário para cada sensor é diferente.

Tipo de sensorEndereço de download
Sensor de luz integrado do Wio TerminalDownload
Sensor IMU integrado do Wio TerminalDownload
Sensor de Umidade do SoloDownload
Sensor de Gás VOC e eCO2 (SGP30)Download
Sensor de Temperatura e Umidade (SHT40)Download
Módulo Vision AIDownload

Opção 1. Decodificador de dados do Sensor de Luz do Wio Terminal

Criamos um novo Custom Script e o nomeamos Light_data.

Na seção anterior Wio Terminal Light Sensor, usamos uma variável inteira light para armazenar o valor de luz lido pelo sensor de luz e enviamos esse valor usando a função send_sync(). Portanto, o objetivo do decodificador que escrevemos na Helium é conseguir analisar esses dados inteiros.

O código de configuração do seu decodificador é o seguinte. Cole o código a seguir na seção de código da Helium. Clique em Save Function para salvar este decodificador.

function Decoder(bytes, port) {

var decoded = {};
if (port == 8) {
decoded.light = bytes[0]<<8 | bytes[1];
}

return decoded;
}

Podemos inserir os dados do sensor de luz de 8 bits em SCRIPT VALIDATOR no lado direito para verificar se o decodificador está analisando corretamente.

Volte para Flows e conecte o dispositivo ao decodificador.

Opção 2. Decodificador de dados do Sensor IMU do Wio Terminal

Criamos um novo Custom Script e o nomeamos IMU_data.

Na seção anterior Wio Terminal IMU Sensor, usamos números de ponto flutuante x_values, y_values, z_values para armazenar os três eixos de dados retornados pela IMU, e multiplicamos esses três conjuntos de dados por 100 para convertê-los em inteiros e depois enviá-los juntos.

Em particular, é importante notar que esses dados podem ser tanto positivos quanto negativos, portanto também precisamos analisá-los e restaurá-los para um número de ponto flutuante.

O código de configuração do seu decodificador é o seguinte. Cole o código a seguir na seção de código da Helium. Clique em Save Function para salvar este decodificador.

function Decoder(bytes, port) {

var decoded = {};

function transformers(bytes){
value = bytes[0] * 256 + bytes[1];
if (value >= 32768) {
value = 32768 - value;
}
value = value/100.0;
return value;
}

if (port == 8) {
decoded.x = transformers(bytes.slice(0,2));
decoded.y = transformers(bytes.slice(2,4));
decoded.z = transformers(bytes.slice(4,6));
}

return decoded;
}

Podemos inserir os dados do sensor IMU de 48 bits em SCRIPT VALIDATOR no lado direito para verificar se o decodificador está analisando corretamente.

Volte para Flows e conecte o dispositivo ao decodificador.

Opção 3. Decodificador de dados do Sensor de Umidade do Solo Grove

Criamos um novo Custom Script e o nomeamos Soil_data.

Na seção anterior Grove Soil Moisture Sensor, usamos uma variável inteira sensorValue para armazenar o valor de umidade do solo lido pelo sensor de umidade do solo e enviamos esse valor usando a função send_sync(). Portanto, o objetivo do decodificador que escrevemos na Helium é conseguir analisar esses dados inteiros.

O código de configuração do seu decodificador é o seguinte. Cole o código a seguir na seção de código da Helium. Clique em Save Function para salvar este decodificador.

function Decoder(bytes, port) {

var decoded = {};
if (port == 8) {
decoded.soil = bytes[0]<<8 | bytes[1];
}

return decoded;
}

Podemos inserir os dados do sensor de umidade do solo de 8 bits em SCRIPT VALIDATOR no lado direito para verificar se o decodificador está analisando corretamente.

Volte para Flows e conecte o dispositivo ao decodificador.

Opção 4. Decodificador de dados do Sensor de Gás VOC e eCO2 Grove (SGP30)

Criamos um novo Custom Script e o nomeamos SGP30_data.

Na seção anterior Grove VOC and eCO2 Gas Sensor (SGP30), usamos as variáveis inteiras tvoc_ppb e co2_eq_ppm para armazenar os valores de VOC e eCO2.

O código de configuração do seu decodificador é o seguinte. Cole o código a seguir na seção de código da Helium. Clique em Save Function para salvar este decodificador.

function Decoder(bytes, port) {

var decoded = {};

function transformers(bytes){
value = bytes[0] * 256 + bytes[1];
return value;
}

if (port == 8) {
decoded.voc = transformers(bytes.slice(0,2));
decoded.eco2 = transformers(bytes.slice(2,4));
}

return decoded;
}

Podemos inserir os dados de 16 bits do SGP30 em SCRIPT VALIDATOR no lado direito para verificar se o decodificador está analisando corretamente.

Volte para Flows e conecte o dispositivo ao decodificador.

Opção 5. Decodificador de dados do Sensor de Temperatura e Umidade Grove (SHT40)

Criamos um novo Custom Script e o nomeamos SHT40_data.

Na seção anterior Grove Temp&Humi Sensor (SHT40), usamos as variáveis de ponto flutuante temperature e humidity para armazenar os valores de temperatura e umidade. E enviamos os dois valores depois de terem sido ampliados cem vezes e convertidos em inteiros.

O código de configuração do seu decodificador é o seguinte. Cole o código a seguir na seção de código da Helium. Clique em Save Function para salvar este decodificador.

function Decoder(bytes, port) {

var decoded = {};

function transformers(bytes){
value = bytes[0] * 256 + bytes[1];
if (value >= 32768) {
value = 32768 - value;
}
value = value/100.0;
return value;
}

if (port == 8) {
decoded.temp = transformers(bytes.slice(0, 2));
decoded.humi = transformers(bytes.slice(2, 4));
}

return decoded;
}

Podemos inserir os dados de 32 bits do SHT40 em SCRIPT VALIDATOR no lado direito para verificar se o decodificador analisa corretamente.

Volte para Flows e conecte o dispositivo ao decodificador.

Opção 6. Decodificador de dados do Grove Vision AI Module

Criamos um novo Custom Script e o nomeamos AI_Version_data.

Na seção anterior Grove Vision AI Module, usamos variáveis int model e confi para armazenar o tipo de modelo identificado e seu nível de confiança.

O código de configuração do decodificador é o seguinte. Cole o código a seguir na seção de código do Helium. Clique em Save Function para salvar este decodificador.

function Decoder(bytes, port) {

var decoded = {};

function transformers(bytes){
value = bytes[0] * 256 + bytes[1];
return value;
}

if (port == 8) {
decoded.model = transformers(bytes.slice(0,2));
decoded.confidence = transformers(bytes.slice(2,4));
}

return decoded;
}

Podemos inserir os dados de 16 bits do Vision AI em SCRIPT VALIDATOR no lado direito para verificar se o decodificador analisa corretamente.

Volte para Flows e conecte o dispositivo ao decodificador.

Enviar código para transmitir dados ao Helium

Nas diferentes páginas de sensores, fornecemos códigos detalhados para upload de dados. Você também pode encontrar o código do sensor que deseja usar na lista abaixo.

nota

Antes de usar o código fornecido nesta seção, observe que o Device EUI, App EUI e App Key no código são consistentes com as informações do dispositivo adicionadas no Helium. E verifique se a banda de frequência configurada para o Grove - Wio-E5 é a mesma que a banda do gateway em sua região ou no Helium. Caso contrário, isso pode resultar em falha de acesso à rede.

O código para definir a banda LoRaWAN® é o seguinte, e a configuração padrão é a banda EU868. (A banda EU868 é comumente usada na região europeia.) #define Frequency DSKLORAE5_ZONE_EU868 Banda US915 (A banda US915 é comumente usada na América do Norte.) #define Frequency DSKLORAE5_ZONE_US915 Banda AU915 (A banda AU915 é comumente usada na região da Austrália.) #define Frequency DSKLORAE5_ZONE_AU915

Tipo de SensorEndereço de Download
Sensor de luz integrado do Wio TerminalDownload
Sensor IMU integrado do Wio TerminalDownload
Sensor de Umidade do SoloDownload
Sensor de Gás VOC e eCO2 (SGP30)Download
Sensor de Temperatura e Umidade (SHT40)Download
Vision AI ModuleDownload

O código acima para envio de dados do sensor pode ser carregado diretamente para o Wio Terminal a partir da Arduino IDE e executado. Nesse momento, ligue o monitor serial e ajuste a taxa de transmissão para 9600 para observar a transmissão de dados em tempo real.

Para mais detalhes, volte à seção sobre o uso de sensores individuais no catálogo de referência.

Dados em tempo real e depuração

Depois que tivermos o dispositivo conectado, você pode começar a visualizar as transferências de dados nos pacotes em tempo real e no log de eventos.

nota

Na versão mais recente da atualização do Helium, o Helium não oferece mais 10.000 DATA CREDITS para novos usuários, apenas 250 DATA CREDITS. Você é livre para ajustar a frequência de envio de dados para reduzir o consumo de DC ou comprá-los conforme sua escolha.

Na aba My Devices, podemos clicar no botão de besouro no lado direito da tela para ver as informações sobre os dados recebidos pelo Helium.

Podemos prestar atenção especial às informações nas seguintes seções.

  • payload: Informações sobre os dados enviados ao Helium em formato base64.

  • port: O número da porta em que os dados foram recebidos.

nota

Em nosso código, o número da porta para envio de mensagens é definido como 8, então, na janela de depuração, todas as mensagens sobre o sensor devem ser payload para a porta 8. Para leitura e decodificação do payload, você pode fazê-lo com a ajuda deste site de decodificação.

Análise do Código-Fonte

Se você quiser aplicar o conteúdo deste tutorial ao desenvolvimento do seu próprio projeto, aprender a entender o significado do código é essencial. Aqui usaremos o código do sensor SHT40 como exemplo para explicar a lógica de implementação do código.

No início do programa, precisamos preparar as informações necessárias da tríade para conectar ao Helium e definir a frequência do Wio-E5.

#define Frequency DSKLORAE5_ZONE_EU868
/*
Select your frequency band here.
DSKLORAE5_ZONE_EU868
DSKLORAE5_ZONE_US915
DSKLORAE5_ZONE_AS923_1
DSKLORAE5_ZONE_AS923_2
DSKLORAE5_ZONE_AS923_3
DSKLORAE5_ZONE_AS923_4
DSKLORAE5_ZONE_KR920
DSKLORAE5_ZONE_IN865
DSKLORAE5_ZONE_AU915
*/

char deveui[] = "2CF7FXXXXXX0A49F";
char appeui[] = "80000XXXXXX00009";
char appkey[] = "2B7E151628XXXXXXXXXX158809CF4F3C";

Em seguida, é definida uma função data_decord(). Essa função converte os valores do sensor em quadros de dados que podem ser analisados pelo decodificador do Helium e também estejam em conformidade com o protocolo LoRaWAN®, e os armazena no array data[].

Em geral, para evitar estouro de dados, precisamos considerar os valores máximo e mínimo que o sensor pode ler. E dividir em números hexadecimais que não irão estourar.

void data_decord(int val_1, int val_2, uint8_t data[4])
{
int val[] = {val_1, val_2};

for(int i = 0, j = 0; i < 2; i++, j += 2)
{
if(val[i] < 0)
{
val[i] = ~val[i] + 1;
data[j] = val[i] >> 8 | 0x80;
data[j+1] = val[i] & 0xFF;
}
else
{
data[j] = val[i] >> 8 & 0xFF;
data[j+1] = val[i] & 0xFF;
}
}
}

Para o sensor SHT40, ele terá dois dados, um é o dado de temperatura e o outro é o dado de umidade, e existem valores positivos e negativos, então os números negativos precisam ser processados e também as casas decimais precisam ser tratadas.

int_temp = temperature*100;
int_humi = humidity*100;

A próxima etapa é a inicialização do SHT40 e a configuração inicial do Wio-E5. Tudo isso será executado na função setup().

lorae5.begin(DSKLORAE5_SWSERIAL_WIO_P2)

No código de inicialização, DSKLORAE5_SWSERIAL_WIO_P2 representa a interface Grove no lado direito do Wio Terminal, enquanto DSKLORAE5_SWSERIAL_WIO_P1 representa a interface Grove no lado esquerdo. Para outros projetos sem sensores externos, você também pode usar DSKLORAE5_SEARCH_WIO, que irá procurar automaticamente a interface Grove à qual seu Wio-E5 está conectado.

lorae5.send_sync(              //Sending the sensor values out
8, // LoRaWan Port
data, // data array
sizeof(data), // size of the data
false, // we are not expecting a ack
7, // Spread Factor
14 // Tx Power in dBm
)

O papel importante da função send_sync() é enviar os valores do sensor pela LoRaWAN®. O primeiro parâmetro indica o número do canal para enviar os dados, o segundo parâmetro indica o conteúdo dos dados enviados e o terceiro parâmetro indica o comprimento dos dados enviados. Em geral, só precisamos nos concentrar no conteúdo dos três primeiros parâmetros.

delay(15000);

O atraso no final do programa determina com que frequência você deseja enviar dados. Não recomendamos o envio em um intervalo inferior a 10 segundos, pois o envio com uma frequência tão alta pode fazer com que o Wio-E5 funcione de forma anormal e pode ser reconhecido pelo Helium como um dispositivo anormal e bloqueado devido à alta frequência.

Para saber mais sobre o código e os recursos do Grove - Wio-E5, consulte o link do repositório no GitHub. Um agradecimento especial a Paul Pinault (disk91) por escrever a biblioteca para o Grove - Wio-E5.

A seção acima é um guia passo a passo sobre como usar o dispositivo para se conectar ao Helium e receber dados. No entanto, do ponto de vista prático, os dados atualmente enviados ao Helium não são legíveis para humanos. Se você tiver uma necessidade de visualização de dados, pode então consultar as etapas a seguir para concluir o tutorial sobre como integrar o Helium aos hubs Microsoft Azure IoT, que o levará por todo o processo de exibição dos dados de forma gráfica.

pir

Integração do Helium no Azure IoT Hub

Esta seção descreve como configurar o Microsoft Azure e integrá-lo ao Helium para enviar dados para a plataforma Microsoft Azure.

Vamos começar >

Além disso, você pode escolher mais plataformas de acordo com suas necessidades.

Seção de Plataformas em Nuvem

pir

Integração do Helium ao Google Sheets

Esta seção apresenta o uso de Google Forms na integração com Helium e o uso de Google Forms para armazenar dados de sensores.

Ir para o capítulo >

pir

Integração do Helium ao AWS IOT Core

Esta seção descreve como visualizar as informações de dados recebidas pelo Microsoft Azure usando a integração Web APP gratuita.

Ir para o capítulo >

Suporte Técnico & Discussão de Produtos

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes formas de suporte para garantir que sua experiência com nossos produtos seja o mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Declaração

  • A marca LoRa® é uma marca registrada da Semtech Corporation ou de suas subsidiárias.
  • LoRaWAN® é uma marca usada sob licença da LoRa Alliance®.
Loading Comments...