串口是什么?
一种常见的通讯接口,Android设备和外部硬件通信通常使用这个
长这样
上面的是公口,下面的是母口
先通起来?
怎么先玩起来呢?就是把自己发送的再发回给自己。
准备几个硬件:两个usb转串口(公头),一个母对母转接头(可以自己买M6接头自己接线)
公司里有一转四的串口头,借来用了,母对母的转接头是硬件部的妹子帮我接的
接上、转接头的USB接头也查电脑上,usb插电脑就不上图了
打开调试工具(sscomv5.13.1)
波特率,两边选一样的,不然无法通信
选好串口,我这是com8和com9
之后打开串口,这个就可以发送了
看,这样就通了,soeasy
电脑串口接设备
上面那一波有用吗?完全没有,自己发自己收,只能说你的串口OK和你入了串口的大门,接下来看电脑和设备连接,我选的是胎压设备,为什么选择这个呢?因为最近就做这个,手头上有啊。
看,这个公口,需要我的usb转rs232也是公口,接不上,需要母对母转接头,但这个直接使用上次那个母对母转接头是不可以的,因为上次母对母是交叉接,这次需要直接头(t-t,r-r),硬件部心灵手巧的妹子用M4头帮我焊了一个
聪明的小朋友会问,为啥不把刚的母对母接头rx和tx线对掉一下?
答:很聪明,是可以的,而且在妹子给我准备新口前我就是这么做的,就是每次更换rx tx太麻烦才让重新弄一个,但又没有M6的了,只能用M4焊一下咯,这是个小细节,不用在意
把接头接起来
接好后,选好波特率(胎压监测的波特率是19200),开启串口,数据就来了,(胎压数据是主动上报的)
来来来,翻开胎压的交互协议
我们给设备发送
55 AA 0A 13 00 01 00 00 00
告诉胎压设备,一秒上传一次胎压(细心的同学说怎么没有校验位,这还要自己算吗?让工具做)
回到串口工具,配置好校验位和发送数据,点击发送后,数据哗哗哗的过来了,1秒一次
本次调试成功
Android设备串口连电脑
可以直接用手机吗?
不行,
- 手机没有串口设备
- 设备必要root
所以只有定制系统才会做串口开发,我的话之前接触到的设备包括
Android pos机,Android售货机,Android电子秤,Android分拣扫码枪
无一例外,都是定制系统,想用手机?认命吧,想学习却没有设备就去淘宝买个开发板
买个没有屏幕的,便宜点,然后使用scrcpy软件把设备显示投屏到显示器上
好了,开始了
妹子帮我从设备中跳线引出了一个串口母口,如果是开发板就直接有串口,就不用这一步了,这个需要硬件同事支持
准备接线:
中间加了个TTL<->RS232转接头,是因为Android设备使用的ttl电压(3.3v),电脑使用rs232电压(5v)需要转换
开始通讯:
等等等等,Android设备怎么发送和接收数据呢?谷歌为我们准备好了,很老的代码,我没有搞定,我搞了享学课堂的代码,最近Android太卷了,不学习不行,所以网上报了培训,不学习不行,好了,不聊这些,回到正题上
如下图,通信没有问题,发送接收的数据一一对应,什么?61 61 63 64和abcd对不上?你傻啊?哈哈
Android的串口代码我放git上了,地址在
亲测可用
接下来才是重头戏
Android接串口设备(有坑)
有了上面的铺垫,我们就直接接线
胎压数据会直接过来,我们在这等数据
等啊等,怎么没数据过来,我着急了,难道是我的接线方式不对,检查了一遍还是不对
目前设备接电脑:OK
Android接电脑:OK
Android接设备:NG
感觉说不通啊,这个问题我求助了驱动的同事,也整了半天才
最后问题还是解决了,原因暂不去做分析,只摆事实
在上图接线的基础上,添加一个公对公、一个母对母(rx-tx交叉接头)接头,这样就可以出数据了,我一直认为公对公和母对母连接不是就抵消了嘛,原来内部不是那么简单,需要多思考下,硬件妹子说,这样的话,就不用公对公和母对母,直接两头接线直接接对即可。
看~,数据像流水一样来了
总算搞定了,小小串口搞了几天才搞定,也是有收获的,棒棒的
总结
本文的大体结构是,电脑连电脑,电脑连设备,电脑连Android,Android连设备,这几个步骤都会也就意味了排查问题就OK了,串口搞定,物联网so easy的