0
g
原创首发

Android 串口通讯(很简单版)

温油的老舅 发表于 2021-11-12 23:27 2880
评论
0/240
  • 找不到自己的腰
    老哥,canopen有没有搞呢 交流一手
    2023-04-11 14:43  回复
    1260837837834665984
  • ccTyL
    没搞懂阿里云这个怎么用,打开链接进去就是登陆,登陆之后一直要设置code账号,设置完之后重新打开链接还是要重新设置,能不能直接发一下
    2021-11-15 08:48  回复
    1314408005793603584
    • ccTyL  回复 @ccTyL
      阿里云这个比github还要麻烦啊哈哈
      2021-11-15 08:49   回复 1314408005793603584
    • 码划云  回复 @ccTyL
      https://code.aliyun.com/ys-mhy/sprialPortTest.git 噢 真尴尬 给错链接了 这个才是[捂脸]
      2021-11-15 09:03   回复 1231137268748521472
    • ccTyL  回复 @ccTyL
      还想问下,数据位,校验位,停止位这些需要设置吗
      2021-11-15 09:04   回复 1314408005793603584
    • 码划云  回复 @ccTyL
      注册后什么都不用搞 可以登录就可以 然后再进入刚刚那个链接 就可以了
      2021-11-15 09:04   回复 1231137268748521472
    • 码划云  回复 @ccTyL
      可以登录就可以
      2021-11-15 09:05   回复 1231137268748521472
    • ccTyL  回复 @码划云
      谢谢兄弟,代码已经看到了 有些小白的问题想请教下, 1.数据位,校验位,停止位这些需要在SerialPortUtil中设置吗 2.串口地址 ttyS * 这个是由平板决定的还是由物联网设备决定的 3.必须要发送数据才能接收数据吗,能不能直接一直接收数据
      2021-11-15 09:09   回复 1314408005793603584
    • 码划云  回复 @ccTyL
      1.这些数据位 校验位 停止位自己再数据接受那里做判断 我都做法是直接把十六进制转行字符串 判断哪个是终止的标识 2、ttys1...这些是看设备的 问问你们那边的硬件 3. 可以一直接受数据 也可以一直发送数据 收发不影响的
      2021-11-15 09:16   回复 1231137268748521472
    • 码划云  回复 @ccTyL
      链接:https://pan.baidu.com/s/1siiU1Mac_5VtwvsdqvtGxA 提取码:4250 这个是百度云链接 刚刚试了一下 确实比较复杂 后续看看有空再放github里面
      2021-11-15 09:17   回复 1231137268748521472
    • 码划云  回复 @ccTyL
      onDataReceived(byte[] var1, int size)这个方法是接收数据的 串口的数据是连续 一直发的 也就是说不会自动判断哪个是开始 哪个是结尾 这些都是要自己判断的 也会有接受数据是错误的情况 这种就是丢包 直接不要这段数据 比如发来的数据“86ab1234567cf”你在 onDataReceived(byte[] var1, int size) 判断就可以把cf当终止位 86为开始位 不过一般都会有个协议的 按你那边协议 来设置
      2021-11-15 09:26   回复 1231137268748521472
    • ccTyL  回复 @码划云
      我在java工程接收串口数据的时候,他一次可能发送的是不完整的数据,也就是说,如果按照接收一次就判断一次的做法,它本身就是不完整的数据,所以没法判断结尾,因为结尾可能放在下一次接收数据那里发过来了
      2021-11-15 09:35   回复 1314408005793603584
    • 码划云  回复 @ccTyL
      不不不 Android串口是这样的 一段数据 分段发过来 需要接受一次完整的数据 用stringBuffer.append 先收集数据 直到判断出已经收够一包(一段完整的数据)的数据后再拿去用 比如“86ab1234567cf” 来到Android这边可能就 先一段“86ab12”然后再来一段“34567cf” 这时用 append ()收起来先 等 判断到数据结尾是“cf”然后拿去用 用完之后再清除 stringBuffer 接受下一段数据 用其他数据类型也行
      2021-11-15 09:53   回复 1231137268748521472
    • 码划云  回复 @ccTyL
      stringBuffer 是线程安全的 可以降低丢包(错误的数据 不完全的数据 顺序乱的数据)的概率
      2021-11-15 09:54   回复 1231137268748521472
    • ccTyL  回复 @码划云
      哦哦懂了,就是每次读取到的数据先存储到stringBuffer,然后每次读取就进行判断,到结尾就清空一次。 判断结尾这个部分会麻烦点,比如以cf为结尾,可能我第一次发送的没包含cf,第二次发送的数据,cf在中间而不是在末尾,就要遍历判断了
      2021-11-15 10:51   回复 1314408005793603584
    • ccTyL  回复 @码划云
      再离谱一点,上一段的末尾是 c,下一段的开头是f。这种情况就真的要遍历来判断
      2021-11-15 10:52   回复 1314408005793603584
    • 码划云  回复 @ccTyL
      不用遍历啊 直接先用String.indexOf(这个indexof 好像也是遍历实现的[捂脸])判断它包不包含cf 然后根据下标值裁剪 不过串口过来的数据也不是全部无规律可寻的 很少 或者几乎没有出现过 cf再中间的 一般都在最后一段数据的结尾 你可以测试一下 把每一段 的串口数据都打印研究一下 我这边是不会出现再中间的 还有很重要的一点就是 串口只有一个不要重复打开 SerialPortUtil只需要new一遍就好 不然数据就会乱 头尾不连续 只有一个端口数据是连续的
      2021-11-15 11:06   回复 1231137268748521472
    • 码划云  回复 @码划云
      我也觉得 串口最难的就是 怎么效率高的接受完整的数据 我判断后 数据获取的时间会增加十几毫秒 这没办法串口数据一段一段过来不好操作[捂脸]
      2021-11-15 11:10   回复 1231137268748521472
    • ccTyL  回复 @码划云
      兄弟有个问题想问下,这个 onReceivedData,为什么传过来的数组总是1024个字节,实际上只有前十几个字节有数据,后面全是0
      2021-11-15 15:39   回复 1314408005793603584
    • 码划云  回复 @ccTyL
      这个缓冲区来的 可以control +点进去SerialPortUtil 直接搜索1024 可以找到 这个看你自己 可以调的
      2021-11-15 15:52   回复 1231137268748521472
    • 码划云  回复 @ccTyL
      后面全是零 所以要自己裁剪 自己的数据包
      2021-11-15 15:53   回复 1231137268748521472
    • ccTyL  回复 @码划云
      万一我的数据真的是0,这个就不好裁剪了呀
      2021-11-15 16:04   回复 1314408005793603584
    • ccTyL  回复 @码划云
      我通过Rxtxcommon 读取数据的时候,它可以通过inputStream的read的大小来创建一个缓冲区,就是他能知道一次读了多少字节
      2021-11-15 16:06   回复 1314408005793603584
    • ccTyL  回复 @码划云
      我找到怎么改了,原来你提供了大小哈哈
      2021-11-15 16:11   回复 1314408005793603584
    • 码划云  回复 @ccTyL
      我工程里有个工具类把十六进制转换成字符串 如果数据为0也可以转换的
      2021-11-15 16:57   回复 1231137268748521472
  • 红蜘蛛的芒果布丁
    😁
    2021-11-12 21:32  回复
    1377559590329249792
    • 断点-含光君
      早点出来装*啊,我的币有何用呢
      2021-11-12 19:44  回复
      1139423796017500160
      • 码划云  回复 @断点-含光君
        我要是像你这么牛就,我天天发文章 ,流下不学无术的泪水[哭笑]
        2021-11-14 22:52   回复 1231137268748521472
      • 断点-含光君  回复 @码划云
        富豪榜大佬就是你
        2021-11-15 09:17   回复 1139423796017500160
    • ccTyL
      可以
      2021-11-12 19:17  回复
      1314408005793603584
      推荐文章
      Vue3,实现biu~biu~biu~的效果
      OkHttp 上一次请求被中断,下次请求使用同一个Client 导致请求路径错误问题
      遇到一个没有直接给进度监听回调的库怎么办呢?
      记开发简易个人博客系统
      Android打包任务定制清理项目加编译
      Flutter 热修复方案研究报告
      k8s 部署重启报错
      B站爬虫如何尽可能加大覆盖面?
      Flutter做个播放器,卡成狗屎!
      Android 界面参数追踪工具类:通过生命周期回调监控传参
      Flutter开发,我遇到个啥问题呢?1个小时才发现
      AndroidStudio 版本 <==> AGP版本 <==> Gradle版本 兼容性速查表
      问题记录:PatternsRequestCondition.getPatterns()" is null
      Android Studio 2025 kts配置signingConfigs
      Flutter封装日志输出工具类
      ElementUI的Table如何显示多行,如果超过的话就显示省略号呢?
      Flutter中的点击事件
      NFC有源和无源的区别
      mybatis plus生成的mapper参数都是arg1 arg2 arg3 这种
      报了个错:When allowCredentials is true
      Flutter 存储键值数据 SharePreference
      Flutter网络请求的封装
      Flutter开发Aes加密工具类封装
      Flutter时间格式化
      Flutter吐司提示
      reactnative flutter uniapp 的对比,以及如何做技术选型
      AndroidStudio 2024.2.2发布apk时候备份mapping文件kts版本
      记录一次TextView超长滚动的问题
      屏蔽CSDB等低质量搜索结果[Bing,谷歌搜索]
      记录一起由 FastJson 和 Kotlin 引发的 App Crash
      文章目录