物联网

前言

使用esp32s3芯片,基于arduino框架,采用mqqt协议,利用阿里云提供的免费平台,可以实现用手机在有网的情况下随时随地控制设备。
参考up主:小可乐hello
附录有代码

阿里云

进入官方网站:阿里云

  1. 选择产品
    在这里插入图片描述
    2.选择物联网,生活物联网平台(第一次进的时候会审核资质,可以略微夸大)
    在这里插入图片描述

  2. 进入管理控制台
    在这里插入图片描述

  3. 创建项目(一般最多可以创建三个项目)
    在这里插入图片描述
    在这里插入图片描述

  4. 创建产品(一个项目里面可以有多个产品)
    在这里插入图片描述

  5. 这么配置
    在这里插入图片描述

  6. 再选择芯片为其它芯片,其它无需配置点确认
    在这里插入图片描述
    在这里插入图片描述

  7. 点击产品进行开发
    在这里插入图片描述

  8. 选择需要的功能,不需要的可以删除,如果没有需要的功能也可以点右下角定义所需
    在这里插入图片描述

  9. 选择云智能app并且点击保存
    在这里插入图片描述
    10.

  10. 定义产品名字,选择产品品牌
    在这里插入图片描述

  11. 设计面板
    在这里插入图片描述

  12. 从左边拖出想要的功能,设计完成后,点击右边的保存
    在这里插入图片描述

  13. 点击左上角退出
    在这里插入图片描述

  14. 选择面板
    在这里插入图片描述

  15. 可以扫面二维码,预览,这不是真的设备控制界面
    在这里插入图片描述

  16. 上传任意的pdf
    在这里插入图片描述

  17. 点击设备调试
    在这里插入图片描述

  18. 点击右上角
    在这里插入图片描述

  19. 输入设备名字
    在这里插入图片描述

  20. 点击确认就会出现
    在这里插入图片描述

  21. 将它复制替换代码这部分
    在这里插入图片描述

  22. 返回此界面,选择物联网平台
    在这里插入图片描述

  23. 点击控制平台
    在这里插入图片描述
    在这里插入图片描述

  24. 点击产品的右边查看
    在这里插入图片描述

  25. 复制上面的两个地方到代码里面
    在这里插入图片描述

在这里插入图片描述
26. 把下面的这行代码替换成自己产品的
在这里插入图片描述
替换完成
在这里插入图片描述
27. 现在已完成,可以烧录程序到设备里面,再通过串口观察数据是否发布成功,比如这种(图片任意的)
在这里插入图片描述
28. 返回到此页面,可以查看数据,记得打开右边的实时刷新
在这里插入图片描述

在线调试

  1. 在线调试设备,可以点击这边,但是必须保证单片机已经运行联网
    在这里插入图片描述

  2. 比如点击后这样(随机的现象图),zuo’bi
    在这里插入图片描述

  3. 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");
}






 

	
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐