这是我第一次发布文章,还请大家多多支持小李!
这里我给大家分享的是基于Arduino环境下如何使用ESP32的开发板连接阿里云。
话不多说,阿里云物联网的设备注册那些问题已经有其他博主讲过,我这里引用一下这位优秀博主的文章,大家学会变通就行。
添加链接描述
前半部分已经教大家如何在阿里云创建自己的物联网设备了,我们程序要改的地方是下图标注红色的这里很重要!
很重要!!!!
很重要!!!!
很重要!!!!
这里两个对应程序需要修改否则导致连接不上。
下面直接上程序:
#include<WiFi.h>
#include<PubSubClient.h>
上面这两个头文件没有的话自己在Arduino IDE库管理下载
下面还有一个坑记得看完!
#include<WiFi.h>
#include<PubSubClient.h>
const char* ssid ="nova";//wifi名
const char*password ="12345678";//wifi密码
const char*mqttHostUrl = "a1WZaCEwkny.iot-as-mqtt.cn-shanghai.aliyuncs.com";//阿里云服务器域名
const int mqttPort =1883;//端口号
const char*mqttUser = "DianCan&a1WZaCEwkny";//username
const char*mqttPassword = "eb6e1c9038df6f972369b509c30da93f7ec5f06445edc869f4883d135ab66f44";//密钥
const char*clientId = "a1WZaCEwkny.DianCan|securemode=2,signmethod=hmacsha256,timestamp=1681216576659|" ;//连接id
#define PRODUCT_KEY "a1WZaCEwkny"
#define DEVICE_NAME "DianCan"
//下面组包用
#define ALINK_BODY_FORMAT "{\"id\":\"level\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/thing/event/property/post"
unsigned long lastMs = 0;
WiFiClient espClient;
PubSubClient client(espClient);
//连接wifi
void wifiInit()
{
WiFi.begin(ssid,password);
while (WiFi.status()!= WL_CONNECTED) {
delay(500);
Serial.println("Connectingto WiFi..");
}
Serial.println("Connectedto the WiFi network");
}
//mqtt连接
void mqttCheckConnect()
{
client.setServer(mqttHostUrl,mqttPort);
while (!client.connected()){
Serial.println("Connectingto MQTT...");
if (client.connect(clientId,mqttUser, mqttPassword )) {
Serial.println("connected");
}else {
Serial.print("failedwith state ");
Serial.print(client.state());
delay(2000);
}
}
}
//组数据帧并发送
void mqttIntervalPost()
{
char param[32];
char jsonBuf[128];
sprintf(param, "{\"num8\":%d}", 9);
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
}
void setup() {
Serial.begin(115200);
wifiInit();//连接wifi
mqttCheckConnect();//连接阿里云
}
void loop() {
client.loop();
if (millis() - lastMs >= 5000)
{//定时检查或上报数据
lastMs = millis();
mqttCheckConnect();
// 上报
mqttIntervalPost();
}
}
程序的相应地方改完还不行会报错,2 这是他的一个状态具体方法是:
打开IDE首选项查看这个路径
然后在你电脑搜索出来,进去有一个libraries文件,进去之后上面你下载过的头文件在里面,找到文件PubSubClient,打开里面.h文件
修改两个宏:
MQTT_MAX_PACKET_SIZE 1024;
MQTT_KEEPALIVE 60;
保存之后就可以正常链接了,有问题评论区见!
感谢支持!