树莓派Pico和PicoW的功能使用与开发指南
立即解锁
发布时间: 2025-09-01 00:35:23 阅读量: 10 订阅数: 11 AIGC 

### 树莓派Pico和Pico W的功能使用与开发指南
#### 1. 模拟输入的使用
在树莓派Pico上使用模拟输入时,我们可以通过特定的程序实现电压和温度的读取。
- **电压读取**:将 `ch_19_voltmeter.py` 程序加载到Thonny中并运行,你会看到一系列电压读数。旋转电位器的旋钮,电压读数会发生变化。代码如下:
```python
from machine import ADC, Pin
from utime import sleep
analog = ADC(26)
def volts_from_reading(reading):
min_reading = 336
max_reading = 65534
reading_span = max_reading - min_reading
volts_per_reading = 3.3 / reading_span
volts = (reading - min_reading) * volts_per_reading
return volts
while True:
reading = analog.read_u16()
print(volts_from_reading(reading))
sleep(0.5)
```
要读取模拟输入,需将引脚封装在 `ADC` 类中,使用 `read_u16` 方法获取0到65534之间的模拟值。虽然返回值是无符号16位数字,但ADC的分辨率只有12位,提供4096种不同的可能值。`volts_from_reading` 函数将原始模拟读数转换为电压。并非所有GPIO引脚都可用于模拟输入,只有引脚26、27和28具备此功能。
- **温度读取**:使用 `ch_19_thermometer.py` 程序可以读取RP2040芯片的温度。代码如下:
```python
from machine import Pin, ADC
from utime import sleep
temp_sensor = ADC(4)
points_per_volt = 3.3 / 65535
def read_temp_c():
reading = temp_sensor.read_u16() * points_per_volt
temp_c = 27 - (reading - 0.706)/0.001721
return temp_c
while True:
temp_c = read_temp_c()
print(temp_c)
sleep(0.5)
```
这里要注意,这是模拟通道4,不是引脚4,所以引脚4仍可正常使用。该传感器报告的是处理器的温度,当你将手指放在处理器芯片上时,温度读数会上升。模拟输入的存在使得可以将各种模拟传感器连接到Pico,如光传感器、温度传感器、机械应力传感器和气体传感器等。
#### 2. 控制舵机
如果你想使用Pico或Pico W控制舵机,可以按照以下步骤操作:
1. 将舵机的电源连接到Pico的5V电源,将一个GPIO引脚连接到舵机的控制引脚。
2. 使用 `PWM` 类生成脉冲来设置舵机的角度。舵机的导线有不同的颜色标识方案,常见的如黑色为接地、红色为5V、黄色为控制引脚;另一种是棕色为接地、红色为5V、橙色为控制引脚,需查看舵机的数据手册确定正确的引脚。
3. 在Thonny中打开 `ch_19_servo.py` 并运行,程序会提示你输入0到180之间的角度,按下回车键后,舵机的臂会移动到新的位置。代码如下:
```python
from machine import Pin, PWM
from utime import sleep
servo = PWM(Pin(16))
servo.freq(50) # pulse every 20ms
def set_angle(angle, min_pulse_us=500, max_pulse_us=2500):
us_per_degree = (max_pulse_us - min_pulse_us) / 180
pulse_us = us_per_degree * angle + min_pulse_us
# duty 0 to 1023. At 50Hz, each duty_point is 20000/65535 = 0.305 µs/duty_point
duty = int(pulse_us / 0.305)
# print("angle=" + str(angle) + " pulse_us=" + str(pulse_us) + " duty=" + str(duty))
# print(angle)
servo.duty_u16(duty)
angle = 90
set_angle(90)
min_angle = 10
max_angle = 160
while True:
angle_str = input("Enter angle 0 to 180:")
angle = int(angle_str)
if (angle >= 0 and angle <=180):
set_angle(angle)
```
舵机通过改变控制连接上的脉冲持续时间来控制。默认的PWM频率对于舵机来说太高,需要将其设置为50Hz。`set_angle` 函数用于计算PWM占空比,可调整 `min_pulse_us` 和
0
0
复制全文
相关推荐










