esp32的MQTT物联网开发记录

esp32的MQTT物联网开发记录

环境依赖

本项目在Windows环境下开发,所使用的软件和三方库如下

  • Arduino IDE 1.8.16 (下载地址)
  • DHT-sensor-library(地址 移动至 Arduino/libraries) DHT传感器驱动
  • Adafruit_Sensor(地址 移动至 Arduino/libraries) DHT传感器依赖
  • PubSubClient(工具=>管理库 下载) MQTT库
  • ArduinoJson(工具=>管理库 下载) JSON转换工具

注册产品

本项目使用的是涂鸦智能平台提供的MQTT服务

创建产品
在这里插入图片描述
选择产品类型,这里以温湿度传感器为例
在这里插入图片描述
选择设备接入
在这里插入图片描述
完善产品信息
在这里插入图片描述
填写功能定义
在这里插入图片描述
设备开发界面免费领取2个授权凭证
在这里插入图片描述
保存好DeviceID和DeviceSecret,编写程序时填写

编写程序

引脚定义

#include "DHT.h"
#include "WiFi.h"
// #include "WiFiClientSecure.h"
#include "PubSubClient.h"
#include "ArduinoJson.h"

GPIO///
#define DHTPIN 15
#define ADCPIN 32
#define DHTTYPE DHT11   // DHT 11
#define LIGHTPIN 2
#define FANPIN 13
GPIO///

配置WiFi

WIFI///
#define WIFI_SSID "TJ***"       //wifi名
#define WIFI_PASSWD "tjark***" //wifi密码
WIFI///

配置MQTT

这里的用户名密码参考tuyaMQTT开放协议

MQTT///
#define mqttServer "m1.tuyacn.com"
#define mqttPort 1883
#define ClientId "tuyalink_6c7e8f5a8fd2eee79ea***"
#define User "6c7e8f5a8fd2eee79ea***|signMethod=hmacSha256,timestamp=1639372190,securemode=1,accessType=1"
#define Pass "1ccfff232bafe35be78d0eed7e952f7c37cde39b148c8c2f672fedd85875c***"
#define TOPIC "tylink/6c7e8f5a8fd2eee79ea***/thing/property/set"
MQTT///

实例化

WiFiClient espClient;               //创建网络连接客户端
PubSubClient client(espClient);     //创建mqtt客户端
DHT dht(DHTPIN, DHTTYPE);           //DHT实例化

连接WiFi

//连接WIFI相关函数
void setupWifi()
{
  delay(10);
  Serial.println("Connecting WIFI");
  WiFi.begin(WIFI_SSID, WIFI_PASSWD);
  while (!WiFi.isConnected())
  {
    Serial.print(".");
    delay(500);
  }
  Serial.println("OK");
  Serial.println("Wifi connected successfully!");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

连接MQTT

//连接mqtt
void setupMQTT()
{
  client.setServer(mqttServer, mqttPort);
  client.setCallback(callback); 
  while (!client.connected())
  {
    Serial.println("Connecting MQTT");
    if(client.connect(ClientId,User,Pass))
    {
      Serial.println("MQTT connected successfully!");
      client.subscribe(TOPIC);
    }
    else
    {
      Serial.print("Failed with state ");
      Serial.println(client.state());
      delay(2000);
    }
  }
}

编写MQTT回调函数

// MQTT回调函数
void callback(char * topic,byte * payload,unsigned int length){
  DynamicJsonDocument doc(512);
  char charbuffer[512];
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.println("]");
  int i = 0;
  for(;i<length;i++){
    charbuffer[i] = (char)payload[i];
  }
  charbuffer[i] = '\0';
  DeserializationError error = deserializeJson(doc,charbuffer);

  if(error){
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }
  bool lightOn = doc["data"]["light_switch"];
  bool dehumiOn = doc["data"]["dehumi_switch"];
  if (lightOn){
    digitalWrite(LIGHTPIN,HIGH);
  }
  else{
    digitalWrite(LIGHTPIN,LOW);
  }
  if (dehumiOn){
    digitalWrite(FANPIN,HIGH);
  }
  else{
    digitalWrite(FANPIN,LOW);
  }
}

初始化

void setup() {
  // put your setup code here, to run once:
  pinMode(LIGHTPIN,OUTPUT);
  Serial.begin(115200);
  setupWifi();
  setupMQTT();
  dht.begin();
}

主函数

void loop() {
  // put your main code here, to run repeatedly:
  // Wait a few seconds between measurements.
  delay(5000);
  // Read humidity data
  int h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  int t = dht.readTemperature();
  
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Read illumination data
  float l = analogRead(ADCPIN);
  int percent = 100 - l / 4096.0 * 100.0;

  // 串口打印
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("C "));
  Serial.print(F("illumination: "));
  Serial.print(percent);
  Serial.println(F("% "));

  // 封装json
  DynamicJsonDocument doc(512);
  DynamicJsonDocument jsdata(256);
  DynamicJsonDocument tempdata(32);
  DynamicJsonDocument humidata(32);
  DynamicJsonDocument illudata(32);

  tempdata["value"] = t;
  tempdata["time"] = 1639454915;
  humidata["value"] = h;
  humidata["time"] = 1639454915;
  illudata["value"] = percent;
  illudata["time"] = 1639454915;
  jsdata["temp_current"] = tempdata;
  jsdata["humidity_current"] = humidata;
  jsdata["illumi_current"] = illudata;
  doc["msgId"] = "45lkj3551234001";
  doc["time"] = 1639454915;
  doc["data"] = jsdata;

  String str;
  serializeJson(doc, str);
//  Serial.println(str);

  // Sending to MQTT
  char *p = (char *)str.c_str();
  if(client.publish("tylink/6c7e8f5a8fd2eee79ea***/thing/property/report",p) == true)
  {
    Serial.println("Success sending message.");
  }
  else
  {
    Serial.println("Failed sending message.");
  }

  client.loop();
}

调试验证

程序烧写进esp32后,可在在线调试功能界面调试,查看传感器数据,验证功能
在这里插入图片描述

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: ESP32连接阿里云MQTT物联网平台的Arduino支持库是一种便捷的物联网连接方式,可以实时获取设备数据并作出相应的控制。以下是步骤: 1. 下载阿里云Arduino支持库,安装到Arduino IDE开发环境; 2. 获取阿里云MQTT物联网平台(IoT Platform)的密钥信息,包括:设备证书、密钥等; 3. 编写代码,包括:WiFi连接、MQTT连接、数据监听、数据上传、控制响应等,上传到ESP32开发板上; 4. 在阿里云控制台创建对应设备,定义设备的物模型、功能、属性等; 5. 将ESP32连接WiFi并连接阿里云MQTT物联网平台后,即可实现设备控制与数据获取等功能。 需要注意的是,在使用ESP32连接阿里云MQTT物联网平台过程中,应注意设备的网络稳定性、MQTT协议的消息确认机制等方面的问题。合理使用阿里云提供的服务和开发工具,能够更好地实现IoT物联网应用场景。 ### 回答2: ESP32是一款功能强大的微控制器,可以与阿里云MQTT物联网平台进行连接。为了实现这一目标,我们需要使用适用于ArduinoESP32连接阿里云MQTT物联网平台的库。 这个库可以在Arduino ID中下载,它允许ESP32与阿里云MQTT物联网平台实现关联和同步。我们只需要在Arduino IDE中添加库并编写所需的代码,就可以建立连接。 在详细说明之前,需要先确定在阿里云MQTT物联网平台中已创建AWS IoT设备,并获取设备证书、设备密钥和CA证书。这些证书将用于连接到阿里云服务。 接下来,在Arduino IDE中添加库并开始编写代码。代码确认设备连接信息并建立MQTT连接。代码还包括订阅主题、发布消息和处理回传消息等功能。 在使用此库连接ESP32并阿里云MQTT物联网平台时,需要记住以下几点: 1.确认ESP32的设备IP地址并相应地更改代码。 2.在阿里云MQTT物联网平台上添加主题和订阅者。 3.正确配置阿里云MQTT物联网平台的策略和权限,确保ESP32可以正确访问。 一旦连接成功,ESP32就可以通过阿里云MQTT物联网平台与其他设备进行数据交换,实现智能家居、传感器应用和其他物联网应用。 ### 回答3: ESP32是一款广泛应用于物联网设备的微型控制器,它具有高度集成的蓝牙和Wi-Fi模块,可用于快速构建和部署智能设备和系统。阿里云MQTT物联网平台是一个领先的云端服务平台,提供了可靠、高效的通信,帮助开发人员更好地管理和控制物联网设备。在这种情况下,合并ESP32和阿里云平台的连接可以极大地提高物联网设备的运行效率和控制能力。为实现这种连接,实用的方法是使用arduino支持库。 与其他加密、配对和通信协议不同,MQTT是一个极为开放的协议,并可以广泛用于不同的设备和应用。阿里云MQTT物联网平台支持MQTT协议,为开发人员创建更加智能化的物联网设备提供了全面的解决方案。 开发人员可以使用esp32连接阿里云mqtt物联网平台的arduino支持库。该库包含了所有用于连接和操作MQTT服务的必备组件,如mqtt客户端、设备管理、云消息代理等。您可以在阿里云物联网控制台上获取所有必要的信息和证书,以便在ESP32上运行。 在运行这些组件之前,您需要为设备创建一些认证凭据和配置参数,例如设备ID、秘钥,以及所属分组信息等,这些信息可以通过阿里云物联网平台进行设置。一旦您设置好了所有的认证和配置信息,您就可以使用支持库中的命令来连接到MQTT服务,并快速部署和控制自己的物联网设备。 总之,使用arduino支持库,您可以快速连接到阿里云MQTT物联网平台,不需要复杂复制粘贴代码,专注于实现您的物联网设备的逻辑、控制和应用。它不仅方便易用,而且可以大大提高你的开发效率。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值