QT for Android串口开发

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串口开发_萌新洛尘的博客-CSDN博客_qt 安卓串口

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值