使用 HC-12 模块构建可靠的远距离 Arduino 网络
概述
本教程将介绍如何使用 HC-12 无线串口通信模块,在多个 Arduino 开发板之间实现最远 1.8 公里的长距离无线通信。教程包含三个示例:基础双向通信、按键切换信道、以及加速度计无线控制步进电机。
HC-12 无线通信模块详解
HC-12 是一款高性能无线串口模块,核心参数如下:
- 工作频段:433.4 MHz ~ 473.0 MHz
- 100 个信道,间隔 400 kHz
- 发射功率:-1 dBm (0.79 mW) 至 20 dBm (100 mW)
- 接收灵敏度:-117 dBm 至 -100 dBm
实际性能取决于串口波特率与空中波特率的配置组合。模块内置单片机,无需用户编程,通过 AT 指令配置参数。拉低 SET 引脚即可进入 AT 命令模式。
Arduino 与 HC-12 硬件连接
模块供电电压 3.2~5.5V,建议加去耦电容并外部供电以提高稳定性。教程中演示使用 USB 供电也能正常工作。连接方式:HC-12 的 TX 接 Arduino RX(软串口引脚),RX 接 Arduino TX,SET 引脚接数字引脚或直接接地进入配置模式。
示例 1:基础串口透传通信
两块 Arduino 均烧录相同代码,通过软串口实现双向透传。打开两个串口监视器,任一端输入内容即可无线发送到另一端。
#include <SoftwareSerial.h>
SoftwareSerial HC12(10, 11); // RX, TX
void setup() {
Serial.begin(9600);
HC12.begin(9600);
}
void loop() {
while (HC12.available()) Serial.write(HC12.read());
while (Serial.available()) HC12.write(Serial.read());
}
原理: 串口监视器发送数据 → Arduino 通过 HC12.write() 发给模块 → 无线传输 → 对端模块输出 → Arduino 通过 Serial.write() 显示在串口监视器。
同理可用于发送 AT 指令:拉低 SET 引脚,发送 "AT" 测试,返回 "OK" 表示进入命令模式。常用指令:
AT+Bxxxx设置串口波特率(1200~115200,默认 9600)AT+Cxxx设置信道(001~100,默认 001 对应 433.4 MHz)
示例 2:按键动态切换通信信道
在发射端增加两个按键,分别发送 AT+C001 和 AT+C002 指令,同时让接收端同步修改信道。代码采用字符串缓存机制完整接收数据包,并封装 checkATCommand() 函数自动识别并执行 AT 指令。
关键点:
- 使用
readBuffer字符串累积接收字节 - 发送 AT 指令前需拉低 SET 引脚,延时等待模块进入命令模式
- 接收端收到指令后同样进入命令模式并执行,实现双端同步变更
示例 3:加速度计无线控制步进电机
发射端读取 ADXL345 加速度计 X/Y 轴数据,计算倾斜角度(0~180°),取 100 次平均并滤波后,以 s[角度]e 格式发送。接收端解析起止标记,将角度映射为步进电机步数(A4988 十六细分下 0~1600 步对应 0~180°),驱动电机跟随转动。上电时通过微动开关回零校准。
// 发射端关键片段
if (angleInt > lastAngle + 2 || angleInt < lastAngle - 2) {
HC12.print("s" + String(angleInt) + "e");
lastAngle = angleInt;
}
// 接收端关键片段
while (HC12.available()) {
char c = HC12.read();
if (c == 's') start = true;
else if (c == 'e') { start = false; break; }
else if (start) readBuffer += c;
}
currentAngle = readBuffer.toInt();
该方案展示了 HC-12 在远程运动控制中的实用性,配合起止标记协议可有效防止数据粘包丢包。
制造工艺
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- JX 波形发生器 – 基于 Arduino 的 DDS 振荡器,带 OLED 显示屏
- u-blox LEA-6H GPS 模块:Arduino 与 Python 集成指南
- 无线红外测温枪:Arduino Nano + HC-06蓝牙 + MLX90614
- Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
- 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机
- 基于Arduino、Windows IoT与Azure云的高级跌倒检测系统
- ArduRadio 闹钟收音机:DIY Arduino FM 收音机与闹钟系统
- Arduino 超声波测距仪:HC-SR04 量程探测器
- 手把手教你打造树莓派 3 + Arduino 笔记本电脑
- 掌握无线通信距离:功率、速率与干扰如何塑造连接能力
- 电池供电长距离无线如何重塑连接格局