当前位置: 首页 > news >正文

从Arduino到树莓派:手把手教你玩转UART、IIC、SPI通信(附代码)

从Arduino到树莓派:三大通信协议实战指南

在开源硬件领域,UART、IIC和SPI就像电子设备之间的三种"语言",让不同模块能够相互理解、协同工作。无论是Arduino Uno的简单易用,还是树莓派Pico/4B的强大性能,掌握这些通信协议都是硬件开发的必修课。本文将带您从接线到代码,亲手实现OLED显示、RFID读取和上下位机通信等实际项目,让抽象的理论变成看得见的成果。

1. UART通信:硬件界的通用语言

UART(Universal Asynchronous Receiver/Transmitter)是最基础的异步串行通信协议,几乎存在于所有微控制器中。它的魅力在于只需要两根线(TX和RX)就能建立设备间的对话。

1.1 硬件连接要点

在Arduino Uno上使用UART时,需要注意:

  • 0号(RX)和1号(TX)引脚默认用于串口通信
  • 与电脑通信时,板载USB转串口芯片会自动处理电平转换
  • 与其他3.3V设备通信时,建议使用逻辑电平转换器

树莓派Pico的UART引脚配置更为灵活:

# Pico的UART0默认引脚 UART0_TX = GP0 UART0_RX = GP1 # UART1默认引脚 UART1_TX = GP4 UART1_RX = GP5

注意:连接两个设备的UART时,切记TX要接RX,RX要接TX,这是新手最容易犯的错误。

1.2 代码实现对比

Arduino端的串口初始化非常简单:

void setup() { Serial.begin(115200); // 设置波特率为115200 } void loop() { if(Serial.available()) { String received = Serial.readString(); Serial.print("Echo: "); Serial.println(received); } }

树莓派Pico使用MicroPython的实现:

from machine import UART, Pin import time uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1)) while True: if uart.any(): data = uart.read() print("Received:", data) uart.write(b"Echo: " + data) time.sleep(0.1)

2. IIC协议:优雅的双线解决方案

IIC(Inter-Integrated Circuit)以其简洁的两线制(SDA和SCL)闻名,特别适合连接多个低速外设。以下是IIC的三大优势:

  1. 节省引脚:理论上可连接128个设备(通过7位地址)
  2. 内置冲突检测:多主机架构也不会导致总线混乱
  3. 广泛支持:从温度传感器到显示屏,各类模块都有IIC版本

2.1 OLED显示屏实战

以常见的SSD1306 OLED屏为例,接线非常简单:

OLED引脚Arduino Uno树莓派Pico
VCC3.3V3V3
GNDGNDGND
SCLA5GP1
SDAA4GP0

Arduino驱动OLED的核心代码:

#include <Wire.h> #include <Adafruit_SSD1306.h> Adafruit_SSD1306 display(128, 64, &Wire); void setup() { Wire.begin(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Hello Arduino!"); display.display(); }

树莓派Pico的MicroPython实现:

from machine import Pin, I2C import ssd1306 i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=400000) oled = ssd1306.SSD1306_I2C(128, 64, i2c) oled.text("Hello Pico!", 0, 0) oled.show()

2.2 IIC地址扫描技巧

当不确定设备地址时,可以使用扫描功能:

# 树莓派Pico扫描IIC设备 devices = i2c.scan() if len(devices) == 0: print("No I2C devices found!") else: print("I2C devices found:", [hex(x) for x in devices])

3. SPI协议:高速数据传输之王

SPI(Serial Peripheral Interface)是三大协议中速度最快的,特别适合需要高速数据传输的场景,如SD卡、显示屏和无线模块。

3.1 SPI的四线制解析

SPI使用四条主线:

  • SCK:时钟信号,由主机产生
  • MOSI:主机输出,从机输入
  • MISO:主机输入,从机输出
  • SS/CS:片选信号,每个从机单独一条

Arduino Uno的默认SPI引脚:

  • SCK - 13
  • MOSI - 11
  • MISO - 12
  • SS - 10

树莓派Pico的SPI配置:

from machine import SPI spi = SPI(0, baudrate=1000000, polarity=0, phase=0, sck=Pin(2), mosi=Pin(3), miso=Pin(4))

3.2 RFID模块实战

以MFRC522 RFID模块为例,典型接线如下:

MFRC522引脚Arduino Uno树莓派Pico
SDA(SS)10GP5
SCK13GP2
MOSI11GP3
MISO12GP4
IRQ未连接未连接
GNDGNDGND
RST9GP1
3.3V3.3V3V3

Arduino读取RFID卡的代码片段:

#include <SPI.h> #include <MFRC522.h> #define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); void setup() { SPI.begin(); mfrc522.PCD_Init(); Serial.begin(115200); } void loop() { if(!mfrc522.PICC_IsNewCardPresent()) return; if(!mfrc522.PICC_ReadCardSerial()) return; Serial.print("UID:"); for(byte i=0; i<mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); } Serial.println(); }

4. 协议对比与项目选择指南

三大通信协议各有特点,选择时需考虑以下因素:

特性UARTIICSPI
线数2(TX/RX)2(SDA/SCL)4(标准)
速度中等
寻址方式7/10位地址片选信号
多设备支持点对点多从机多从机
复杂度简单中等较高

项目选择建议

  • 传感器数据采集 → IIC(节省引脚)
  • 高速数据传输 → SPI(如摄像头、显示屏)
  • 设备间简单通信 → UART(调试、日志输出)
  • 长距离通信 → RS485(UART的工业级变种)

在实际项目中,我经常同时使用这三种协议。比如一个气象站可能这样配置:

  1. 使用IIC连接温湿度传感器(BME280)
  2. 通过SPI驱动无线模块(nRF24L01)
  3. 利用UART输出调试信息到电脑

调试通信问题时,逻辑分析仪是得力助手。它能直观显示时序波形,帮助定位波特率不匹配、信号干扰等问题。如果没有专业设备,也可以先用简单的串口打印调试信息。

http://www.gsyq.cn/news/1515830.html

相关文章:

  • [MongoDB小技巧08]MongoDB 千万级分页性能陷阱:从 Skip 瓶颈到游标分页的架构演进
  • Triton模型服务实战:从Notebook到高可用生产部署
  • StudyFetch:一个 AI 学习工具,怎么靠短视频做到 700 万用户
  • 计算机毕业设计之医疗大数据在疾病预测中的应用探索
  • DLSS Swapper终极指南:3步轻松管理游戏DLSS版本,提升显卡性能
  • GPTs与人类众包真实文本标注能力六维对比
  • 【JAVA毕设源码分享】基于SpringBooot的图书商城系统研究与设计(程序+文档+代码讲解+一条龙定制)
  • 告别信号玄学:手把手教你用PCIe 4.0的RX Lane Margining功能实测信号余量
  • 保姆级教程:H3C S6520交换机端口状态信息全解析(从Speed/Duplex到Peak Rate)
  • 性价比高的直流电机厂家推荐,品牌口碑大揭秘 - mypinpai
  • 终极百度网盘下载加速指南:3分钟解锁高速直链的秘密
  • 【篮球英语】04 装备与穿着:从球鞋到护臂
  • 别再只会git pull了!手把手教你用VSCode的GitLens插件可视化解决代码冲突
  • CRMEB Pro 商品复制/导入二开:为什么从外部平台搬商品最容易把 SKU 和图片搞乱?
  • C++项目里用ONNXRuntime,如何写一段代码让CPU和GPU自动切换(附完整代码)
  • 模板驱动型文档自动化:四层解耦实现工程化内容生产
  • 大棚实践案例分享:厂家排行揭晓,亲测效果告诉你真相
  • AI写教材新选择!低查重工具加持,快速生成符合标准的专业教材!
  • 2026年变频电源选购指南:口碑与性能如何兼得?多家供应商深度分析与真实案例参考 - 优质品牌商家
  • 口碑好的装修公司小红书获客哪家专业
  • vLLM核心原理:PagedAttention与连续批处理如何提升大模型推理吞吐与显存效率
  • 如何5分钟搞定B站视频转文字:免费高效解决方案全攻略
  • 2026年节能验收报告服务公司top5排行:设备更新领域资金申请报告/重大项目社会稳定风险评估报告/合规性优先 - 优质品牌商家
  • 人类最后考试已不够用,Agent最后考试来了!
  • GPT-4稀疏激活原理:1.8万亿参数为何仅用2%计算
  • WorkshopDL深度指南:无需Steam轻松获取创意工坊模组
  • 2026实力之选:黄江激光焊接与精密五金焊接加工企业综合评估 - 品牌发掘
  • STM32F103用硬件SPI跑TLE5012B的三线SSC通信,带角度/速度/温度实时读取和寄存器配置
  • Page Assist:在浏览器中无缝使用本地AI模型的终极指南
  • 2026年北京公司注册代理机构综合能力分析:服务范围、团队经验与真实案例解读 - 优质品牌商家