android 串口通信

2023-05-16

在日常的开发过程中,我们多少会在一些开发板子上进行app开发,其中就会涉及到一些串口数据的处理,今天就记录一下,用到的串口连接和数据接收和发送

1、首先去现在下载用到的串口开发的android-serialport-api库,我这边用到的和在github上下载的可能有点出入,但是经开发过程中测试是好的

其中在SerialPort.java中需要注意的有

(1) Runtime.getRuntime().exec("/system/bin/su"); 这里面的/system/bin/su路径可能每个系统版本不一样,我开发中的路径就是/system/xbin/su

(2)确认波特率

(3)确认端口

以上两点若没有确认好的话,都会造成串口连接失败;

2、连接串口


public void initSerialPort() {
    try {
       
        SerialPort serial = new SerialPort(new File(""/dev/ttymxc1""), 115200, 8, 0, 1, 0);

        if(serial != null) {
            mOutputStream = serial.getOutputStream();
            mInputStream = serial.getInputStream();

            HandlerThread handlerThread = new HandlerThread("SerialThread");
            handlerThread.start();

            mHandler = new Handler(handlerThread.getLooper());
            mHandler.post(threadRunnable);

        }

    } catch (Exception e) {
        e.printStackTrace();
    }


}  

接收串口数据


Runnable threadRunnable = new Runnable() {
    @Override
    public void run() {
        try {
            while (true) {

                try {
                    Thread.currentThread().sleep(2);
                } catch (InterruptedException e2) {
                    // TODO Auto-generated catch block
                    e2.printStackTrace();
                }

                if(mInputStream != null && mInputStream.available() > 0) {

                    byte[] buffer = new byte[1024];
                    int n = mInputStream.read(buffer);

                    if (n > 0) {

                        byte[] data = new byte[n];
                        //处理接收到的串口数据,根据实际定的串口通信协议处理即可
                        //这边需要处理的一点就是,在开发过程中可能会发现某次接收到的数据并非一个完整的数据协议包,这样就需要自己拼数据包处理了
                    }

                }

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
};  

向串口发送数据


  public void write(byte[] buf) {
        if (mOutputStream != null) {
            try {
                mOutputStream.write(buf);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }  

使用完后请记得close掉串口


if( serial != null) {
    seral.close();
    serial = null;
}  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android 串口通信 的相关文章

  • 解锁设备后 Android Activity 重新启动

    我正在创建一个简单的 Android 项目 但是当用户解锁屏幕 锁定后 时 我的每个活动都会重新启动 这是 Android 应用程序的正常行为吗 或者我必须在清单中处理它 或者别的地方 请帮忙 如果您的目标构建版本是 Honeycomb 3
  • 如何查看 Android 设备上安装的 SD 卡还有多少可用空间?

    如何以编程方式检查 Android 设备上安装的 SD 卡有多少可用空间 要获取外部 SD 卡的可用 可用 空间以显示与菜单 gt 设置 gt SD 卡和手机存储的编号一致的编号 请使用以下代码 StatFs stat new StatFs
  • Android x86_64 和 x86 模拟器在 AlertDialog.onClick 事件上崩溃

    我正在 x86 64 和 x86 模拟器中测试 Android 应用程序 在从显示列表的 AlertDialog 中选择一个项目后 它崩溃了 Android 模拟器意外关闭 AlertDialog 是从 AppCompatActivity
  • Android 已弃用屏幕尺寸?

    嘿 我需要在我的应用程序中获取屏幕的宽度 该应用程序将在 2 1 及更高版本上运行 我已经将其设置为如下所示 该方法已被弃用 我可能应该使用 getSize 或其他方式 但问题是 这是否适用于 3 0 和 4 0 等 Android 版本
  • AmazonServiceException:用户无权执行:dynamodb:DescribeTable 状态代码:400;错误代码:AccessDeniedException

    我原本以为这个问题是由于区域不匹配造成的 但是在更改区域后 在尝试此处找到的 Amazon AWS 示例时 我仍然遇到以下错误 DynamoDB映射器 https github com awslabs aws sdk android sam
  • ViewPager 开关 FragmentPagerAdapter

    我有一个ViewPager这是由一个FragmentPagerAdapter 我想将第一个适配器更换为另外两个 问题是之前加载的所有页面 同时具有第一个适配器 仍然是旧的页面 我查看了源代码FragmentPagerAdapter并猜测问题
  • RecyclerView.OnScrollListener:一次滚动实例被多次调用

    我有一个水平布局的回收视图 一次只有一个视图可见 mRecyclerView findViewById R id rvmain mRecyclerView setOnFlingListener null final SnapHelper s
  • 动画图像视图

    目前我正在开发一款游戏 这是我的游戏的详细信息 用户应选择正确的图像对象 我希望图像从左到右加速 当他们到达终点时 他们应该再次出现在活动中 这是我正在处理的屏幕截图 我有 5 个图像视图 它们应该会加速 您有此类动画的示例代码吗 非常感谢
  • 从 DecorView@2da7146[MyActivity] 中找不到 ViewTreeLifecycleOwner

    从撰写更新后alpha 11 to alpha 12 or beta 01 每当我打开具有撰写视图的活动或片段时 我都会遇到此崩溃 我在用AppCompatActivity它实现了LifecycleOwner 所以这非常奇怪 java la
  • Google Games API 需要 games_lite 函数

    我使用 Google Play 游戏服务 我从官方示例中获取了代码 尝试使用 API 27 和 API 17 所有功能仅在一个帐户 所有者 Google 开发者控制台 下有效 在任何其他帐户下均有效 不行 我明白了 E AndroidRun
  • 自定义 ListView 具有不同的行布局,根据 Web 服务响应进行扩展

    我有列表视图 我有3组观点 图像视图 视频查看 文本视图 我有一个返回图像 视频和文本的网络服务器 因此 根据服务器的响应 我想膨胀列表视图中行的视图 我知道使用自定义适配器来扩展自定义布局 我想知道如何使用自定义适配器来扩充视图类型 例如
  • Galaxy Nexus 4.1.1 和 ISO14443 读卡器

    是否可以在 Galaxy Nexus Jelly Bean 4 1 1 移动设备和任何常规桌面非接触式读卡器 ISO 14443 A B 之间建立连接 据我所知 android不支持卡模拟模式 所以只能通过p2p模式来完成 p2p 是否基于
  • 错误:包 com.google.android.gms.appstate 不存在

    由于此错误 无法编译我的 android 项目 BaseGameUtils src main java com google example games basegameutils GameHelper java Error 32 39 e
  • Android 应用程序 Phonegap 中的 Admob 实现

    我将一个 jquery 脚本转换为 Android 应用程序 现在我想将 admob 添加到其中 这可能吗 谷歌从那时起禁止在移动应用程序中使用 AdSense 在移动应用程序中使用 AdSense 移动广告违反了 AdSense 政策 移
  • 在多模块项目中访问绑定适配器

    我有一个多模块项目 其中应用程序模块包含我的绑定适配器 而我的功能模块取决于我的应用程序模块 因为它是动态功能模块 应用程序 包含绑定适配器 gt 动态功能模块 存在布局的地方 我在所有模块中启用了数据绑定和 kapt 我无法成功构建应用程
  • setKeyListener 将覆盖 setInputType 并更改键盘

    大家好 我在两个设备之间遇到问题 在实践中使用InputType和KeyListener我正在操纵一个EditText让它从数字键盘接收逗号和数字 有关更多背景信息 请检查我之前的question https stackoverflow c
  • Android 4 上的 html5 视频:全屏播放然后重定向到另一个网页 - 不起作用

    我正在为 Android 4 智能手机设计一个 html5 页面 其中包含一个 3gpp 或 mp4 视频 打开时必须自动全屏播放 当视频结束时应该重定向到另一个网址 一些谷歌搜索告诉我 Android 4 上不再允许自动播放 因此我选择显
  • Listview里面只有一个Element

    您好 我正在尝试将列表视图放入列表视图中的列表视图中 唯一的问题是只有第一个列表视图正确显示所有元素 此后的每个列表视图仅包含一个元素 UPDATE 创建我自己的不可滚动列表视图解决了这个问题 https stackoverflow com
  • RecyclerView 不调用 onCreateViewHolder 或 onBindView

    没有收到任何错误 所有数据似乎都有效 由于某种原因 没有调用与视图相关的方法 我已确定以下事项 getItemCount 是唯一被调用的适配器方法 并且返回一个正整数值 我知道这将是你们将要查看的区域 构造函数正在被调用 成员变量有效 Pa
  • 首选项和操作栏中的开/关切换按钮 - 冰淇淋三明治风格

    我指的是 ICS 手机上默认 Android 设置应用程序中看到的蓝色开 关样式 也可以在这里看到 http android developers blogspot com 2012 02 android design v2 now wit

随机推荐