QT for Android
- 思路
- 一、所用到的头文件
- 1、打开串口
- 2、配置串口
- 3、接收数据
- 3、发送数据
最近在搞QT for Android开发,在网上搜了下解决方案发现都是需要java库的支持,QT原生接口QSerialPort不支持Android系统的串口开发,因为QT的接口掉的都是标准的接口,而Android都是非标准的,所以用不了,只能自己写
思路
找了网上好多方法,发现都不太适合,然后想起来了我以前自己用Java开发的串口程序,Java是调用的C的代码,使用了NDK进行的串口控制,然后就想起来了用C++直接控制Linux应该也可以,然后开工!!!
qt版本:
一、所用到的头文件
#include <unistd.h>
#include <fcntl.h>//尤其要注意这个 我的这个头文件不知道为什么不完整,需要添加O_NDELAY和O_NOCTTY
#include <sys/types.h>
#include <sys/stat.h>
#include <limits.h>
#include <dirent.h>
#include <termios.h>
#include <errno.h>
#include <stdio.h>
#include <sys/select.h>
#include <string.h>
1、打开串口
widget.cpp文件
tty_fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
if(tty_fd == -1){
qDebug() << "无法打开组件";
qDebug() << tty_fd;
qDebug() << strerror(errno);//打印最后一次的故障
}else{
qDebug() << "打开组件成功";
}
widget.h头文件
int tty_fd;//句柄,需要根据这个操作串口
如果不知道自己的串口名字以以下这串代码查找自己的串口名
DIR *p_dir = opendir("/dev");
while (1) {
struct dirent *p_ent = readdir(p_dir);
if (nullptr == p_ent) {
break;
}
qDebug() << "文件名: " << p_ent->d_name;
}
2、配置串口
tcgetattr(tty_fd, &options); //获取原有的串口属性的配置
if(tcgetattr(tty_fd, &options)<0){
qDebug() << strerror(errno);
qDebug() << errno;
}
bzero(&options, sizeof(options));
options.c_cflag|=(CLOCAL|CREAD ); // CREAD 开启串行数据接收,CLOCAL并打开本地连接模式
options.c_cflag |= CS8; //设置8位数据位
options.c_cflag &= ~PARENB; //无校验位
/* 设置9600波特率为B9600
如果是115200则为B115200
*/
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
options.c_cflag &= ~CSTOPB;/* 设置一位停止位; */
options.c_cc[VTIME] = 1; // 读取一个字符等待1*(1/10)s
options.c_cc[VMIN] = 1; // 读取字符的最少个数为1
tcflush(tty_fd, TCIOFLUSH); //清掉串口缓存
fcntl(tty_fd, F_SETFL, 0); //串口阻塞 0阻塞1非阻塞
if (tcsetattr(tty_fd, TCSANOW, &options) != 0) //激活新设置
{
qDebug()<< "激活新设置失败:";
qDebug() << strerror(errno);
}
3、接收数据
widget.cpp文件
read(tty_fd, &buf, 10);
widget.h文件
char buf[30];
3、发送数据
write(tty_fd, "123",strlen("123")) ;
然后到这就已经完成了,由于是初学C++中间犯了好多基本的错误,搞了两天才搞定,一定要细心细心细心!!!
下载地址
(610条消息) QT for Android串口开发_萌新洛尘的博客_qt 安卓串口