esp32连接腾讯云物联网开发平台(基于arduino开发)(3)

arduino代码

完整代码见主页

导入所需要的库

#include <Arduino.h>

#include <WiFi.h>

#include "PubSubClient.h"

#include <ArduinoJson.h>

进行WIFI配置和服务器配置

// WiFi 配置

const char *ssid = "";     // WiFi名称

const char *pwd = ""; // WiFi密码

// MQTT 服务器配置

const char *mqtt_server = ""; // MQTT服务器地址

const char *mqtt_username = ""; // MQTT用户名

const char *mqtt_userpwd = ""; // MQTT密码

const char *mqtt_clientid = ""; // MQTT客户端ID

const char *mqtt_pub_topic = ""; // MQTT发布主题

const char *mqtt_sub_topic = ""; // MQTT订阅主题

创建一个 JSON 文档对象,用于存储和解析数据

DynamicJsonDocument doc(1024);

定义变量

// 设备状态信息

bool power_switch;    // 电源开关状态

上报数据包模板

#define REPORT_DATA_TEMPLATE "{\"method\":\"report\",\"clientToken\":\"00000001\",\"params\":{\"power_switch\":%d,}}"

创建对象,定时与缓存区

WiFiClient espClient;        // 创建一个 WiFi 客户端对象

PubSubClient mqttclient(espClient); // 创建一个 MQTT 客户端对象

long lastMsg = 0;            // 用于定时上报数据

char report_buf[1024];        // 存储上报数据的缓冲区

创建MQTT 消息回调函数,处理接收到的消息

void callback(char *topic, byte *payload, unsigned int length)

{

    Serial.print("--->Message arrived [");

    Serial.print(topic);

    Serial.print("] ");

    Serial.println();

    Serial.print("payload [");

    for (int i = 0; i < length; i++)

    {

        Serial.print((char)payload[i]);

    }

    Serial.println();

    // 处理上位机的控制指令

    DeserializationError error = deserializeJson(doc, payload);

    // 检查解析是否成功

    if (error)

    {

        Serial.print("deserializeJson() 失败: ");

        Serial.println(error.f_str());

        return;

    }

    else

    {

        if (doc["clientToken"] != "00000001")

        {

            if (doc["params"]["power_switch"] == 1)

            {

                Serial.print("开启电源 ");

                power_switch = 1;

            }

            else

            {

                Serial.print("关闭电源 ");

                power_switch = 0;

            }

        }

    }

}

设置 WiFi 连接

void setup_wifi()

{

    Serial.printf("连接到 %s ", ssid);

    WiFi.begin(ssid, pwd);

    while (WiFi.status() != WL_CONNECTED)

    {

        Serial.printf(".");

        delay(500);

    }

    Serial.println("已连接!");

    Serial.print("IP 地址: ");

    Serial.println(WiFi.localIP());

}

主函数

void setup()

{

    Serial.begin(115200);

    setup_wifi();

    // 设置 MQTT 客户端参数

    mqttclient.setServer(mqtt_server, 1883);

    mqttclient.setCallback(callback);

    mqttclient.setKeepAlive(65535);

    // 连接到 MQTT 服务器

    while (!mqttclient.connect(mqtt_clientid, mqtt_username, mqtt_userpwd))

    {

        Serial.println("mqtt 连接失败,重新连接");

        delay(2000);

    }

    Serial.println("mqtt 连接成功!");

    // 订阅主题

    boolean ret = mqttclient.subscribe(mqtt_sub_topic);

    if (ret != true)

    {

        Serial.printf("mqtt 订阅主题 [%s] 失败\n", mqtt_sub_topic);

    }

    Serial.printf("mqtt 订阅主题 [%s] 成功\n", mqtt_sub_topic);

}

void loop()

{

    // MQTT 客户端循环

    mqttclient.loop();

    // 发布主题

    long now = millis();

    if (now - lastMsg > 10000)

    {

        lastMsg = now;

        // 构造上报数据的 JSON 字符串

        memset(report_buf, 0, 1024);

        sprintf(report_buf, REPORT_DATA_TEMPLATE, power_switch, power_percent, temperature);

        Serial.println(report_buf);

        // 发布数据到 MQTT 主题

        if (mqttclient.publish(mqtt_pub_topic, report_buf))

        {

            Serial.printf("mqtt 发布主题 [%s] 成功\n", mqtt_pub_topic);

        }

        else

        {

            Serial.printf("mqtt 发布主题 [%s] 失败\n", mqtt_pub_topic);

        }

    }

}

连接成功

向esp发送讯息

arduino端收到信号

完整代码见主页

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用串口或者SPI接口将STM32和ESP8266连接起来,然后使用ESP8266作为Wi-Fi模块,将数据传输到腾讯云物联网开发平台。下面是一种可能的方法: 1. 首先,确保你已经在STM32上配置了串口或者SPI接口,并且能够与ESP8266进行通信。 2. 在ESP8266上,你需要安装一个适合的固件,比如NodeMCU或者Arduino-ESP8266等。这些固件提供了简化的API和库函数,使得与腾讯云物联网开发平台的通信更加方便。 3. 在ESP8266上,你需要配置Wi-Fi连接,以连接到你的网络。你可以使用相应的库函数来设置Wi-Fi的SSID和密码。 4. 接下来,你需要在ESP8266上安装MQTT库。MQTT是一种轻量级的通信协议,适合物联网应用。通过MQTT库,你可以在ESP8266上实现与腾讯云物联网开发平台的通信。 5. 在STM32上,你需要编写代码来与ESP8266进行通信。你可以使用串口或者SPI接口发送和接收数据。具体的通信协议和数据格式取决于你选择的接口和库函数。 6. 在STM32上,你需要编写代码来生成和处理要发送和接收的数据。你可以使用相应的库函数来构建MQTT消息,并将其发送到ESP8266。 7. 最后,在腾讯云物联网开发平台上,你需要创建设备和产品,并获取相应的认证信息,如设备ID和密钥。这些信息将用于在ESP8266上进行认证和连接。 请注意,以上步骤只是一个大致的指导,具体的实现细节取决于你所选择的硬件和软件平台。你可以参考相关的文档和示例代码来进行更详细的开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶瓷好烦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值