DAY 1
一、硬件概述
1.1 核心规格
· 微控制器:RP2040(树莓派首款自研芯片)
· CPU:双核ARM Cortex-M0+ @ 133MHz
· 内存:264KB SRAM
· 存储:2MB板载闪存
· GPIO:26个多功能引脚(23个数字+3个ADC)
1.2 关键接口
```
26个GPIO引脚(包含3个ADC输入)
2个UART、2个SPI、2个I2C接口
16个PWM通道
8个PIO状态机(可编程IO)
USB 1.1主机和设备支持
```
二、开发环境搭建
2.1 MicroPython环境
```python
# 1. 下载固件
# 从树莓派官网下载最新的MicroPython固件
# 2. 刷写固件
# 按住BOOTSEL按钮,连接USB
# 将uf2固件拖入出现的U盘
# 3. 连接串口
# Linux/Mac: /dev/ttyACM0
# Windows: COM端口
```
2.2 常用工具
· Thonny IDE(推荐初学者)
· VS Code + Pico-Go扩展
· 命令行工具: ampy, rshell
三、基础编程示例
3.1 GPIO控制
```python
import machine
import time
# LED闪烁
led = machine.Pin(25, machine.Pin.OUT)
while True:
led.toggle()
time.sleep(0.5)
```
3.2 PWM控制
```python
from machine import Pin, PWM
import time
# PWM呼吸灯
led = PWM(Pin(25))
led.freq(1000)
duty = 0
direction = 1
while True:
duty += direction * 10
if duty > 1000:
duty = 1000
direction = -1
elif duty < 0:
duty = 0
direction = 1
led.duty_u16(duty * 64)
time.sleep(0.01)
```
3.3 ADC读取
```python
from machine import ADC, Pin
import time
# 读取电位器
pot = ADC(26)
while True:
value = pot.read_u16() # 0-65535
voltage = value * 3.3 / 65535
print(f"ADC值: {value}, 电压: {voltage:.2f}V")
time.sleep(0.1)
```
四、通信协议
4.1 I2C通信
```python
from machine import Pin, I2C
import time
# I2C初始化
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=400000)
# 扫描设备
devices = i2c.scan()
print(f"找到 {len(devices)} 个设备: {[hex(x) for x in devices]}")
# 读取传感器数据示例
def read_sensor():
i2c.writeto(0x68, b'\x00')
data = i2c.readfrom(0x68, 6)
return data
```
4.2 SPI通信
```python
from machine import Pin, SPI
import time
# SPI初始化
spi = SPI(0,
baudrate=1000000,
polarity=0,
phase=0,
bits=8,
firstbit=SPI.MSB,
sck=Pin(2),
mosi=Pin(3),
miso=Pin(4))
# 片选引脚
cs = Pin(5, Pin.OUT)
def read_spi_sensor():
cs.value(0)
data = spi.read(2)
cs.value(1)
return data
```
4.3 UART串口通信
```python
from machine import UART, Pin
import time
uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
# 发送数据
uart.write("Hello Pico!\n")
# 读取数据
while True:
if uart.any():
data = uart.read()
print("收到:", data)
```
五、PIO(可编程IO)基础
5.1 PIO简介
· 8个独立状态机
· 每个状态机有自己的指令存储器
· 可编程时序控制
· 适用于非标准通信协议
5.2 WS2812 LED控制示例
```python
import array
import rp2
from machine import Pin
import time
# PIO程序定义
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT,
autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
wrap_target()
label("bitloop")
out(x, 1) .side(0) [T3 - 1]
jmp(not_x, "do_zero") .side(1) [T1 - 1]
jmp("bitloop") .side(1) [T2 - 1]
label("do_zero")
nop() .side(0) [T2 - 1]
wrap()
# 创建状态机
sm = rp2.StateMachine(0, ws2812, freq=8000000, sideset_base=Pin(22))
# 启动状态机
sm.active(1)
# 发送颜色数据
def set_color(r, g, b):
color = (g << 16) | (r << 8) | b
sm.put(color)
# 测试
set_color(255, 0, 0) # 红色
time.sleep(1)
set_color(0, 255, 0) # 绿色
```
六、多核编程
6.1 使用第二个核心
```python
import _thread
import time
from machine import Pin
# 核心1的任务
def core1_task():
led = Pin(25, Pin.OUT)
while True:
led.toggle()
time.sleep(0.2)
# 启动第二个核心
_thread.start_new_thread(core1_task, ())
# 核心0继续执行主程序
while True:
print("核心0运行中...")
time.sleep(1)
```
6.2 核心间通信
```python
import _thread
import time
from machine import Pin
# 共享变量
shared_data = 0
lock = _thread.allocate_lock()
def core1_task():
global shared_data
while True:
with lock:
shared_data += 1
print(f"核心1设置: {shared_data}")
time.sleep(0.5)
# 启动第二个核心
_thread.start_new_thread(core1_task, ())
# 核心0读取共享数据
while True:
with lock:
current = shared_data
print(f"核心0读取: {current}")
time.sleep(1)
```
七、电源管理
7.1 低功耗模式
```python
import machine
import time
# 进入深度睡眠
def deep_sleep(duration_ms):
# 配置唤醒源
machine.RTC().wake_on_ext0(pin=machine.Pin(14), level=0)
# 进入深度睡眠
machine.deepsleep(duration_ms)
# 空闲状态省电
def idle_sleep():
import micropython
while True:
machine.idle() # 等待中断
# 处理事件
print("唤醒处理任务")
```
八、常用库和资源
8.1 内置库
```
machine - 硬件访问
time - 时间相关
utime - 时间函数
rp2 - PIO相关功能
_thread - 多线程
uasyncio - 异步IO
```
8.2 推荐外部库
· urequests:HTTP请求
· umqtt:MQTT客户端
· ssd1306:OLED显示屏驱动
· dht:温湿度传感器
8.3 在线资源
1. 官方文档
2. MicroPython文档
3. RP2040数据手册
4. Pico项目示例
九、项目实践建议
9.1 初学者项目
1. 温度监测站:使用DS18B20
2. 气象站:温湿度+气压传感器
3. 简易示波器:ADC采集+OLED显示
4. 智能灯控:PWM调光+无线控制
9.2 进阶项目
1. USB HID设备:自定义键盘/游戏手柄
2. 音频处理:PIO实现音频接口
3. 机器视觉:OV7670摄像头应用
4. 物联网网关:多传感器+WiFi上传
9.3 调试技巧
```python
# 1. 使用print调试
import sys
def debug(*args):
print("[DEBUG]", *args, file=sys.stderr)
# 2. 异常处理
try:
risky_operation()
except Exception as e:
print(f"错误: {e}")
# 3. 性能监控
import time
start = time.ticks_us()
# 执行代码
elapsed = time.ticks_diff(time.ticks_us(), start)
print(f"耗时: {elapsed}微秒")
```
十、常见问题解决
Q1: 无法刷写固件
· 确保按住BOOTSEL按钮再插入USB
· 尝试不同的USB线缆
· 检查电脑驱动
Q2: 内存不足
```python
import gc
gc.collect() # 手动垃圾回收
print(gc.mem_free()) # 查看剩余内存
```
Q3: GPIO无响应
· 检查引脚复用功能
· 确认上拉/下拉电阻配置
· 检查供电是否稳定
---
学习建议
1. 循序渐进:从GPIO控制开始,逐步学习通信协议
2. 动手实践:每个功能都实际接线测试
3. 阅读源码:参考官方示例理解设计思路
4. 参与社区:在论坛和GitHub上交流学习
更新记录
· v1.0 (2024) - 基础笔记创建
· 持续更新中...
---
注:本笔记基于MicroPython环境,部分代码可能需要根据实际硬件连接调整引脚号。
62

被折叠的 条评论
为什么被折叠?



