我是靠谱客的博主 眼睛大板栗,最近开发中收集的这篇文章主要介绍Esp8266(NodeMCU)连接阿里云服务器创建阿里云产品添加设备Esp8266代码MQTT_PASSWD密码生成工具修改PubSubClient.h文件(不修改无法连接Mqtt服务器)设备测试,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Esp8266【NodeMCU】连接阿里云服务器

  • 创建阿里云产品
  • 添加设备
  • Esp8266代码
  • MQTT_PASSWD密码生成工具
  • 修改PubSubClient.h文件(不修改无法连接Mqtt服务器)
  • 设备测试

  使用EsP8266(NodeMCU)连接阿里云服务器,并在服务器控制台点亮板载LED灯,进行数据上传和下传的测试。关于Esp8266引脚介绍 https://blog.csdn.net/weixin_45488643/article/details/105974842自行查看。

创建阿里云产品

在这里插入图片描述
功能定义:
  先选择编辑草稿,才可以看到最下面的布尔值那个。
在这里插入图片描述

添加设备

在这里插入图片描述

Esp8266代码

  需要使用的库文件ESP8266WiFi、PubSubClient、ArduinoJson可以直接在Arduino 编译器里面下载。

#include <ESP8266WiFi.h>
/* 依赖 PubSubClient 2.4.0 */
#include <PubSubClient.h>
/* 依赖 ArduinoJson 5.13.4 */
#include <ArduinoJson.h>
#define SENSOR_PIN
LED_BUILTIN
//定义的板载LED灯
/* 修改1 ------------------------------------------ */
/* 连接您的WIFI SSID和密码 */
#define WIFI_SSID
"tsy_B5AC58"
//自己wifi名称
#define WIFI_PASSWD
"19980208"
//自己wifi密码
/* 修改1 end--------------------------------------- */
/* 修改2 ------------------------------------------ */
/* 设备证书信息*/
#define PRODUCT_KEY
"aXXXXXXXXX" //在自己阿里云里面查看
#define DEVICE_NAME
"Light"
//创建设备名称,修改成自己的
#define DEVICE_SECRET
"snXXXXXXXXXXXXXXXXXXXXXXXwhc" //ProductSecret 修改成自己的
#define REGION_ID
"cn-shanghai"
//如果使用的是华东2(上海)服务器,不需要修改
/* 修改2 end--------------------------------------- */
/* 线上环境域名和端口号,不需要改 */
#define MQTT_SERVER
PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com"
#define MQTT_PORT
1883
#define MQTT_USRNAME
DEVICE_NAME "&" PRODUCT_KEY
/* 修改3 ------------------------------------------ */
#define CLIENT_ID
"esp8266|securemode=3,signmethod=hmacsha1,timestamp=1234567890|"//可以不用修改使用,也可以修改成自己想要的
// 请使用以上说明中的加密工具或参见MQTT-TCP连接通信文档加密生成password。
// 加密明文是参数和对应的值(clientIdesp8266deviceName${deviceName}productKey${productKey}timestamp1234567890)按字典顺序拼接
// 密钥是设备的DeviceSecret
#define MQTT_PASSWD
"7A23C1CXXXXXXXXXXXXXXXXXXXXXXXXXXDCEDD54"
//修改成自己的,生成方式后面简介。
/* 修改3 end--------------------------------------- */
#define ALINK_BODY_FORMAT
"{"id":"QingYeMuRong","version":"1.0","method":"thing.event.property.post","params":%s}"
#define ALINK_TOPIC_PROP_POST
"/sys/" PRODUCT_KEY "/" DEVICE_NAME "/user/update/"
unsigned long lastMs = 0;
WiFiClient espClient;
PubSubClient
client(espClient);
void callback(char *topic, byte *payload, unsigned int length)
//接收数据
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
payload[length] = '';
Serial.println((char *)payload);
//直接使用函数,对收到的服务器数据解析 ,这部分函数使用可以见我上一篇博客。
DynamicJsonDocument doc(1024);
deserializeJson(doc,(char *)payload);
JsonObject obj = doc.as<JsonObject>();
String sensor = obj["params"];
digitalWrite(LED_BUILTIN, LOW);
Serial.println("Motion absent!");
Serial.println("Qingyemurong");//测试代码
Serial.println(sensor);
//DynamicJsonDocument doc(1024);
deserializeJson(doc,sensor);
String LightSwitch = obj["LightSwitch"];
Serial.println("Qingyemurong");//测试代码
Serial.println(LightSwitch);
if(LightSwitch=="1")
//根据收到的值,控制LED灯
{
digitalWrite(LED_BUILTIN, LOW);
}
if(LightSwitch=="0")
{
digitalWrite(LED_BUILTIN, HIGH);
}
}
void wifiInit()
{
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWD);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("WiFi not Connect");
}
Serial.println("Connected to AP");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("espClient [");
client.setServer(MQTT_SERVER, MQTT_PORT);
/* 连接WiFi之后,连接MQTT服务器 */
client.setCallback(callback);//接收数据
}
void mqttCheckConnect()
{
while (!client.connected())
{
Serial.println("Connecting to MQTT Server ...");
if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))
{
Serial.println("MQTT Connected!");
}
else
{
Serial.print("MQTT Connect err:");
Serial.println(client.state()); //重新连接
delay(5000);
}
}
}
void mqttIntervalPost()
{
char param[32];
char jsonBuf[128];
/* 修改4 ------------------------------------------ */
sprintf(param, "{"AlarmState":%d}", digitalRead(LED_BUILTIN));//读取LED灯引脚状态
/* 修改4 end--------------------------------------- */
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
boolean d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
// 上报数据
Serial.print("publish:0 失败;1成功");
Serial.println(d);
}
void setup()
{
//初始化保存获取到的数据的数组,并把内存置为0
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
/* initialize serial for debugging */
Serial.begin(115200);
Serial.println("Demo Start");
client.setCallback(callback); //用于接收服务器接收的数据
wifiInit();
}
// the loop function runs over and over again forever
void loop()
{
if (millis() - lastMs >= 5000)
{
lastMs = millis();
mqttCheckConnect();
/* 上报消息心跳周期 */
mqttIntervalPost();
}
client.loop(); //MUC接收数据的主循环函数。
/*
if (digitalRead(LED_BUILTIN) == HIGH) {
digitalWrite(LED_BUILTIN, LOW);
Serial.println("Motion detected!");
delay(2000);
}
else {
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("Motion absent!");
delay(2000);
}
*/
}

MQTT_PASSWD密码生成工具

下载链接https://wwa.lanzous.com/iix24dru58d

软件解压后,用浏览器打开sign.html。输入相关信息,可生成MQTT_PASSWD。
在这里插入图片描述

修改PubSubClient.h文件(不修改无法连接Mqtt服务器)

我自己文件路径:
在这里插入图片描述
要修改的部分:
在这里插入图片描述

设备测试

阿里云IOT平台发送数据和Esp8266接收端口显示:
关灯测试
在这里插入图片描述
开灯测试:
在这里插入图片描述
点亮LED:
在这里插入图片描述

最后

以上就是眼睛大板栗为你收集整理的Esp8266(NodeMCU)连接阿里云服务器创建阿里云产品添加设备Esp8266代码MQTT_PASSWD密码生成工具修改PubSubClient.h文件(不修改无法连接Mqtt服务器)设备测试的全部内容,希望文章能够帮你解决Esp8266(NodeMCU)连接阿里云服务器创建阿里云产品添加设备Esp8266代码MQTT_PASSWD密码生成工具修改PubSubClient.h文件(不修改无法连接Mqtt服务器)设备测试所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部