王剛
摘要:近年來隨著計算機技術,移動信息以及物聯(lián)網(wǎng)技術的不斷發(fā)展,移動互聯(lián)網(wǎng)的成熟運用,物聯(lián)網(wǎng)為我們的生活帶來了很大的方便,越來越多的應用場合中需要嵌入式系統(tǒng)進行無線傳輸。本文研究了Arduino系統(tǒng)利用無線串口實現(xiàn)雙機多通道數(shù)據(jù)傳輸?shù)姆椒?,實現(xiàn)了數(shù)據(jù)傳輸時的同步與校驗。
關鍵詞: Arduino串口多通道 數(shù)據(jù)傳輸
中圖分類號:TN923 文獻標識碼:A 文章編號:1007-9416(2016)06-0000-00
1 需求概述
Arduino是當前最流行的開源電子平臺之一,易于上手節(jié)約學習成本,縮短了開發(fā)周期,從日常生活中的智能小裝置到3D打印機,Arduino讓人們發(fā)現(xiàn)很多以前只有專業(yè)人員才能進入的領域普通愛好者也是可以涉足的。
在一個五軸機械臂項目中,需要使用5個電位器對機械臂的相應關節(jié)進行遙控,一般通用的采用PPM控制方式的模型遙控器只有兩個十字搖桿,在數(shù)量上以及操作方式上都無法滿足需求,因此筆者用兩個Arduino實現(xiàn)了多通道控制信號的發(fā)送與接收。
2 Arduino的串口通信
在單片機的實際應用中,串口通信非常普遍,只需少量幾根線就能和其他串口設備通訊。 Arduino是通過USB轉成TTL串口下載程序的,數(shù)字接口D0和D1就是TTL串口中的RX和TX。Arduino中提供了十余個串口相關函數(shù),使用Serial.begin()指定傳輸時的波特率即可,例如Serial.begin(9600),表示速率為9600bit/s,收發(fā)雙方的速率要保持一致。在程序中,使用Serial.print() 函數(shù)可以從串口輸出我們需要的變量或者字符串信息(以ASCII文本方式),利用IDE中的串口監(jiān)視器,開發(fā)者可以查看單片機輸出的信息,這也是調試程序的主要手段之一。此外,還有一個Serial.write()方法,不同于print方法,此方法是把二進制數(shù)據(jù)輸出到串口。
3 收發(fā)實現(xiàn)
以5通道遙控為例,筆者設計的收發(fā)同步與校驗方案如下:發(fā)射端的Arduino每組發(fā)送7個數(shù)據(jù),第1個為同步起始標記(255,即8個二進制1),然后是5個控制信號(s1~s5),每個信號用于操作指定關節(jié)的舵機,此外還需要一個校驗數(shù)據(jù),本文采用了較簡單的校驗方式,把5路信號值相加作為校驗數(shù)據(jù)一并發(fā)送出去。本項目中采用的是數(shù)據(jù)發(fā)送方式,Serial.write()方法發(fā)送的數(shù)據(jù)只能有1個字節(jié),也就是0-255之間的整數(shù)。如果s1到s5累加得到的數(shù)據(jù)超過255,系統(tǒng)會舍棄高位部分,只發(fā)送低位的字節(jié)。
因為串口接收的數(shù)據(jù)只有1個字節(jié),所以計算校驗數(shù)據(jù)時需要把s1到s5的和強制類型轉換為byte類型,這樣才可以和接收到的校驗數(shù)據(jù)serv[6]做比較,在接收端的串口監(jiān)視器中可以看到,每一秒都會接收到一組數(shù)據(jù),和發(fā)送方傳出的數(shù)據(jù)完全一致,收發(fā)功能順利實現(xiàn)。
圖1所示,Arduino中的串口傳輸非常簡單方便,我們可以看到在程序中沒有任何涉及藍牙或者其他無線串口模塊的特殊命令,本文中筆者使用的是基于SI4432芯片的無線串口透傳模塊,只需要兩個配置相同的模塊分別接在收發(fā)兩端的Arduino上即可(模塊和Arduino的RX和TX接口交叉連接),如果使用藍牙模塊,其電路接法與程序都不需要變化,只需要提前使用AT命令給2個藍牙模塊進行主從配對即可。
因為Arduino程序上傳也是通過串口實現(xiàn)的,為了避免沖突,在更新程序時需要先把串口設備的RX/TX線斷開,否則無法上傳程序。
參考文獻
[1]趙志,著.Arduino開發(fā)實戰(zhàn)指南[M].機械工業(yè)出版社,2015.
[2]陳呂洲,著.Arduino程序設計基礎[M].北京航天航空出版社,2014.