2022-03-28 来源:华纳网 责任编辑:谷雨 人气:
核心提示:知识点:MQTT通信

知识点:

MQTT通信


 

本课内容:

大家好,欢迎来到谷雨课堂,

本节,我们使用ESP32连接MQTT服务器,

实现数据的双向收发,

以及订阅和发布消息,

 

MQTT是物联网领域常用的通信协议,

MQTT基于TCP协议,

非常轻量,

像单片机这样资源较少的系统,

也能轻易的使用,

 

本节我们使用的是PubSubClient这个库,

基本上手使用的话,代码不多,

不到100行,

 

其中,发布数据的核心代码是

  •  
client.publish("/guyu/test1","hello world");

订阅接收数据是

  •  
client.subscribe("/guyu/test1");

 

接收到数据,会通过设定的回调函数进行回调

  •  
client.setCallback(callback);

在回调函数里就可以直接对数据进行任意处理了

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
//收到信息回调void callback(char* topic, byte* payload, unsigned int length) {  Serial.print("MQTT Recv [");  Serial.print(topic);  Serial.print("] ");for (int i=0;i<length;i++) {    Serial.print((char)payload[i]);  }  Serial.println();}

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
/* *  【谷雨课堂】 云物联与人工智能 No.12 使用MQTT物联网协议 */
#include "WiFi.h"#include "const.h"#include <PubSubClient.h>

const char* id="worldwarner.com";   
//收到信息回调void callback(char* topic, byte* payload, unsigned int length) {  Serial.print("MQTT Recv [");  Serial.print(topic);  Serial.print("] ");for (int i=0;i<length;i++) {    Serial.print((char)payload[i]);  }  Serial.println();}
WiFiClient esp32Client;PubSubClient client(esp32Client);
void reconnect() {
  Serial.println("connectint mqtt server ...");while (!client.connected()) {
if (client.connect("guyu_client"))     {      Serial.println("连接MQTT服务器成功!");//publish(topic,payload)      client.publish("/guyu/test1","hello world");//订阅      client.subscribe("/guyu/test1");    }else    {      Serial.print("mqtt disconnect");      Serial.print(client.state());      Serial.println(" try again in 5 seconds");
      delay(5000);    }  }}
void setup(){
  client.setServer(server, 1883);  client.setCallback(callback);
//初始化串口  Serial.begin(115200);
  WiFi.begin(id,psw);while(WiFi.status()!=WL_CONNECTED){      //未连接上      delay(500);      Serial.println("正在连接...");  }  Serial.println(WiFi.localIP());  Serial.println("连接成功!");        //连接上

  delay(1500);}
void loop(){if (!client.connected()) {    reconnect();  }  client.loop();}

 

扩展阅读

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。

 

 

该协议的可用性取决于该协议的使用环境。IBM公司在2013年就向结构化资讯标准促进组织提交了 MQTT 3.1 版规范,并附有相关章程,以确保只能对规范进行少量更改。MQTT-SN是针对非 TCP/IP 网络上的嵌入式设备主要协议的变种,与此类似的还有ZigBee协议。

 

完整的源代码可以登录【华纳网】下载。

https://www.worldwarner.com/

 

 





免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。