当前位置: 首页 > article >正文

硬件入门 + 单片机基础(第14天)综合通信实训

ESP32 物联网结业项目WiFi MQTT 继电器 温湿度 整合完整版项目说明这是物联网综合结业项目整合了你学过的所有核心技术WiFi 自动联网 断网重连MQTT 远程控制继电器开关DHT11 温湿度自动上报心跳包 消息防丢失 掉线自动重连公共 EMQX 服务器外网可远程控制一、硬件清单ESP32 开发板DHT11 温湿度传感器5V 继电器模块杜邦线接线DHT11 数据引脚 →GPIO4继电器 IN 引脚 →GPIO5共地、共 5V/3.3V二、完整代码直接上传可结业#include WiFi.h #include PubSubClient.h #include DHT.h #include DHT_U.h // 1. 基础配置必须修改 // WIFI 信息 const char* WIFI_SSID 你的WiFi名称; const char* WIFI_PASSWORD 你的WiFi密码; // MQTT 公共服务器EMQX 免费外网 const char* MQTT_BROKER broker.emqx.io; const int MQTT_PORT 1883; // 设备唯一ID防止重复 const char* MQTT_CLIENT_ID ESP32_IOT_Project_8866; // MQTT 主题远程控制 上报数据 #define SUB_TOPIC iot/esp32/relay/control // 订阅远程控制继电器 #define PUB_TEMP iot/esp32/sensor/temp // 发布温度 #define PUB_HUMI iot/esp32/sensor/humi // 发布湿度 #define PUB_HEART iot/esp32/heartbeat // 发布心跳包 // 2. 硬件引脚 #define DHT_PIN 4 // DHT11 数据脚 #define DHT_TYPE DHT11 #define RELAY_PIN 5 // 继电器控制脚 // 3. 全局对象 DHT dht(DHT_PIN, DHT_TYPE); WiFiClient espClient; PubSubClient client(espClient); // 定时任务 unsigned long lastSensorSend 0; // 温湿度上次上报时间 unsigned long lastHeartbeat 0; // 心跳上次发送时间 const long SENSOR_INTERVAL 5000; // 5秒上报一次 const long HEART_INTERVAL 10000; // 10秒心跳一次 // 设备状态 bool relayState false; // 4. WIFI 连接带重连 void setupWiFi() { Serial.println(正在连接 WiFi...); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); int retry 0; while (WiFi.status() ! WL_CONNECTED retry 20) { delay(500); Serial.print(.); retry; } if (WiFi.status() WL_CONNECTED) { Serial.println(\nWiFi 连接成功); Serial.print(IP: ); Serial.println(WiFi.localIP()); } else { Serial.println(\nWiFi 连接失败重启重试...); ESP.restart(); } } // 5. MQTT 消息回调接收远程指令 void callback(char* topic, byte* payload, unsigned int length) { Serial.print(收到指令); String cmd ; for (int i 0; i length; i) { cmd (char)payload[i]; } Serial.println(cmd); // 远程控制继电器 if (cmd ON) { relayState true; digitalWrite(RELAY_PIN, HIGH); Serial.println(✅ 继电器已打开); } else if (cmd OFF) { relayState false; digitalWrite(RELAY_PIN, LOW); Serial.println(❌ 继电器已关闭); } } // 6. MQTT 重连防掉线 void reconnectMQTT() { while (!client.connected()) { Serial.println(尝试连接 MQTT 服务器...); // 尝试连接 if (client.connect(MQTT_CLIENT_ID)) { Serial.println(MQTT 连接成功 ✅); client.subscribe(SUB_TOPIC); // 订阅控制主题 Serial.println(已订阅远程控制主题 String(SUB_TOPIC)); } else { Serial.print(失败原因); Serial.print(client.state()); Serial.println( 2秒后重试...); delay(2000); } } } // 7. 发送温湿度 void sendSensorData() { if (millis() - lastSensorSend SENSOR_INTERVAL) { lastSensorSend millis(); float temp dht.readTemperature(); float humi dht.readHumidity(); if (isnan(temp) || isnan(humi)) { Serial.println(DHT11 读取失败); return; } // 转字符串发送 String tempStr String(temp); String humiStr String(humi); client.publish(PUB_TEMP, tempStr.c_str()); client.publish(PUB_HUMI, humiStr.c_str()); Serial.print( 温度); Serial.print(temp); Serial.print( ℃ | 湿度); Serial.print(humi); Serial.println( %RH); } } // 8. 发送心跳包在线检测 void sendHeartbeat() { if (millis() - lastHeartbeat HEART_INTERVAL) { lastHeartbeat millis(); client.publish(PUB_HEART, ESP32 is online); Serial.println(❤️ 心跳已发送); } } // 9. 初始化 void setup() { Serial.begin(115200); // 硬件初始化 pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, LOW); dht.begin(); // 网络初始化 setupWiFi(); // MQTT 初始化 client.setServer(MQTT_BROKER, MQTT_PORT); client.setCallback(callback); } // 10. 主循环 void loop() { // MQTT 断网自动重连 if (!client.connected()) { reconnectMQTT(); } // MQTT 必须运行的循环 client.loop(); // 定时上报温湿度 sendSensorData(); // 定时发送心跳 sendHeartbeat(); delay(100); }三、功能详解结业必备1. 整合功能WiFi 自动连接MQTT 远程控制继电器DHT11 温湿度定时上报外网远程控制EMQX 公共服务器2. 优化功能专业级WiFi 断网自动重连MQTT 掉线自动重连心跳包检测设备在线状态消息稳定不丢失DHT11 数据异常容错四、手机 / 电脑远程控制方法打开 EMQX 在线 MQTT 工具https://www.emqx.io/online-mqtt-client连接broker.emqx.io:1883订阅查看iot/esp32/sensor/tempiot/esp32/sensor/humiiot/esp32/heartbeat发布控制主题iot/esp32/relay/control消息ON/OFF五、本周结业目标✅ 完成物联网综合项目✅ 掌握WiFi MQTT 传感器 继电器✅ 实现外网远程控制 数据上传✅ 代码具备重连、心跳、防丢包工业级稳定性

相关文章:

硬件入门 + 单片机基础(第14天)综合通信实训

ESP32 物联网结业项目:WiFi MQTT 继电器 温湿度 整合完整版 项目说明 这是物联网综合结业项目,整合了你学过的所有核心技术: WiFi 自动联网 断网重连MQTT 远程控制继电器(开关)DHT11 温湿度自动上报心跳包 消息…...

独立开发者如何利用Taotoken管理多个项目的AI密钥与用量

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用Taotoken管理多个项目的AI密钥与用量 作为独立开发者,你可能同时维护着多个项目,例如一…...

毫秒算网的光通信技术——从“东数西算“到“毫秒用算“

引言:从"算力在哪"到"算力怎么到" 2021年启动的"东数西算"工程回答了一个根本问题:算力应该布局在哪里。通过在西部建设8大枢纽、10大集群,国家将算力基础设施与绿色能源禀赋深度耦合,开启了算力地…...

别再手动敲空格了!用LaTeX的\parskip命令一键搞定论文段落间距(附局部调整技巧)

LaTeX段落间距精修指南:从全局配置到章节级微调 在学术写作的世界里,格式规范往往比内容本身更容易引发焦虑。当你在凌晨三点盯着屏幕,发现第17次调整的段落间距仍然不符合期刊要求时,那种绝望感足以让任何研究者崩溃。传统的手动…...

深入解析Android网络通信框架:OkHttp与Retrofit原理与实践

第一章:引言 移动互联网时代,网络通信是Android应用的核心能力之一。OkHttp与Retrofit作为Android生态中最主流的网络通信框架,已成为开发者必须掌握的技术栈。本章将简要介绍二者在项目中的定位及其技术演进历程。 第二章:OkHttp核心原理剖析 2.1 OkHttp架构设计 OkHtt…...

对话式AI应用开发实战:基于Bolna框架的语音助手构建与优化指南

1. 项目概述:Bolna,一个面向对话式AI应用的开源编排框架如果你正在构建一个需要处理语音或文本对话的AI应用,比如一个智能客服、一个语音助手,或者一个能通过电话自动处理预约的机器人,你可能会立刻想到几个核心挑战&a…...

3个简单步骤让你的Windows桌面瞬间整洁:免费开源分区工具NoFences终极指南

3个简单步骤让你的Windows桌面瞬间整洁:免费开源分区工具NoFences终极指南 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否厌倦了桌面上杂乱无章的图标&…...

分布式系统与微服务架构:从核心原理到Java开发实战

1. 分布式系统平台:从背景到实战应用的深度剖析在软件开发领域,尤其是企业级应用和互联网服务的构建中,“分布式”早已不是一个新鲜词汇,而是工程师们日常打交道的核心范式。我们常听到J2EE、.NET、微服务这些名词,它们…...

Fansly下载器终极指南:3分钟学会离线保存你喜欢的创作者内容

Fansly下载器终极指南:3分钟学会离线保存你喜欢的创作者内容 【免费下载链接】fansly-downloader Easy to use fansly.com content downloading tool. Written in python, but ships as a standalone Executable App for Windows too. Enjoy your Fansly content of…...

Harness层加密传输:Agent通信安全

Harness层加密传输:Agent通信安全 标题选项 《CI/CD管道的“隐形长城”:深入Harness Agent通信全链路加密传输机制》《从握手到数据:拆解Harness云原生平台Agent-Manager层加密传输的核心原理与实践》《DevOps安全必知:Harness如…...

终极指南:5步解锁完整Koikatu游戏体验的HF Patch安装方案

终极指南:5步解锁完整Koikatu游戏体验的HF Patch安装方案 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch 你是否曾经为《恋活&#xf…...

抖音批量下载神器:三步搞定无水印视频下载,告别手动烦恼

抖音批量下载神器:三步搞定无水印视频下载,告别手动烦恼 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser f…...

创业团队如何利用多模型聚合平台优化产品开发流程

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 创业团队如何利用多模型聚合平台优化产品开发流程 对于小型创业团队而言,在快速迭代产品的过程中,大模型能…...

ChatGPT支付功能现状深度研判(2024Q2最新政策+OpenAI开发者文档交叉验证)

更多请点击: https://intelliparadigm.com 第一章:ChatGPT实时支付功能在哪里 ChatGPT 本身并不原生支持实时支付功能。OpenAI 官方发布的 ChatGPT(包括免费版、Plus 订阅版及 Team/Enterprise 版)定位为人工智能对话助手&#x…...

5分钟掌握全平台炫酷抽奖:Magpie-LuckyDraw开源项目深度解析

5分钟掌握全平台炫酷抽奖:Magpie-LuckyDraw开源项目深度解析 【免费下载链接】Magpie-LuckyDraw 🏅A fancy lucky-draw tool supporting multiple platforms💻(Mac/Linux/Windows/Web/Docker) 项目地址: https://gitcode.com/gh_mirrors/ma…...

小学期第一周学习记录

这周自学了Multisim仿真软件,完成了555方波发生器二阶低通滤波器的搭建,成功实现了方波到正弦波的转换。学习过程1. 555方波发生器搭建参考课本公式 f ≈ 1.44 / ((R12R2)C1) 设计参数,一开始因为电容单位看错(把nF写成μF&…...

告别背包爆满!TQVaultAE:泰坦之旅装备管理的终极解决方案

告别背包爆满!TQVaultAE:泰坦之旅装备管理的终极解决方案 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE 你是否曾在《泰坦之旅》的冒险中&#xff0…...

NotebookLM智能摘要失效真相(附Google内部测试报告·仅限本期公开)

更多请点击: https://intelliparadigm.com 第一章:NotebookLM智能摘要失效的底层归因分析 NotebookLM 的智能摘要功能在部分场景下出现语义断裂、关键信息遗漏或摘要长度异常(如仅输出“…”),其根本原因并非模型随机…...

高性能WebGL地图引擎OME:海量地理空间数据可视化实战指南

1. 项目概述与核心价值 如果你在开源社区里混迹过一段时间,尤其是对数据可视化、地理信息系统或者大规模图数据渲染感兴趣,那么“sgl-project/ome”这个项目标题很可能已经引起了你的注意。OME,全称可能是“Open Map Engine”或类似的概念&am…...

一颗“语音前端 DSP”到底能解决多少现实问题?

在做音频产品开发这些年里,我接触过不少“语音处理模组”。但很多产品都有一个共同问题: 参数看起来很漂亮,真正落地时却很难调。尤其是下面这些场景:麦克风和喇叭距离太近,疯狂啸叫回音消除效果差,一开大音…...

卡片里放图片?用 memory:// 协议才是正确打开方式

文章目录卡片图片的限制项目结构卡片 UI:用 memory:// 显示图片FormAbility:下载图片 → 写入共享内存 → 推送更新显示本地图片(无需下载)memory:// 协议原理关键注意事项写在最后卡片里显示图片这件事比我想象的要麻烦一点。卡片…...

B站视频下载终极指南:5步轻松掌握BilibiliDown完整教程

B站视频下载终极指南:5步轻松掌握BilibiliDown完整教程 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/…...

Linux主机资产标识实战指南

Linux主机资产标识实战指南本文面向具备一定 Linux 基础的技术人员,围绕主机资产标识展开,重点讨论主机命名、标签规范和资产映射。在中级运维和系统管理工作中,这类主题常常与配置变更、资源状态、权限边界、自动化任务和业务影响交织在一起…...

避开这3个坑,你的STM32F103+LoRa+阿里云项目才能跑得稳

STM32F103LoRa阿里云物联网项目稳定性优化实战指南 在物联网设备开发中,稳定性往往是区分业余原型与工业级产品的关键分水岭。许多开发者能够快速搭建起STM32F103与LoRa模块的基础通信框架,并实现阿里云物联网平台的数据上传,却在长期运行中频…...

基于Vue3+TypeScript的ChatGPT风格前端界面集成实战

1. 项目概述与核心价值最近在折腾一个个人项目,想给一个静态网站加上智能对话的能力,让访客能随时问点问题。一开始想自己从零搭建,但考虑到前后端、AI接口、实时通信这些环节,工作量着实不小。后来在GitHub上逛的时候&#xff0c…...

WRF-CHEM模拟翻车?可能是你的namelist.chem没设对(附MEIC数据实战配置清单)

WRF-CHEM模拟异常排查指南:MEIC数据与namelist.chem的深度适配 当WRF-CHEM模拟结果出现异常时,很多用户会第一时间怀疑MEIC数据处理环节的问题,但实际上,namelist.chem参数与MEIC特性的匹配度才是更隐蔽的关键因素。本文将带您深入…...

Claude技能库开发指南:工具调用原理与模块化实践

1. 项目概述:一个为Claude模型量身定制的技能库最近在探索如何让Claude这类大型语言模型更好地融入我的日常工作流时,我遇到了一个非常有意思的项目——DhanushNehru/claude-skills。简单来说,这是一个专门为Anthropic的Claude模型设计的“技…...

LabVIEW PC端软件开发:架构设计、性能优化与工程化实践

1. 项目概述:为什么选择在PC上深耕LabVIEW开发?当大家谈论起LabVIEW,很多人的第一印象可能还停留在它与各种数据采集卡、PLC、嵌入式硬件绑定的场景里。作为一个在这个图形化编程环境里摸爬滚打了十多年的老工程师,我想说&#xf…...

Consul-K8s实战:Kubernetes与Consul服务网格的无缝集成指南

1. 项目概述:当Consul遇见Kubernetes如果你正在Kubernetes集群里管理微服务,并且已经听说过或者正在使用HashiCorp Consul来做服务发现和配置管理,那么hashicorp/consul-k8s这个项目绝对是你绕不开的工具。简单来说,它不是一个独立…...

实测Taotoken多模型聚合调用的响应延迟与稳定性观感

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 实测Taotoken多模型聚合调用的响应延迟与稳定性观感 在项目开发中,我们常常需要接入不同的大模型来满足多样化的需求。…...