esp8266使用arduino的PubSubClient库实现MQTT协议连接中移动onenet物联网平台,实现连接服务器,订阅/取消主题,发布消息到主题。
首先在onenet平台控制台选择多协议接入,然后添加产品,里面内容自己随便填吧,协议选择MQTT旧版协议,最后添加设备。
要加载用到的PubSubClient库,我是vscode+arduino
程序参考太极创客的
/**********************************************************************
程序名称/Program name : connect_mqtt_onenet
onenet平台的多协议接入地址是MQTT mqtt.heclouds.com 183.230.40.39 6002
程序目的/Purpose :
使用PubSubClient库和ESP8266连接中移动onenet的MQTT服务器。
订阅,取消订阅,发布消息
参考太极创客http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-tuttorial/mqtt-tutorial/
***********************************************************************/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Ticker.h>
// ESP8266连接wifi
void connectWifi();
void connectMQTTServer();
void callback(char *topic, byte *payload, unsigned int length);
void tickerCount();
void pubMQTTmsg();
// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char *ssid = "TP-LINKB";
const char *password = "9876";
//onenet平台的多协议接入地址是MQTT mqtt.heclouds.com 183.230.40.39 6002
//1.用IP地址测试OK
// const char* mqttServer = "183.230.40.39";
//2.用网址测试OK
// const char* mqttServer = "mqtt.heclouds.com";
//3.用IPAddress设置IP测试OK
IPAddress mqttServer(183, 230, 40, 39);
uint16_t mqttPort = 6002; //mqtt服务器端口号
const char *subTOPIC = "sub_topic_stm"; // 订阅信息主题
const char *pubTOPIC = "pub_topic_stm"; // 发布信息到该主题
/*下面为字符串转换为字符数组,效果等同于直接定义const char* publishTopic = *******
// 建立发布主题。主题名称以Taichi-Maker-为前缀,后面添加设备的MAC地址。
// 这么做是为确保不同用户进行MQTT信息发布时,ESP8266客户端名称各不相同,
String topicString = "Taichi-Maker-Pub-" + WiFi.macAddress();
char publishTopic[topicString.length() + 1];
strcpy(publishTopic, topicString.c_str());
*/
long lastMsg = 0; // 记录上一次发送信息的时长
static int value; // 客户端发布信息用数字