Arduino 串口通信综合教程
程序架构说明 以下三个程序需要分别烧录到Arduino开发板运行,每个程序独立完成特定功能
分别实现:
程序一基础消息发送:开发板通过串口向电脑发送固定信息
程序二传感器数值上报:开发板通过串口向电脑发送动态的传感器信息
程序三远程LED/蜂鸣器控制:使用电脑通过串口通信控制开发板的执行器运作
程序一:基础消息发送
功能描述
每间隔1秒通过串口发送”hello world”字符串
完整代码
void setup(){
Serial.begin(9600); // 初始化串口通信
}
void loop(){
Serial.println("hello world"); // 发送带换行的字符串
delay(1000); // 保持1秒间隔
}
逐行解析
Serial.begin(9600)- 功能:启动串口通信模块
- 参数说明:
9600:波特率(每秒传输9600比特)- 波特率需与接收端一致,常用值:9600, 115200
Serial.println("hello world")Serial:串口操作对象println:发送数据并附加换行符(\r\n)- 数据传输格式:ASCII编码
delay(1000)- 维持当前状态1秒
- 防止数据发送过快导致缓冲区溢出
程序二:传感器数据上报
功能描述
持续读取A0引脚电位器数值并通过串口发送
完整代码
void setup(){
Serial.begin(9600); // 初始化串口
}
void loop(){
int sensorValue = analogRead(A0); // 读取模拟输入
Serial.println(sensorValue); // 发送十进制数值
delay(100); // 适当延时降低数据频率
}
关键代码解析
analogRead(A0)- 功能:读取模拟输入电压
- 参数范围:A0-A5(对应模拟输入引脚)
- 返回值:0(0V)~1023(5V)的整数
- 数值传输特性
- 原始数据:10位精度(2^10=1024级)
- 传输格式:ASCII字符串形式(如”512\r\n”)
程序三:远程LED控制
功能描述
通过串口接收指令控制D7引脚LED状态
完整代码
volatile char Light = '0'; // 存储控制指令
void setup(){
Serial.begin(9600);
pinMode(7, OUTPUT); // 配置D7为输出模式
}
void loop(){
// 接收串口数据
if(Serial.available() > 0){
Light = Serial.read(); // 读取单字节
}
// 执行控制指令
switch(Light){
case '1':
digitalWrite(7, HIGH); // 点亮LED
break;
case '0':
digitalWrite(7, LOW); // 熄灭LED
break;
}
}
核心代码分析
volatile关键字- 作用:防止编译器优化变量访问
- 应用场景:多线程/中断环境下的共享变量
Serial.available()- 功能:返回接收缓冲区中的字节数
- 判断条件:>0时表示有数据待读取
Serial.read()- 读取策略:先进先出(FIFO)
- 返回值:ASCII字符对应的整数值
switch-case结构- 等效于多个if-else判断
- 优势:代码结构更清晰
串口通信协议详解
数据格式
| 参数 | 说明 | 示例 | | —— | ———————— | ———– | | 波特率 | 数据传输速度 | 9600 bits/s | | 数据位 | 每个字符的位数 | 8位 | | 停止位 | 数据包结束标志 | 1位 | | 校验位 | 错误检测(本程序未使用) | 无 |
数据收发流程
网络架构(了解)

发送端:
应用层 → 数据格式化 → 传输层 → 物理层
接收端:
物理层 → 数据解析 → 应用层
硬件连接规范
USB转串口连接
Arduino ↔ USB线 ↔ PC
(自动建立串口通道)
电位器连接
5V → 电位器VCC
A0 → 电位器中间引脚
GND → 电位器GND
LED电路
D7 → 220Ω电阻 → LED正极
LED负极 → GND
调试与故障排查
常见问题诊断
| 现象 | 排查步骤 | 解决方法 |
| ————- | ———————————- | ————————– |
| 无法打开串口 | 1. 检查USB连接
2. 确认端口选择 | 重新插拔USB/安装驱动 |
| 数据乱码 | 检查波特率设置 | 确保收发双方波特率一致 |
| LED不响应指令 | 1. 验证引脚连接
2. 检查字符编码 | 使用’0’/’1’字符而非数字0/1 |
| 数据更新延迟 | 检查delay值 | 适当减小延时参数 |
进阶应用扩展
数据格式化传输
// 发送结构化数据
Serial.print("Voltage: ");
Serial.print(sensorValue*5.0/1023, 2); // 保留两位小数
Serial.println(" V");
多指令控制
case '2': // 新增呼吸灯模式
for(int i=0; i<255; i++){
analogWrite(7, i);
delay(10);
}
break;
核心概念总结
- 数字信号
- 离散状态:HIGH(5V)/LOW(0V)
- 应用场景:开关控制、状态指示
-
模拟信号
- 连续变化:0-5V线性对应0-1023数值
- 应用场景:传感器数据采集
-
引脚模式
模式 配置函数 典型应用 INPUT pinMode(n,INPUT) 读取传感器信号 OUTPUT pinMode(n,OUTPUT) 驱动执行器件 - 串口通信协议
- 异步传输:无时钟信号,依赖预定义波特率
- 数据帧结构:起始位 + 数据位 + 停止位
掌握Arduino串口通信的基础实现方法,理解数据收发机制,可以扩展开发更复杂的物联网控制系统。建议配合串口调试助手软件进行实践观察,加深对通信协议的理解。
有问题找柯萌૮ ・ﻌ・ა
邮箱mingyoufhh@outlook.com