基于arm芯片的驱动开发——温湿度传感器dht11

一、dht11基础知识:

1.DHT11 内部集成了一个电阻式感湿元件、一个 NTC(负温度系数)测温元件 ,以及一个高性能 8 位单片机。电阻式感湿元件会随着环境湿度变化而改变自身电阻值;NTC 测温元件的电阻值会随温度的变化而变化;8 位单片机则负责对感湿元件和测温元件采集到的信号进行处理,并输出校准后的数字信号 。

2.接口方式:采用单线制串行接口(单总线双向)与外部设备(如单片机)通信,仅需将 DATA 引脚连接到单片机的一个 I/O 口即可实现数据传输。

3.具体流程:

主机先将 DATA 线拉低,持续至少 18ms(为传感器留出足够的 "唤醒 & 检测" 时间),随后再将 DATA 线拉高,并延时等待(通常 20 - 40μs),完成 "起始信号" 的发送。

传感器检测到主机的起始信号后,会先将 DATA 线拉低80μs (作为 "响应确认"),随后再将 DATA 线拉高80μs(进入 "准备输出数据" 的状态)。

DHT 通过 "DATA 线高电平的持续时间" 来区分数据位 "0" 和 "1":

  • 数据 "0" :拉高后,高电平持续约26 - 28μs,随后拉低。
  • 数据 "1" :拉高后,高电平持续约70μs,随后拉低。

所有数据位(通常是湿度、温度等信息的二进制编码)传输完成后,从机(DHT)会释放总线,由上拉电阻将 DATA 线拉回高电平,通信结束。

二、实现过程:(包含关键代码)

1.通过 Linux 内核的miscdevice(杂项设备)框架实现主设备号(固定为主设备号 10),次设备号动态分配,简化设备注册流程。

2.核心函数:代码依赖特定平台的 GPIO 函数

初始化和退出函数:

dht11作用过程函数:对应流程图

通过模拟 DHT11 的单总线时序,实现了传感器数据的读取,并通过 Linux 杂项设备框架向用户空间提供了标准的文件操作接口。用户空间程序可通过open("/dev/dht11")read()close()的流程获取温湿度数据(5 字节),再进行解析。

注意,DHT11 通信对时序敏感,延时函数(msleep/udelay)的精度会影响通信稳定性。

相关推荐
专注VB编程开发20年6 小时前
tftp不支持列出目录下文件的功能
arm开发·tftp
2601_949695597 小时前
昨天刚解决:说说我是怎么修好Realtek高清晰音频管理器打不开的
驱动开发·计算机外设·电脑
尔染君子8 小时前
嵌入式Linux驱动开发(按键驱动)
linux·驱动开发
智者知已应修善业10 小时前
【proteus 74160实现模60计数器模41计数器】2024-5-27
驱动开发·经验分享·笔记·硬件架构·proteus·硬件工程
♛识尔如昼♛10 小时前
Linux 设备驱动程序(3)- 字符驱动(2)
linux·驱动开发·字符设备驱动
小小龙学IT11 小时前
Rust Web 框架 Axum:轻量级异步的下一代后端利器
前端·驱动开发·rust
cft56200_ln11 小时前
TDA4时间同步3 网卡添加虚拟时间戳
c语言·开发语言·arm开发·驱动开发·嵌入式硬件·网络协议
程序猿玖月柒1 天前
ubuntu22.04.2安装英伟达驱动
驱动开发·驱动·英伟达·端侧ai
Tian_Hang1 天前
Linux基础知识(四)
linux·ide·驱动开发·计算机视觉·硬件工程·动画
振南的单片机世界1 天前
启动流程:上电先取栈顶和复位向量,再进main
arm开发·stm32·嵌入式硬件