查看: 913|回复: 0

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

[复制链接]
  • TA的每日心情
    慵懒
    昨天 21:11
  • 签到天数: 161 天

    连续签到: 9 天

    [LV.7]常住居民III

    发表于 2024-3-18 21:54:11 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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,所以就以它为例,介绍在树莓派环境下使用单总线协议。
    首先是配置打开该外设,图形化的方式如下:
    11.jpg

    12.jpg

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

    14.jpg

    两者的效果是一样的。

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

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

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

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

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



    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-11-22 00:01 , Processed in 0.111292 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.