树莓派3uart wifi模块调试 (浪费了我3天时间的宝贵经验)
最开始我是连接一个wifi模块到我的arduino uno上,可是uno只有一个uart并且这个uart和usb串口相连的。出现了一些和很奇怪的问题。进入设置模式(m0=1 , m1=1)后,确实能够设置,设置的参数都保存成功了,但是使用c3c3c3无法获取到版本没有任何返回,可能当时是我的rx数据线的没有接触的问题。
后来我将两块uart wifi模块通讯,在电脑上外接usb转串口 (2个usb转换器,通讯一点问题没有,使用linux的minicom. minicom一定要将硬件流控制关闭,8N1协议 9600波特率)一点问题都没有。
然后我想既然没问题,我把两个模块直接arduino mega2560上,mega2560有4个uart,两块网卡全部接上,测试收发,两块模块都能互相发送和接收,但是接收到的数据有问题,中间出现乐很多乱码,不知道是不是arduino mega2560本身的问题。
推理可以证明:
1.两块无线模块是好的,因为可以通过usb转串口的 minicom进行通讯,并且没有乱码,传输的数据全部正确
2.arduino mega2560可以传输数据,但是有乱码,可能因为mega2560的串口有关系。
既然模块是好的,我就想到另一个测试方法,将一块模块使用usb串口接到pc上,另一块直接接到我的树莓派的uart接口上。结果很伤心。
树莓派上使用pyserial写好的程序只能发送,而且pc机上的模块接收不到任何pyserial发送过来的数据,查了好多资料,后来发现uart和树莓派上蓝牙相连的,蓝颜使用该默认的uart功能,于是找到了以下资料:
http://www.cnblogs.com/raffeale/articles/5575162.html 树莓派上uart的设置
你必须关闭蓝牙的uart,以及ras-config中必须关闭serial,将/boot/cmdline.txt中的对/dev/ttyAMA0相关的删除掉。
在你的/boot/config.txt的最下面加上如下代码
dtoverlay=pi3-miniuart-bt (这个文件可以在/boot/overlay目录中找到,如果没有可能会有个 pi3-miniuart-bt-overlay,这个也可以,可能因为树莓派出厂的日期不同模块名不同,我在网上找到有人提供pi3-miniuart-bt-overlay模块)
注释掉/boot/config.txt中其他的uart设置,这个最好全注释掉,uart_enable=1也注释掉!切记!
sudo apt-get update
sudo apt-get upgrade
sudo reboot
从启后树莓派的uart可以正常使用了,使用minicom 选择/dev/ttyAMA0接口,8n1 9600一切正常,pc可以收到,pc发送树莓派也能收到了。到此为止。
pyserial 3.0.1有个小问题,刚发现的
serial.is_readable()函数最好不用用就算有数据发过去都会卡主不动。使用serial.in_waiting属性来检查就ok。然后直接read
e39-ttl-100一般问题:
1.能发送无法接收,检查m0,m1引脚社否设置正确的电平( m0=1,m1=0 这是全双工模式)
2.检查无线rx数据线是否接触正常或者更换rx数据线试试。
3.检查aux是否为1,无线模块初始化完aux会是高电平
注意:minicom通讯或者使用其他串口编程库的时候一定要注意一些细节,8N1 8=8个字节 , N=无效验位 , 1=停止位,这几个必须设置相同,还有硬件流控制与软件流控制全部关闭(minicom里有这个选项,如果不设置硬件流控制默认打开)
onxoff=False, rtscts=False, dsrdtr=False 这3个参数是变成时候可能会遇到,pyserial默认值就是false,如果你使用pyserial就不需要设置这几个参数了,默认值就ok!