连接方式概览
蓝牙模块与单片机连接,主要通过以下接口:
- UART/串口:最简单、最常用
- SPI:高速传输
- I2C:适合多设备
串口连接(最常用)
硬件连接
`
蓝牙模块 STM32/51单片机
TXD ────────► RXD
RXD ◄─────── TXD
VCC ──────── 3.3V/5V
GND ──────── GND
`
关键点
- TX/RX交叉连接
- 电压匹配(3.3V或5V)
- 共地
Arduino连接
硬件连接
`cpp
// Arduino Uno
// 蓝牙模块TXD → Arduino Pin 0 (RX)
// 蓝牙模块RXD → Arduino Pin 1 (TX)
// 或者用软串口
// 蓝牙模块TXD → Arduino Pin 10
// 蓝牙模块RXD → Arduino Pin 11
`
代码示例(软串口)
`cpp
#include
SoftwareSerial BT(10, 11); // RX, TX
void setup() {
Serial.begin(9600);
BT.begin(9600);
}
void loop() {
if (BT.available()) {
Serial.write(BT.read());
}
if (Serial.available()) {
BT.write(Serial.read());
}
}
`
STM32连接
硬件连接(STM32F103)
`c
// USART1
// Bluetooth TX → PA10 (RX)
// Bluetooth RX → PA9 (TX)
`
HAL库代码
`c
// 初始化
UART_HandleTypeDef huart1;
void MX_USART1_UART_Init(void) {
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
HAL_UART_Init(&huart1);
}
// 接收中断
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart->Instance == USART1) {
// 处理接收数据
HAL_UART_Receive_IT(&huart1, &rx_byte, 1);
}
}
`
51单片机连接
硬件连接
`asm
; 串口模式1
; Bluetooth TX → P3.0 (RX)
; Bluetooth RX → P3.1 (TX)
`
C51代码
`c
#include
void main() {
TMOD = 0x20; // 定时器1模式2
TH1 = 0xFD; // 波特率9600
TR1 = 1; // 启动定时器
SCON = 0x50; // 串口模式1
while(1) {
if (RI) {
SBUF = SBUF; // 回传
while(!TI);
TI = 0;
RI = 0;
}
}
}
`
常见问题
1. 乱码
- 波特率不匹配
- TTL电平不对
- 晶振误差
2. 无数据
- TX/RX接反
- 模块未进入透传模式
- 供电不足
3. 连接断开
- 距离太远
- 干扰太强
- 模块进入低功耗
ESP32连接
硬件连接
`cpp
// 硬件串口
// Bluetooth TX → GPIO3 (RX0)
// Bluetooth RX → GPIO1 (TX0)
// 软串口
#include
SoftwareSerial BT(16, 17); // RX, TX
`
接线注意事项
电压匹配
| 模块电压 | 单片机电压 | 处理方式 |
|---|---|---|
| ---------- | ------------ | ---------- |
| 3.3V | 3.3V | 直接连接 |
| 3.3V | 5V | 需要电平转换 |
| 5V | 5V | 直接连接 |
电平转换电路
`text
3.3V ───► 5V
│
┌────┴────┐
│ TXS0108E
└────┬────┘
│
▼
5V 输出
`
天线布局
注意事项
- 天线下方不要铺铜
- 远离金属
- 天线朝外
总结
蓝牙模块与单片机连接要点:
1. 串口最简单:TX/RX交叉连接
2. 电压要匹配:3.3V模块接3.3V单片机
3. 波特率一致:上下位机统一
4. 共地:确保电平参考一致