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