1、模块供电。电源的稳定性是芯片正常工作的前提。一般的模块自带10-22uF的电容(WIFI等可能47uF以上),在一般的稳定电源上完全是可以正常工作的,但是在融入某些电源不稳定、包含大功率设备、感性设备的时候往往会出现工作不正常的现象。此时, 可以在模块外部靠近电源引脚适当的添加大一点的电容(一般Zda电流xx mA大概就用xx uF的电容就可以了),虽然这个不是硬性规定,但是我是建议在所有使用场景都添加一个电容,这就尽量为稳定性留下余地。并且,对于电流过大的模块(如WIFI等),不太建议控制模块的供电来让模块停止工作。
2、天线。我们一般能见到的天线就是PCB天线、陶瓷天线和外置天线。对于PCB和陶瓷天线,天线上下位置是不允许布线、覆铜和金属物件靠近的,否则天线的性能会大减,并且我建议Z好是把天线突出PCB板外面,或者把天线部分的PCB板掏空。
3、布板。很多种类的透传模块用的是多排半孔,对于这种模块大家布线就要注意:对于模块上面无用的引脚,Z好不要在这些引脚下面布线,实在要布线,也要做好绝缘措施,以防短路。
二、软件:
1、 有些模块以连线为分界点(如蓝牙):连线前是AT指令状态,连线后就透传。对于此特性的模块,Z好是有断/连线检测机制,连线前是不应该有大量连续数据冲击, 因为此时是AT指令状态,数据是随机的,是否被识别为AT指令就是一个概率问题了,冲击的数据量越大、越频繁,误识别的概率就越高。所以,我建议用户的系统必须有连线检测机制,连线后才发送数据,断线就只能发指令。
2、 听某些刚接触透传模块的用户反应:“为啥透传过去的数据(帧)不一样?”在这里要提醒广大用户:a、UART本身只是一种传输接口,它本身没有“帧”概念,一切数据都是原始的“数据流”,而“帧”只是用户自己定义的一种数据分包,每个人习惯、风格、产品特点等都直接影响着帧格式;b、一个程序、系统Z重要的是时间,对于透传模块来说,这个时间就变得尤为重要,能以越快的速度转发出去,响应速度就越快,性能就越,所以一个透传模块必须要结合当前传输机制条件、以Z快转发速度为目标来实现透传功能。所以一帧数据被拆包,或者多帧数据被组包,这是很正常、合理的。
在此,我希望大家能从思想上提升一个档次,从“数据帧”转化为“数据流”,这样对产品以后升级、更新换代、兼容性等都有帮助。
可参考微信AirSync的开发文档:AirSync开发文档(点击跳转)
个人总结的一些“数据流”的方法,希望帮到各位:
适用范围
特点
不带任何固定帧头帧尾
数据包小、帧间隔大、固定数据包长度,
适用于出错不影响系统稳定性的场合
可靠性非常低
带帧头
数据包小、数据帧的长度Z好是固定
可靠性一般,需要占用大量的时间和CPU
带帧头、帧尾
数据包小、间隔密
可靠性不错,延时较低,但占用CPU较多
带帧头、长度(、帧尾)
数据包大小随意、帧间隔随意、数据包长
度随时变化等具有低延时、高可靠、高处理速度等特点
注意:
a、我这里所述的数据包大小,是根据要遍历数据的多少来决定,个人认为64字节以下为小,256以上为大。
b、帧头:一般是固定的起始字节,或者部分固定部分可变。
c、帧尾:可以是固定字节,也可以是校验字节。
d、帧长度:一般指整个数据包的长度,或者是分段长度
e、为了进一步提高系统稳定性,可以再添加一种“应答、重传”机制,当出现校验错误等问题时可以及时的解决问题。
3、对于有协议的蓝牙、WiFi之类,连接后都有个同步过程,在刚连接上的前几秒一般不适合发送大量数据,否则会影响整个连接的稳定性。
三、AT指令:
1、经常听到很多人疑问:“这模块(蓝牙、WIFI等),能够传输中文吗?能够设置中文名称吗?”
我先不解析,让大家看看下面这个字符的转换:
上图是“中文123”这几个字符的几个编码方式,都是用16进制数显示。
大家看到红色框框的是数字“123”的各种编码,上面几种全部是一样,唯独Z后的Unicode特别,因为它是2个字节对齐的,就算是普通的ASCII码它也必须要2个字节表示。其实这只是各种编码的规则不一样,大家不必在意。
后面看看“中文”的编码。android用的UTF-8,它是3字节表示一个文字(蓝色框框),微软的Unicode是2个字节表示一个文字(紫色框框),而具体每个编码代表什么含义,这个我也不懂,也没有必要去弄懂。您用android的来接收、显示中文,那您就必须要用UTF-8来编码;windows的就用Unicode。
到这里,大家可能还不是很明白,那下面我举个例子来分析分析:
我要修改蓝牙模块的名称为“中文”,指令为:AT+NAME=xxx
复制到串口助手的输入框,勾选“16进制发送”,再点击“发送”就OK了。(16进制一般需要每个字节之间用空格隔开)
好了,现在我们在用手机搜索蓝牙时就会找到名称为“中文”的蓝牙模块了。
上面是修改名称的方法,发送中文数据的步骤也是类似,只需要转换为相应的编码发送用16进制发送就可以。