共计 1909 个字符,预计需要花费 5 分钟才能阅读完成。
智能家居中的 RF 无线通信
Basic RF(如 CC1101/NRF24L01 模块)在智能家居中常用于窗帘控制、灯具开关等低数据量场景。通过 433MHz 或 2.4GHz 频段,能在 20-100 米范围内实现可靠通信,特别适合不需要 Wi-Fi 复杂协议的简单设备联动。

硬件准备清单
- 核心组件:
- 发送端:Arduino Nano ×1,CC1101 RF 模块 ×1,轻触开关 ×1
- 接收端:Arduino Uno ×1,CC1101 RF 模块 ×1,LED 灯 ×1,220Ω 电阻 ×1
- 辅助工具:
- 杜邦线若干
- 示波器(观察通信波形)
- 万用表(检测电压)
连接示意图:
[发送端]
Arduino Nano CC1101
D2───────┬─────GDO0
D10──────┼─────SCK
D11──────┼─────MOSI
D12──────┼─────MISO
D13──────┴─────CSN
[接收端]
Arduino Uno CC1101
D2─────────────GDO0
D10────────────SCK
...(同发送端)D7─────────────LED+
发送端实现(带按键消抖)
#include <ELECHOUSE_CC1101.h> // PlatformIO 库
#define BTN_PIN 3
unsigned long lastDebounceTime = 0;
const int debounceDelay = 50;
void setup() {pinMode(BTN_PIN, INPUT_PULLUP);
ELECHOUSE_cc1101.Init();
ELECHOUSE_cc1101.SetRx(); // 初始为接收模式防干扰}
void loop() {int btnState = digitalRead(BTN_PIN);
if (btnState == LOW && millis() - lastDebounceTime > debounceDelay) {ELECHOUSE_cc1101.SetTx();
byte data[2] = {0xAA, 0x55}; // 同步头
ELECHOUSE_cc1101.SendData(data, 2);
delay(10); // 确保发送完成
ELECHOUSE_cc1101.SetRx();
lastDebounceTime = millis();}
}
关键配置说明:
– SetRx()/SetTx()切换收发状态避免冲突
– 同步头 0xAA55 增强抗干扰能力
– 10ms 延迟确保曼彻斯特编码完整传输
接收端实现(LED 控制)
#include <ELECHOUSE_CC1101.h>
#define LED_PIN 7
byte rxBuffer[2];
void setup() {pinMode(LED_PIN, OUTPUT);
ELECHOUSE_cc1101.Init();
ELECHOUSE_cc1101.SetRx();}
void loop() {if (ELECHOUSE_cc1101.CheckReceiveFlag()) {byte len = ELECHOUSE_cc1101.ReceiveData(rxBuffer);
if (len == 2 && rxBuffer[0] == 0xAA && rxBuffer[1] == 0x55) {digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // 状态翻转
}
ELECHOUSE_cc1101.SetRx(); // 重置接收模式}
}
通信波形分析
用示波器捕捉 GDO0 引脚波形:
– 正常信号:2ms 高电平 +1ms 低电平组成的同步头,后续数据位脉宽稳定
– 干扰信号:会出现脉宽不规则或幅度衰减
– 信道冲突:波形叠加现象明显
常见问题排查
- 通信距离短:
- 检查天线是否完整展开
- 用
ELECHOUSE_cc1101.setPA(10)增大发射功率(0-10 级) -
避开 Wi-Fi 路由器等 2.4GHz 干扰源
-
电源干扰:
- 在 RF 模块 VCC 与 GND 间并联 100μF 电容
-
单独供电时共用地线
-
数据丢失:
- 通过
ELECHOUSE_cc1101.getRSSI()检测信号强度 - 添加重传机制(如 3 次握手)
进阶优化建议
- 多节点控制:在数据包中添加地址字节(0xAA[地址]0x55)
- 状态反馈:接收端 ACK 信号回传(需双工模块)
- 低功耗:
- 发送端使用中断唤醒
- 接收端设置
ELECHOUSE_cc1101.SetLowPower()
完整工程已上传 GitHub:fake_user/cc1101_led_control(包含 PlatformIO 配置文件)
实际测试中,这套方案在办公室环境下实现了 15 米穿墙稳定控制。关键是要做好电源滤波和避免同频段设备干扰。下一步我打算尝试加入 RSSI 值显示功能,方便现场调试。
正文完
