使用Ubidots的MQTT协议简介

第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附加到项目中的


5G的赋能会使得VR产业再次迎来春天吗
5G第一个演进标准R16(Release 16)冻结 R17标准已经在路上
物联网照亮LED照明新方向
配方功能在小型PLC中的应用
曝小米Mix将推出小屏版 尺寸变小了成为5.5英寸即将量产
使用Ubidots的MQTT协议简介
赛灵思的三大战略执行的怎么样?
基于雷达扫描检测车道线的四种方法
黑莓KEY2拍照实测 走忠实还原路线照片均未经过美颜处理
一种新型带无损缓冲双管串联单正激电路
你不知道的一些高速时域测量的实用技巧
自连全新AiKits-ASC401智能卡片,协力构建智慧安全系统
SD内存插槽及测试点
MiniLED设备生产过程面临哪些难题
DAC3484/DAC3482——16位DAC,将功耗锐降65%
工业机器人在未来的发展趋势如何
划片机:晶圆加工第二篇—关于晶圆氧化过程,这些变量会影响它的厚度
关于滤波器净化开关电源噪声的性能分析和介绍
电源滤波器设备超标的原因是什么
Netflix用户将在2020年期间总体超出预期,仍然面临挑战