ESP32物联网
物联网
前言
使用esp32s3芯片,基于arduino框架,采用mqqt协议,利用阿里云提供的免费平台,可以实现用手机在有网的情况下随时随地控制设备。
参考up主:小可乐hello
附录有代码
阿里云
进入官方网站:阿里云
-
选择产品

2.选择物联网,生活物联网平台(第一次进的时候会审核资质,可以略微夸大)

-
进入管理控制台

-
创建项目(一般最多可以创建三个项目)


-
创建产品(一个项目里面可以有多个产品)

-
这么配置

-
再选择芯片为其它芯片,其它无需配置点确认


-
点击产品进行开发

-
选择需要的功能,不需要的可以删除,如果没有需要的功能也可以点右下角定义所需

-
选择云智能app并且点击保存


-
定义产品名字,选择产品品牌

-
设计面板

-
从左边拖出想要的功能,设计完成后,点击右边的保存

-
点击左上角退出

-
选择面板

-
可以扫面二维码,预览,这不是真的设备控制界面

-
上传任意的pdf

-
点击设备调试

-
点击右上角

-
输入设备名字

-
点击确认就会出现

-
将它复制替换代码这部分

-
返回此界面,选择物联网平台

-
点击控制平台


-
点击产品的右边查看

-
复制上面的两个地方到代码里面


26. 把下面的这行代码替换成自己产品的

替换完成

27. 现在已完成,可以烧录程序到设备里面,再通过串口观察数据是否发布成功,比如这种(图片任意的)

28. 返回到此页面,可以查看数据,记得打开右边的实时刷新

在线调试
-
在线调试设备,可以点击这边,但是必须保证单片机已经运行联网

-
比如点击后这样(随机的现象图),zuo’bi

-
30的图左边连接上设备有功能模块,点击设置或者获取可以实时观看状态变化


附录 代码
#include <Arduino.h>
#include <WiFi.h>
#include "PubSubClient.h" // MQTT client library
#include <ArduinoJson.h> // JSON handling library
#include "FastLED.h" // FastLED library for WS2812
#include <Adafruit_AHTX0.h> // AHT10/AHT20 温湿度传感器
// AHT10/AHT20 传感器对象
Adafruit_AHTX0 aht;
Adafruit_Sensor *aht_humidity, *aht_temp;
// LED 配置
#define LED_PIN 1
#define DATA_PIN 48 // WS2812 LED 数据引脚
#define NUM_LEDS 1 // LED 数量
#define BRIGHTNESS 50 // LED 亮度
CRGB leds[NUM_LEDS]; // WS2812 LED 控制数组
/* WiFi 连接信息 */
#define WIFI_SSID "JOJ"
#define WIFI_PASSWD "12345678"
/* 设备 MQTT 连接信息 */
#define PRODUCT_KEY "a11ok4UYJ5C"
#define DEVICE_NAME "hehe"
#define DEVICE_SECRET "bd85f555a60002e52dffae354b454837"
#define REGION_ID "cn-shanghai"
/* MQTT 服务器配置 */
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com"
#define MQTT_PORT 1883
#define MQTT_USER DEVICE_NAME "&" PRODUCT_KEY
#define CLIENT_ID "a1Ilb7ntJrc.huangdezhi|securemode=2,signmethod=hmacsha256,timestamp=1730259346880|"
#define MQTT_PASS "8ce1e65bdbff80d676c061b7fe1f5fcb574d779f526795e79b9982488ba35a89"
/* MQTT 主题定义 */
#define ALINK_BODY_FORMAT "{\"id\":\"hehe\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
#define SUBSCRIBE_TOPIC "/sys/a1Ilb7ntJrc/huangdezhi/thing/service/property/set"
unsigned long lastMs = 0;
WiFiClient espClient;
PubSubClient client(espClient);
// 连接 WiFi
void setupWiFi() {
Serial.print("Connecting to WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("Connected to WiFi");
}
// 重新连接 MQTT
void mqttReconnect() {
while (!client.connected()) {
Serial.print("Connecting to MQTT...");
if (client.connect(CLIENT_ID, MQTT_USER, MQTT_PASS)) {
Serial.println("connected");
// 订阅 MQTT 主题
if (client.subscribe(SUBSCRIBE_TOPIC)) {
Serial.println("Subscribed to topic successfully");
} else {
Serial.println("WARNING: Failed to subscribe to the MQTT topic");
}
} else {
Serial.print("MQTT connection failed, state: ");
Serial.println(client.state());
delay(5000);
}
}
}
// 读取 AHT10/AHT20 传感器数据并上传 MQTT
void sendMQTTData() {
char param[64];
char jsonBuf[128];
// 读取 AHT10/AHT20 温湿度数据
sensors_event_t humidity_event, temp_event;
aht_humidity->getEvent(&humidity_event);
aht_temp->getEvent(&temp_event);
float temperature = temp_event.temperature;
float humidity = humidity_event.relative_humidity;
// 打印数据到串口
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
// 上传湿度
snprintf(param, sizeof(param), "{\"humidity\":%.2f}", humidity);
snprintf(jsonBuf, sizeof(jsonBuf), ALINK_BODY_FORMAT, param);
if (client.publish(ALINK_TOPIC_PROP_POST, jsonBuf)) {
Serial.println("Published humidity data");
} else {
Serial.println("Failed to publish humidity data");
}
// 上传温度
snprintf(param, sizeof(param), "{\"temperature\":%.2f}", temperature);
snprintf(jsonBuf, sizeof(jsonBuf), ALINK_BODY_FORMAT, param);
if (client.publish(ALINK_TOPIC_PROP_POST, jsonBuf)) {
Serial.println("Published temperature data");
} else {
Serial.println("Failed to publish temperature data");
}
}
// MQTT 订阅回调函数
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.println(topic);
String payloadStr;
for (unsigned int i = 0; i < length; i++) {
payloadStr += (char)payload[i];
}
Serial.println("Payload: " + payloadStr);
// 解析 JSON
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, payloadStr);
if (error) {
Serial.print("JSON parsing failed: ");
Serial.println(error.f_str());
return;
}
// 处理 "deng" 关键字,控制 LED
if (doc["params"].containsKey("deng")) {
bool ledState = doc["params"]["deng"];
leds[0] = ledState ? CRGB::White : CRGB::Black;
FastLED.show();
Serial.println(ledState ? "LED ON" : "LED OFF");
}
}
void setup() {
Serial.begin(115200);
Serial1.begin(115200);
// 初始化 WS2812 LED
FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
leds[0] = CRGB::Yellow;
FastLED.show();
// 初始化 AHT10/AHT20
Wire.begin(41, 42); // 你需要使用正确的 SDA 和 SCL 引脚
if (!aht.begin()) {
Serial.println("Failed to find AHT10/AHT20 chip");
while (1) {
delay(10);
}
}
Serial.println("AHT10/AHT20 Found!");
aht_temp = aht.getTemperatureSensor();
aht_humidity = aht.getHumiditySensor();
// 连接 WiFi 和 MQTT
setupWiFi();
client.setServer(MQTT_SERVER, MQTT_PORT);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
mqttReconnect();
}
if (millis() - lastMs >= 5000) {
lastMs = millis();
sendMQTTData(); // 发送温湿度数据
}
delay(1000);
client.loop(); // 保持 MQTT 连接活跃
Serial1.println("Failed to find AHT10/AHT20 chip");
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)