esp32接入华为云IoT

由于学校老师给的教程太过...,搜索了不少内容,尝试了很多次。自己还不太懂这方面的内容,所以记录纯操作。

用到了华为云IoT平台、Arduino IDE(没有给安装教程,这个随便搜一个就行。基本就是从官网下载安装包,双击.exe。下载完后会跳出很多让你安装,安一下)

实现的效果是在华为云平台上,time每隔一秒+1,如下图:

分为两方面:华为云IoT上的操作、Arduino IDE 的配置和操作(包括环境、代码、提交)

一、华为云IoT

1.登陆注册华为云

2.在华为云中选择:IoT互联网->设备接入IoTDA

3.在左侧产品列表中,创建产品

其中产品名称自由定义,设备类型可以在标准中选择,也可以自定义,然后确定进行产品创建(我的这里是第一次,有个“开始测试”。就是使用免费版的。点击之后出现下面的界面)

注意:协议是MQTT和所属资源空间都不动,其他随便

4.在创建的产品中创建服务

服务类型啥的不填

然后就可以看到下图框出来的服务

5.在产品中,创建属性

这个地方对应上报的数值键值,例如我创建的是temp

6.在增加完产品和服务后,进行设备的创建

创建完后会跳出来一个文件,下载一个,里面有devide_id和secret

二、Arduino

1.配置esp32环境

在这一部分参考这个教程:安装 Arduino 开发环境 | 极客侠GeeksMan

但是!!!止步于我下面框的内容

另外这个端口是会在esp32的线连接到电脑上时跳出来的

2.修改老师给的代码

我先给出老师给的代码。再说哪里要改,改的部分怎么改,数据哪里来

#include <Wire.h>
#include <WiFi.h>
#include <ArduinoJson.h>
#include <PubSubClient.h>

/*MQTT连接配置*/
/*-----------------------------------------------------*/
// 定义WiFi连接信息
const char* ssid = "ESP32连接的WiFi名称";
const char* password = "WiFi密码";
const char* mqttServer = "华为云MQTT接入地址";
const int  mqttPort = 1883;
//以下3个参数可以由HMACSHA256算法生成,为硬件通过MQTT协议接入华为云IoT平台的鉴权依据
const char* clientId = "";
const char* mqttUser = "";
const char* mqttPassword = "";
WiFiClient espClient; //ESP32WiFi模型定义
PubSubClient client(espClient);
 
const char* topic_properties_report = "$oc/devices/6617f5cb2ccc1a583880be12_firsttemp/sys/properties/report";
 
//接收到命令后上发的响应topic
char* topic_Commands_Response = "$oc/devices/6617f5cb2ccc1a583880be12_firsttemp/sys/properties/report";

#define Iot_link_Body_Format "{\"services\":[{\"service_id\":\"Dev_data\",\"properties\":{%s"  
/*******************************************************/

/*
 * 作用:  ESP32的WiFi初始化以及与MQTT服务器的连接
 * 参数:  无
 * 返回值:无
 */
void MQTT_Init()
{
//WiFi网络连接部分
  WiFi.begin(ssid, password); //开启ESP32的WiFi
  while (WiFi.status() != WL_CONNECTED) { //ESP尝试连接到WiFi网络
    delay(3000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to the WiFi network");
 
 
//MQTT服务器连接部分
  client.setServer(mqttServer, mqttPort); //设置连接到MQTT服务器的参数
  client.setKeepAlive (60); //设置心跳时间
  while (!client.connected()) { //尝试与MQTT服务器建立连接
    Serial.println("Connecting to MQTT...");
    if (client.connect(clientId, mqttUser, mqttPassword )) {
      Serial.println("connected");  
    } else {
      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(6000);
    }
  }
//接受平台下发内容的初始化
  //client.setCallback(callback); //可以接受任何平台下发的内容
}

void setup() {
  Serial.begin(115200);
  MQTT_Init();
}

/*
 * 作用:  垃圾桶容量上报到MQTT服务器任务
 * 参数:  (int)垃圾桶容量,1代表垃圾桶满了,0代表垃圾桶未满
 * 返回值:无
 * 命名说明:Capacity:容量
 */
void TASK_Capacity_Report(int capacity)
{
 
//以下部分代码调用了ArduinoJson库将属性上报消息打包为JSON格式
//此部分代码可以通过ArduinoJson库的官方网站直接生成
  StaticJsonBuffer<300> JSONbuffer; //定义静态的JSON缓冲区用于存储JSON消息
  JsonObject& root = JSONbuffer.createObject();
  JsonArray& services = root.createNestedArray("services");
  JsonObject& service_1 = services.createNestedObject();
  JsonObject& properties_1_1 = service_1.createNestedObject("properties");
 
  service_1["service_id"] = "A311";
  properties_1_1["temp"] = capacity;
 
//  root.prettyPrintTo(Serial);//调试用,将JSON打印到串口
 
//以下将生成好的JSON格式消息格式化输出到字符数组中,便于下面通过PubSubClient库发送到服务器
  char JSONmessageBuffer[100];
  root.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
  
  Serial.println("Sending message to MQTT topic..");
  Serial.println(JSONmessageBuffer);
 
//以下代码将打包好的JSON数据包通过PubSubClient库发送到服务器 
  if (client.publish(topic_properties_report, JSONmessageBuffer) == true) {
    Serial.println("Success sending message");
  } else {
    Serial.println("Error sending message");
  }
//由于本函数是放在loop中不断循环执行,所以添加client.loop()进行保持硬件的活跃度
//避免由于长时间未向服务器发送消息而被服务器踢下线
  client.loop();
  Serial.println("-------------");
  
}

void loop() {
  for(int i = 0 ; i<256; i++)
  {
  delay(10000);
  TASK_Capacity_Report(i);
  }
}

修改

ESP32连接的WiFi名称 :把这冒号里的改成你电脑连接的wifi或者热点名称

WiFi密码:你电脑连接的wifi或者热点密码

华为云MQTT接入地址:见下图

继续改

往这三个冒号里填内容

进入网站Huaweicloud IoTDA Mqtt ClientId Generator

使用刚刚保存的设备id 和 密钥,填入,生成鉴权信息

最后改

A311:改成你自己的服务名称

temp:该成你自己的属性名称

其他地方就不用改了

3.提交

把你的esp32线连到电脑上。

点击1,编译完后,

点击2,不用一直按着BOOT键,只要点击。

然后,就有了开头我说的效果

花了一晚上总算搞完了。这学校该die的作业啊。但愿足够详细,不要让其他人再受这份折磨。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值