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 dataint 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 datafloat 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("% "));// 封装jsonDynamicJsonDocument 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 MQTTchar *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后,可在在线调试功能界面调试,查看传感器数据,验证功能

esp32的MQTT物联网开发记录相关推荐

  1. 从零讲起:ESP32+Micropython+MQTT阿里云物联网

    ESP32+Micropython+MQTT阿里云物联网 前言 一.ESP32是什么? 二.Micropthon开发环境搭建 1.ESP32串口驱动下载与安装 三.IDE工具下载及使用说明 1.IDE ...

  2. ESP32接入腾讯云物联网开发平台

    文章目录 前言 1 资料参考 2 对接总体思路 3 代码移植 3.1 component qcloud_iot 3.2 项目顶层处理 3.3 component main 4 移植问题备忘 CMake ...

  3. 【物联网开发平台MQTT快速接入使用】

    物联网开发平台MQTT快速接入使用 最近做的一个小项目需要将数据上传到物联网平台,然后在网上看了相关视频是如何操作的,进行一些简单的记录,使用的平台是腾讯云平台 视频教程链接 图 1 图 2 图 3 ...

  4. 乐鑫esp8266模块MicroPython开发板MQTT物联网人工智能最小系统

    简 介: ※对于购买自网络的基于ESP8266的实验模块进行了初步的测试,它其中的一些示例进行了练习.特别是对于基于ESP8266的特殊的一些外设的测试. 关键词: ESP8266,MicroPyth ...

  5. mqtt调试助手_腾讯物联网开发平台入门操作,如何使用MQTT协议上传温度湿度数据...

    今天我们测试一下腾讯云的物联网开发平台上传数据的功能,也就是构建一下发布数据的PUBLISH报文命令,上传温湿度数据. 我们接着使用前文中的D001设备,但是D001的品类是插座,并没有温度和湿度的功 ...

  6. esp32开发快速入门 8 : MQTT 的快速入门,基于esp32实现MQTT通信

    MQTT 介绍 简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的&quo ...

  7. 使用esp 8266物联网开发板 + Mqtt制作远程控制LED小灯

    背景 某一天修家里的LED小夜灯的时候, 发现这东西, 貌似我也有能力捣鼓一个一样的, 我总是会被突如其来的想法打乱近期的计划, 不过也能收获许多意外之喜(啊~ 知识的味道), 搜了一下板子价格, 才 ...

  8. 物联网开发笔记(64)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示

    一.目的 这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示. 二.环境 ESP32 + ILI9341 3.2寸TFT-L ...

  9. 物联网开发笔记(77)- 使用Micropython开发ESP32开发板之使用MAX7219驱动控制8x8LED点阵模块(续)

    一.目的 这一节我们继续学习如何使用我们的ESP32开发板控制带MAX7219驱动的8x8LED点阵模.我们使用库来显示,更加方便. 二.环境 ESP32 + MAX7219驱动的8x8LED点阵模块 ...

  10. 物联网开发笔记(68)- 使用Micropython开发ESP32开发板之使用官方工具esptool烧录

    一.目的 这一节我们学习如何使用我们的ESP32开发板来烧录. 二.环境 ESP32 + esptool + Win10 + python3.10 + 其他工具. ESP32开发板购买地址: http ...

最新文章

  1. 语音中的 Transformer一文打尽!
  2. C#vs Java哪一个更快? 将25k C#转换为Java(2)
  3. 论文浅尝 | 嵌入常识知识的注意力 LSTM 模型用于特定目标的基于侧面的情感分析...
  4. php脚本启动,有没有办法启动一个PHP脚本并获得状态?
  5. 数字图像处理 阈值分割 MATLAB实验
  6. 速读原著-TCP/IP(端口映射器)
  7. ThoughtWorks思特沃克2018校园招聘之春招家庭作业 - 无人机
  8. sqli-labs 前五关
  9. 零基础应如何学习UI设计
  10. 用php语言说句情话,50句最美情话,套路我都懂,只是舍不得对你用
  11. Navicat premium 导入Excel文件失败
  12. 计算机专业的你,毕业后可以从事什么职业?前景如何?
  13. 手机开发者选项各项参数意义
  14. 【医学图像处理】X-ray 数字射线成像
  15. [生存志] 第78节 左传汇总春秋大事
  16. 微信小程序开发MAP(地图)
  17. (十六)【模电】(放大电路中的反馈)反馈的概念及判断
  18. 【经典转载】ERP实施第一级
  19. 手写了一个简单的JSON解析器,网友直乎:牛!
  20. STM32实战总结:HAL之GUI

热门文章

  1. python 定时任务框架APScheduler
  2. 时间序列预测算法总结
  3. BMFont把美术图片(汉字,数字,字母)字生成艺术字体fnt格式
  4. android窗口动画和壁纸关系,Android壁纸管理(Android N)
  5. 考研数学张宇常说的段子和道理,自己看视频的时候整理的(欢迎指正、补充)
  6. 【更新】iWebOffice2009全文批注 V10.8发布 | 附下载
  7. 【KITTI】KITTI数据集简介(一) — 激光雷达数据
  8. VCPKG安装和使用教程
  9. 机器学习笔记:训练集、验证集与测试集
  10. (HDRP)全局光照技术初探(一)-光照模式与阴影技术