Índice:

Publicação de dados do sensor de pressão sem fio usando MQTT: 7 etapas
Publicação de dados do sensor de pressão sem fio usando MQTT: 7 etapas

Vídeo: Publicação de dados do sensor de pressão sem fio usando MQTT: 7 etapas

Vídeo: Publicação de dados do sensor de pressão sem fio usando MQTT: 7 etapas
Vídeo: Publicação e Assinatura Simultânea de Dados, usando MQTT, node-Red e a função Millis na Publicação. 2024, Novembro
Anonim
Publicação de dados do sensor de pressão sem fio usando MQTT
Publicação de dados do sensor de pressão sem fio usando MQTT

ESP32 e ESP 8266 são SoC muito familiares no campo da IoT. Isso é uma espécie de benção para os projetos de IoT. O ESP 32 é um dispositivo com WiFi e BLE integrados. Basta fornecer o seu SSID, senha e configurações de IP e integrar as coisas na nuvem. Aqui neste instrutível, refletiremos sobre alguns dos termos básicos da IoT, como plataforma IoT, MQTT, portais cativos etc.

  • A Arquitetura IoT em palavras muito simples consiste em um dispositivo integrado e uma plataforma IoT para colocar o dispositivo na nuvem. Aqui, estamos usando a plataforma UbiDots IoT para visualizar os dados do sensor.
  • Gerenciar as configurações de IP e as credenciais do usuário pode ser uma dor de cabeça para o usuário. E se o usuário quiser alterar as credenciais do WiFi? E se o usuário quiser mudar as configurações de DHCP / IP estático? Atualizar o ESP32 sempre não é confiável e nem mesmo a solução para esses problemas. Portanto, iremos através do portal cativo para salvar as credenciais WiFi e outras configurações.
  • MQTT agora está se tornando um termo muito comum no mundo da IoT. ele ultrapassou solicitações e respostas (HTTP) por Publicar e Assinar devido à arquitetura rápida, robusta e enxuta.

Aqui neste instrutível, iremos demonstrar.

  • Dando credenciais de WiFi e MQTT usando o Captive Portal.
  • Publicação e assinatura de dados de vários sensores para UbiDots.
  • Lendo os dados do sensor do sensor sem fio de pressão e temperatura
  • Hospedar um formulário da web do ESP32.
  • Leitura e gravação de SPIFFS ESP32.

Etapa 1: Especificação de Hardware e Software

Especificação de Hardware

  • ESP32 WiFi / BLE
  • Sensor de pressão e temperatura sem fio

Especificação de Software

  • IDE Arduino
  • XCTU
  • Utilitário Labview

Etapa 2: Sensores de temperatura e pressão sem fio

Sensores de pressão e temperatura sem fio
Sensores de pressão e temperatura sem fio
Sensores de pressão e temperatura sem fio
Sensores de pressão e temperatura sem fio
Sensores de pressão e temperatura sem fio
Sensores de pressão e temperatura sem fio

Recursos

  • Sensor de grau industrial Sensor de temperatura de pressão sem fio de longo alcance
  • Faixa de operação 0 a 14000 mbar -40 ° a + 85 ° C (-40 ° a 185 ° F)
  • Resolução de pressão de cálculo interno configurável 0,012 a 0,065 mbar
  • Resolução de temperatura de cálculo interno configurável 0,002 a 0,012 ° C
  • Precisão ± 2,5 mbar, ± 2 ° C
  • Saídas de pressão absoluta, pressão relativa e mudança de altitude relativa
  • Alcance de linha de visão de 2 milhas com antena a bordo
  • Alcance LOS superior de até 28 milhas com antenas de alto ganho
  • Interface para Raspberry Pi, Microsoft® Azure®, Arduino e mais
  • Rede de malha sem fio usando DigiMesh®

Configurando o sensor de pressão e temperatura sem fio usando o Labview Utility e o XCTU

O sensor funciona em dois modos

  • Modo de configuração: Configure o Pan ID, atraso, número de tentativas, etc. Mais sobre isso está além do escopo deste instrutível e será explicado no próximo instrutível.
  • Modo de execução: estamos executando o dispositivo no modo de execução. E para analisar esses valores, estamos usando o utilitário Labview

Esta IU do Labview mostra os valores em bons gráficos. Mostra os valores atuais e passados. Você pode acessar este link para baixar a IU do Labview. clique no ícone Executar no menu da página de destino para ir para o modo de execução.

Etapa 3: Conectando-se ao Wi-Fi

Conectando ao Wi-Fi
Conectando ao Wi-Fi
Conectando ao Wi-Fi
Conectando ao Wi-Fi

Estamos usando o portal cativo para salvar as credenciais de WiFi e passar o mouse pelas configurações de IP. Para obter uma introdução detalhada sobre o portal cativo, você pode seguir as instruções a seguir.

O portal cativo nos dá a opção de escolher entre configurações estáticas e DHCP. Basta inserir as credenciais como IP estático, máscara de sub-rede, gateway e o gateway do sensor sem fio será configurado nesse IP.

Uma página da web está sendo hospedada onde uma lista mostrando as redes WiFi disponíveis e RSSI. Selecione a rede WiFi e a senha e insira enviar. As credenciais serão salvas na EEPROM e a configuração de IP será salva no SPIFFS. Mais sobre isso pode ser encontrado neste instrutível.

Etapa 4: Configurando UbiDots no ESP32

Configurando UbiDots no ESP32
Configurando UbiDots no ESP32

Aqui, estamos usando sensores sem fio de pressão e temperatura com o dispositivo ESP 32 para obter os dados de temperatura e umidade. Estamos enviando os dados para UbiDots usando o protocolo MQTT. MQTT segue um mecanismo de publicação e assinatura em vez de solicitação e resposta. É mais rápido e confiável do que HTTP. Isso funciona da seguinte maneira.

  • Estamos fazendo uso do Agendador de Tarefas para Agendar a tarefa, como buscar dados de sensores, Publicar as leituras do sensor, Inscrever-se no tópico MQTT.
  • Primeiro, inclua os arquivos de cabeçalho do Agendador de Tarefas, sua instância e agende as tarefas.
  • Agendamos duas tarefas referentes a duas operações de controle diferentes.

#define _TASK_TIMEOUT # include Scheduler ts; // --------- Tarefas ------------ // Tarefa tSensor (4 * TASK_SECOND, TASK_FOREVER, & taskSensorCallback, & ts, false, NULL, & taskSensorDisable); Tarefa tWiFi (10 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);

  • A tarefa 1 é para ler o valor do sensor, esta tarefa é executada por 1 segundo até atingir o tempo limite de 10 segundos.
  • Quando a Tarefa1 atinge o seu tempo limite, estamos nos conectando ao Wifi local e ao corretor MQTT.
  • Agora a Tarefa 2 está ativada e estamos desativando a Tarefa 1
  • A tarefa 2 é para publicar os dados do sensor no broker MQTT UbiDots, esta tarefa é executada por 20 segundos até atingir o tempo limite de 20 segundos
  • Quando a Tarefa2 atinge seu tempo limite, a Tarefa 1 é habilitada novamente e a Tarefa2 é desabilitada. Novamente, estamos obtendo o valor atualizado e o processo continua.

Lendo os dados do sensor I2C

Estamos obtendo um quadro de 29 bytes dos sensores sem fio de temperatura e umidade. Este quadro é manipulado para obter os dados reais de temperatura e umidade

if (Serial1.available ())

{dados [0] = Serial1.read (); atraso (k); if (data [0] == 0x7E) {while (! Serial1.available ()); para (i = 1; i <36; i ++) {dados = Serial1.read (); atraso (1); } if (data [15] == 0x7F) /////// para verificar se os dados recive estão corretos {if (data [22] == 0x06) //////// certifique-se do tipo de sensor está correto {int cTemp = ((((dados [24]) * 256) + dados [25])); int16_t abs_pressure = ((((uint16_t) (dados [26]) << 8) | dados [27]) * 0,001); int rlt_pressure = ((((dados [28]) * 256) + dados [29]) * 0,001); int16_t delta_alt = ((((uint16_t) (dados [30]) << 8) | dados [31]) * 0,01); bateria flutuante = ((dados [18] * 256) + dados [19]); tensão flutuante = 0,00322 * bateria; Serial.print ("Número do sensor"); Serial.println (dados [16]); Serial.print ("Tipo de sensor"); Serial.println (dados [22]); Serial.print ("Versão do firmware"); Serial.println (dados [17]); Serial.print ("Temperatura em Celsius:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("Pressão absoluta:"); Serial.println (abs_pressure); Serial.print ("mbar"); Serial.print ("Pressão relativa:"); Serial.println (rlt_pressure); Serial.print ("mbar"); Serial.print ("Delta Altitude:"); Serial.println (delta_alt); Serial.print ("medidor"); Serial.print ("valor ADC:"); Serial.println (bateria); Serial.print ("Voltagem da bateria:"); Serial.print (voltagem); Serial.println ("\ n"); if (voltagem <1) {Serial.println ("Hora de substituir a bateria"); }}} else {for (i = 0; i <36; i ++) {Serial.print (data ); Serial.print (","); atraso (1); }}}}

Conectando-se à UbiDots MQTT API

Inclua o arquivo de cabeçalho para o processo MQTT

#incluir

definir outras variáveis para MQTT, como nome do cliente, endereço do corretor, o ID do token

#define TOKEN "BBFF - ************************************" // Your Ubidots TOKEN # define MQTT_CLIENT_NAME "******************************"

char mqttBroker = "things.ubidots.com";

carga útil char [100]; char tópico [150]; // crie uma variável para armazenar o toke de ID do token

Etapa 5: Publicação de leituras de sensor para UbiDots

Publicação de leituras de sensor para UbiDots
Publicação de leituras de sensor para UbiDots

Crie variáveis para armazenar diferentes dados do sensor e crie uma variável char para armazenar o tópico

#define VARIABLE_LABEL_TEMPF "tempF" // Atribuindo o rótulo da variável # define VARIABLE_LABEL_TEMPC "tempC" // Atribuindo o rótulo da variável #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "úmido" // Atribuindo o rótulo da variável

char topic1 [100];

char topic2 [100]; char topic3 [100];

publicar os dados no tópico MQTT mencionado, a carga útil será semelhante a {"tempc": {value: "tempData"}}

sprintf (tópico1, "% s", ""); sprintf (tópico1, "% s% s", "/v1.6/dispositivos/", DEVICE_LABEL); sprintf (carga útil, "% s", ""); // Limpa a carga útil sprintf (carga útil, "{"% s / ":", VARIABLE_LABEL_TEMPC); // Adiciona o valor sprintf (carga útil, "% s {" valor / ":% s}", carga útil, str_cTemp); // Adiciona o valor sprintf (payload, "% s}", payload); // Fecha os colchetes do dicionário Serial.println (carga útil); Serial.println (client.publish (tópico1, carga útil)? "Publicado": "não publicado"); // Faça o mesmo para outro tópico também

client.publish () publica os dados para UbiDots

Etapa 6: visualizando os dados

Visualizando os Dados
Visualizando os Dados
  • Vá para Ubidots e faça login em sua conta.
  • Navegue até o Painel a partir da guia Dados listada na parte superior.
  • Agora clique no ícone "+" para adicionar os novos widgets.
  • Selecione um widget da lista e adicione uma variável e dispositivos.
  • Os dados do sensor podem ser visualizados no painel usando diferentes widgets.

Etapa 7: Código geral

O código Over para HTML e ESP32 pode ser encontrado neste repositório GitHub.

Créditos

  • placa de breakout ncd ESP32.
  • Sensores de pressão e temperatura sem fio ncd
  • pubsubclient
  • UbiDots
  • Agendador de tarefas

Recomendado: