jk36125 发表于 2014-7-22 18:00:29

2.4G串口透传模块,支持AT命令,时分全双工,全部资料开源

本帖最后由 jk36125 于 2014-7-22 18:00 编辑

简介:
无线串口模块wirlessUART是由LGT8F08A和廉价nRF24L01模块制作的无线串口透传模块。能够支持AT命令来配置模块的参数。模块可以配置成“PTX”或者“PRX”的角色。“PTX”和“PRX”的叫法来自nRF24L01的文档,在串口数据传输上,这两种角色并没有差别,但一个PTX设备必须和一个PRX设备配对使用。

主要功能:

1. 最大稳定数据传输波特率115200
2. 可以使用AT命令配置串口的格式,包括波特率,数据长度等等
3. 可以使用AT命令配置无线通信频率,通信速率以及发射功率
4. 时分全双工设计,模块可同时收发数据
5. LED显示模块的配对状态
6. 可以安装锂电池实现自供电

双面感光板,完全Homemade,看起来还不错^_^:






做这个主要是想给树莓派使用,这样就可以无线操作Linux的串口终端。在Linux网络配置还没有完成,或者网络连接失败的时候,无法使用ssh登录linux,需要辛苦的将树莓派重新连接上电视上,再接入一个USB键盘来操作。有了无线串口,就可以悠哉的坐在沙发上,直接使用无线串口终端来配置和恢复Linux,不用跪在角落摆弄布满灰尘的视频传输线。

最初我对模块的要求是,只要能够传输命令行就OK。因为LGT8F08A的SPI接口和串口是复用的,所以只能使用软SPI的方式来连接nRF24L01无线模块。这成为了模块传输速度的主要瓶颈。但实际传输的速度比我最初想象的要快的多,经过几天的测试和调整,程序也变得稳定起来。所以,我测试了模块的连续数据传输能力。

我使用超级终端Zmodem文件发送的方式来测试数据传输。因为模块不包含USB接口,所以测试时将它们分别连接在两个USB转串口设备上,两个USB转串口设备同时连接在一个USB-HUB上。在计算机上使用超级终端打开这两个USB串口,进行文件传输操作。这样,我只需要使用1台计算机就能同时测试数据发送和接收。

测试连接图,两个黑色热缩管包裹着的是USB转串口模块:



经过测试,模块可以在115200波特率下,6到8米距离以内较为稳定的传输文件。传输的距离主要取决于nRF24L01模块的质量以及通信速率(可用AT命令来配置)。在2Mbps的无线速度下,最大直线传输距离在10米左右,如果有墙壁的阻挡,信号衰减的更快。因为选用了最便宜的nRF24L01模块,所以我对传输的距离没有怨言。如果使用带天线的nRF24L01模块,我想传输的距离会更远一些。



模块可以安装锂电池供电,因为有些设备串口部分没有将电源引出来,所以模块自供电使用起来对我比较方便。如果你不需要锂电池,可以去除原理图上标明为SELF-POWERED的部分,焊接EXTERN-POWERED部分。

如何进一步提升传输速度
传输速度的瓶颈在于软件SPI方式连接nRF24L01模块。这是因为LGT8F08A的SPI接口和UART接口是复用的。所以,换用有硬件SPI可用的AVR芯片上,相信可以进一步提升传输速度和稳定性。LGT和AVR的之间的移植也不是很困难。但AVR的价格比LGT要贵的多。

使用说明:



在上电时按住AT-MODE键不放可以进入AT命令模式,在这个模式下可以设置模块的各种参数。
红色LED为电池信号:低电量时会开始闪烁,充电时为常亮。
蓝色LED为PTX设备连接信号(PRX设备不使用):连接成功时为常量,搜索设备时为闪烁。
必须使用一个PTX设备和一个PRX设备配对使用。并且两个设备的无线频率和无线速率必须相同。

硬件原理图:

PDF格式:

软件源代码:


二进制文件:


AT命令说明:
显示所有配置:AT+WHAT?
显示设备角色:AT+ROLE?
显示串口格式:AT+UART?
显示无线频率:AT+RFCH?
显示无线速率:AT+RFDR?
显示无线功率:AT+RFPW?

设置设备角色:AT+ROLE=PRX 或者 AT+ROLE=PTX
设置串口格式:AT+UART=115200,N,8,1 或者 AT+UART=9600,O,8,1 或者 AT+UART=4800,E,9,2
设置无线频率:AT+RFCH=2(频率为2400+2Mhz)或者 AT+RFCH=10(频率为2400+10Mhz)
设置无线速率:AT+RFDR=1M 或者 AT+RFDR=2M
设置无线功率:AT+RFPW=0(最小)或者 AT+RFPW=3(最大)

DIY成本计算:
LGT8F08A-SSOP24      1.85元
nRF24L01模块            4.00元
阻容插座开关LED      2.00元(大约)
感光板PCB               2.00元(大约)
合计:9.85元

增加锂电池:
KB4540(2YL1)               1.20元
140mAh锂电池            8.00元
合计:9.2元

joystring 发表于 2014-7-22 18:06:47

占个沙发,好东西

STM32_Study 发表于 2014-7-22 18:20:34

楼主能说说是怎样实现全双工的吗?

一般24L01是用ACK机制来实现双工通讯。但这个就要求在TX端空闲的时候,也要有数据传输才行。

kation122 发表于 2014-7-22 19:11:45

精彩,谢谢楼主的分析,楼主大侠能给我们讲一下程序的大概流程不,就是串口队列、如何实现缓存等流程。

sonna 发表于 2014-7-22 21:14:04

好东西,收藏表示感谢!

feezai 发表于 2014-7-22 21:16:33

确实不错,模块看上去简单好用。

TANK99 发表于 2014-7-22 22:06:02

无线串口,记录。谢谢LZ

知行合一 发表于 2014-7-22 22:10:13

mark                              

Canbus007 发表于 2014-7-22 22:17:43

顶顶更健康

canspider 发表于 2014-7-22 22:27:55

时分全双工
难道是收发不停切换

机器人天空 发表于 2014-7-23 08:26:09

mark.........

jk36125 发表于 2014-7-23 08:49:15

解释一下时分全双工的原理。

时分全双工,就是TX和RX线路的数据各占用一半的传输时间和传输带宽。

要做到这一点,首先要启用nRF24L01的“ack with payload”功能。PTX设备发送数据以后,PRX设备返回的ACK中,也可以附加上32字节的数据。

如果PTX设备没有数据要发送,就发送空数据包轮询PRX设备。

这样,在满负载传输的时候,就是:
PTX发送32字节数据 -> PRX发送ACK和32字节数据 -> PTX发送32字节数据 ~ etc
TX数据和RX数据相当于各占用了一半的传输带宽。

由于nRF24L01硬件上有32字节FIFO,并且LGT8F08A上开辟了64字节的缓存,所以从串口的角度来看,可以认为是全双工传输。

以上是理论,以下是实际。{:smile:}

实际测试的结果是,数据全双工满负荷传送的时候,还是会出现丢失数据的情况{:sad:}。

这是因为使用了软件SPI传输数据的关系。如果有硬件SPI可用,我想nRF24L01或许可以做到230400全双工传输。

waterghost 发表于 2014-7-23 09:55:18

要做到这一点,首先要启用nRF24L01的“ack with payload”功能。PTX设备发送数据以后,PRX设备返回的ACK中,也可以附加上32字节的数据。

如果PTX设备没有数据要发送,就发送空数据包轮询PRX设备。

这样,在满负载传输的时候,就是:
PTX发送32字节数据 -> PRX发送ACK和32字节数据 -> PTX发送32字节数据 ~ etc
TX数据和RX数据相当于各占用了一半的传输带宽。


请问LZ 如果你的   PRX发送ACK和32字节数据 数据传输中数据丢了怎么办?nRF24L01的“ack with payload”功能是否把数据当成 AUTO ACK信号? 这样是否PRX 就没有了自动重发功能?

fsclub 发表于 2014-7-23 10:00:06

不错!加功放!!!!{:titter:}{:titter:}{:titter:}

jk36125 发表于 2014-7-23 10:13:37

waterghost 发表于 2014-7-23 09:55
要做到这一点,首先要启用nRF24L01的“ack with payload”功能。PTX设备发送数据以后,PRX设备返回的ACK中 ...

数据的重发和效验都是由nRF24L01自动完成的,只要设置重发次数和间隔时间,其它的不需要MCU干预。

ahuang227 发表于 2014-7-23 12:27:43

好东西啊,我自己做的那个怎么也不能传输大的数据,一传输大数据就死机了。


这个是个标准长度的尾巴,你能看到这个尾巴说明你的浏览器是正常的。欢迎光临我的淘宝店。

mhw 发表于 2014-7-23 19:26:13

jk36125 发表于 2014-7-23 10:13
数据的重发和效验都是由nRF24L01自动完成的,只要设置重发次数和间隔时间,其它的不需要MCU干预。 ...

文件传输对数据完整性要求很高,不干预是不行的。除非是做玩具遥控,周期性发送同样的上下左右油门数据,偶尔丢包无所谓……

PTX发送数据可以保证很高的可靠性,因为有CRC16和ACK
PRX携带在ACK帧Payload的数据则没法保证。
分析过程如下。正常无干扰:
1-PRX预先填充数据B1到Payload
2-PTX发送一包数据A1
3-PRX收到A1,硬件自动发出之前准备好的Payload数据B1,然后产生中断
4-PRX的MCU处理中断,填充下下一包数据B2到Payload
5-PTX发送下一包数据A2
……
有干扰时,分为两种情况:
1-PTX发送数据过程受干扰,导致PRX没有收到完整数据包,自然也没有自动ACK
——此时PTX会自动重发,能解决掉大部分问题
——如果PTX重发次数满了还是没有成功,这需要MCU介入,重发数据

2-PRX收到完整数据包,但是在自动发送ACK过程受到干扰,导致PTX没有收到完整ACK(PRX已经认为发送成功了,扔掉数据,马上准备下一包数据),所以PTX会自动重发……
——结果就是PRX可能收到多余的数据;PTX丢掉了数据

在实际应用环境(有多个同类2.4G设备,还有WLAN),干扰情况2的概率还是挺大的。
所以我们没有用满32字节Payload,而是参考TCP协议,留出一些作为双方状态指示,每次双方都交换状态,这样PRX会一直查询状态,直到确认PTX已经正确收到ACK,才会准备下一帧数据,确保不会丢数据;PTX也会不停查询PRX状态,直到确认PRX收到了数据,确保不会多发送数据。
坏处就是通信速率降低一半

donglaile 发表于 2014-7-23 19:55:25

来学习的

SNOOKER 发表于 2014-7-23 21:03:10

好强大,记号一个

armstrong 发表于 2014-7-23 21:56:23

无线通信是个热门应用,值得深入研究。

embeddev_1 发表于 2014-7-23 21:59:58

mmmmmmmmmmmark!{:biggrin:}

J8688 发表于 2014-7-23 22:02:37

这个很有参考价值

gzwirelesss 发表于 2014-7-23 22:03:14

好东西,值得研究

ordinary 发表于 2014-7-24 08:43:07

好东西,感谢楼主共享。
不用找10块钱的蓝牙串口了

jk36125 发表于 2014-7-24 09:26:51

mhw 发表于 2014-7-23 19:26
文件传输对数据完整性要求很高,不干预是不行的。除非是做玩具遥控,周期性发送同样的上下左右油门数据, ...

你说的数据丢失问题,我觉得放在文件传输协议上来解决,比放在传输驱动层上或许更合适一些。

举个实际的例子,我曾经使用超级终端的“Zmodem崩溃于恢复”,通过无线串口来传输文件(这好像也是串口传输文件仅有的几个可怜用处),然后慢慢的在传输的过程中拉远接收双方的距离。

距离增大到一定程度的时候,开始出现丢包现象。距离继续增大以后,出现了非常严重的丢包。

但是文件最后还是传输成功了。

因为Zmodem协议已经处理了发生丢包的情况。所以无线模块只需要发送和接收数据就好了。

Excellence 发表于 2014-7-24 09:36:25

{:victory:}{:victory:}{:victory:}

tangmintm8013TM 发表于 2014-7-24 10:32:09

强,谢谢楼主了

mhw 发表于 2014-7-24 12:27:50

jk36125 发表于 2014-7-24 09:26
你说的数据丢失问题,我觉得放在文件传输协议上来解决,比放在传输驱动层上或许更合适一些。

举个实际的 ...

看来应用场合不一样……
用到我们那种透传模块的,都是一些低端的8位甚至4位单片机,不会有复杂的应用层协议,所以要求我们传输层提供可靠的信道,也就是串口发个包,要求必须可靠到达对端,反之亦然。

jk36125 发表于 2014-7-24 13:57:48

mhw 发表于 2014-7-24 12:27
看来应用场合不一样……
用到我们那种透传模块的,都是一些低端的8位甚至4位单片机,不会有复杂的应用层 ...

你该叫他们换好一点的单片机{:lol:}

我一直认为,数据都如果飞到空中了,飞进谁的鼻孔都不是没有可能,100%到达只能是一种美好的愿望,就像路飞的onepiece。

mhw 发表于 2014-7-24 15:07:54

jk36125 发表于 2014-7-24 13:57
你该叫他们换好一点的单片机

我一直认为,数据都如果飞到空中了,飞进谁的鼻孔都不是没有可能, ...

传输层软件做好了,上位机几毛钱的OTP单片机都会比你的简单传输层+电脑强……因为消费品周边环境比较恶劣,有的信道被干扰了,应用层怎么重传都没用的……要靠透传模块自身的载波侦听+自动跳频来解决

laotui 发表于 2014-7-25 17:47:51

楼主有中文注释的程序吗?想移植到stm8s103f3p6上(用硬件spi控制24l01没问题),代码看不懂啊,主函数里带usb的程序都用不到吧?突然感觉自己c语言没学好啊。

mypc16888 发表于 2014-7-26 07:46:27

顶起,很不错

omlarn 发表于 2014-7-26 07:54:47

好东西,必须顶!

zzz123456 发表于 2014-7-26 11:32:45

记号,收藏

wxty 发表于 2014-7-28 09:22:33

大赞!完全开源。

3050311118 发表于 2014-7-30 00:00:07

请问楼主那个晶振用的32768?

laotui 发表于 2014-7-30 00:34:23

原理图上看是16M吧

yushiqian_2012 发表于 2014-7-30 00:54:39

占沙发,顶一个

jesseczn 发表于 2014-7-30 17:53:31

真的很感谢楼主的分享!参考价值不错!

jianghu-00091 发表于 2014-8-12 22:47:07

用LGT8F88A内部RC能跑到32M。SPI接口和串口分开的

hndyk 发表于 2014-8-20 15:07:03

不错啊,不知用来做成无线下载程序的功能行不行。

lgy1025 发表于 2014-8-22 13:36:01

记号,顶一个。

fuyufu 发表于 2014-8-22 18:34:18

厉害~·有个性

fuyufu 发表于 2014-8-22 18:34:37

好东西~厉害~·有个性

1042058509 发表于 2014-8-22 18:39:49

顶一个,学习了!!

shanyx2010 发表于 2014-8-30 23:03:40

谢楼主{:smile:} {:smile:} {:smile:}

WOSDAIZ 发表于 2014-9-10 13:25:05

這真是太方便了.   " 数据的重发和效验都是由nRF24L01自动完成的,只要设置重发次数和间隔时间,其它的不需要MCU干预。"

19711972f 发表于 2014-9-13 17:59:26

不错的设计

chinabox 发表于 2014-9-13 20:11:35

mark                  

TigerFish 发表于 2014-9-13 20:25:15

joystring 发表于 2014-7-22 18:06
占个沙发,好东西

问遍了宝上卖家,都没有全双工的。
其实原来通过USB--TTL 全双工调试,PLC 下载程序有 很多是需要全双工的,要求应答的实时性特别好,
楼主的这个可以满足这种要求?

TZQ95865 发表于 2014-9-14 09:35:43

改天做个wifi透传

walle531 发表于 2014-9-14 12:02:02

待我有时间改成STM8的{:lol:}

RainKing 发表于 2014-9-14 12:20:59

支持啊........不错............

alfredc 发表于 2014-9-14 12:36:12

长期潜水员,躺枪了,努力发帖升级

海案 发表于 2014-9-14 12:49:17

设计不错,谢谢

ggchao 发表于 2014-9-16 17:18:53

好强大,赞一个先

hongmark 发表于 2014-9-16 19:39:54

好东西,谢了

磊磊映画 发表于 2014-9-16 20:34:38

楼主,你的AT指令跑在LGT8F08A这个单片机里面了吗

ztg328 发表于 2014-9-16 22:35:33

Mark 看下

jackiezeng 发表于 2014-9-16 23:04:28

好东西,感谢楼主分享。。。

create 发表于 2014-9-22 12:46:41

armstrong 发表于 2014-7-23 21:56
无线通信是个热门应用,值得深入研究。

亲,你这头像是哪部片的啊,看得我都醉了

yutianyiren 发表于 2014-9-23 16:04:25

看着不错,有时间研究。

zhuisuoji 发表于 2014-9-24 03:10:50

不错,有时间也跟着试一下

DepravedLucien 发表于 2014-9-26 11:07:28

顶         

Lauchael 发表于 2014-9-26 12:01:42

感谢楼主分享!

linuxmake 发表于 2014-10-2 22:10:08

厉害                     

blavy 发表于 2014-10-4 21:27:36

那个塑料是用来防静电怕烧了无线模块的么?

棋间卒 发表于 2014-10-11 17:58:36

借鉴一下,感谢楼主

xofun 发表于 2014-10-11 18:25:35

收到了感谢楼主

Xplain 发表于 2014-10-16 08:58:13

好资料收藏了,{:lol:}

cece_co 发表于 2014-10-16 09:08:27

mark                  

sunliezhi 发表于 2014-10-16 09:54:41

收藏!!

jingmeidz 发表于 2014-10-18 22:58:21

不错,做的挺认真的

qxc16b 发表于 2014-10-20 14:18:18

谢谢分享................

ryphoon 发表于 2014-10-20 16:18:52

楼主好人啊,感谢分享!

henmeng 发表于 2014-10-24 08:54:26

mark一个

clizhi 发表于 2014-10-24 13:44:36

谢谢分享,学习

peter_yu 发表于 2014-10-27 10:42:38

谢谢楼主分享,牛人啊!

bondxie3 发表于 2014-10-30 13:12:16

不错,仿制一个玩玩! 标记

symcu 发表于 2014-11-14 21:09:03

真不错,自己做了好几天才到30K感谢分享!

loveavr999 发表于 2014-11-17 17:24:49

有没有人测试过不加天线,这个模块能传多远?

夏日么么茶 发表于 2015-4-13 20:23:10

不错,下下来好好看看先

mmiker 发表于 2015-4-14 12:17:47

好,谢了。{:lol:}

wlmwwx 发表于 2015-6-10 20:44:27

太好了,有空仿制一个

znfc2 发表于 2015-10-3 13:31:47

用的什么开发环境?

wangyi1e 发表于 2015-10-28 22:33:47

这个这的很不错,支持一下
页: [1]
查看完整版本: 2.4G串口透传模块,支持AT命令,时分全双工,全部资料开源