因为项目需要要在上位机界面實时显示室内温度,上位机采用QT5.5编写采用DS18B20采集数据,显示在控件lcdNumber上DS18B20是一个比较常用的温度传感器,采用单总线控制在linux中,一切都是攵件所以数据采集也是文件的读取。
重启树莓派使设置生效运行lsmod命令,如果发现红色方框的两个模块说明模块已启动
如果没有发现,也可以运行如下命令加载模块
如果没有问题在/sys/bus/w1/devices中发现一个28-XXXX开头的文件夹,这个就是DS18B20的ROM,每个DS18B20都一样连接多个18B20就会有多个这样的文件,茬这个文件夹中再读取w1_slave文件则会返回当前温度值
这里我们先进去打印一下,看看有哪些数值:
在返回数据中第一行最后的YRS表示CRC校验成功,数据有效第二行最后t=30500表示当前温度为30.5摄氏度。
按照此逻辑只要反复读取这个文件中的t值即可显示温度。
在QT中ui界面拖选一个lcdNumber然后使用定时器定时去读取数值,显示在这个控件上即可;参照一个大佬的程序:在实际使用中有一点问题,一是显示在lcdNumber上必须是个字符串,而我想要的是带小数点的温度值二是涉及到一些数值类型装换,如读到的值是30500实际要显示为30.5。三是树莓派直接接DS18B20是找不到上面所說的文件的必须要在DS18B20的VCC和数据引脚之间接一个4.7K的上拉电阻才可以。
//得到所有的文件列表
//遍历所有文件找到关于ds18b20的文件
//根据存储的文件找到需要的数据