树莓派 Pico有三个模拟输入,它们都有12位的分辨率。

这三个输入端如下。

  • GPIO 26 - ADC0 (31针)
  • GPIO 27 - ADC1 (针脚 32)
  • GPIO 28 - ADC2 (针脚34)
  • 还有第四个ADC用于内部温度传感器。

电位计的连接–GPIO28

在我们的测试中,我们将使用一个电位器在模拟输入端呈现一个可变电压,然后我们将读取该电压。我们将使用ADC0作为我们的电位计输入,但你也可以使用其他两个中的一个。

# 树莓派 Pico Analog Input Test
# analog-input.py
 
# POT - Pico GPIO 28 ADC2 
 
# DroneBot Workshop 2021
# https://dronebotworkshop.com
 
 
import machine
import utime
 
potentiometer = machine.ADC(28)
 
while True:
    print(potentiometer.read_u16())
    utime.sleep(2)

这是一个简单的脚本,像往常一样,首先导入用于GPIO操作的machine库和用于时间函数的utime库。

然后我们定义我们的电位器连接。请注意我们如何使用 “ADC “来表示我们要将GPIO 28针作为模拟输入。当然这只适用于具有模拟输入能力的三个GPIO引脚。

在True循环中,我们只需打印从电位器上得到的值,然后延迟几秒钟再做一次。

需要注意的是,我们用 “read_u16 “函数得到的值的类型是一个无符号的16位整数。这意味着它将在0和65,535之间变化,而不是你可能期望从12位ADC中得到的4095。

这可能看起来很奇怪,但正如我们将在下一个脚本中看到的那样,能够传递具有相同数值数据类型的值实际上是有用的。

通过ADC通道4,读取芯片内部温度。在此过程中,使用手触摸Pi Pico表面加热,或者使用酒精喷洒芯片表面进行降温。

import machine
import utime
 
sensor_temp = machine.ADC(4)
conversion_factor = 3.3/(65535)
 
while True:
    read = sensor_temp.read_u16() * conversion_factor
 
    temperature = 27 - (read - 0.706) / 0.001721
    print(temperature)
    utime.sleep(2)
 
# This code reads the analog value on GP26 and print out on serial.
# ---
# Connection: Analog In = GP28
# ---
# Hardware:
# 1. Cytron Maker Pi RP2040 (www.cytron.io/p-MAKER-PI-RP2040)
#    - Any RP2040 boards should work too.
# ---
import machine
import utime
 
analog = machine.ADC(28)
 
while True:
    print(analog.read_u16())
    utime.sleep(0.2)