物联网探步--工具篇之串口
版权声明
该文章原创于Qter开源社区(www.qter.org),作者lxdlbs371,转载请注明出处!
概述: 这里介绍的是把第三方写的qextserialport类编译成共享库,然后直接调用相关类和成员函数。这样写的原因是在即将开始的物联网探索里,几乎所有的实验都是通过串口通信来分析相关物联网模块标准和协议的。 论坛里面已经有了两篇关于QT串口通信的专题,所以这里就不在详细介绍了,只要会用就可以。
环境及工具: 操作系统:win7
qt-opensource-windows-x86-mingw491_opengl-5.4.1
qextserialport-1.2rc
第一步:编译qextserialport共享库 1:把下载好的qextserialport-1.2rc.zip解压:
2:打开Qt Creator, 打开“文件”选项,选择“打开文件或项目”
在qextserialport-1.2rc文件夹下找到qextserialport.pro,打开。
3:编辑“qextserialport.pro”项目文件,在该文件内添加存放共享库的位置。
在“qextserialport.pro”文件中,添加DESTDIR = ..\myLib 。路径可以自己随便命名。方便找到生成的共享库即可。
4:生成共享库文件
保存并运行
等一会,就可以在myLib文件夹下生成一堆库文件:
有两个dll库文件,Qt5ExtSerialPortd1.dll包含了debug信息,Qt5ExtSerialPort1.dll,不包含debug信息,也就没有调试输出。所以选择了“Qt5ExtSerialPortd1.dll”,发行版可以选择“Qt5ExtSerialPort1.dll”,文件小很多。
第二步:测试共享库 1:新建一个项目,取名MyCom。
2:修改 MyCom.pro文件 添加下面三条语句: 1)把生成的MyCom程序和共享库文件放在一起。 #添加串口共享库的位置 DESTDIR = ..\myLib 2)要使用该库,需要包含#include"qextserialport.h" 官方原话: * Using QextSerialPort in your code. Enjoy it! #include "qextserialport.h" .... QextSerialPort * port = new QextSerialPort(); .... qextserialport.h文件是放在src文件夹下的,所以加上下面一句: #添加包含的串口类信息 INCLUDEPATH += ../src
3)添加使用的串口共享库文件。 LIBS += $$DESTDIR/Qt5ExtSerialPortd1.dll
* Using QextSerialPort in your code. Enjoy it! #include "qextserialport.h" .... QextSerialPort * port = new QextSerialPort(); .... qextserialport.h文件是放在src文件夹下的,所以加上下面一句: #添加包含的串口类信息 INCLUDEPATH += ../src
3:添加界面文件并调用QextSerialPort,用以测试共享库是否正常被调用。
运行程序:
如果不知道是哪一个串口,可以查看 系统的“设备管理器”
说明:该第三方串口库在windows下使用的是“事件驱动”方式:
后语: 经过编译共享库,以后再使用串口,就只需在.pro文件添加调用语句即可,快捷方便。使用共享库的另一个思想就是对象化,以后很多模块都会抽象成共享库,最后在编写复杂的项目时,就可以直接调用这些库文件,而不是重写,或者“复制粘贴”了。
--------------------------------------------------------------------------------------------------------------------------------
有朋友在论坛提出QT5.4集成了串口模块,这里把集成串口模块的小例子贴一下;
自带模块只需要在 pro 文件加入 QT += serialport
界面设置:
serial.h- #ifndef SERIAL_H
- #define SERIAL_H
- #include <QWidget>
- #include <QtSerialPort/QSerialPort>
- #include <QtSerialPort/QSerialPortInfo>
- namespace Ui {
- class serial;
- }
- class serial : public QWidget
- {
- Q_OBJECT
- public:
- explicit serial(QWidget *parent = 0);
- ~serial();
- private:
- Ui::serial *ui;
- QSerialPort *my_serialport;
- private slots:
- void my_readuart();//串口接收数据槽函数
- void on_pushButton_clicked();
- void on_pushButton_2_clicked();
- };
- #endif // SERIAL_H
复制代码 serial.cpp运行效果:
代码打包:
|