head:
title: 手把手教你玩轉藍芽模組(原理+驅動)
description:
手把手教你玩轉藍芽模組(原理+驅動)
作為嵌入式開發工程師,藍芽模組怎能少呢?
藍芽模組廣泛應用在各種電子器件,比如手機、藍芽耳機/音響、藍芽手環、掃地機器人,等等。大家在學嵌入式的時候,玩過的智慧家居、智慧小車、無人機,都有藍芽模組的應用。
所以,藍芽模組的學習勢在必行。
藍芽模組的學習其實也沒大家想的那麼難,只需要你玩好串列埠就行了,再加上會一些 AT 指令,你就可以稱得上藍芽高手了。但關於藍芽協議棧,那學起來估計沒一年半載下不來。
對於初學者來講,只需要懂得如何使用這個藍芽模組,就已經綽綽有餘了。
1. 原始碼下載及前置閱讀
本文首發 良許嵌入式網 :https://www.lxlinux.net/e/ ,歡迎關注!
本文所涉及的原始碼及安裝包如下(由於平臺限制,請點選以下連結閱讀原文下載):
https://www.lxlinux.net/e/stm32/bluetooth-turorial.html
如前面所述,玩藍芽模組就是玩串列埠,所以大家一定要先把串列埠玩好。如果你不懂得如何玩串列埠,可以看下面這篇文章:
STM32串列埠接收不定長資料(接收中斷+超時判斷):https://www.lxlinux.net/e/stm32/stm32-usart-receive-data-usin...
如果你是個零基礎的小白,連 STM32 都沒見過,我也給你準備了一個保姆級教程,手把手教你搭建好 STM32 開發環境,並教你如何下載程式,簡直業界良心!
零基礎快速上手STM32開發(手把手保姆級教程):https://www.lxlinux.net/e/stm32/stm32-quick-start-for-beginne...
如果你連程式碼都不知道怎麼燒錄到 STM32 的,可以參考下文,提供了 5 種程式碼燒錄方式:
STM32下載程式的五種方法:https://www.lxlinux.net/e/stm32/five-ways-to-flash-program-to...
2. 藍芽模組介紹
2.1 型號介紹
現在市面上流行的藍芽模組有很多,例如廣州匯承公司的藍芽模組應用非常的廣泛,它們公司生產的 HC 系列的藍芽模組如下圖所示:
型號 | 主/從機 | 通訊協議 | 工作頻段 | 通訊距離 | 嵌入方式 | 空中速率 | 尺寸 |
---|---|---|---|---|---|---|---|
HC-02 | 從機 | 藍芽2.0 / 藍芽4.0 | 2.4G | 10米 | 貼片 | 2Mbps | 26.9 13 2 mm |
HC-04 | 從機 | 藍芽2.0 / 藍芽4.0 | 2.4G | 10米 | 貼片 | 60KB/s | 18.5 13 2 mm |
HC-05 | 主從機一體 | 藍芽2.0 | 2.4G | 10米 | 貼片 | 2Mbps | 27.0 13 2 mm |
HC-06 | 主從機一體 | 藍芽2.0 | 2.4G | 10米 | 貼片 | 2Mbps | 27.0 13 2 mm |
HC-08 | 主從機一體 | 藍芽4.0 | 2.4G | 80米 | 貼片 / 焊接 | 1Mbps | 26.9 13 2 mm |
HC-09 | 主從機一體 | 藍芽4.0 | 2.4G | 60米 | 貼片 / 焊接 | 3KB/s | 18.5 13 2 mm |
HC-42 | 主從機一體 | 藍芽5.0 | 2.4G | 40米 | 貼片 / 焊接 | 1Mbps / 2Mbps | 26.9 13 2 mm |
這些藍芽模組,在主/機、工作頻段、通訊距離、空中速率等方面都存在差異,大家可以根據自己的業務需求進行選擇。
對於初學者而言,HC-08 是一款非常適合入門的藍芽模組,本文就是以 HC-08 作為物件,介紹藍芽模組的玩法。
HC-08 採用 TI CC25540 晶片方案,藍芽 BLE4.0 主從一體,透過 BLE 的軟體連線,傳輸速率 1Mbps ,傳輸距離 80m ,低功耗,詳細引數如下:
2.2 引腳介紹
HC-08 藍芽模組是透過串列埠與微控制器進行通訊,這個模組既可以作為主機也可以作為從機(透過 AT 指令配置)。有些藍芽模組不支援主機(如 HC-02 、HC-04),所以在使用時需要注意區分。
HC-08 藍芽模組實物圖如下所示:
可以看到,HC-08 模組一共有 6 個引腳,下面詳細介紹各個引腳的作用。
- STATE:狀態輸出引腳。未連線時,則為低電平。連線成功時,則為高電平。可以在程式中作指示引腳使用;
- RXD:串列埠接收引腳。接微控制器的 TX 引腳(如果是5V MCU,需串聯一個 220R 電阻);
- TXD:串列埠傳送引腳。接微控制器的 RX 引腳;
- GND:接地電源;
- VCC:輸入 3.2~6V 的電源(注意,上面一層郵票口的模組不能接 5V 的電源,需要底板降壓至 3.3V);
- KEY:主機用於清除配對的從機地址記憶(需要拉高電平 200ms 以上)。
上面的「連線」是指模組透過藍芽協議連線上主機或從機,並非物理意義上的連線。下同。
正常通訊下,只需接 RXD、TXD、GND、VCC 四條線就夠了。
藍芽模組上還有一個 LED燈和一個小按鍵 (按鍵控制著引腳 KEY )。預設情況下,當 LED燈閃爍時表示藍芽模組當前為從機,正在等待連線。而長亮的時候就代表已經有主機連線上該模組,可以正常進行透傳通訊了。
當按鍵按下後,主機將清除已被記錄的從機地址。另外,也可使用 AT+CLEAR
指令,實現「主機清除已記錄的從機地址」的功能。
注意,在硬體接線的時候藍芽模組的 TXD 要和微控制器的 RXD 相連線,藍芽模組的 RXD 要和微控制器的 TXD 相連線,也就是所謂的「交叉接線」。
3. 基本玩法
3.1 主/從機模式
3.1.1 主機模式
當藍芽模組處於主機模式的時候,可以與一個從機進行連線。在此模式下可以對周圍裝置進行搜尋並選擇需要連線的從機進行連線。理論上,一個藍芽主端裝置,可同時與 7 個藍芽從端裝置進行通訊。
一個具備藍芽通訊功能的裝置,可以在兩個角色之間進行切換。比如:平時工作在從機模式,等待其它主機來連線;在需要時,可轉換為主機模式,向其它裝置發起連線。一個藍芽裝置以主機模式發起連線時,需要知道對方的藍芽地址,配對密碼等資訊,配對完成之後,可直接發起連線。
3.1.2 從機模式
當藍芽模組處於從機模式的時候,只能被主機搜尋,不能主動搜尋。從機與主機連線以後,也可以和主機進行傳送和接收資料。
3.3.3 兩種工作模式有什麼區別呢?
主機是指能夠搜尋別人並主動建立連線的一方,從機則不能主動建立連線,只能等待主機連線自己。
- 如何進入從機模式?
HC-08 上電之後,預設情況下就是從機模式。如果需要手動配置,可以使用 AT+ROLE=S
指令。
- 如何進入主機模式?
我們需要透過 AT 指令 AT+ROLE=M
來設定藍芽模組為主機模式。
3.2 什麼是AT指令?
AT 指令(AT Commands)最早是由發明撥號調變解調器的賀氏公司為了控制撥號調變解調器而發明的控制協議。後來隨著網路頻寬的升級,速度很低的撥號調變解調器基本退出市場,但是 AT 指令被保留了下來。
在嵌入式開發中,經常是使用 AT 命令去控制各種通訊模組,比如 WiFi 模組、藍芽模組、GPRS 模組等等。一般就是主晶片透過硬體介面(比如串列埠、SPI)傳送 AT 指令給通訊模組,模組接收到資料之後回應響應的資料。
3.3 常用的AT指令
AT 指令分為四種型別:
型別 | 格式 | 功能 |
---|---|---|
測試指令 | AT + < X > = ? | 查詢設定命令或內部程式設定的引數及其取值範圍 |
查詢指令 | AT + < X > ? | 返回引數的當前值 |
設定指令 | AT + < X > = < ... > | 設定使用者自定義的引數值 |
執行指令 | AT + < X > | 執行受模組內部程式控制的變引數不可變 |
藍芽模組的 AT 指令相較於 ESP8266 要少非常多,後者有近百條。現在舉例一些常用指令,並使用這些指令一步一步的透過串列埠實現藍芽模組的收發資料。
序號 | AT指令(小寫 x 表示引數) | 作用 | 預設狀態 | 主/從生效 |
---|---|---|---|---|
1 | AT | 檢測串列埠是否正常工作 | - | M/S |
2 | AT+RX | 檢視模組基本引數 | - | M/S |
3 | AT+DEFAULT | 恢復出廠設定 | - | M/S |
4 | AT+RESET | 模組重啟 | - | M/S |
5 | AT+VERSION | 獲取模組版本、 日期 | - | M/S |
6 | AT+ROLE=x | 主/從角色切換 | S | M/S |
7 | AT+NAME=xxx | 修改藍芽名稱 | HC-08 | M/S |
8 | AT+ADDR=xxxxxxxxxxxx | 修改藍芽地址 | 硬體地址 | M/S |
9 | AT+RFPM=x | 更改無線射頻功率 | 0(4dBm) | M/S |
10 | AT+BAUD=xx,y | 修改串列埠波特率 | 9600,N | M/S |
11 | AT+CONT=x | 是否可連線 | 0(可連) | M/S |
12 | AT+AVDA=xxx | 更改廣播資料 | - | S |
13 | AT+MODE=x | 更改功耗模式 | 0 | S |
14 | AT+AINT=xx | 更改廣播間隔 | 320 | M/S |
15 | AT+CINT=xx,yy | 更改連線間隔 | 6,12 | M/S |
16 | AT+CTOUT=xx | 更改連線超時時間 | 200 | M/S |
17 | AT+CLEAR | 主機清除已記錄的從機地址 | - | M |
18 | AT+LED=x | LED 開/關 | 1 | M/S |
19 | AT+LUUID=xxxx | 搜尋 UUID | FFF0 | M/S |
20 | AT+SUUID=xxxx | 服務 UUID | FFE0 | M/S |
21 | AT+TUUID=xxxx | 透傳資料 UUID | FFE1 | M/S |
22 | AT+AUST=x | 設定自動進入睡眠的時間 | 20 | S |
常用AT指令說明
請注意,只有當藍芽模組未連線上主/從機,透過串列埠傳送的資料才會被識別為 AT
指令。否則一旦連線上主/從機,則傳送的字串則被視為普通資料,直接透傳給對方。
測試指令
指令 響應 功能 說明 AT OK 測試指令 最基礎的測試指令
當模組連線上 MCU 之後,我們不知道模組是否連線到位、是否有虛連、模組是否正常工作,我們可以傳送 AT
這條指令進行測試,如果接收到 OK
響應,則代表模組一切正常,可以進行後續的操作了。
模組重啟指令
指令 響應 功能 說明 AT+RESET OK 重啟藍芽模組 藍芽模組會自動重啟,重啟 200ms 後可執行新的操作 恢復出廠設定指令
指令 響應 功能 說明 AT+DEFAULT OK 恢復出廠設定 注:不會清除主機已記錄的從機地址!若要清除,請在未連線狀態下使用 AT+CLEAR 指令進行清除。
藍芽模組會自動重啟,重啟 200ms 後可進行新的操作。更改功耗模式指令
指令 響應 功能 說明 AT+MODE=? 0/1/2 獲取當前功耗模式 獲取當前功耗模式 AT+MODE=0 OK 更改功耗模式(僅限從機) 全速功耗模式(出廠預設) AT+MODE=1 OK 更改功耗模式(僅限從機) 一級節能模式 AT+MODE=2 OK 更改功耗模式(僅限從機) 二級節能模式(睡眠模式)
節能模式說明:
一級節能模式是模組最主要的低功耗模式,可為透傳提供低功耗待機,也可以作為低功耗的廣播資料;
二級節能模式是睡眠模式,在睡眠下時不可發現、不可連線,串列埠喚醒後可發現、可連線。
兩種節能模式都可以透過串列埠傳送 1 個位元組以上的資料來喚醒,但喚醒後前面幾個位元組的資料可能會亂碼。
修改模組角色指令
指令 響應 功能 說明 AT+ROLE=? Master/Slave 獲取當前模組的主從機狀態 獲取當前的藍芽模組為主機/從機模式 AT+ROLE=M Master 設定為主機模式 設定後模組將自動重啟,重啟 200ms 後可進行新的操作 AT+ROLE=S Slave 設定為從機模式 設定後模組將自動重啟,重啟 200ms 後可進行新的操作 設定 LED 開/關指令
指令 響應 功能 說明 AT+LED=? OK+LED=? 查詢LED工作模式 查詢LED當前的工作模式 AT+LED=0 OK+LED=0 設定LED工作模式 設定LED的工作模式為關閉 AT+LED=1 OK+LED=1 設定LED工作模式 設定LED的工作模式為開啟
使用指令關閉LED後再開啟,需要重啟藍芽模組才能生效
修改藍芽地址指令
指令 響應 功能 說明 AT+ADDR=? (當前藍芽模組MAC地址) 獲取藍芽模組MAC地址 地址必須為 12 位的 0~F 數字或大寫字元,即 16 進位制字元。 AT+ADDR=xxx OKsetADDR 修改藍芽模組的MAC地址 建議不要修改模組的 MAC 地址,避免衝突 檢視軟體版本指令
指令 響應 功能 說明 AT+VERSION HC-08V3.1, 2017-07-07 獲取軟體版本和釋出日期 獲取軟體版本和釋出日期 檢視當前基本引數
指令 響應 功能 說明 AT+RX Name:HC-08 查詢模組的基本引數 藍芽名是使用者設定的名字 Role:Slave 模組角色(主/從) Baud:9600,NONE 串列埠波特率,校驗位 Addr:xx,xx,xx,xx,xx,xx 藍芽地址 PIN :000000 藍芽密碼(密碼無效) 修改藍芽名稱指令
指令 響應 功能 說明 AT+NAME=? OK+NAME=HC-08 獲取藍芽當前名稱 獲取藍芽模組的當前名稱 AT+NAME=xxx OKsetNAME 設定藍芽名稱 設定藍芽模組的名稱 設定模組是否可連線指令
指令 響應 功能 說明 AT+CONT=? Connectable/Non-Connectable 獲取藍芽模組當前是否可連線 設定可連線性,不可連線時主要用於廣播資料 AT+CONT=0 OK 設定“可連線”成功 設定“可連線”成功 AT+CONT=1 OK 設定“不可連線”成功 設定“不可連線”成功 模式 主機 從機 可連線 中心(Central)可連線,連線後進入普通透傳模式 外設(Peripheral)可連線,連線後進入普通透傳模式 不可連線 觀察者(Observer)當前模組不能連線到其它模組或者裝置,但是會自動掃描 HC-08 從機的廣播資料包,固定 2s 重新整理一次 廣播者(Broadcaster)不會和主機連線,但可以結合低功耗模式 1,實現廣播資料包傳送 設定連線超時指令
指令 響應 功能 說明 AT+CTOUT=? OK+CTOUT=200(預設) 查詢連線超時時間 查詢連線超時時間,單位 10ms,範圍 10~3200(100ms~32s)。預設為200 AT+CTOUT=100 OK+CTOUT=100 設定連線超時時間 設定連線超時時間為100ms 設定自動進入睡眠時間指令
指令 響應 功能 說明 AT+AUST=? OK+AUST=20 查詢自動睡眠定時 (預設 20s,該時間越小則越省電)設定的時間範圍為:1s~300s 。在低功耗模式下,啟用模組後如無操作,x 秒後將返回使用者原先所設定的低功耗模式 AT+AUST=100 OK+AUST=100 設定自動睡眠時間 設定自動睡眠時間為100s 修改串列埠波特率指令
指令 響應 功能 說明 AT+BAUD=xx,y xx, y 設定串列埠 設定串列埠,引數如下表格 AT+BAUD=? 9600,NONE 查詢串列埠設定 查詢串列埠設定 xx 為串列埠波特率,y 為校驗位
引數 串列埠波特率(xx) 引數 校驗位(y) 1200 1200bps N 無校驗NONE 2400 2400bps E 偶校驗EVEN 4800 4800bps O 奇校驗ODD 9600 9600bps(預設波特率) 19200 19200bps 38400 38400bps 57600 57600bps 115200 115200bps
3.4 通訊示意圖
4. 專案實戰
4.1 硬體準備
- STM32核心板
本文使用的是 STM32F103C8T6 最小系統板,價格很便宜,普遍 5~8 元。
<img src="https://lxlinux.superbed.verylink.top/item/656d4d04c458853aef905452.jpg" style="zoom:50%;" />
- ST-Link V2
ST-Link 是一種用於 STM32 微控制器的除錯和程式設計工具,它可以透過 SWD 或 JTAG 介面與開發板進行通訊。一般價格在 6~8 元左右。
<img src="https://lxlinux.superbed.verylink.top/item/65222a41c458853aefb2ce8a.jpg" style="zoom:50%;" />
- USB轉TTL
這玩意兒大家應該非常熟悉了,通常我們用它來列印微控制器 log。
當然,配合上位機(比如串列埠除錯助手),我們也可以使用它對一些模組進行除錯,比如:wifi模組、4G模組、藍芽,等等。
當然價格也很便宜,普遍 5~8 元。
如果對這個工具使用不熟悉的小夥伴,可以閱讀下文:
零基礎快速上手STM32開發(手把手保姆級教程):https://www.lxlinux.net/e/stm32/stm32-quick-start-for-beginne...
<img src="https://lxlinux.superbed.verylink.top/item/6523c525c458853aef551a73.jpg" style="zoom:67%;" />
- 藍芽模組
本文使用的是 HC-08 藍芽模組,價格普遍 5~20 元左右。
<img src="https://lxlinux.superbed.verylink.top/item/6576bf2ec458853aefd0c3b7.jpg" style="zoom: 25%;" />
4.2 PC串列埠助手除錯
在專案開始前,我們需要使用 USB 轉 TTL 工具對我們的藍芽模組進行測試,確保藍芽模組工作正常。
硬體接線如下表格所示:
HC-08 | USB轉TTL |
---|---|
RXD | TXD |
TXD | RXD |
GND | GND |
VCC | 3V3 |
線路接好之後如下圖所示:
線路接好之後,將 USB 轉 TTL 工具插入電腦,在串列埠助手輸入指令 AT
,模組正常情況下會返回 OK
。
<img src="https://lxlinux.superbed.verylink.top/item/6577c680c458853aef84dbf1.jpg" style="zoom: 50%;" />
接著我們輸入 AT+VERSION
,獲取藍芽模組的版本資訊,結果如下:
<img src="https://lxlinux.superbed.verylink.top/item/6577c72ec458853aef874003.jpg" style="zoom: 50%;" />
在使用串列埠除錯藍芽模組的過程中,有可能會出現波特率正常、驅動正常、藍芽模組正常,且可以被手機連線上,但是輸入 AT 指令,卻沒有返回的情況,出現這種情況可以試試換個串列埠助手。
4.3 硬體接線
藍芽模組確認正常之後,我們就可以使用微控制器透過程式設計的方式來操作藍芽模組。
本文使用 串列埠2 連線藍芽,串列埠1 連線 USB 轉 TTL 來列印 log。
HC-08 | STM32 | USB轉TTL |
---|---|---|
VCC | 3.3V | VCC |
RXD | A2 | |
TXD | A3 | |
GND | GND | GND |
A10 | TXD | |
A9 | RXD |
燒錄的時候接線如下表,如果不會燒錄的話可以看我之前的文章 STM32下載程式的五種方法:https://www.lxlinux.net/e/stm32/five-ways-to-flash-program-to...。
ST-Link V2 | STM32 |
---|---|
SWCLK | SWCLK |
SWDIO | SWDIO |
GND | GND |
3.3V | 3V3 |
接好之後像這樣,我這裡使用了麵包板,用公對母的杜邦線將他們串在了一起
4.4 藍芽收發程式碼編寫
藍芽模組透過串列埠與 MCU 進行通訊,所以第一步需要先做好串列埠的配置。
關於串列埠的配置,我寫過一篇文章手把手教你玩串列埠,大家可以移步下文檢視:
STM32串列埠接收不定長資料(接收中斷+超時判斷):https://www.lxlinux.net/e/stm32/stm32-usart-receive-data-usin...
具體程式碼如下:
uint8_t bt_uart_rx_buf[BT_RX_BUF_SIZE];
uint8_t bt_uart_tx_buf[BT_TX_BUF_SIZE];
uint16_t bt_uart_rx_len = 0;
void bt_init(uint32_t baudrate)
{
bt_uart_handle.Instance = BT_INTERFACE; /* BT */
bt_uart_handle.Init.BaudRate = baudrate; /* 波特率 */
bt_uart_handle.Init.WordLength = UART_WORDLENGTH_8B; /* 資料位 */
bt_uart_handle.Init.StopBits = UART_STOPBITS_1; /* 停止位 */
bt_uart_handle.Init.Parity = UART_PARITY_NONE; /* 校驗位 */
bt_uart_handle.Init.Mode = UART_MODE_TX_RX; /* 收發模式 */
bt_uart_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* 無硬體流控 */
bt_uart_handle.Init.OverSampling = UART_OVERSAMPLING_16; /* 過取樣 */
HAL_UART_Init(&bt_uart_handle); /* 使能BT */
}
void bt_rx_clear(void)
{
memset(bt_uart_rx_buf, 0, sizeof(bt_uart_rx_buf)); //清空接收緩衝區
bt_uart_rx_len = 0; //接收計數器清零
}
void BT_IRQHandler(void)
{
uint8_t receive_data = 0;
if(__HAL_UART_GET_FLAG(&bt_uart_handle, UART_FLAG_RXNE) != RESET){ //獲取接收RXNE標誌位是否被置位
if(bt_uart_rx_len >= sizeof(bt_uart_rx_buf)) //如果接收的字元數大於接收緩衝區大小,
bt_uart_rx_len = 0; //則將接收計數器清零
HAL_UART_Receive(&bt_uart_handle, &receive_data, 1, 1000); //接收一個字元
bt_uart_rx_buf[bt_uart_rx_len++] = receive_data; //將接收到的字元儲存在接收緩衝區
}
if (__HAL_UART_GET_FLAG(&bt_uart_handle, UART_FLAG_IDLE) != RESET) //獲取接收空閒中斷標誌位是否被置位
{
printf("recv: %s\r\n", bt_uart_rx_buf); //將接收到的資料列印出來
bt_rx_clear();
__HAL_UART_CLEAR_IDLEFLAG(&bt_uart_handle); //清除UART匯流排空閒中斷
}
}
透過這幾個函式,我們就可以讀取藍芽返回的資料,並儲存在陣列 bt_uart_rx_buf
裡。
如果需要透過串列埠向藍芽模組傳送資料,可以使用下面函式:
void bt_send(char *fmt, ...)
{
va_list ap;
uint16_t len;
va_start(ap, fmt);
vsprintf((char *)bt_uart_tx_buf, fmt, ap);
va_end(ap);
len = strlen((const char *)bt_uart_tx_buf);
HAL_UART_Transmit(&bt_uart_handle, bt_uart_tx_buf, len, HAL_MAX_DELAY);
}
至此,藍芽模組的初始化、傳送、接收部分就做好了。
在 main 函式里,我們可以先呼叫 bt_init()
函式進行初始化,然後呼叫 bt_send()
函式傳送資料,如下:
int main(void)
{
HAL_Init(); /* 初始化HAL庫 */
sys_stm32_clock_init(RCC_PLL_MUL9); /* 設定時鐘,72M */
delay_init(72); /* 初始化延時函式 */
usart_init(115200); /* 串列埠1波特率設為115200 */
bt_init(9600); /* 串列埠2波特率設為9600 */
printf("藍芽實驗……\r\n");
while(1)
{
bt_send("bt send\r\n");
delay_ms(1000);
}
}
4.5 透過手機藍芽助手傳送資料到電腦的串列埠助手
接著我們開啟電腦串列埠軟體。設定串列埠助手波特率 115200 (你們不一定要用我這款,隨便的串列埠助手都可以),選擇串列埠號,最後開啟串列埠開始準備接收資料。
這個串列埠工具接收的是 MCU 串列埠 1 的資料,也就是 log 。藍芽接收到資料後,我們使用串列埠 1 列印到下面的串列埠助手裡。
<img src="https://lxlinux.superbed.verylink.top/item/6577caedc458853aef93c636.jpg" style="zoom:50%;" />
然後開啟手機藍芽助手準備開始除錯,點選藍芽模組開始連線。沒有藍芽助手的同學,可以在前文找到下載地址。
<img src="https://lxlinux.superbed.verylink.top/item/6577cbd2c458853aef969a92.jpg" style="zoom:33%;" />
<img src="https://lxlinux.superbed.verylink.top/item/6577cc42c458853aef980238.jpg" style="zoom:33%;" />
到這裡,我們就完成了 MCU 透過藍芽將資料透傳到手機 APP (藍芽助手)。
當然,我們也可以透過手機 APP 向藍芽傳送資料,MCU 接收到透傳的資料之後透過串列埠助手列印在電腦上。比如我們給藍芽模組傳送資料 111 、aaa 、123123。
<img src="https://lxlinux.superbed.verylink.top/item/6577cdfdc458853aef9e08c0.jpg" style="zoom:50%;" />
可以看到串列埠助手成功接收到 111 、aaa 、123123,這些資料。
<img src="https://lxlinux.superbed.verylink.top/item/6577ce1ec458853aef9e6ba0.jpg" style="zoom:50%;" />
到此,藍芽模組的除錯就完成了。
5. 小結
透過學習和實踐,希望大家都能夠了解並掌握藍芽模組的使用方法,從而更好地應用於嵌入式開發。無論是智慧小車還是開發物聯網裝置,藍芽模組都能成為您的得力助手,讓我們一起玩轉藍芽模組吧!
另外,想進大廠的同學,一定要好好學演算法,這是面試必備的。這裡準備了一份 BAT 大佬總結的 LeetCode 刷題寶典,很多人靠它們進了大廠。
刷題 | LeetCode演算法刷題神器,看完 BAT 隨你挑!
有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章
推薦閱讀:
歡迎關注我的部落格:良許嵌入式教程網,滿滿都是乾貨!