Funpack3-5:基于Arduino Uno R4 Wifi实现HA温度传感器
该项目使用了Arduino开发板 配合 AHT30传感器和MQTT协议,实现了HA平台的温度传感器的设计,它的主要功能为:实时采集环境温度,上报到HA平台。
标签
Funpack活动
HOME ASSISTANT
Arduino UNO R4 WiFi
AHT30
XXU
更新2025-01-13
171

一、任务目标

驱动Arduino uno r4 wifiI2C接口,按照AHT30传感器的流程获取温度后,将温度数据通过MQTT协议,发送到Home Assistant上,并且在Home Assistant显示出来温度。

 

要实现以上的目标,可以分解为以下步骤

1、成功安装Arduino开发环境、Home AssistantEMQX运行环境(Doker安装)

2、成功初始化I2C接口可以发送数据

3、安装AHT30流程,初始化 与 驱动传感器,获取温度值

4、将温度值通过MQTT协议发送出去

 

二、平台简介

1MQTT协议

MQTTMessage Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议,它被设计用于低带宽、高延迟或不可靠的网络环境。MQTT协议的主要特点包括:

1.轻量级:MQTT协议头部非常小,最小只有2字节,这使得它非常适合带宽受限的环境。

2.低功耗:由于其轻量级的特性,可以快速交互数据后让设备再次进入待机模式,降低了设备的耗电量,所以MQTT在功耗方面表现良好,适合电池供电的设备。

3.高可靠性:MQTT提供了三种消息服务质量(QoS)等级,允许开发者根据应用需求选择合适的消息传递保证:

   - QoS 0:最多一次,消息可能丢失,但不重复。

   - QoS 1:至少一次,消息可能重复,但不丢失。

   - QoS 2:只有一次,确保消息只到达一次。

4.易于实现:MQTT协议简单,易于在各种设备上实现,包括嵌入式系统。

5.支持多种网络:MQTT可以运行在TCP/IP网络之上,也可以通过其他协议进行隧道传输。

6.保持连接:MQTT客户端和服务器之间保持长连接,减少了频繁建立和断开连接的开销。

7.安全性:MQTT支持多种安全机制,包括TLS/SSL加密传输和客户端认证。

8.可扩展性:MQTT支持大量客户端连接,适合大规模分布式系统的实时消息传输。

9.异步通信:MQTT允许消息发布者和订阅者之间进行异步通信,提高了系统的响应性和可伸缩性。

10.跨平台:MQTT不依赖于特定的平台或语言,有多种编程语言的客户端库可供选择,只要设备支持MQTT协议,就可以实现消息的发布和订阅。

 

2Home Assistant

Home Assistant是一个开源的智能家居平台,旨在通过集成各种智能设备和服务,提供一个统一的、可自定义的家庭自动化解决方案。以下是Home Assistant的一些核心特点和功能:

 

1.开源与社区支持:Home Assistant是一个基于Python的开源项目,拥有一个活跃的全球社区,用户可以无偿使用并参与开发。比如:最近小米就开源了相关代码。

2.设备集成:Home Assistant支持多种品牌和类型的智能设备,如灯光、开关、传感器、安全系统等,允许用户通过一个中心化的系统来控制和管理家中的各种智能设备。

3.自动化与场景设置:用户可以根据设备的状态、时间、位置等多种条件,设置自动化的执行逻辑,以及创建多个自动化的集合,一键触发多个设备的联动。

4.跨平台支持:Home Assistant支持多种操作系统和设备,用户可以在手机、电脑、平板等多种设备上使用。

5.集中化管理:所有智能家居设备集中在一个平台上进行管理,降低了用户的使用门槛和维护成本。

6.隐私保护:Home Assistant强调本地控制和隐私,适合在本地服务器如Raspberry Pi上运行,避免了数据上传到云端的隐私风险。

7.自定义与扩展:Home Assistant提供了丰富的插件和自定义功能,方便用户根据需求进行扩展,包括Python脚本编写自定义组件和自动化逻辑。

8.用户界面:支持UI客制化,用户可以通过安装主题、更换背景图片等方式,打造个性化的管理界面。

9.应用场景广泛:Home Assistant在家庭生活、办公场所以及物联网项目开发与测试中都有广泛的应用。

 

Home Assistant的灵活性和开放性使其成为智能家居领域中一个受欢迎的平台,允许用户自由组合不同品牌的设备,只要协议合适就可以接入Home Assistant的平台,实现个性化的自动化智能家居解决方案,例如A品牌的亮度传感器,B品牌的电动窗帘,这两个品牌没有合作,所以数据不能互通,但是如果AB品牌都接入了Home Assistant后就可按照自己的想法实现自动化控制。

 

3EMQX

EMQX是一款开源、高性能的分布式MQTT消息中间件,专为物联网(IoT)、实时数据传输和消息分发场景设计。以下是EMQX的一些核心特性和优势:

 

1.多协议支持:以MQTT协议为核心,同时支持MQTT-SNCoAPHTTPWebSocket等多种通信协议,满足不同设备与系统的通信需求。

2.支持完整的MQTT V3.1/V3.1.1V5.0协议规范,QoS0, QoS1, QoS2消息支持,持久会话与离线消息支持,Retained消息支持,Last Will消息支持,TCP/SSL连接支持,MQTT/WebSocket/SSL支持,HTTP消息发布接口支持等。

3.完全开源:基于Apache 2.0协议许可,完全开源,适用于产品原型设计、物联网创业公司以及大规模的商业部署。

4.支持海量设备连接:EMQX利用Erlang/OTP的高并发特性,支持单机百万级设备连接,是物联网场景的理想选择。

 

 三、硬件平台简介

1、开发板Arduino Uno R4 Wifi简介

Arduino Uno R4 WiFi Arduino 官方出品的最新UNO开发板。

 

主控:

Renesas RA4M132Arm® Cortex®-M4架构,时钟频率为48 MHz,集成USB 2.0 全速模块

 

无线模块:

乐鑫出品的ESP32-S3 Mini模组,支持Wi-Fi  BLE 5.0搭载Xtensa® 32 位 LX7 双核处理器,主频高达 240 MHz(比主控强,嘿嘿)

 

板载资源:

LED矩阵:板载一个12×8的红色LED矩阵。

Qwiic连接器:提供了一个Qwiic I2C连接器,方便连接到Qwiic生态系统中的各种模块。

其他:包括ADC 12DACCAN总线和运算放大器等。

USB Type-c:支持USB HID


2、传感器简介

AHT30是一款高性能的温湿度传感器,具有以下特点和应用范围:

 

1.功耗低、精度高:AHT30以其低功耗和高测量精度而受到青睐。

2.数字输出,I2C接口:AHT30提供数字输出,并通过I2C接口与系统进行通信,方便集成。

3.优异的长期稳定性:即使在恶劣环境下,AHT30也能保持稳定性能。

4.响应迅速、抗干扰能力强:AHT30能够快速响应环境变化,并且具有较强的抗干扰能力。

5.完全标定:AHT30传感器在出厂前已经过完全标定,确保了测量的准确性。

6.技术规格:

   -供电电压:DC 2.2-5.5V

   -测量范围:温度-40120℃、湿度0100%RH

   -典型精度:温度±0.5℃、湿度±3%RH@25℃

   -分辨率:温度0.01℃、湿度0.024%RH

 

规格书上介绍的I2C速率 与 采样间隔建议。

image.png


经过简单测试,Arduino默认的I2C的速率为100Khz,所以在规格书的范围内,并且从机也有ACK,所以可以使用。

image.png


这个传感器的驱动流程比较简单,但是流程图画的特别坑,容易让人误解。0x70 0x71实际上是设备读写地址,不是实际需要发送的数据。

image.png


上图的0X700X71是传感器的写、读地址,而0xAC是写的目标寄存器,0x33,0x00则是要写入的数据。

 

读取到值后要转化为实际的温度又有坑,按照规格书给的公式,代码运行后都是0,所以要该乘除的顺序。


image.png


综上驱动传感器的流程是:

①地址0X70寄存器0xAC0x33,0x00

②等待80ms

③地址0X717字节

④取处温度值,温度值是由第5字节、4字节、3的低四位字节,组成

⑤按照公式换算出实际温度

 

看到上文,肯定有人问为什么需要去详细理解驱动的流程,实际Arduino开发中都是直接调用相关的库就可以快速、方便的驱动传感器了,这里有两点:

①我最初初始化I2C时,跳进去坑了(下面会提到),所以怀疑传感器本身有问题,即使传感器有ack

②想实际的驱动一下传感器给自己增加一点经验,因为不是每一个传感器都有库的。

 

四、实际开发

1、驱动温度传感器

 

目的:

驱动AHT30传感器,获取实际的温度,并且使用串口打印出来。

 

AHT30模块:

AHT30模块使用I2C接口,2套排针用于调试时接逻辑分析仪确认I2C数据。

image.png


接线:

下图可以看到开发板总共有3I2C,有两个I2C附近有电源、地,如下图的1,2,但是12是不同I2C,需要不同的配置。大量例程的I2C都是使用第二组的,尝试了很久也没能打开,可能是用的人比较少。(会用的人请教一下),所以最终选择了QWIIC处接线。



image.png


驱动库:

Arduino驱动库中,根本找不到AHT30的驱动库

image.png


只能找到AHT1020的库

image.png


仔细阅读AHT20 与 对比 AHT30的规格书后,对比驱动发现AHT20的测量、数据转化的命令与AHT30一致,所以驱动库极大概率是通用的。

 

驱动的逻辑与流程、发送的数据、回读数据的所有流程都是一样的。

image.png


要点:

从上文可知有I2C的引脚需要确认,经过确认后Wire库可以切换不同的I2C,使用QWIIC接口处的I2C引脚,必须,必须使用Wire1才可以初始化正确的引脚,不然必定通讯失败!!!!

 

 

运行结果:

 

图片:

image.png

image.png

GIF:

 232323.gif

 

 

2MQTT上报数据

 

目的:

测试Arduino Uno r4 Wifi可以通过板载的WIFI模块正确的使用MQTT协议上报温度数据,并且显示在HA终端上。测试使用数据为16.8℃,每秒加0.1℃。

 

 

运行结果:

图片:

image.png


image.png

image.png


五、最终效果

实时采集温度上报HA

目的:

间隔1秒将实际的温度数据上报到HA平台,并且显示出来。

 

流程图:

image.png

 

运行结果:

图片:

image.png

image.png

image.pngimage.png


小计:

在我的电脑上每次打开Doker都会提示Docker Engine stopped,需要启动 并设置下图的服务。之后再次打开即可

image.png


Home Assistant 中个人认为比较重要的就是configuration.yaml的配置,我的配置如下

# Loads default set of integrations. Do not remove.
default_config:


# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes


automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml


mqtt:
  - sensor0:
      - unique_id: arduino uno Temp
        name: "arduino Temp"
        state_topic: "homeassistant/sensor/temp"
        # suggested_display_precision: 1
        unit_of_measurement: "°C"
        value_template: "{{ value_json.Temp }}"


附件下载
Code.zip
所有代码,依次是驱动传感器获取温度、上报模拟数据、上报实际温度数据
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号