最開始我是連接一個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!