Qt加树莓派读取ds18b20温度传感器的值

一:DS18B20文件读取参考资料

二:DS18B20编程思路

在linux下一切皆文件,DS18B20当然也不例外,所以在树莓派上编写ds18b20只需想办法读出ds18b20所对应的文件就可以了。

1,每个ds18b20所对应的文件名都不一样,想要读取文件内容,首先需确定文件名。

解决方案:在Qt下,进入DS18b20所在文件父目录,遍历整个文件名,找到ds18b20对应的文件,在进入子目录,打开对应的文件,读取对应的数据。

三:所用到的主要函数

1, 得到对应目录下的所有文件列表

   //设置ds18b20的文件所在位置
    QDir tempPath("/sys/bus/w1/devices/");
    //得到所有的文件列表
    QStringList fileList=tempPath.entryList();

2,根据字符定位在字符串中的函数

QString str="123";

str.indexOf('2'); 返回值为1

3,字符内容截取函数

QString str="123";

QString s=str.mid(1,1);

截取内容为:s=2;

4,判断字符串中是否包含某个字符串

QString str="asdf";

str.contains("a");  //返回结果为真

三:程序源码

temperatureMeasurement()
{
    //加载单总线DS18b20所需的模块
    system("sudo modprobe w1-gpio");
    system("sudo modprobe w1-therm");

    QString tempFile="/sys/bus/w1/devices/"; //ds18b20文件路径
    QString tempData;  //读出的ds18b20的温度

    //设置ds18b20的文件所在位置
    QDir tempPath("/sys/bus/w1/devices/");

    //得到所有的文件列表
    QStringList fileList=tempPath.entryList();

    //遍历所有文件,找到关于ds18b20的文件
    int i=0;
    while(i     {
        if(fileList.at(i).contains("28-"))
        {
            tempFile.append(fileList.at(i));  //已经找到了文件
            break;
        }
        i++;
    }

    //打开ds18b20d的温度存储文件
    tempFile.append("/w1_slave");
    QFile file(tempFile);
    if(!file.open(QIODevice::ReadOnly|QFile::Text))
    {
        QMessageBox::information(this,tr("温度测量"),tr("请检测温度传感器是否有问题!"));
        return;
    }
    QTextStream in(&file);

    //根据存储的文件找到需要的数据
    QString str=in.readAll(); //读出所有内容
    tempData=str.mid(str.indexOf('t')+2,3); //定位数据的位置,找到所需要的数据,精度可以达到小数点后三位,本程序只    需一位
    file.close();
}

注意:驱动程序写死了单总线引脚的定义,需要修改的话,只能修改内核代码


你可能感兴趣的:(1树莓派待分类笔记)