admin管理员组文章数量:1619726
目录
- 极简连接WIFI
- 模拟设备连接阿里云
- ESP32 连接阿里云
以下代码通过 Arduino 语言实现
极简连接WIFI
#include <WiFi.h>
// 这里添加要连的wifi名称和密码
const char* ssid = "";
const char* password = "";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("WIFI CONNECTED!");
}
void loop() {
}
模拟设备连接阿里云
参考:ESP32CAM连接阿里云物联网平台
通过模拟设备连接阿里云,是为了测试板子和云平台间的通信。
- 前期准备
- 在阿里云创建自己的项目:参考这篇
- 下载 mqttfx 工具:参考这篇
- 下载 技小新-MQTT单片机编程小工具
- MQTT单片机编程小工具 上的操作
- SN/MAC 不用管
- 通过阿里云上的此界面(第三步的设备调试界面中有个“查看”测试设备的操作),获取 product_key、device_name、device_secret,并在小工具上修改,然后点击生成基本信息,获得 ClientID、UserName、Password
- mqtt.fx 上的设置
- 打开 Edit Connection Profiles 界面(Extras - Connection Profiles)
- Broker Address (不用变):iot-as-mqtt-shanghai.aliyuncs
- Broker Port (不用变):1883
- 剩下三行填写上一操作生成的
- 下行通信(阿里云发送,MQTT.fx接收)
- 在阿里云平台上查看发布和订阅的相关 Topic
- 在 MQTT.fx 的 subscribe 输入框输入订阅的 topic 后,点击 subscribe
- 在阿里云的在线调试界面发送指令,看 MQTT.fx 是否能收到
- 下行通信(MQTT.fx发送,阿里云接收)
- 在 MQTT.fx 的 publish 输入框输入发布的 topic 后,在文本框写入以下代码,然后点击 publish
{
"params":{
"brightness":78,}
}
“brightness” 根据标识符修改
在云平台上即可看到效果
ESP32 连接阿里云
报错:MQTT Connect err:2 处理方法
- 修改库文件:C:\Users\Administrator\Documents\Arduino\libraries\PubSubClient\src\PubSubClient.h
- 找到: MQTT_MAX_PACKET_SIZE,将256修改为1024,再找到MQTT_KEEPALIVE,将15修改为60。
参考:esp32(arduino)接入阿里云MQTT服务器
具体代码粘贴如下,注意修改define
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
// 这里添加要连的wifi名称和密码
const char* ssid = "";
const char* password = "";
/* 设备证书信息,根据情况修改*/
#define PRODUCT_KEY ""
#define DEVICE_NAME ""
#define DEVICE_SECRET ""
#define REGION_ID ""
#define CLIENT_ID ""
#define MQTT_PASSWD ""
#define ALINK_BODY_FORMAT "{\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
/* 线上环境域名和端口号,不需要改 */
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs"
#define MQTT_PORT 1883
#define MQTT_USRNAME DEVICE_NAME "&" PRODUCT_KEY
WiFiClient espClient;
PubSubClient client(espClient);
void WiFiInit()
{
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("WIFI CONNECTED!");
}
// 连接MQTT,每隔5s自动重连
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);
}
}
}
// publish(ESP32发送,阿里云接收)
void mqttIntervalPost()
{
char param[32]; // 存放参数数据
char jsonBuf[128]; // 存放json格式数据
sprintf(param, "{\"brightness\":%d}", 32);
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
if(client.publish(ALINK_TOPIC_PROP_POST, jsonBuf))
{
Serial.println("Publish success!");
}
else
{
Serial.println("Publish error!");
}
}
// subscribe(ESP32接收,阿里云发送)
void callback(char *topic, byte *payload, unsigned int length)
{
// 将收到的信息回传给串口
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
payload[length] = '\0';
Serial.println((char *)payload);
// 将 method、id、params 解析出来
StaticJsonBuffer<400> jsonBuffer1;
JsonObject& root1 = jsonBuffer1.parseObject((char *)payload);
if (!root1.success()) {
Serial.println("parseObject()1 failed");
Serial.println("END");
return;
}
const char* mmethod = root1["method"];
Serial.println(mmethod);
long mid = root1["id"];
Serial.println(mid);
String message = root1["params"];
Serial.println(message);
// 将 params中自定的参数解析出来
StaticJsonBuffer<400> jsonBuffer2;
JsonObject& root2 = jsonBuffer2.parseObject(message);
if (!root2.success()) {
Serial.println("parseObject()2 failed");
Serial.println("END");
return;
}
int brightness = root2["brightness"];
Serial.println(brightness);
}
void setup()
{
Serial.begin(115200);
WiFiInit();
client.setServer(MQTT_SERVER, MQTT_PORT);
client.setCallback(callback);
}
void loop()
{
if(!client.connected())
{
mqttCheckConnect();
mqttIntervalPost();
}
client.loop();
}
版权声明:本文标题:ESP32开发路程WIFI篇——极简连接WIFI,模拟设备连接阿里云,ESP32连接阿里云 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728796688a1174184.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论