回答

收藏

[评测分享] 【树莓派5测评】 09.单总线协议及温湿度读取

#板卡评测 #板卡评测 1830 人阅读 | 0 人回复 | 2024-03-18

本帖最后由 stm1024 于 2024-3-19 11:28 编辑

单总线(1-wire)是美国DALLAS公司推出的外围串行扩展总线技术。与SPI、I?C串行数据通信方式不同,它采用单根信号线传输。 这种协议由一个总线主节点、或多个从节点组成系统,通过根信号线对从芯片进行数据的读取。每一个符合单总线协议的从芯片都有一个唯一的地址,包括48位的序列号、8位的家族代码和8位的CRC代码。主芯片根据64位寻址对各个芯片进行双向通信,因此其协议对时序的要求较严格,初始化、写bit或读bit都有严格的时序要求,但是位于位之间没有严格要求。单总线的数据传输速率一般为16.3Kbit/s,最大可达142 Kbit/s,通常情况下采用100Kbit/s以下的速率传输数据。主设备I/O口可直接驱动200m范围内的从设备,经过扩展后可达1km范围。这种传输方式信号线上既传输时钟又传输数据,而且数据传输是双向的,具有节省I/O口线、资源结构简单、成本低廉、便于总线扩展和维护等诸多优点,但是对于总线的位定时要求比较高。

树莓派的将该协议集成到了系统中,我们使用的时候将会非常方便,设备树上实现了很多芯片模块的解析工作,我们使用起来会很方便,这里我本来打算是使用经典的DS18B20温度传感器的,但是不想翻箱倒柜的找模块,手边找到了一个DHT11,所以就以它为例,介绍在树莓派环境下使用单总线协议。
首先是配置打开该外设,图形化的方式如下:


当然,也可以在终端中使用命令:
  1. sudo raspi-config
复制代码


两者的效果是一样的。

然后配置config.txt文件:
  1. sudo nano /boot/firmware/config.txt
复制代码
在最后一行加上如下内容:
  1. dtoverlay=dht11,gpiopin=4
复制代码
注意,这里GPIO的通道要与线路连接保持一致。

然后reboot重启系统。
重启以后,使用 lsmod | grep dht11检查系统是否已经自动加载一线协议的驱动模块。

在Linux中,一切皆文件,对应额功能,可以进入/sys/bus/iio/devices/iio:device0,可以看到所加载的模块,通过访问该目录下的一些数据,就可以获取到节点名称,温度和湿度:

注意,温度和湿度都是1000的整数倍,因此,上图中看到的19000和38000,分别表示温度为19℃和相对湿度为38%。

通过使用上述的设备树,可以省去了很多硬代码模拟时序的操作,可以非常方便的实现对外设的访问,更多受支持的芯片等,可以查看打开 /boot/overlays/README文件,包含了很多芯片外设的设备树,需要用到的时候就可以用上面的方式来加载,当然了,如果不用的时候,最好把config.txt文档中的相关dtoverlay也要注释掉,不然GPIO针脚会乱套。



分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

5300 积分
55 主题
+ 关注
热门推荐
关闭

站长推荐上一条 /3 下一条