O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Arduino藍牙傳輸應用

6.458 visualizações

Publicada em

藍牙簡介、藍牙模組設定、 Bluetooth Controller App、手機遙控Arduino、SoftwareSerial函式庫、設計藍牙遙控App

Publicada em: Tecnologia
  • Entre para ver os comentários

Arduino藍牙傳輸應用

  1. 1. 電子工程系車用電子與資訊組 Arduino藍牙傳輸應用 吳錫修 sswu@nkut.edu.tw Revised on July 18, 2018 藍牙簡介、藍牙模組設定、 Bluetooth Controller App、手機遙控Arduino、SoftwareSerial函式庫、 設計藍牙遙控App
  2. 2. Makeeachdaycount  藍牙 (Bluetooth)是⼀種短距、低功耗無線技術標準,也是⽬前智慧型 手機標準配備  藍牙使用2.402-2.480GHz的ISM (Industrial Scientific Medical) 頻段, 共79個頻道 (頻寬為1MHz)  藍牙技術聯盟成立於1998年,2002年藍牙成為IEEE 802.15.1標準  藍牙微網 (Piconet) 由⼀個主裝置 (master) 與最多七個作業中的從屬 (slave) 裝置所組成,使用分時雙工 (TDD,Time-Division Duplexing) 方式傳輸 藍牙傳輸簡介 1/2 2 分時雙工
  3. 3. Makeeachdaycount  藍牙裝置分為主控 (master) 與從端 (slave)  主控:可以探索並與其它藍牙裝置配對連線,例如電腦或手機的藍牙裝置  從端:被動等待被連結,例如藍牙滑鼠、藍牙耳機等  藍牙技術聯盟定義了許多Profile (規範),其中序列埠規範 (Serial Port Profile,SPP) 用來取代有線的RS-232序列傳輸 藍牙傳輸簡介 2/2 3
  4. 4. Makeeachdaycount  工作頻率2.4~2.48GHz ISM band  傳輸距離10 m  傳輸速率 2Mbps (Bluetooth 2.0)  通常預設配對密碼0000或1234,UART 9600bps  不同廠牌藍牙模組腳位layout並不相同  與MCU間使用UART介面 藍牙模組 1/2 4 HC06晶片、Slave模式
  5. 5. Makeeachdaycount  Arduino的輸出∕入腳位邏輯電壓是5V。如果藍牙模組背板標示傳送和 接收的邏輯電位是3.3V,使用時RxD端必須串接1K電阻或以電路分壓 藍牙模組 2/2 5 Arduino TX Arduino RX 1K Arduino TX GND 1K 2K Arduino RX
  6. 6. Makeeachdaycount  資料傳輸方式是1個bit接著1個bit傳送  送收雙方須議定傳輸格式,包括傳輸速率、資料位元數、同位元  傳輸速度 (baud reate),每秒位元數 (bit per second,bps)  同位元:偶同位(even parity)或奇(Odd)同位或不加入 UART傳輸 6
  7. 7. Makeeachdaycount  FTDI Basic  USB信號轉換成RS-232  有5V及3.3V兩種,藍牙模組需使用3.3V模組 藍牙模組設定 1/4 7
  8. 8. Makeeachdaycount  接線  VCC--VCC  GND--GND  TXD--RXD  RXD--TXD  若是HC-05模組,設定時Key須接VCC 藍牙模組設定 2/4 8
  9. 9. Makeeachdaycount  開啟Serial monitor 藍牙模組設定 3/4 9 選擇連線速率 (使用出廠預設baud rate) 傳送AT命令輸入AT命令
  10. 10. Makeeachdaycount  AT command  不同晶片組,AT命令有所差異,務必參照供應商之文件說明  HC-06  重設藍牙裝置名稱:AT+NAMEnkeeBT-01  重設藍牙裝置配對密碼:AT+PIN1234  重設藍牙裝置傳輸速率9600bps:AT+BAUD4 藍牙模組設定 4/4 10
  11. 11. Makeeachdaycount  手機與Arduino的藍牙模組配對 藍牙模組配對 11
  12. 12. Makeeachdaycount  ⼀款免費的藍牙控制App  提供四種操作介面  可自訂要發送的操作控制碼 Arduino bluetooth controller 1/6 12
  13. 13. Makeeachdaycount  選擇操作介面  遊戲控制器模式  ON/OFF開關模式  數值滑桿模式  文字終端機模式 Arduino bluetooth controller 2/6 13
  14. 14. Makeeachdaycount  ON/OFF開關模式 Arduino bluetooth controller 3/6 14 設定命令碼 點擊一下即可設定對應的命令碼, 可以是單一字元或字串
  15. 15. Makeeachdaycount Arduino bluetooth controller 4/6 15 設定按鈕對應的命令碼  遊戲控制器模式  預設命令碼:<按鈕 (L)、 ∧按鈕 (F)、>按鈕 (R)、 ∨按鈕 (B)、SELECT按鈕 (N)、START按鈕 (S);右側四個圖形按鈕則未預設命令碼
  16. 16. Makeeachdaycount  數值滑桿模式  最小值0  最大值255  拖曳調整時(數值異動)會自動送出數值字串 Arduino bluetooth controller 5/6 16
  17. 17. Makeeachdaycount  文字終端機模式 Arduino bluetooth controller 6/6 17 在此輸入所要傳送的字串 傳送記錄
  18. 18. Makeeachdaycount  實驗⽬的  熟用藍牙通訊  使用Arduino bluetooth controller App遙控LED開啟及關閉 Lab 手機藍牙遙控 1/3 18 藍牙模組
  19. 19. Makeeachdaycount  設定使用字元'1'及'2'做為Arduino bluetooth controller ON/OFF開 關控制碼  參考程式  注意事項:燒錄時,須先斷開藍牙模組Tx、Rx接線 #define LED 2 //LED接腳 #define ON '1' //開啟LED之控制碼 #define OFF '2' //關閉LED之控制碼 byte bt_read; void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); } Lab 手機藍牙遙控 2/3 19
  20. 20. Makeeachdaycount void loop() { if (Serial.available()>0) { //檢查是否收到控制碼 bt_read = Serial.read(); Serial.println(bt_read); } switch (bt_read) { //執行命令 case ON: digitalWrite(LED, HIGH); break; case OFF: digitalWrite(LED, LOW); break; } } Lab 手機藍牙遙控 3/3 20
  21. 21. Makeeachdaycount  SoftwareSerial函式庫可以讓我們任意指定二個接腳充當UART之Tx及 Rx接腳  當Arduino需連接多個裝置序列傳輸裝置,使用SoftwareSerial函式庫 非常方便  SoftwareSerial(uint8_t receivePin, uint8_t transmitPin)  建構SoftwareSerial物件  receivePin 作為UART Rx端之接腳  transmitPin 作為UART Tx端之接腳  void SoftwareSerial.begin (long speed)  設定序列傳輸速率,使用8n1傳輸格式 SoftwareSerial函式庫 1/4 21
  22. 22. Makeeachdaycount  bool SoftwareSerial.listen()  使SoftwareSerial端⼝進入偵聽狀態。⼀次只能偵聽⼀個SoftwareSerial端 ⼝;到達其他SoftwareSerial端⼝端⼝的數據將被丟棄  void SoftwareSerial.end()  停用序列傳輸功能,允許RX和TX接腳做為通用輸入和輸出。調用 SoftwareSerial.begin()可重新啟用序列傳輸  bool SoftwareSerial.isListening()  檢查SoftwareSerial端⼝是否為偵聽狀態  bool SoftwareSerial.stopListening()  結束偵聽SoftwareSerial端⼝。當⼀個SoftwareSerial端⼝進入偵聽狀態, 其它SoftwareSerial端⼝會自動結束偵聽 SoftwareSerial函式庫 2/4 22
  23. 23. Makeeachdaycount  bool SoftwareSerial.overflow()  檢測SoftwareSerial緩衝區 (64bytes) 是否溢出。調用此函數會清除溢出 旗號,這意味著後續調用將傳回false,除非在此期間已收到並丟棄了另⼀ 個數據  int SoftwareSerial.peek()  讀取SoftwareSerial緩衝區的第⼀個字元,但並不將其從緩衝區中移除。 若序列緩衝區無資料則回傳-1  virtual size_t SoftwareSerial.write(uint8_t byte)  寫入資料到SoftwareSerial端⼝。這些資料會以位元組或⼀連串位元組形 式發送 SoftwareSerial.write(45); //輸出'-' SoftwareSerial.write("Hello"); //輸出'H','e','l','l','o' SoftwareSerial函式庫 3/4 23
  24. 24. Makeeachdaycount  virtual int SoftwareSerial.read()  取出SoftwareSerial端⼝緩衝區的第⼀個字元。若序列緩衝區無資料則回 傳-1  virtual int SoftwareSerial.available()  檢查SoftwareSerial端⼝是否有收到資料  virtual void SoftwareSerial.flush()  等待SoftwareSerial端⼝緩衝區資料傳送完畢  另外也可使用print()及println()方法,用法與Serial函式庫相同 SoftwareSerial函式庫 4/4 24
  25. 25. Makeeachdaycount  實驗⽬的  熟用SoftwareSerial函式庫進行藍牙通訊  使用Arduino bluetooth controller App遙控LED開啟及關閉 Lab 使用SoftwareSerial藍牙傳輸 1/3 25 藍牙模組
  26. 26. Makeeachdaycount  設定使用字元'1'及'2'做為Arduino bluetooth controller ON/OFF開 關控制碼  參考程式 #include <SoftwareSerial.h> //引用SoftwareSerial函式庫 #define LED 2 //LED接腳 #define ON '1' //開啟LED之控制碼 #define OFF '2' //關閉LED之控制碼 byte bt_read; //建構SoftwareSerial物件,D9作為Rx,D10作為Tx SoftwareSerial BT(9, 10); void setup() { Serial.begin(9600); //設定Serial傳輸速率 BT.begin(9600); //設定SoftwareSerial傳輸速率 pinMode(LED, OUTPUT); } Lab 使用SoftwareSerial藍牙傳輸 2/3 26
  27. 27. Makeeachdaycount void loop() { if (BT.available() > 0) { //檢查是否收到控制碼 bt_read = BT.read(); Serial.println(bt_read); //在Serial Monitor顯示收到的控制碼 } switch (bt_read) { //執行對應命令 case ON: digitalWrite(LED, HIGH); break; case OFF: digitalWrite(LED, LOW); break; } } Lab 使用SoftwareSerial藍牙傳輸 3/3 27
  28. 28. Makeeachdaycount  安裝Java SDK  建議JDK 8  下載App Inventor 2 Ultimate  https://sourceforge.net/projects/ai2u/files/  AI2U-portable-v4.6-64bit.zip  解壓縮 App Inventor 2 Ultimate離線版 1/4 28
  29. 29. Makeeachdaycount  執行AI2U4364AI2U.exe  點擊All AI2U Server  點擊Start Invent 註:如果有其它程式佔用8888 port,須先關閉該程式 App Inventor 2 Ultimate離線版 2/4 29
  30. 30. Makeeachdaycount App Inventor 2 Ultimate離線版 3/4 30
  31. 31. Makeeachdaycount  點擊Start new project建立新專案 App Inventor 2 Ultimate離線版 4/4 31
  32. 32. Makeeachdaycount  命令列輸入netstat -nao | find "8888"找出佔用8888埠之程式ID  工作管理員將程式關閉 排除8888 port被佔用 32
  33. 33. Makeeachdaycount  實驗⽬的  熟用App Inventor設計藍牙遙控App  使用手機透過藍牙遙控LED開啟及關閉 Lab 設計藍牙遙控App 1/8 33 藍牙模組
  34. 34. Makeeachdaycount  參考程式  注意事項:燒錄時,須先斷開藍牙模組Tx、Rx接線 #define LED 2 //LED接腳 #define ON '1' //開啟LED命令 #define OFF '2' //關閉LED命令 byte bt_read; void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); } Lab 設計藍牙遙控App 2/8 34
  35. 35. Makeeachdaycount void loop() { if (Serial.available()>0) { //檢查是否收到命令 bt_read = Serial.read(); Serial.println(bt_read); } switch (bt_read) { //執行命令 case ON: digitalWrite(LED, HIGH); break; case OFF: digitalWrite(LED, LOW); break; } } Lab 設計藍牙遙控App 3/8 35
  36. 36. Makeeachdaycount Lab 設計藍牙遙控App 4/8 36
  37. 37. Makeeachdaycount Lab 設計藍牙遙控App 5/8 37
  38. 38. Makeeachdaycount Lab 設計藍牙遙控App 6/8 38
  39. 39. Makeeachdaycount  手機連線下載APK並安裝  http://163.22.249.40/arduino.html <html> <head> <title>南開科技大學電子工程系</title> </head> <body> <p align="center"> <font size="5"> <a href="LED_Controller.apk">Arduino藍牙控制</a> </font> </p> </body> </html> Lab 設計藍牙遙控App 7/8 39
  40. 40. Makeeachdaycount  點擊BTList,選取所配對的Arduino藍牙裝置;點擊ON開啟LED,點 擊OFF關閉LED Lab 設計藍牙遙控App 8/8 40

×