Android Studio的笔记--SerialPort串口通讯学习和使用


摘要:本篇介绍android中SerialPort串口通讯学习和使用。主要用到android-serialport-api。

SerialPort

几个工程参考学习使用

android-serialport-api

Google开源的Android串口通信Demo android-serialport-api

源码下载

cepr/android-serialport-api
SerialPort获取串口输入输出流
SerialPortFinder获取硬件地址
在这里插入图片描述
可以推荐看android串口通信——android-serialport-api

Android-SerialPort-API

源码下载

licheedev/Android-SerialPort-API
在这里插入图片描述

readme

在这里插入图片描述
在这里插入图片描述

版本

添加依赖:implementation ‘com.licheedev:android-serialport:2.1.3’

allprojects {
    repositories {
        ...
        jcenter()
        mavenCentral() // since 2.1.3
    }
}
dependencies {
        implementation 'com.licheedev:android-serialport:2.1.3'
}

除了选择2.1.3版本,还可以看 releases 选择其他版本。
在这里插入图片描述

Android-SerialPort-Tool

源码下载

licheedev/Android-SerialPort-Tool
在这里插入图片描述

Android-Serialport

源码下载

xmaihh/Android-Serialport
在这里插入图片描述

使用方法

Android移植谷歌官方串口库支持校验位、数据位、停止位、流控配置

1. 检验参数合法性
    /* Check arguments */
    {
        speed = getBaudrate(baudrate);
        if (speed == -1) {
            /* TODO: throw an exception */
            LOGE("Invalid baudrate");
            return NULL;
        }
    }
2. 打开串口
    /* Opening device */
    {
        jboolean iscopy;
        const char *path_utf = (*env)->GetStringUTFChars(env, path, &iscopy);
        LOGD("Opening serial port %s with flags 0x%x", path_utf, O_RDWR | flags);
        fd = open(path_utf, O_RDWR | flags);
        LOGD("open() fd = %d", fd);
        (*env)->ReleaseStringUTFChars(env, path, path_utf);
        if (fd == -1) {
            /* Throw an exception */
            LOGE("Cannot open port");
            /* TODO: throw an exception */
            return NULL;
        }
    }
3.配置波特率
    /* Configure device */
    {
        struct termios cfg;
        LOGD("Configuring serial port");
        if (tcgetattr(fd, &cfg)) {
            LOGE("tcgetattr() failed");
            close(fd);
            /* TODO: throw an exception */
            return NULL;
        }

        cfmakeraw(&cfg);
        cfsetispeed(&cfg, speed);
        cfsetospeed(&cfg, speed);
4.配置数据位
        cfg.c_cflag &= ~CSIZE;
        switch (dataBits) {
            case 5:
                cfg.c_cflag |= CS5;    //使用5位数据位
                break;
            case 6:
                cfg.c_cflag |= CS6;    //使用6位数据位
                break;
            case 7:
                cfg.c_cflag |= CS7;    //使用7位数据位
                break;
            case 8:
                cfg.c_cflag |= CS8;    //使用8位数据位
                break;
            default:
                cfg.c_cflag |= CS8;
                break;
        }
5.配置校验位
        switch (parity) {
            case 0:
                cfg.c_cflag &= ~PARENB;    //无奇偶校验
                break;
            case 1:
                cfg.c_cflag |= (PARODD | PARENB);   //奇校验
                break;
            case 2:
                cfg.c_iflag &= ~(IGNPAR | PARMRK); // 偶校验
                cfg.c_iflag |= INPCK;
                cfg.c_cflag |= PARENB;
                cfg.c_cflag &= ~PARODD;
                break;
            default:
                cfg.c_cflag &= ~PARENB;
                break;
        }
6.配置停止位
        switch (stopBits) {
            case 1:
                cfg.c_cflag &= ~CSTOPB;    //1位停止位
                break;
            case 2:
                cfg.c_cflag |= CSTOPB;    //2位停止位
                break;
            default:
                break;
        }
7.配置流控
        switch (flowCon) {
            case 0:
                cfg.c_cflag &= ~CRTSCTS;    //不使用流控
                break;
            case 1:
                cfg.c_cflag |= CRTSCTS;    //硬件流控
                break;
            case 2:
                cfg.c_cflag |= IXON | IXOFF | IXANY;    //软件流控
                break;
            default:
                cfg.c_cflag &= ~CRTSCTS;
                break;
        }

readme

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

android中使用串口通信

使用android-serialport-api方式

import android.serialport.SerialPort;

第1种 链接

在gradle/build.gradle中添加

maven { url "https://jitpack.io" }

在app/build.gradle文件配置中的dependencies,加上

implementation 'com.github.licheedev.Android-SerialPort-API:serialport:1.0.1'

第2种 导入SerialPort库

1、将android-serialport-api中的libs的so库资源放到项目libs中
在这里插入图片描述

在这里插入图片描述
2、将Android-SerialPort-API中的java下的文件复制到项目中java
在这里插入图片描述
在这里插入图片描述
3、修改app的build.gradle文件,在android {}里添加支持的cpu架构

    defaultConfig {
        ndk {
            abiFilters "armeabi","armeabi-v7a"  // "x86", "arm64-v8a"
        }
    }

第3种 编译SerialPort模块

1、将Android-SerialPort-API中的serialport模块复制到工程中,目录与app文件同级
在这里插入图片描述
在这里插入图片描述
2、修改settings.gradle,将改成如下,即增加serialport模块

rootProject.name = "SerialPort"
include ':app',':serialport'

3、修改app的build.gradle文件,在dependencies{}中添加project

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation project(':serialport')
}

串口通信部分代码

待续

好的文章推荐参考

Android串口通讯SerialPort(使用篇)
与君共勉!待续
欢迎指错,一起学习

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Node.js 中实现 Scratch Link 串口通讯,需要使用 `serialport` 模块。下面是一些基本的代码示例,你可以根据自己的需求进行修改和扩展: ```javascript const SerialPort = require('serialport'); const Readline = require('@serialport/parser-readline'); const parser = new Readline(); // 创建串口连接 const port = new SerialPort('/dev/ttyACM0', { baudRate: 115200 }); // 监听串口连接事件 port.on('open', () => { console.log('串口连接已打开'); }); // 监听串口数据事件 port.pipe(parser); parser.on('data', data => { console.log(`收到数据:${data}`); }); // 发送数据到串口 function sendToSerial(data) { port.write(data, err => { if (err) { console.log('发送数据失败:', err.message); } else { console.log(`已发送数据:${data}`); } }); } // 示例:发送命令到 Scratch Link sendToSerial('{"jsonrpc":"2.0","id":1,"method":"scratch.extensions.openConnection","params":{}}\n'); ``` 这个示例假设你已经安装了 `serialport` 和 `@serialport/parser-readline` 模块,可以使用以下命令进行安装: ``` npm install serialport @serialport/parser-readline ``` 在上面的示例代码中,我们创建了一个串口连接,并监听了它的 `open` 事件和数据接收事件。`sendToSerial` 函数可以将数据发送到串口,你可以根据需要修改这个函数的实现方式。 最后,我们还提供了一个示例,演示如何发送命令到 Scratch Link。你可以根据 Scratch Link 的 API 文档编写自己的命令,并使用 `sendToSerial` 函数发送它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值