文章目录
前言
本文简单介绍了四种无线通信模块(蓝牙、WiFi、2.4G射频、LoRa)的特点以及四者区别以及STM32F103RCT6的实例代码。
一、四种无线串口模块深度对比
特性 蓝牙模块 (HC-05) WiFi模块 (ESP8266) 2.4G射频 (NRF24L01) LoRa模块 (SX1278)
通信距离 10-100m 50-300m 50-1000m(加PA) 1-10km
工作频段 2.4GHz ISM 2.4GHz 2.4GHz 433/868/915MHz
数据传输速率 1-3Mbps 11-54Mbps 1-2Mbps 0.3-50kbps
功耗 中(~30mA活跃) 高(~70mA活跃) 低(~12mA发送) 极低(~10mA发送)
网络拓扑 点对点或星型 支持TCP/IP 多点通信(6通道) 星型或Mesh
配对/连接方式 蓝牙配对 WiFi热点/STA模式 自动组网 无需配对
典型应用场景 手机外设、短距离控制 物联网、远程监控 无线键鼠、传感器网络 远程监测、农业物联网
二、模块优缺点分析
1. 蓝牙模块(HC-05)
优点
- 手机兼容性好
- 低功耗模式(BLE)
- 即插即用
缺点
- 传输距离短
- 主从设备限制
2. WiFi模块(ESP8266)
优点
可直接接入互联网
高数据传输率
支持Web服务
缺点
高功耗
需要路由器支持
3. 2.4G射频(NRF24L01)
优点
- 超低延迟(<2ms)
- 硬件级ACK确认
- 6通道并行通信
缺点
- 需要复杂协议栈
- 易受同频干扰
4. LoRa模块(SX1278)
优点
- 超远距离通信
- 超强穿透能力
- 极低功耗
缺点
- 传输速率极低
- 模块尺寸较大
三、STM32F103RCT6实例代码
1. 蓝牙模块(HC-05)控制LED
// CubeMX配置USART1(PA9-TX, PA10-RX)
void BT_SendCmd(const char* cmd) {
HAL_UART_Transmit(&huart1, (uint8_t*)cmd, strlen(cmd), 100);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if(rx_data == '1') HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // LED ON
else if(rx_data == '0') HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // LED OFF
HAL_UART_Receive_IT(&huart1, &rx_data, 1); // 重新启用中断
}
2. WiFi模块(ESP8266)TCP通信
// 配置USART2(PA2-TX, PA3-RX)
void ESP_SendAT(const char* cmd) {
HAL_UART_Transmit(&huart2, (uint8_t*)cmd, strlen(cmd), 100);
HAL_UART_Transmit(&huart2, (uint8_t*)"\r\n", 2, 100);
}
void Connect_WiFi(void) {
ESP_SendAT("AT+CWMODE=1"); // STA模式
ESP_SendAT("AT+CWJAP=\"SSID\",\"PASSWORD\""); // 连接WiFi
ESP_SendAT("AT+CIPSTART=\"TCP\",\"192.168.1.100\",8080"); // 连接服务器
}
3. NRF24L01多点通信
// 硬件SPI1(PA4-CS, PA5-SCK, PA6-MISO, PA7-MOSI)
void NRF24_Send(uint8_t* data) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // CS低
uint8_t cmd = 0xA0; // 写TX payload命令
HAL_SPI_TransmitReceive(&hspi1, &cmd, NULL, 1, 100);
HAL_SPI_Transmit(&hspi1, data, 32, 100); // 发送32字节
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // CS高
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // CE高触发发送
}
4. LoRa模块远程传输
// 使用USART3(PB10-TX, PB11-RX)
void LoRa_SendPacket(uint8_t* data, uint8_t len) {
uint8_t header[2] = {0x80, len}; // 自定义帧头
HAL_UART_Transmit(&huart3, header, 2, 100);
HAL_UART_Transmit(&huart3, data, len, 100);
// 计算并发送校验
uint8_t crc = 0;
for(uint8_t i=0; i<len; i++) crc ^= data[i];
HAL_UART_Transmit(&huart3, &crc, 1, 100);
}
# 四
、关键区别与选型建议
实时性要求高
实时性要求高:选择NRF24L01(硬件ACK,<2ms延迟)
手机直连需求
手机直连需求:选择HC-05蓝牙
互联网接入
互联网接入:必须使用ESP8266 WiFi
超远距离
超远距离:唯一选择LoRa
低功耗场景
低功耗场景:优先LoRa或BLE蓝牙
五、调试技巧
逻辑分析仪抓包:
- 检查SPI时序(NRF24L01)
- 验证UART数据帧(蓝牙/WiFi)
AT命令调试(WiFi/蓝牙)
// 在串口助手发送AT命令测试
ESP_SendAT("AT+GMR"); // 获取ESP8266版本
BT_SendCmd("AT+NAME?"); // 查询蓝牙名称
LoRa距离测试:
// 逐步增加距离测试RSSI
uint8_t rssi = 0;
LoRa_SendCmd(0x1C, &rssi, 1); // 读取RSSI值
通过上述代码和对比分析,开发者可以针对不同应用场景选择合适的无线方案。所有示例代码均基于STM32标准外设库实现,需根据实际硬件连接调整引脚配置。