【米尔MYD-YA15XC-T评测】+ 使用QT读取温湿度传感器数据
<div class='showpostmsg'> 本帖最后由 流行科技 于 2021-12-21 08:50 编辑<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">米尔</font><font face="Calibri">MYC151</font><font face="宋体">使用报告</font><font face="Calibri">+</font><font face="宋体">温湿度</font></span></span></span></span></p>
<p> </p>
<p> </p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">本次在之前</font><font face="Calibri">oled</font><font face="宋体">的基础上在测试下</font><font face="Calibri">linux</font><font face="宋体">下的温湿度传感器,并通过</font><font face="Calibri">QT</font><font face="宋体">界面实时显示读取数据,显示在曲线中,当然项目中也有很多不完善的地方,所以先发一个</font><font face="Calibri">demo</font><font face="宋体">上来,后续可以继续增加新内容。</font></span></span></span></span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">首先还是需要增加一下驱动的编译,这个网上也有许多的驱动源码,可以自己下载下来编译,和之前的编译过程一致,还是把</font><font face="Calibri">Makeflie</font><font face="宋体">修改下。然后就能编译出。</font><font face="Calibri">Ko</font><font face="宋体">文件了。</font></span></span></span></span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">想要使用这个,还需要修改下内核设备树,如下,在</font><font face="Calibri">oled</font><font face="宋体">下增加</font><font face="Calibri">sht20</font><font face="宋体">温湿度传感器的节点。</font></span></span></span></span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">之后我们关闭原有的桌面显示,和之前一致。</font></span></span></span></span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">查看下内核中的模块,这里说下,我们的</font><font face="Calibri">QT</font><font face="宋体">是运行在</font><font face="Calibri">SD</font><font face="宋体">卡中的,所以更新内核和设备树,以及把模块放入到文件系统中,都很方便,直接把卡拔下,插入虚拟机中即可看到所有文件,然后拷贝即可。</font></span></span></span></span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">现在目录中有文件了,只需执行加载驱动即可,如下:</font></span></span></span></span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">之后就可以开工编写</font><font face="Calibri">qt</font><font face="宋体">端程序了,这里放出主要的函数代码,提供参考,需要我也可以打包上传。</font></span></span></span></span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<pre>
<code class="language-cpp">#include "mainwindow.h"
#include "ui_mainwindow.h"
#define Plot2_DotColor QColor(236,110,0)
#define Plot2_LineColor QColor(246,98,0)
#define LineWidth 2
#define DotWidth 10
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
dataCustomPlotInit();
sht20_Init();
mainTimer = new QTimer(this);
/* 信号与槽函数连接 */
connect(mainTimer, SIGNAL(timeout()), this, SLOT(read_Sht20_data()));
/* 开启定时器 */
mainTimer->start(1000); // 1ms秒更新一次
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::dataCustomPlotInit()
{
QFont font;
// font.setPointSize(12);
/* 实例化,设置位置、背景颜色 */
QBrush brush(QColor(50, 50, 50));
dataCustomPlot = new QCustomPlot(ui->widget);
dataCustomPlot->setGeometry(0, 0, 550, 300);
dataCustomPlot->setBackground(brush);
dataCustomPlot->installEventFilter(this);
/* x轴、Y轴相关配置 */
QPen pen(Qt::white);
font.setPointSize(8);
dataCustomPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom); //可拖拽+可滚轮缩放
dataCustomPlot->xAxis->setLabelColor(QColor(Qt::white)); // X轴上标识label字体颜色
dataCustomPlot->yAxis->setLabelColor(QColor(Qt::white));
dataCustomPlot->xAxis->setTickPen(pen); // 设置x轴上坐标点上对应的刻度线的颜色
dataCustomPlot->xAxis->setTickLabelRotation(60);//设置标签角度旋转
dataCustomPlot->yAxis->setTickPen(pen);
dataCustomPlot->xAxis->setBasePen(pen); // 设置x轴 轴线本身的颜色
dataCustomPlot->yAxis->setBasePen(pen);
dataCustomPlot->xAxis->setTickLabelColor(QColor(Qt::white)); // 设置x轴刻度值文本的颜色
dataCustomPlot->yAxis->setTickLabelColor(QColor(Qt::white));
dataCustomPlot->xAxis->setSubTicks(false); // 隐藏x轴刻度线
dataCustomPlot->yAxis->setSubTicks(false); // 隐藏y轴刻度线
dataCustomPlot->xAxis->setLabelFont(font); // 设置x轴标识label文本字体大小
dataCustomPlot->yAxis->setLabelFont(font); // 设置y轴标识label文本字体大小
font.setPointSize(10);
dataCustomPlot->xAxis->setTickLabelFont(font);
dataCustomPlot->yAxis->setTickLabelFont(font);
dataCustomPlot->xAxis->setLabel("时间");
dataCustomPlot->yAxis->setLabel("温湿度");
/* 增加一个数据曲线 */
pen.setColor(Qt::yellow); // 设置画笔的颜色
dataCustomPlot->addGraph(); // 增加曲线图
dataCustomPlot->graph(0)->setName("温度"); // 设置曲线的名字
dataCustomPlot->graph(0)->setPen(pen); // 设置曲线画笔的颜色
dataCustomPlot->graph(0)->setLineStyle(QCPGraph::lsLine); // 设置连接线的类型 两点直线连接
dataCustomPlot->graph(0)->setScatterStyle( //绘制打出来的点
QCPScatterStyle(QCPScatterStyle::ssCircle,
QPen(Plot2_DotColor, LineWidth),
QBrush(Plot2_DotColor), DotWidth));
dataCustomPlot->graph(0)->rescaleAxes(false);
pen.setColor(Qt::red); // 设置画笔的颜色
dataCustomPlot->addGraph(); // 增加曲线图
dataCustomPlot->graph(1)->setName("湿度"); // 设置曲线的名字
dataCustomPlot->graph(1)->setPen(pen); // 设置曲线画笔的颜色
dataCustomPlot->graph(1)->setLineStyle(QCPGraph::lsLine); // 设置连接线的类型 两点直线连接
// dataCustomPlot->graph(1)->setScatterStyle( //绘制打出来的点
// QCPScatterStyle(QCPScatterStyle::ssCircle,
// QPen(Plot2_DotColor, LineWidth),
// QBrush(Plot2_DotColor), DotWidth));
dataCustomPlot->graph(1)->rescaleAxes(false);
}
void MainWindow::sht20_Init()
{
fd=open("/dev/sht2x",O_RDWR);
if(fd<0)
{
printf("App:Open dev failed.\n");
// goto END;
}
}
void MainWindow::read_Sht20_data()
{
char buf;
static int now = 0;
unsigned char tmp;
unsigned short tempori,humiori;//温湿度原始数据
float temp,humi;
if(read(fd,tmp,5)>0)
{
// for(int i=0;i<4;i++)
// {
// printf("%.2x ",tmp<i>);//打印收到的数据
// }
// printf("\n");
tempori=(tmp<<8|tmp);
humiori=(tmp<<8|tmp);
temp=-46.85+175.72/65536*(float)tempori;
humi=-6.0 +125.0 /65536*(float)humiori;
printf("SHT2x-T:%f RH:%f%%\n",temp,humi);
// qDebug() << temp;
}
now++;
dataCustomPlot->graph(0)->addData(now, temp); //addData(double key, double value);原型
dataCustomPlot->graph(1)->addData(now, humi); //addData(double key, double value);原型
dataCustomPlot->replot();
}</i></code></pre>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><i><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">这里面主要是使用了定时器,以及数据曲线显示的</font><font face="Calibri">qcustomplot</font><font face="宋体">。</font></span></span></span></span></i></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><i> </i></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><i> </i></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><i><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">新拉出一个</font><font face="Calibri">widget</font><font face="宋体">用于显示曲线。</font></span></span></span></span></i></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><i> </i></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><i><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">文档大致目录。这个还是基于之前的</font><font face="Calibri">hello world</font><font face="宋体">做的。</font></span></span></span></span></i></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><i><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">最后效果如下:</font></span></span></span></span></i></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align:justify"><i> </i></p>
<p> </p>
<p> </p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>显示效果不错</p>
页:
[1]