开发者分享:利用 EMQX Cloud 与 ESP32 微控制器实现智能液冷散热系统

简介: 通过引入外部水冷系统、利用微控制器 ESP32、MQTT 服务器 EMQX Cloud Serverless 以及容器化的部署平台 Fly.io,EMQX Cloud 的开发者陶德坤设计一个智能的 DIY 液冷散热解决方案,希望能为其他物联网开发者带来灵感

作者:陶德坤,EMQX Cloud 开发者。

作为一名后端开发人员,我经常需要同时运行多个 Jetbrains IDE (集成开发环境),所以经常面临笔记本电脑过热问题。我曾尝试过各种散热方法,从传统的风扇到更先进的半导体冷却系统,但这些方法都带来了新的问题,如噪音和耗电等。

因此,我设计了一个智能的液冷散热解决方案:通过引入外部水冷系统、利用微控制器 ESP32、MQTT 服务器 EMQX Cloud Serverless 以及容器化的部署平台 Fly.io 来实时监测和控制水温。以下是该解决方案的详述,希望能为其他物联网开发者带来灵感:

物联网智能液冷散热系统

作者 DIY 的物联网智能液冷散热系统

技术选型

我希望这套系统不仅有功能性,还具备可靠性和效率,以确保水温监控系统的稳定运行。以下是我挑选的技术栈:

  • ESP32:在多种选择中,ESP32 微控制器因其集成了 Wi-Fi 和蓝牙功能,以经济高效的特点而脱颖而出。这款芯片为物联网项目提供了强大的性能支持,同时成本可控又不牺牲功能性。
  • DS18B20 水温传感器:对于温度监控,DS18B20 是我的首选,因为它提供了精确的数字温度读数和出色的耐水性能。这款传感器与 ESP32 可协同工作,确保了水温监控系统的准确性和稳定性。
  • EMQX Cloud Serverless MQTT Broker:在众多消息中间件中,EMQX Cloud 因其高性能、可靠性以及 Serverless MQTT 服务在处理大量并发连接和消息路由方面的卓越表现而受到青睐,这些特性对于确保设备间通信的顺畅至关重要。
  • Python 和 Flask:选择 Python 是因为它的表达力强且库函数丰富,Flask 则轻量级且高度灵活,能适应快速开发和部署的需求,这对于迅速实现项目原型至关重要。
  • Fly.io:Fly.io 的全球分布式边缘托管服务能够将容器转换为微虚拟机,提供了一个独特的平台。这不仅加快了应用的部署速度,还大大减少了数据传输的延迟,为用户提供了接近实时的体验。

项目实施

项目的实施阶段是一个将创意转化为实际解决方案的过程。在这个过程中,首先要确保 EMQX Cloud Serverless 的正确配置,然后是硬件的集成,后端服务的开发,最后是系统的部署和测试。

Serverless MQTT Broker 配置

EMQX Cloud Serverless 提供免费配额,对于我们的应用场景来说,这些配额完全能够覆盖所需的成本,这也是我选择 EMQX Cloud Serverless 部署的主要原因之一。另外,它默认支持传输层安全协议(TLS),为我们的数据传输提供了强有力的加密保障,确保数据在传输过程中的机密性、完整性和身份验证,降低了数据泄露或被篡改的风险。

以下是配置 EMQX Cloud Serverless 的具体步骤:

  1. 创建 Serverless MQTT Broker:
    • 登录到 EMQX Cloud 控制台,并导航至 "Create Deployment" 页面。
    • 选择 "Serverless" 部署类型,并按需配置部署。例如区域、SpendLimit 等。
    • 完成配置后,点击 "Create" 按钮,系统会自动创建 Serverless MQTT Broker。
  2. 添加认证信息:
    • 在 MQTT Broker 创建成功后,进行认证信息的配置,确保只有授权的客户端可以连接到 Broker。
  3. 使用 MQTTX 连接测试:

通过以上步骤,我成功地配置了 EMQX Cloud Serverless MQTT Broker,为我们的项目提供了一个安全、可靠且成本效益高的消息中间件。它不仅简化了物联网基础设施的管理和扩展,还通过 TLS 支持确保了数据的安全传输,为项目打下了良好的基础。

硬件集成

在项目中,我们使用 ESP32 微控制器和 DS18B20 水温传感器来监测水温,并将数据发送到云端。通过这种集成,我们实现了一个能夠实时监测并传输水温数据的系统,高效且安全,同时为水冷系统提供了智能化的监控。

  1. Wi-Fi 连接配置: 首先,ESP32 被配置为通过 Wi-Fi 连接到互联网。这是通过在代码中设置 Wi-Fi 的 SSID 和密码来实现的。
  2. 传感器初始化:我们通过 GPIO 25 将 DS18B20 水温传感器连接到 ESP32,并在代码中初始化了传感器,设置了温度读取的分辨率。
  3. 安全的 MQTT 通信: 使用 MQTT 协议,通过 EMQX Cloud Serverless 来安全地传输数据。我们配置了 MQTT broker 的详细信息,并使用了 SSL/TLS 加密来保证数据传输的安全。
  4. 温度数据读取与发送: 系统每分钟读取一次水温,并将读数格式化为 JSON 后,通过 MQTT 协议发布到云端。

使用 Python 和 Flask 开发后端服务

在这个项目中,我们使用 Python 和 Flask 构建了后端服务,以处理来自 ESP32 的温度数据并展示在网页上。整个后端的设计旨在高效处理数据、提供实时反馈,并易于维护。通过这种方式,我们构建了一个既能实时处理来自物联网设备的数据,又能提供用户友好界面的后端服务。这不仅加强了项目的实用性,也为未来的扩展和优化提供了良好的基础。

  1. 配置和 MQTT 集成:我们的 Flask 应用配置了 MQTT 代理设置,使用 flask_mqtt 库实现与 MQTT 代理的直接通信。当接收到来自 emqx/esp32/telemetry 主题的消息时,后端会通过特定函数处理并存储数据。
  2. 数据库管理:使用 SQLite 数据库存储温度数据,通过 Flask 的应用上下文管理数据库连接,并确保数据的安全存储和访问。
  3. Web 界面和 API:后端提供了简单的 Web 界面和一个 API 端点。主页链接到一个显示温度图表的页面,而数据 API 端点返回最近一段时间的温度数据。

系统部署

项目的部署阶段至关重要,我们通过 Docker 和 Fly.io 的配置将 Flask 应用容器化并托管于 Fly.io。这一流程不仅实现了 Flask 应用的云端部署,还确保了服务的快速、安全和高效提供。借助 Fly.io 平台,应用可以根据需求轻松扩展,享有稳定的运行环境。

  1. Docker 容器化:首先,我们编写 Dockerfile,使用 Python 3.8 作为基础镜像,并将应用代码复制到容器的 /app 工作目录。然后,通过 pip 安装必要依赖,例如 Flask 和 Flask-MQTT,并暴露 8080 端口。容器启动时会自动执行 CMD ["python", "app.py"],运行 Flask 应用。
  2. Fly.io 配置:在 fly.toml 文件中,我们定义了应用的运行方式,包括应用名称、主部署区域(如新加坡),构建及挂载点设置。
    • 挂载点:设定挂载点存储数据库文件,保证数据在容器重新部署时的持久性。
    • HTTP 服务配置:配置内部端口为 8080,强制使用 HTTPS,并设定启动、停止策略和最小运行机器数量。
    • 健康检查:通过定期访问 /ping 路由,检查应用运行状态,保障服务稳定。
  3. 部署应用
    1. 创建 Fly.io 应用:使用 flyctl apps create 命令,通过 Fly.io 的 CLI 工具创建新应用。
    2. 部署应用:执行 flyctl deploy 命令,在 Fly.io 上自动构建 Docker 容器镜像并部署。
    3. 验证部署:部署完成后,访问 Fly.io 提供的应用 URL,检验 Flask 应用是否成功运行。

项目成果

实时温度监控系统

利用 ESP32 微控制器和 DS18B20 水温传感器的强大功能,我们设计并实现了一个能够实时监控和调控水冷系统温度的系统。现在,我的笔记本电脑不再因高温而过热,能够稳定运行,而我也可以在任何时候,无论是在咖啡馆的露台上还是在家中的书桌前,享受平静而舒适的工作环境。

稳定的数据传输

通过 EMQX Cloud Serverless,我们实现了从 ESP32 到云端的数据传输的安全性和可靠性。EMQX Cloud Serverless 是一款高性能的 MQTT 代理,具有低延迟特性,能够实时接收和处理温度数据。这确保了系统能够迅速做出反应,并保持高效运行。

功能丰富的 Web 界面

Python 和 Flask 的强大组合为我们提供了一个简洁而直观的 Web 界面,使用户能够轻松查看实时温度数据和历史温度曲线。这不仅提升了用户体验,也使得温度监控更为直观、更易于管理。

功能丰富的 Web 界面

全球分布式云端部署

借助 Fly.io 的全球分布式服务,我们的 Flask 应用得以在云端高效运行。这种部署方式不仅确保了应用的高可用性和稳定性,也极大地减少了数据传输的延迟,为用户提供了近乎实时的体验。

截图

总结与展望

从最初遇到的笔记本过热问题,到构建一个实时的水温监控系统,这个项目充分展示了现代物联网技术是如何帮我们解决生活中的实际问题。

通过整合 ESP32、DS18B20 水温传感器、EMQX Cloud Serverless MQTT Broker、Python、Flask 以及 Fly.io 云平台的能力,我们成功地开发出一个既实用又高效的系统。这个系统不仅提高了我的工作效率,也为类似问题提供了一个创新的解决方案。

对这个项目感兴趣或希望深入了解技术细节的读者,可以在 GitHub 上的 EMQX 的 MQTT 客户端示例中找到完整的代码和更多实现细节。这个资源库不仅是学习和实践的宝库,还可能激发你对物联网和云计算的新想法和创造力。

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
6天前
|
机器学习/深度学习 弹性计算 人工智能
最新版:云服务器租用价格表(一年/按月/按小时报价明细)
阿里云服务器主要包含轻量应用服务器、云服务器 ECS 和 GPU 服务器三大类,不同类型、配置及计费方式的价格存在差异。以下结合最新信息,整理各类服务器的收费标准、价格构成及不同场景下的参考价格,为用户成本核算提供依据。
|
3月前
|
存储 人工智能 安全
函数计算进化之路:AI Sandbox 新基座
AI Agent 的兴起催生了一种全新的、独特的云工作负载类型。它既不完全符合传统 IaaS(对于零散、突发的使用场景而言过于昂贵和笨重)的模式,也打破了第一代 FaaS(函数即服务,因其无状态和较弱的隔离保证而无法满足需求)的设计假想。市场迫切需要一种新型运行时——它必须兼具虚拟机的状态化和隔离性与 Serverless 的经济性和弹性。这正是阿里云函数计算(Function Compute, FC)架构演进所要解决的核心问题。
|
存储 监控 安全
Zabbix SNMP监控安装、配置与服务器实例(学习笔记六)
SNMP可以监控路由器、打印机、UPS、摄像头、服务器等。 1、安装、配置snmp  yum install net-snmp* -y # vim /etc/snmp/snmpd.
3267 0
|
10月前
|
小程序 JavaScript Java
基于SpringBoot的智慧停车场微信小程序源码分享
智慧停车场微信小程序主要包含管理端和小程序端。管理端包括停车场管理,公告信息管理,用户信息管理,预定信息管理,用户反馈管理等功能。小程序端包括登录注册,预约停车位,停车导航,停车缴费,用户信息,车辆信息,钱包充值,意见反馈等功能。
429 5
基于SpringBoot的智慧停车场微信小程序源码分享
|
10月前
|
设计模式 存储 Java
「全网最细 + 实战源码案例」设计模式——责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,允许将请求沿着处理者链进行发送。每个处理者可以处理请求或将其传递给下一个处理者,从而实现解耦和灵活性。其结构包括抽象处理者(Handler)、具体处理者(ConcreteHandler)和客户端(Client)。适用于不同方式处理不同种类请求、按顺序执行多个处理者、以及运行时改变处理者及其顺序的场景。典型应用包括日志处理、Java Web过滤器、权限认证等。
223 13
「全网最细 + 实战源码案例」设计模式——责任链模式
|
数据采集 人工智能 移动开发
盘点人工智能在医疗诊断领域的应用
人工智能在医疗诊断领域的应用广泛,包括医学影像诊断、疾病预测与风险评估、病理诊断、药物研发、医疗机器人、远程医疗诊断和智能辅助诊断系统等。这些应用提高了诊断的准确性和效率,改善了患者的治疗效果和生活质量。然而,数据质量和安全性、AI系统的透明度等问题仍需关注和解决。
1488 10
|
C++
C++一分钟之—名空间(namespace)的作用与使用
【6月更文挑战第22天】C++的命名空间是代码组织的关键,防止命名冲突并促进模块化。通过`namespace`定义代码块,如`MyNamespace{...}`,并使用别名(`namespace MN = MyNamespace::...`)简化引用。避免过度使用和嵌套,以及`using namespace`的滥用,而应在小范围内导入所需成员。明智选择名空间名称并有效利用`using`声明,能提升代码可读性和专业性。
572 1
|
缓存 前端开发 JavaScript
React-Query:解锁你的应用程序潜力,轻松解决接口请求难题!
许多状态管理库,比如`redux`,可以很流畅的管理页面的状态,也有处理副作用的能力,但往往不能很好的处理服务端的状态。
481 1
React-Query:解锁你的应用程序潜力,轻松解决接口请求难题!
|
监控 数据可视化 安全
如何查找访问 Nginx 的前 10 个 IP?
【5月更文挑战第1天】
649 1
如何查找访问 Nginx 的前 10 个 IP?
|
传感器 监控
【MODBUS】Modbus协议和PLC协议的区别和联系
【MODBUS】Modbus协议和PLC协议的区别和联系
636 0