0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Ubidots的MQTT协议简介

454398 来源:网络整理 作者:网络整理 2019-12-13 09:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

第1步:演示

第2步:使用的资源

ESP32 LoRa Display

•DHT22

•4k7欧姆电阻

•帐户(试用30天或已付款)

•Proboardboard

步骤3:MQTT协议

发布和订阅

步骤4:Ubidots IoT平台

要解决的问题

•创建一个新帐户

•创建新的仪表板

•创建ESP32-DHT设备

•获得MQTT数据-设备ID和主题

•获得MQTT数据-令牌

•在Ubidots中创建变量

•创建湿度和温度小部件

步骤5:创建新帐户

要创建帐户,请访问www.ubidots.com并单击在注册后

A。公司名称

B。项目阶段:

B-我们选择了发现阶段,表明它是一个测试项目。

C。创建应用程序

D。您的姓名

您的电子邮件

创建个人资料

E。登录

密码

开始免费试用

步骤6:创建新仪表板

一个。单击创建一个新的仪表板

B。输入仪表板的名称,然后单击

步骤7:创建ESP32-DHT设备

A。单击设备管理和设备

B。单击创建设备或+

C。将打开一个选项卡,列出help.ubidots站点上的教程,以根据各自的制造商对微控制器进行配置和编程。我们将创建一个空白设备。

D。填写字段

1。设备名称

2。标签(它将是MQTT客户端使用的主题的一部分)

3。创建

电子。创建设备后,它将在设备页面上列出,如图所示

1。设备名称

2。上次更新

3。设备创建日期/时间

4。与设备有关的组织

5。添加组织并删除设备

步骤8:获取MQTT数据-设备ID和主题

一个。选择设备

B。设备ID值和主题是根据图像写入的。

使用的端口为1883。

C。根据图像3.1和3.2获得令牌。

步骤9:创建变量

要创建引用设备中变量的窗口小部件,必须已经在设备上创建了它。

注意:变量是在Json上传后由Ubidots自动创建的,但为此,必须至少连接一次ESP32。要引用小部件而不必连接ESP,我们必须遵循以下步骤。

A。在设备中,选择设备

B。单击“添加变量”,然后单击“原始”。

注意:定义相同的源代码标签(在MQTT_Client.h文件中)

C。输入标签(VARIABLE_LABEL_TEMPERATURE)

D。重复湿度变量的步骤

(VARIABLE_LABEL_HUMIDITY)

步骤10:创建小部件

一个。转到仪表板页面

B。单击按钮之一

步骤11:创建小部件-温度

A。选择温度计选项

B。点击添加变量

C。请按照以下步骤选择温度变量

D。单击“确认”

步骤12:创建窗口小部件-湿度

A。添加另一个小部件

B。选择“坦克”选项

C。点击添加变量

D。选择ESP32-DHT,单击湿度,然后确认

E。最后,点击确认

F。湿度小部件将显示在温度G以下。

G。您可以通过拖动窗口来安排

步骤13:汇编

声明和变量

#include

#include //Biblioteca referente ao DHT22

#include “displayESP32LoRa.h” //Arquivo com as funções referentes ao display lora

#include “MQTT_Client.h” //Arquivo com as funções de mqtt

float temperature; //Temperatura que será obtida pelo sensor DHT

float humidity; //Umidade que será obtida pelo sensor DHT

const int pinDHT = 22; //Pino que é ligado no sensor DHT

SimpleDHT22 dht22(pinDHT); //Objeto que possui os métodos de leitura dos valores do sensor DHT

设置

void setup()

{

//Para debug, iniciamos a comunicação serial com 115200 bps

Serial.begin(115200);

//Inicializa display lora

if(!loraDisplayConfig())

ESP.restart();

//Exibe mensagem no display

showDisplay(0, “Setting up mqtt.。.”, true);

Serial.println(“Setting up mqtt.。.”);

//Inicializa mqtt (conecta o esp com o wifi, configura e conecta com o servidor da ubidots)

if(!mqttInit())

{

delay(3000);

showDisplay(0, “Failed!”, false);

Serial.println(“Failed!”);

ESP.restart();

}

showDisplay(0, “OK”, false);

Serial.println(“OK”);

}

循环

void loop()

{

//Se o esp foi desconectado do ubidots, tentamos reconectar

if(!client.connected())

reconnect();

//Lê a temperatura e umidade e exibimos no display passando uma flag (que sinaliza sucesso na leitura)

if(getClimate())

showClimate(true);

else

showClimate(false);

//Esperamos 2.5s antes de exibir o status do envio para dar efeito de pisca no display

delay(2500);

if(sendValues(temperature, humidity))

{

Serial.println(“Successfully sent data”);

showDisplay(4,“Successfully sent data”, false);

}

else

{

Serial.println(“Failed to send sensor data”);

showDisplay(4,“Failed to send sensor data”, false);

}

//Esperamos 2.5s para dar tempo de ler as mensagens acima

delay(2500);

}

循环-从DHT22读取值

//Obtém temperatura e umidade do sensor

bool getClimate()

{

int err = SimpleDHTErrSuccess;

//Passamos as variáveis ‘temperature’ e ‘humidity’ por parâmetro na função chamada ‘read2’, elas serão retornadas por referência

//Se não for retornado o código de SimpleDHTErrSuccess (sucesso), exibimos o valor de erro obtido

if ((err = dht22.read2(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess)

{

Serial.print(“Read DHT22 failed, err=”);

Serial.println(err);

//Zera valores

temperature = humidity = 0;

return false;

}

return true;

}

循环-在显示屏上显示值

//Essa função exibe os valores com suas respectivas unidades de medida para caso a flag ‘success’ seja true

//Caso a flag ‘success’ seja false, exibimos apenas um traço ‘-’

void showClimate(bool success)

{

if(success)

{

showDisplay(0, “Temperature: ”+String(temperature)+“ °C”, true);

showDisplay(1, “Humidity: ”+String(humidity)+“ %”, false);

Serial.println(“Temperature: ”+String(temperature)+“ °C”);

Serial.println(“Humidity: ”+String(humidity)+“ %”);

}

else

{

showDisplay(0, “Temperature: -”, true);

showDisplay(1, “Humidity: -”, false);

Serial.println(“Temperature: -”);

Serial.println(“Humidity: -”);

}

}

MQTT_Client-声明和变量

#include

#include //Biblioteca para as publicações via mqtt

#include “displayESP32LoRa.h” //Arquivo com as funções referentes ao display lora

#define WIFISSID “MEU_SSID” //Coloque seu SSID de WiFi aqui

#define PASSWORD “MEU_PASSWORD” //Coloque seu password de WiFi aqui

#define TOKEN “xxxxxx” //Coloque seu TOKEN do Ubidots aqui

#define VARIABLE_LABEL_TEMPERATURE “temperature” //Label referente a variável de temperatura criada no ubidots

#define VARIABLE_LABEL_HUMIDITY “humidity” //Label referente a variável de umidade criada no ubidots

#define DEVICE_ID “xxxxxx” //ID do dispositivo (Device id, também chamado de client name)

#define SERVER “things.ubidots.com” //Servidor do Ubidots (broker)

//Porta padrão

#define PORT 1883

//Tópico aonde serão feitos os publish, “esp32-dht” é o DEVICE_LABEL

#define TOPIC “/v1.6/devices/esp32-dht”

//Objeto WiFiClient usado para a conexão wifi

WiFiClient ubidots;

//Objeto PubSubClient usado para publish–subscribe

PubSubClient client(ubidots);

MQTT_Client-引导

bool mqttInit()

{

//Inicia WiFi com o SSID e a senha

WiFi.begin(WIFISSID, PASSWORD);

//Loop até que o WiFi esteja conectado

while (WiFi.status() != WL_CONNECTED)

{

delay(1000);

Serial.println(“Establishing connection to WiFi.。”);

}

//Exibe no monitor serial

Serial.println(“Connected to network”);

//Seta servidor com o broker e a porta

client.setServer(SERVER, PORT);

//Conecta no ubidots com o Device id e o token, o password é informado como vazio

while(!client.connect(DEVICE_ID, TOKEN, “”))

{

Serial.println(“MQTT - Connect error”);

return false;

}

Serial.println(“MQTT - Connect ok”);

return true;

}

MQTT_Client-重新连接

void reconnect()

{

//Loop até que o MQTT esteja conectado

while (!client.connected())

{

//sinaliza desconexão do mqtt no display

showDisplay(0,“Disconnected”, true);

showDisplay(1, “Trying to reconnect mqtt.。.”, false);

Serial.println(“Attempting MQTT connection.。.”);

//Tenta conectar

if (client.connect(DEVICE_ID, TOKEN,“”))

Serial.println(“connected”);

else

{

Serial.print(“failed, rc=”);

Serial.print(client.state());

Serial.println(“ try again in 2 seconds”);

//Aguarda 2 segundos antes de retomar

delay(2000);

}

}

//Sinaliza reconexão do mqtt no display

showDisplay(4,“Reconnected”, false);

}

MQTT_Client-提交(发布)

//Envia valores por mqtt

//Exemplo: {“temperature”:{“value”:24.50, “context”:{“temperature”:24.50, “humidity”:57.20}}}

bool sendValues(float temperature, float humidity)

{

char json[250];

//Atribui para a cadeia de caracteres “json” os valores referentes a temperatura e os envia para a variável do ubidots correspondente

sprintf(json, “{”%s“:{”value“:%02.02f, ”context“:{”temperature“:%02.02f, ”humidity“:%02.02f}}}”, VARIABLE_LABEL_TEMPERATURE, temperature, temperature, humidity);

if(!client.publish(TOPIC, json))

return false;

//Atribui para a cadeia de caracteres “json” os valores referentes a umidade e os envia para a variável do ubidots correspondente

sprintf(json, “{”%s“:{”value“:%02.02f, ”context“:{”temperature“:%02.02f, ”humidity“:%02.02f}}}”, VARIABLE_LABEL_HUMIDITY, humidity, temperature, humidity);

if(!client.publish(TOPIC, json))

return false;

//Se tudo der certo retorna true

return true;

}

步骤14:ESP32代码

Json

(图像)

显示LoRa

#ifndef _DISPLAY_LORA_

#define _DISPLAY_LORA_

#include “SSD1306.h”

//Define os pinos que serão utilizados pelo display LoRa

#define SCK 5 // GPIO5 -- SX127x‘s SCK

#define MISO 19 // GPIO19 -- SX127x’s MISO

#define MOSI 27 // GPIO27 -- SX127x‘s MOSI

#define SS 18 // GPIO18 -- SX127x’s CS

#define RST 14 // GPIO14 -- SX127x‘s RESET

#define DI00 26 // GPIO26 -- SX127x’s IRQ(Interrupt Request)

SSD1306 display(0x3c, 4, 15); //Construtor do objeto do display LoRa

显示LoRa-loraDisplayConfig

//Configura Display LoRa

bool loraDisplayConfig()

{

//Configura RST do oled como saida

pinMode(16,OUTPUT);

//Reseta o OLED

digitalWrite(16, LOW);

//Aguarda 50ms

delay(50);

//Enquanto o OLED estiver ligado, GPIO16 deve estar HIGH

digitalWrite(16, HIGH);

//Inicializa display

if(!display.init())

return false;

//Inverte a tela verticalmente (de ponta cabeça)

display.flipScreenVertically();

//Configura a fonte do display

display.setFont(ArialMT_Plain_10);

//Aguarda 200ms

delay(200);

//Limpa display

display.clear();

return true;

}

#endif

Display LoRa-showDisplay

//Exibe mensagem recebida como parâmetro

void showDisplay(int line, String msg, bool clear)

{

//Limpa o display

if(clear)

{

display.clear();

//Configura alinhamento de texto à esquerda

display.setTextAlignment(TEXT_ALIGN_LEFT);

//Configura fonte do texto

display.setFont(ArialMT_Plain_10);

}

//Escreve na pos 0,25 a mensagem

display.drawString(0 , line*10 , msg);

//Exibe no display

display.display();

}

步骤15:安装库

SimpleDHT

https://github.com/winlinvip/SimpleDHT

Pubsubclient

https://github.com/knolleary/pubsubclient

*显示LoRa附加到项目中的

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MQTT
    +关注

    关注

    5

    文章

    721

    浏览量

    24787
  • Ubidots
    +关注

    关注

    0

    文章

    10

    浏览量

    4025
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    工业智能网关可以通过MQTT协议对接到哪些平台

    工业智能网关通过MQTT协议可对接的平台范围广泛,涵盖主流公有云、私有云及第三方云平台,具体可分为以下四类: 一、主流公有云平台 阿里云物联网平台 支持MQTT协议直接接入,提供设备管
    的头像 发表于 09-29 11:29 374次阅读

    MQTT_协议中文资料

    电子发烧友网站提供《MQTT_协议中文资料.pdf》资料免费下载
    发表于 09-02 16:19 0次下载

    物联网MQTT网关是什么

    物联网MQTT网关是一种采用MQTT物联网协议的智能设备或软件组件,其核心功能是连接不同通信协议的物联网设备与消息代理服务器,实现设备间的数据交换与集中管理,同时支持边缘计算、安全防护
    的头像 发表于 08-29 15:24 656次阅读

    通过MQTT协议能接入工业物联网云平台中吗

    通过MQTT协议完全可以接入工业物联网云平台,且因其轻量、高效、可靠等特性,已成为工业物联网场景中的主流通信协议之一。
    的头像 发表于 08-26 18:03 643次阅读

    GraniStudio :MQTT 协议的深度剖析

    在工业物联网(IIoT)的通信协议体系中,MQTT(Message Queuing Telemetry Transport)凭借其轻量级、发布 - 订阅模式和低带宽占用等特性,成为连接边缘设备与云端
    的头像 发表于 08-04 09:48 811次阅读
    GraniStudio :<b class='flag-5'>MQTT</b> <b class='flag-5'>协议</b>的深度剖析

    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—MQTT通信协议案例

    Demomqtt-demos”目录下。 MQTT通信协议简介 概述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输
    的头像 发表于 07-31 14:34 577次阅读
    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—<b class='flag-5'>MQTT</b>通信<b class='flag-5'>协议</b>案例

    MQTT介绍

    的消息传输协议,近年来被广泛应用于智能家居、工业控制、车联网等场景。 MQTT 是一种基于发布/订阅(Pub/Sub)模式的轻量级消息协议,设计初衷是为低带宽、不稳定网络环境下的设备通信而生。它更像是广播电台:你订阅频道,谁在频
    的头像 发表于 07-14 09:34 3505次阅读
    <b class='flag-5'>MQTT</b>介绍

    简析Modbus和MQTT协议

    Modbus和MQTT协议在设计目标、通信模式、应用场景、网络结构、数据传输效率、设备兼容性及安全性等方面存在显著差异,具体分析如下: 一、设计目标与定位 Modbus :诞生于1979年,由施耐德
    的头像 发表于 07-10 14:25 495次阅读

    MQTT为何成为物联网协议

    MQTT(Message Queuing Telemetry Transport)即消息队列遥测传输协议,已成为物联网领域广泛应用的协议,这主要得益于其在资源占用、通信效率、可靠性、扩展性等多方面
    的头像 发表于 05-20 09:54 606次阅读

    KaihongOS操作系统:MQTT物联网通讯协议

    @ohos.net.khMqtt (MQTT物联网通讯协议) 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 目前支持3.1.1
    发表于 05-08 07:51

    《DNESP32S3使用指南-IDF版_V1.6》第五十五章 基于MQTT协议连接阿里云服务器

    实现的,所以我们只需要在单片机端实现 TCP 客户端程序并使用 lwIP提供的MQTT文件来连接阿里云服务器。本章分为如下几个部分:55.1 MQTT协议简介55.2 硬件设计55.3
    发表于 03-18 09:22

    MQTT物联网平台有哪些?有哪些功能?

    MQTT(Message Queuing Telemetry Transport)是一种基于客户端-服务器架构的发布/订阅模式的消息传输协议,它广泛应用于机器与机器的通信(M2M)以及物联网环境
    的头像 发表于 03-15 14:23 1222次阅读
    <b class='flag-5'>MQTT</b>物联网平台有哪些?有哪些功能?

    基于MQTT协议的车云通信设计

    随着智能汽车的发展,车云通信的功能场景及数据量也逐渐增多,具有轻量化、可靠性等特点的MQTT协议成为很多OEM车云通信协议的选择。本文主要介绍。 什么是MQTT
    的头像 发表于 01-08 10:24 1721次阅读
    基于<b class='flag-5'>MQTT</b><b class='flag-5'>协议</b>的车云通信设计

    百问MQTT协议分析 - 报文分析①

    5 4 3 2 1 0 Byte1 Mqtt报文类型(1) Reserved(保留位) 0 0 0 1 0 0 0 0 Byte2~n 剩余长度 表格3.1 16.3.1.2 协议
    发表于 12-13 09:41

    百问MQTT协议分析 - MQTT简述及协议报文格式组成

    16.1 mqtt协议介绍 16.1.1 概述 ​MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景
    发表于 12-13 09:29