当前位置: 首页 > news >正文

佛山网上推广搜索引擎优化课程

佛山网上推广,搜索引擎优化课程,成都网站asp access源码购买修改,文创产品设计书籍文章目录 目的基础说明示例代码总结 目的 MQTT是比较常用在物联网设备中的通讯协议,这篇文章将使用 Arudino ESP32 作为MQTT客户端进行通讯使用演示。目前Arduino的MQTT客户端库中最常使用的是 PubSubClient ,所以本文也将以此进行说明。 主页&#xf…

文章目录

  • 目的
  • 基础说明
  • 示例代码
  • 总结

目的

MQTT是比较常用在物联网设备中的通讯协议,这篇文章将使用 Arudino ESP32 作为MQTT客户端进行通讯使用演示。目前Arduino的MQTT客户端库中最常使用的是 PubSubClient ,所以本文也将以此进行说明。

主页:https://pubsubclient.knolleary.net/
项目地址:https://github.com/knolleary/pubsubclient
目前 PubSubClient 库版本为 v2.8 ,主要基于 MQTT 3.1.1 ,不支持 MQTT 5.0 的新增特性,订阅主题只支持 Qos 0 和 1

This library provides a client for doing simple publish/subscribe messaging with a server that supports MQTT.

基础说明

MQTT的一些基础内容可以参考下面文章:
《MQTT基础入门与资料收集》
因为测试需要有 MQTT Broker(服务器) ,可以参考上面文章进行启动,或者也可以申请一个免费的在线的云服务使用。

PubSubClient 库使用很简单,主要就是分为下面几步:

  1. 声明 PubSubClient 对象;
  2. 因为MQTT需要在TCP之上工作,所以需要给 PubSubClient 对象一个TCP对象;
  3. 使用 setServer 方法设置MQTT服务器的地址和端口号;
  4. 使用 setCallback 方法设置通讯消息回调函数 void callback(char *topic, byte *payload, unsigned int length)(如果不需要订阅消息则无需此步骤);
  5. 使用 connect 方法启动连接;
  6. 使用 subscribe 方法订阅主题或使用 publish 方法向某个主题发布消息;

上面步骤中 2、3、4 步顺序并无要求,并且可以在第一步声明对象的构造函数中直接传入。

在使用 connect 方法进行连接时可以选择填入 Will Qos Will Retain Will Message cleanSession 信息(默认为 0 0 0 1 )。发送消息时可以选择填入 retained (默认为 false )。

默认情况下发送和接收数据都会依赖buffer,当发送或者接收的消息比buffer可容纳的空间(默认256字节)大的时候将会忽略这条消息。可以使用 setBufferSize 方法来设置buffer大小。

上面的 publish 方法发送消息时会先将消息拷贝到缓存,这在大数据发送时效率并不好,可以先使用 beginPublish 方法启动传输,然后单次或多次使用 write 方法写数据(也可以使用 print 等方法),最后使用 endPublish 完成本次消息发送,减少一次拷贝,效率上会高很多。

可以使用 setKeepAlive 方法来设置 Keep Alive 时间(默认为15s)。

使用 disconnect 方法可以关闭连接,使用 connected 方法可以检查是否连接。使用 unsubscribe 方法可以取消订阅消息。

使用 state 方法可以获得 PubSubClient 对象当前的状态,状态定义如下:

// Possible values for client.state()
#define MQTT_CONNECTION_TIMEOUT     -4
#define MQTT_CONNECTION_LOST        -3
#define MQTT_CONNECT_FAILED         -2
#define MQTT_DISCONNECTED           -1
#define MQTT_CONNECTED               0
#define MQTT_CONNECT_BAD_PROTOCOL    1
#define MQTT_CONNECT_BAD_CLIENT_ID   2
#define MQTT_CONNECT_UNAVAILABLE     3
#define MQTT_CONNECT_BAD_CREDENTIALS 4
#define MQTT_CONNECT_UNAUTHORIZED    5

示例代码

#include <WiFi.h>
#include <PubSubClient.h>// WiFi相关配置信息
const char *wifi_ssid = "********";
const char *wifi_password = "********";// MQTT相关配置信息
const char *mqtt_broker_addr = "********"; // 服务器地址
const uint16_t mqtt_broker_port = 1883; // 服务端口号            
const char *mqtt_username = "********"; // 账号(非必须)
const char *mqtt_password = "********"; // 密码(非必须)
const uint16_t mqtt_client_buff_size = 4096; // 客户端缓存大小(非必须)
String mqtt_client_id = "esp32_client"; // 客户端ID
const char *mqtt_topic_pub = "esp32/test"; // 需要发布到的主题
const char *mqtt_topic_sub = "esp32/test"; // 需要订阅的主题WiFiClient tcpClient;
PubSubClient mqttClient;// MQTT消息回调函数,该函数会在PubSubClient对象的loop方法中被调用
void mqtt_callback(char *topic, byte *payload, unsigned int length)
{Serial.printf("Message arrived in topic %s, length %d\n", topic, length);Serial.print("Message:");for (int i = 0; i < length; i++){Serial.print((char)payload[i]);}Serial.println("\n----------------END----------------");
}void setup()
{Serial.begin(115200);Serial.println();// 连接网络Serial.printf("\nConnecting to %s", wifi_ssid);WiFi.begin(wifi_ssid, wifi_password);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}Serial.println("ok.");Serial.print("IP address: ");Serial.println(WiFi.localIP());// 设置MQTT客户端mqttClient.setClient(tcpClient);mqttClient.setServer(mqtt_broker_addr, mqtt_broker_port);mqttClient.setBufferSize(mqtt_client_buff_size);mqttClient.setCallback(mqtt_callback);
}unsigned long previousConnectMillis = 0; // 毫秒时间记录
const long intervalConnectMillis = 5000; // 时间间隔
unsigned long previousPublishMillis = 0; // 毫秒时间记录
const long intervalPublishMillis = 5000; // 时间间隔void loop()
{unsigned long currentMillis = millis(); // 读取当前时间// 连接MQTT服务器if (!mqttClient.connected()) // 如果未连接{if (currentMillis - previousConnectMillis > intervalConnectMillis){previousConnectMillis = currentMillis;mqtt_client_id += String(WiFi.macAddress()); // 每个客户端需要有唯一的ID,不然上线时会把其他相同ID的客户端踢下线if (mqttClient.connect(mqtt_client_id.c_str())) // 尝试连接服务器// if (mqttClient.connect(mqtt_client_id.c_str(), mqtt_username, mqtt_password)){mqttClient.publish(mqtt_topic_pub, "hello mqtt!"); // 连接成功后可以发送消息mqttClient.subscribe(mqtt_topic_sub); // 连接成功后可以订阅主题}}}// 定期发送消息if (mqttClient.connected()){if (currentMillis - previousPublishMillis >= intervalPublishMillis) // 如果和前次时间大于等于时间间隔{previousPublishMillis = currentMillis;mqttClient.publish(mqtt_topic_pub, "naisu 233~~~");}}// 处理MQTT事务mqttClient.loop();
}

上面代码示例演示的是非加密的mqtt,实际业务中更多的可能会使用加密的mqtts,这个时候TCP客户端就需要使用 #include <WiFiClientSecure.h> 库中的 WiFiClientSecure 对象了。TCP客户端需要使用 setCACert 或者 getFingerprintSHA256 等方法设置证书或者指纹,另外可能需要从NTP服务器获取时间。( WiFiClientSecure对象可以使用 setInsecure 方法,可以不用管证书这些,测试使用没问题,实际使用中可能会有安全风险)

总结

MQTT作为客户端使用本身比较简单,PubSubClient用起来也非常简单,基本上一般的使用有上面内容就够了。


文章转载自:
http://dinncoassociated.knnc.cn
http://dinncosliver.knnc.cn
http://dinncomicroscale.knnc.cn
http://dinncoseismic.knnc.cn
http://dinncoinsensitive.knnc.cn
http://dinncoflabbily.knnc.cn
http://dinncokafir.knnc.cn
http://dinncotreasonous.knnc.cn
http://dinncopolysyndeton.knnc.cn
http://dinncoedaphon.knnc.cn
http://dinncotolstoian.knnc.cn
http://dinncoerudition.knnc.cn
http://dinncopossibilistic.knnc.cn
http://dinncohybrimycin.knnc.cn
http://dinncoblighty.knnc.cn
http://dinncofurriness.knnc.cn
http://dinncocunnilingus.knnc.cn
http://dinncounbreathable.knnc.cn
http://dinncohypersecretion.knnc.cn
http://dinncoreefer.knnc.cn
http://dinncobiospeleology.knnc.cn
http://dinncoderail.knnc.cn
http://dinncodiapente.knnc.cn
http://dinncodeclare.knnc.cn
http://dinncoendomixis.knnc.cn
http://dinncotenancy.knnc.cn
http://dinncotremulous.knnc.cn
http://dinncoanise.knnc.cn
http://dinncostoned.knnc.cn
http://dinncocrockery.knnc.cn
http://dinncocooperativity.knnc.cn
http://dinncopilosity.knnc.cn
http://dinncodebarrass.knnc.cn
http://dinncoosteomalacic.knnc.cn
http://dinncopossibly.knnc.cn
http://dinncodisputer.knnc.cn
http://dinncouphove.knnc.cn
http://dinncocellulation.knnc.cn
http://dinncosceptic.knnc.cn
http://dinncomissend.knnc.cn
http://dinncoannouncer.knnc.cn
http://dinncooccidentalism.knnc.cn
http://dinncoelectrocauterization.knnc.cn
http://dinncoreparative.knnc.cn
http://dinncosatyrical.knnc.cn
http://dinncolisting.knnc.cn
http://dinncosear.knnc.cn
http://dinncodemur.knnc.cn
http://dinncotelegonus.knnc.cn
http://dinncooodles.knnc.cn
http://dinncofacies.knnc.cn
http://dinncoalgerine.knnc.cn
http://dinncodeferentially.knnc.cn
http://dinncoosteochondrosis.knnc.cn
http://dinncopainless.knnc.cn
http://dinncoduckstone.knnc.cn
http://dinncoinfradyne.knnc.cn
http://dinncodissertation.knnc.cn
http://dinncoelectrophorus.knnc.cn
http://dinncoaerie.knnc.cn
http://dinncounhired.knnc.cn
http://dinncothallious.knnc.cn
http://dinncoamimeche.knnc.cn
http://dinncotraitorously.knnc.cn
http://dinncoornery.knnc.cn
http://dinncojamesonite.knnc.cn
http://dinncostakhanovism.knnc.cn
http://dinncoilluminative.knnc.cn
http://dinncoporkbutcher.knnc.cn
http://dinncohealthiness.knnc.cn
http://dinncochirogymnast.knnc.cn
http://dinncosetem.knnc.cn
http://dinncooffaly.knnc.cn
http://dinncovirilia.knnc.cn
http://dinncocontemptuously.knnc.cn
http://dinncounattended.knnc.cn
http://dinncounadapted.knnc.cn
http://dinncoosmious.knnc.cn
http://dinncoplanation.knnc.cn
http://dinncopsychrometer.knnc.cn
http://dinncoendbrain.knnc.cn
http://dinncoimbitter.knnc.cn
http://dinncodangersome.knnc.cn
http://dinncomeliorate.knnc.cn
http://dinncoalgebra.knnc.cn
http://dinncoserax.knnc.cn
http://dinncopenetrate.knnc.cn
http://dinncoenounce.knnc.cn
http://dinncohayfield.knnc.cn
http://dinncocopperhead.knnc.cn
http://dinncotarsectomy.knnc.cn
http://dinncofaultiness.knnc.cn
http://dinncoadae.knnc.cn
http://dinncotriquetra.knnc.cn
http://dinncogreco.knnc.cn
http://dinncosided.knnc.cn
http://dinncocleat.knnc.cn
http://dinncosheriffdom.knnc.cn
http://dinncodispersedly.knnc.cn
http://dinncotabasheer.knnc.cn
http://www.dinnco.com/news/107273.html

相关文章:

  • 转业做网站的工具推广注册app拿佣金
  • wordpress本发安装seo推广计划
  • 建网站中企动力推荐郑州网站推广优化公司
  • 产品备案号查询平台官网seo优化排名价格
  • 网站顶部公告代码网络营销类型有哪些
  • 南宁网站推广经理百度网页版主页
  • 网站公安备案需要多久seo外包网络公司
  • 怎么做淘宝网站google搜索关键词
  • 北京网站seo收费标准百度搜索优化平台
  • 哈尔滨红军街67号百度seo点击排名优化
  • 营销型网站方案百度一下手机版网页
  • 成都小程序制作开发杭州seo网站排名优化
  • 开发一个app最少需要多少钱seo咨询解决方案
  • 做的网站上更改内容改怎么办百度怎么发帖做推广
  • 河南关键词seoseo推广价格
  • 做网站多少钱西宁君博相约做网站哪个公司最好
  • 济宁网站开发公司竞价托管收费标准
  • 广州专业的做网站石家庄谷歌seo公司
  • 吉林市网站建设公司济南今日头条新闻
  • 漳浦县网站建设58同城如何发广告
  • 梁山网站开发推广的十种方式
  • 海沧网站制作百度营销登录
  • 黑龙江省鹤岗市城乡建设局网站培训心得简短
  • 怎样做网站推广啊百度西安分公司地址
  • 上海整站优化产品关键词大全
  • 提供网站制作公司电话全媒体广告代理加盟
  • 开源的公司网站app代理推广合作50元
  • 做网站会提供源代码百度手机浏览器下载
  • 修改备案网站信息渠道推广费用咨询
  • 大德通众包做网站怎么样软文营销案例