ADS

2013年1月26日 星期六

[Arduino] bluetooth


最近在網路上買了一塊280元的bluetooth想說要在Arduino上用用看,我原本以為使用bluetooth
會需要新的函式庫或是有多複雜,但是查了點資料和實際測試之後發現完全不是那麼一回事,在Arduino中Serial物件我們應該相當熟識,我們一般在跟USB做傳訊時也都是用serial物件來進行傳輸的。與我們平常再用arduino usb的語法沒什麼兩樣,我在別的外國網站看到在賣這一顆模組有一些他的介紹和Arduino demo的範例Arduino Code Download,我編譯下載至板子後(請勿插上藍芽模組後進行編譯會有問題),藍芽模組就可以用了,腳位接線是TX > RX ,RX>TX,VCC > 5V,GND>GND



設置好之後我們可以在電腦上新增裝置
選取BT UART下一步
選擇 配對 而不使用代碼
在裝置中按右鍵內容,我們來查看該裝置被連結到哪一個COM上面


之後我們可以打開Arduino IDE的Serial port COM13

再按下畫面右上角的Serial monitor會彈出視窗叫你輸入代碼
輸入預設值1234或是您有設置過或是您知道的配對碼
連線成功後就可以使用bluetooth來向Arduino的收發囉!!

以下是程式碼

#define BUFFERSIZE 127 uint8_t inBuffer[BUFFERSIZE]; int inLength; // length of data in the buffer int numLoop = 0; // number of times we looped int ledPin = 13; void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { // read string if available if (Serial.available()) { inLength = 0; while (Serial.available()) { inBuffer[ inLength] = Serial.read(); inLength++; if (inLength >= BUFFERSIZE) break; } Serial.print("Arduino received: "); Serial.write(inBuffer ,inLength); Serial.println(); } // blink the led and send a number digitalWrite(ledPin, HIGH); // set the LED on delay(100); // wait a bit Serial.println(numLoop); digitalWrite(ledPin, LOW); // set the LED off delay(1000); numLoop++; }


Arduino Due 不能與USB共用Serial請改用其他的RX TX,直接把Serial改成Serial1或Serial2或

Serial3就可以用了





7 則留言:

  1. 您好, 我有一塊"Arduino UNO",請問我是不是只要買"Arduino BlutTooth Module"就可以使用?

    回覆刪除
  2. 你好,請教一下,我的bluetooth 是com5 ,但arduino上卻只有com6,這可能是什麼問題?
    謝謝。
    我用的os是win8

    回覆刪除
    回覆
    1. 我目前還沒用過win8
      遇到這種情況我建議你可以重開Arduino IDE
      或者用PUTTY去看com5應該也是可以的
      可以去這裡下載PUTTY
      http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

      刪除
  3. 我與樓上遇到同一情況, 用coolterm是可以連線, 但用atduino和processing就找不到com, 應該是window不認bluetooth serial com 是一般的serial com.....高手有否辦法???

    回覆刪除
  4. 不好意思我是初學者!
    請問為什麼這段程式碼會印出hello呢?
    還有這段程式碼是甚麼意思呢?
    while (Serial.available()) {
    inBuffer[ inLength] = Serial.read();
    inLength++;
    if (inLength >= BUFFERSIZE)
    break;
    }

    回覆刪除
  5. 上面這個COM13的圖片是藍芽開啟的port 所以我傳送hello到Arduino Arduino再回傳他收到了

    while (Serial.available()) { //Serial.available()會回傳是否有接收到訊息(這裡是指從電腦發送過來的訊息
    inBuffer[ inLength] = Serial.read(); //把收到的訊息放到inBuffer陣列裡
    inLength++;存好後+1
    if (inLength >= BUFFERSIZE) 如果資料大於預設值就跳出while
    break;
    }

    回覆刪除