0
原创首发

Android 串口通讯(很简单版)

温油的老舅 发表于 2021-11-12 23:27 2101
评论
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
      推荐文章
      Docker-comose部署redis,如何配置密码,端口号,keep-alive时长
      Docker如何不停服优雅地更新了
      About pinia in vue3
      Java实现权重选择器
      windows10如何永久关闭自动更新
      水一篇:主观性bug的解决
      2024.3.22FunPlus客户端开发工程师笔试记录
      2024.3.22CVTEAndroid应用开发工程师笔试记录
      MtkSettings:设置-显示-隐藏导航栏和状态栏开关添加&屏幕底部上划和屏幕顶部下划显示导航栏和状态栏
      今日份编码经验分享
      【学习笔记】Lua快速学习
      《Java基础之多线程》
      《Java基础内部类和匿名内部类》
      《Java基础之集合体系》
      《java基础错误和异常》
      《Java基础之面向对象》
      《Java基础之基础语法》
      常见ffmpeg,却不知道ffmpeg为何物
      初涉安卓开发:Java基础知识详解与学习路径
      你是一名行业资深程序员,并且通过业余时间赚了很多钱,程序员有哪些赚钱的路子?
      ubuntu查看电脑的功耗?
      领券联盟Api 的修改:获取分类
      水一篇:尝试用分布式跑密码字典
      2024商城接口文档
      Swagger2介绍与集成
      解决了使用TwinklingRefreshLayout时导致重复类冲突的问题
      2024.3.13多益网络软开笔试记录
      书应该从何开始读起?
      2024开发环境常用配置记录
      JavaFx 微信图片.dat 解码 Exe打包
      文章目录