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 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物联网开发记录相关推荐
- 从零讲起:ESP32+Micropython+MQTT阿里云物联网
ESP32+Micropython+MQTT阿里云物联网 前言 一.ESP32是什么? 二.Micropthon开发环境搭建 1.ESP32串口驱动下载与安装 三.IDE工具下载及使用说明 1.IDE ...
- ESP32接入腾讯云物联网开发平台
文章目录 前言 1 资料参考 2 对接总体思路 3 代码移植 3.1 component qcloud_iot 3.2 项目顶层处理 3.3 component main 4 移植问题备忘 CMake ...
- 【物联网开发平台MQTT快速接入使用】
物联网开发平台MQTT快速接入使用 最近做的一个小项目需要将数据上传到物联网平台,然后在网上看了相关视频是如何操作的,进行一些简单的记录,使用的平台是腾讯云平台 视频教程链接 图 1 图 2 图 3 ...
- 乐鑫esp8266模块MicroPython开发板MQTT物联网人工智能最小系统
简 介: ※对于购买自网络的基于ESP8266的实验模块进行了初步的测试,它其中的一些示例进行了练习.特别是对于基于ESP8266的特殊的一些外设的测试. 关键词: ESP8266,MicroPyth ...
- mqtt调试助手_腾讯物联网开发平台入门操作,如何使用MQTT协议上传温度湿度数据...
今天我们测试一下腾讯云的物联网开发平台上传数据的功能,也就是构建一下发布数据的PUBLISH报文命令,上传温湿度数据. 我们接着使用前文中的D001设备,但是D001的品类是插座,并没有温度和湿度的功 ...
- esp32开发快速入门 8 : MQTT 的快速入门,基于esp32实现MQTT通信
MQTT 介绍 简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的&quo ...
- 使用esp 8266物联网开发板 + Mqtt制作远程控制LED小灯
背景 某一天修家里的LED小夜灯的时候, 发现这东西, 貌似我也有能力捣鼓一个一样的, 我总是会被突如其来的想法打乱近期的计划, 不过也能收获许多意外之喜(啊~ 知识的味道), 搜了一下板子价格, 才 ...
- 物联网开发笔记(64)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示
一.目的 这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示. 二.环境 ESP32 + ILI9341 3.2寸TFT-L ...
- 物联网开发笔记(77)- 使用Micropython开发ESP32开发板之使用MAX7219驱动控制8x8LED点阵模块(续)
一.目的 这一节我们继续学习如何使用我们的ESP32开发板控制带MAX7219驱动的8x8LED点阵模.我们使用库来显示,更加方便. 二.环境 ESP32 + MAX7219驱动的8x8LED点阵模块 ...
- 物联网开发笔记(68)- 使用Micropython开发ESP32开发板之使用官方工具esptool烧录
一.目的 这一节我们学习如何使用我们的ESP32开发板来烧录. 二.环境 ESP32 + esptool + Win10 + python3.10 + 其他工具. ESP32开发板购买地址: http ...
最新文章
- 语音中的 Transformer一文打尽!
- C#vs Java哪一个更快? 将25k C#转换为Java(2)
- 论文浅尝 | 嵌入常识知识的注意力 LSTM 模型用于特定目标的基于侧面的情感分析...
- php脚本启动,有没有办法启动一个PHP脚本并获得状态?
- 数字图像处理 阈值分割 MATLAB实验
- 速读原著-TCP/IP(端口映射器)
- ThoughtWorks思特沃克2018校园招聘之春招家庭作业 - 无人机
- sqli-labs 前五关
- 零基础应如何学习UI设计
- 用php语言说句情话,50句最美情话,套路我都懂,只是舍不得对你用
- Navicat premium 导入Excel文件失败
- 计算机专业的你,毕业后可以从事什么职业?前景如何?
- 手机开发者选项各项参数意义
- 【医学图像处理】X-ray 数字射线成像
- [生存志] 第78节 左传汇总春秋大事
- 微信小程序开发MAP(地图)
- (十六)【模电】(放大电路中的反馈)反馈的概念及判断
- 【经典转载】ERP实施第一级
- 手写了一个简单的JSON解析器,网友直乎:牛!
- STM32实战总结:HAL之GUI