牟曉東
在數據通信方面,Arduino UNO通常情況下是通過數據線與計算機的USB接口相連,比如從Arduino IDE中上傳編譯好的程序代碼;而位于數字引腳0(RX)和1(TX)的串口通信,一般是通過Serial.println()函數在串口監視器中進行提示信息或傳感器所讀取數據的實時顯示。如何進行數據的無線通訊呢?以藍牙傳輸為例,借助于HC-05藍牙模塊,我們可以實現手機操控Arduino的功能,比如控制LED燈的亮與滅、風扇模塊的“無級變速”。
實驗器材包括:Arduino UNO主板一個,面包板一個,HC-05藍牙模塊一個,藍色LED燈一支,10kΩ和20kΩ的色環電阻各一個,杜邦線若干。
對照設計好的電路接線圖(如圖1),進行元器件的連接。首先,將Arduino的5V引腳和GND接地引腳通過紅色和黑色杜邦線分別與面包板的紅色、藍色側邊線槽連接;接著,將藍色LED燈插接到面包板上,負極(短腿)接入藍色線槽,正極(長腿)通過杜邦線(藍線)連接至Arduino的13號數字引腳;HC-05藍牙模塊共有六個引腳(僅使用其中的四個),先將VCC端和GND端分別接入面包板的紅色和藍色線槽,由于藍牙模塊的標準工作電源是3.3V,因此需要借助兩個電阻進行“分壓”——從藍牙模塊的RXD端通過杜邦線(黃色)插接至面包板,其中的一端經10kΩ的電阻與Arduino的TXD(1號)連接,另一端經20kΩ的電阻與面包板的藍色線槽(GND)連接;藍牙模塊的TXD端,則通過杜邦線(綠色)與Arduino的RXD(0號)進行連接;最后,通過數據線將Arduino與計算機的USB接口進行連接。

在Arduino IDE中進行程序代碼的編寫:
首先進行變量的定義,語句“int BlueLED = 13;”的作用是聲明藍色LED燈的連接引腳是13號,并且通過語句“char serialBlueLED;”來定義一個字符型的變量,其作用是用來存儲藍牙串口數據;在setup()函數中,先通過語句 “Serial.begin(9600);”來設置串口監視器的波特率為9600bps,再通過語句“pinMode(BlueLED, OUTPUT);”將藍色LED燈的引腳設置為輸出工作模式;在loop()函數中,建立一個實時檢測是否有串口數據傳輸的while()循環:“while (Serial.available() > 0)”,通過語句“serialBlueLED = Serial.read();”將讀取到的藍牙串口傳輸數據賦值給變量serialBlueLED;然后建立“if…else if…”雙分支選擇結構,對變量serialBlueLED的值進行是否為“1”或“0”(均為字符型)的判斷,是“1”的話,執行兩個“動作”:“Serial.println("收到指令:點亮13號藍色LED燈!");”(在串口監視器顯示提示信息)、“digitalWrite(BlueLED, HIGH);”(控制藍色LED燈發光);是“0”的話,則執行另外兩個“動作”:“Serial.println("收到指令:熄滅13號藍色LED燈!");”、“digitalWrite(BlueLED, LOW);”(熄滅藍色LED燈);最后添加一個2秒鐘的延遲語句:“delay(2000);”,將程序保存為BlueToothLED(如圖2)。

注意,程序編譯后不要直接上傳至Arduino,因為藍牙模塊占用了Arduino的RX(0號)和TX(1號),直接上傳會出現“Problem uploading to board”錯誤。解決方法是暫時將兩條杜邦線從Arduino上拔出后再進行上傳,上傳成功后再原樣插回即可,此時藍牙模塊的紅色LED燈就會一直閃爍,處于等待連接狀態中;在手機中下載并安裝Arduino bluetooth controller_v1.apk(apk文件可掃碼關注“壹零社”在編程相關中下載),運行程序進行藍牙連接(首次使用時會先進行“配對”),點擊“HC-05”項后會彈出四個連接選項,選擇其中的第二項“Switch mode”(開關模式),接著點擊彈出按鈕右上角的“齒輪”設置項,將綠色和紅色兩個開關的值分別設置為“1”和“0”(如圖3)。

打開Arduino程序的串口監視器,然后在手機中就可以不斷點擊兩個開關按鈕進行LED燈的控制了,同時會在串口監視器中對應出現“收到指令:點亮13號藍色LED燈!”或“收到指令:熄滅13號藍色LED燈!”的提示(如圖4)。

在藍牙LED燈的電路接線圖中稍作改動(如圖5),將LED燈及對應的杜邦線拆除,保持藍牙模塊和分壓電路不變,將風扇模塊接入:VCC和GND端分別接入面包板的紅色和藍色線槽,信號控制端通過杜邦線連接至Arduino的3號數字引腳。