我是靠谱客的博主 欢喜猫咪,最近开发中收集的这篇文章主要介绍设备接入ONENET(5)esp8266 订阅 onenet 主题(arduino)1. 简介2. 准备3. Arduino IDE要求4. 程序源码5. 如何使用,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
重要提示:由于OneNET版本迭代,导致鉴权方式可能变更,若程序无法连接,请参考官方手册或再OneNET论坛搜索相关内容
本文假设你有一定的编程基础,并且对MQTT和OneNET有一点了解。
1. 简介
esp8266 作为一款带 WiFI 收发硬件的 MCU,是可以直接与 OneNET平台连接的,好处就是节约了一颗MCU的成品,对于不熟悉 esp8266 的用户使用 SDK 的方式开发可能有一定困难,本文使用 arduino 的方式,示例了esp8266 如何订阅一个主题。
2. 准备
- Arduino IDE(软件) :Arduino IDE 是开发Arduino一个简易的IDE环境
- NodeMCU(硬件):NodeMCU 使用 ESP-12E 模组的一个最小系统板子,可以支持一键下载
- MQTT Simulate Device(软件) :这是一个可以模拟MQTT设备的软件,本文需要用该软件模拟一个设备,以便发送一个主题。
- OneNET云平台:你需要在OneNET云平台建立2个MQTT设备
3. Arduino IDE要求
- esp8266 开发板:开发esp8266,你需要在IDE中安装改开发板
- PubSubClient库:你需要通过Arduino IDE 安装该库,它支持用户创建一个 MQTT 客户端等操作
4. 程序源码
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
/*************************************** Config ********************************************************/
//WiFi 配置
const char* ssid = "TP-LINK_4252"; //WiFi账号:需要修改为所处环境的WiFi 账号
const char* password = "pp12345678"; //WiFi密码:秘密需要修改为所处环境的WiFi 密码
//OneNet MQTT 配置
const char* mqttServer = "183.230.40.39"; //目前 Onenet mqtt服务器 的 ip地址
const uint16_t mqttPort = 6002; //目前 Onenet mqtt服务器 的 端口号
//【以下三项更改时请注意保留双引号】
#define PRODUCT_ID "364161" //产品ID,需要更改为你自己创建的产品的 ID
#define API_KEY "7GMiWLTMtluwREq1x8SAC9bko0k=" //APIKEY,需要更改为你自己创建的产品的 APIKEY
#define DEVICE_ID "617424064" //APIKEY,需要更改为你自己创建的产品的 设备ID
/******************************************************************************************************/
#define ONENET_DISCONNECTED (1) //已经断开
#define ONENET_CONNECTED (2) //已经连接上
#define ONENET_RECONNECT (3) //重连成功
#define TOPIC "LED" //主题
int sta_mqtt_connect;
WiFiClient espClient; //创建一个 WiFi 客户端
PubSubClient mqttClient; //创建一个 mqtt 客户端
//Onenet MQTT 连接
int Onenet_MQTT_Connect(void){
int cnt = 0;
while(!mqttClient.connected()){
cnt++;
Serial.println("Connect to OneNet MQTT...");
/* 连接 Onenet 云平台*/
if (mqttClient.connect(DEVICE_ID,PRODUCT_ID,API_KEY)) {
Serial.println("rnconnect success!");
return ONENET_RECONNECT;
} else {
Serial.print("Connect Fail!");
Serial.println("Retry in 5 seconds");
delay(5000);
}
if(cnt >=10){
cnt = 0;
Serial.println("Connet Failed");
Serial.println("Please Check API_KEY and Device ID,Product ID");
while(1){
delay(1);
}
}
}
return ONENET_CONNECTED;
}
//MQTT 消息回调函数
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message Recive: topic[");
Serial.print(topic);
Serial.print("],value: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
if ((char)payload[0] == '1') {
digitalWrite(LED_BUILTIN, LOW);
}
else{
digitalWrite(LED_BUILTIN, HIGH);
}
}
void setup() {
//#0. 配置串口
Serial.begin (115200);
Serial.println("rnrnESP826(MQTT)Start: ");
delay(100);
//#1. 连接WIFI
WiFi.begin(ssid, password);
Serial.print("Wait for WiFi Connect");
while (WiFi.status() != WL_CONNECTED) {
static int wait_cnt = 0;
if(50 <= wait_cnt++){
Serial.println("rnConnect Fialed");
Serial.println("Please Check Your WiFi SSID and PWD or");
Serial.println("Reset the Device and Retry");
while(1)
{
Serial.print("*");
delay(5000);
}
}
delay(500);
Serial.print(".");
}
Serial.println(" ");
pinMode(LED_BUILTIN, OUTPUT);
//#2. 客户端设置MQTT服务器 & 回调函数
mqttClient.setServer(mqttServer,mqttPort);
mqttClient.setClient(espClient);
mqttClient.setCallback(callback);
}
void loop() {
//#3.连接 Onenet
sta_mqtt_connect = Onenet_MQTT_Connect();
if(sta_mqtt_connect == ONENET_RECONNECT){
mqttClient.subscribe(TOPIC,1); //订阅主题,消息质量 QOS = 1
mqttClient.loop();
}
else if(sta_mqtt_connect == ONENET_CONNECTED){
mqttClient.loop();
}
}
5. 如何使用
- 首先将程序源码需要更改的部分(具体参考程序注释,这些配置在 Config 区中),然后通过 Arduino IDE 编译后下载到 esp8266 中,此时观察通过串口监视器:
该调试信息表示设备已经成功接入 OneNET,此时再开发者平台中,可以看到设备在线:
- 使用 软件模拟另一个设备,以便发送信息:
3. 模拟设备发送一个主题消息:
4.点击Submit
发送:
最后
以上就是欢喜猫咪为你收集整理的设备接入ONENET(5)esp8266 订阅 onenet 主题(arduino)1. 简介2. 准备3. Arduino IDE要求4. 程序源码5. 如何使用的全部内容,希望文章能够帮你解决设备接入ONENET(5)esp8266 订阅 onenet 主题(arduino)1. 简介2. 准备3. Arduino IDE要求4. 程序源码5. 如何使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复