1. 程式人生 > >arduino教程-13. 藍芽

arduino教程-13. 藍芽

智慧移動裝置和Arduino微電腦,兩者相輔相成,可各自發揮所長。例如,用手機當成Arduino的顯示器或輸入裝置,Arduino當做手機的硬體擴充套件口,控制燈光和自走車,或者返回溫溼度感測器的資料給手機。

電波、頻段和無線傳輸簡介

利用電波或紅外線來傳輸資料。可見光、紅外線和電波都是一種電磁波,並非所有的頻段和無線電裝置都需要使用執照,世界各國都有保留某些給工業(industrial)、科學研究(Scientific)和醫療(Medical)方面的頻段,簡稱ISM頻段,2.4GHZ是世界各國共同的ISM頻段,因此市面上許多無線通訊產品都採用2.4GHZ。
NFC是一種採用電磁波,用於1~2米內的短距離無線通訊技術,全名是Near Field Communicatin(進場通訊,或近距離無線通訊)。在聯機範圍內的兩臺機器要相連時,只要在螢幕上點選是否接收另一方的聯機即可。

14-2 認識藍芽(Bluetooth)

藍芽是一種近距離無線資料和語音傳輸技術,主要用於取代線材和紅外線傳輸。藍芽主要用於無線耳機和資料傳輸,藍芽技術聯盟(Bluetooth Special Interest Group,簡稱SIG),定義了多種藍芽規範(Profile,或譯為“協議”):
HID:制定滑鼠、鍵盤和遊戲杆等人機介面裝置(human interface device)所要遵循的規範。
HFP: 泛指用於行動裝置,支援語音撥號和重撥等功能的擴音聽筒裝置
A2DP: 可傳輸16位、44.1kHZ取樣頻率的高質量立體聲音樂,主要用於隨身聽和影音裝置。
SPP:用於取代有線串列埠的藍芽裝置規範。Bluetooth 2.1 + EDR

代表“加強資料傳輸率(Enhanced Data Rate)

動手做14-1 使用軟體串列埠程式連線Arduino與藍芽模組

**實驗說明:**在電腦上通過藍芽與Arduino板聯機,控制埠13上的LED。
藍芽模組通過串列埠和Arduino板聯機,不過,Arduino的程式和“串列埠監控視窗”也是通過串列埠傳輸。Arduino微電腦板預設只有一個串列埠(簡稱“系統串列埠”),應保留給串列埠監控視窗使用,本單元將通過SoftwareSerial(軟體串列埠)擴充套件庫,把其他埠變成串列埠給藍芽模組使用。
**實驗電路:**數字0和1是Arduino自帶的串列埠埠,我們可以連線藍芽模組。藍芽模組的傳送端(Tx)接Arduino的接收端(Rx),這種方式會佔用系統串列埠,應該避免使用。
實驗程式:

Arduino軟體自帶的SoftwareSerial擴充套件庫,能讓我們指定任意兩個埠充當串列埠

//藍芽模組其實就是無線串列埠,程式寫法和有線的串列埠相同。
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 9);  //自定義SoftwareSerial型別物件,引數(接收端,傳送端)
const byte ledPin = 13;
char val;
void setup() {
    pinMode(ledPin, OUTPUT); //
    /*初始化串列埠,請依照你的藍芽模組設定聯機速率,筆者的模組採用9600bps速率聯機。*/
    BT.begin(9600);
    BT.print("BT is ready!"); //
}

void loop() {
    if (BT.available()){
        val = BT.read();
        switch (val) {
            case '0':
                digitalWrite(ledPin, LOW);
                break;
            case '1':
                digitalWrite(ledPin, HIGH);
                break;
        }
    }
}

動手做14-2 用Android手機藍芽遙控機器人

**實驗說明:本單元的遙控機器採用Android手機藍芽控制,架構圖如下:
控制原理是從手機藍芽傳遞字元給機器人,機器人的微電腦將依照收到的’w’、'a’等字元,執行前進和轉彎等動作。
實驗材料:
具備藍芽的Android智慧手機、採用兩個碳刷電機的模型動力玩具、L298N電機模組、藍芽介面模組、電池盒