配置主板
拿到小车,首先将它组装好,然后即可开始配置$Pico2$主板,总共需要下载两个文件,一个是配置$micropython$的$.uf2$文件,一个是官方自带的$pico\_car.py$文件。
下载后,将主板接入电脑,然后会弹出一个类似U盘的文件,首先将$.uf2$文件直接复制到U盘中,这时它会自动重新启动,配置$micropython$环境,之后就会被电脑识别成一个端口,可以通过系统的设备管理器中的端口(COM和LPT)栏目下看到新增的端口,这就是小车的主板,并且在此之后不需要将它作为U盘操作,直接连入电脑,用编辑器写指令即可。
之后是编辑器,为了更方便地控制小车执行指令,需要下载一个Thonny编辑器,在这个编辑器中可以通过上方栏目中的工具->选项->解释器中将解释器设置为MicroPython (Raspberry Pi Pico),这样,在将主板接入电脑后,Thonny就会自动识别该主板,在下方的Shell窗口执行指令即可直接被小车运行。
两个文件均可从官方下载网址中进行下载。
小车基本功能
板载LED灯
该功能可控制$Pico2$主板上的LED灯开关,具体代码如下:
import time
import machine
led_onboard = machine.Pin(25, machine.Pin.OUT)
led_onboard.value(1) # 开启LED灯
time.sleep(1) # 等待1秒
led_onboard.value(0) # 关闭LED灯
板载温度传感器
该功能可以利用主板上的温度传感器读取当前环境温度,具体代码如下:
import machine
sensor_temp = machine.ADC(29) # 29号接口可以传递温度信号
conversion_factor = 3.3 / (4096-1) # 读数与实际温度之间转换因子
reading = sensor.read_u16()*conversion_factor # 读取并转换为实际温度
无源蜂鸣器
该功能可以控制小车车尾部的蜂鸣器发出声音,具体代码如下:
from machine import Pin, PWM
BZ = PWM(Pin(22)) # 22号针脚连接蜂鸣器,通过发射PWM信号可控制其工作
BZ.duty_u16(500) # 设定为大于0的整数即为开启蜂鸣器,数字越大,蜂鸣器的响度越大
BZ.freq(330) # 设定频率
# CM = [0, 330, 350, 393, 441, 495, 556, 624] 这是各个音调的频率,从1到7
BZ.duty_u16(0) # 设定为0,蜂鸣器关闭
小车灯光
该功能可以独立控制小车下方的总共8个灯的亮度以及颜色,具体代码如下:
import time
from pico_car import ws2812b # ws2812b为每个灯的芯片名称
num_leds = 8 # 总共8个灯
pixels = ws2812b(num_leds, 0) # 初始化控制灯光的变量
pixels.set_pixel(0, 0, 255, 255) # 将0号灯的RGB设置为(0,255,255)
# set_pixel中,第一个变量为灯的编号,其余3个分别为颜色的RGB值,取值从0到255
pixels.show() # 注意!只有执行了这一句话,设定的灯才会亮!
time.sleep(1)
pixels.set_pixel(0, 0, 0, 0) # 关闭0号灯
小车OLED屏幕显示
该功能可以控制小车外挂的OLED屏幕上面显示文字,具体代码如下:
from machine import Pin, I2C
from pico_car import SSD1306_I2C
import time
i2c=I2C(1, scl=Pin(15),sda=Pin(14), freq=100000)
# 上面代码中,1表示调用I2C(1)接口,scl=Pin(15)表示将15号端口作为串行时钟线,sda=Pin(14)表示将14号端口作为串行数据线,freq=100000表示将通讯频率设置为10K
oled = SSD1306_I2C(128, 32, i2c)
# 上面代码中,128,32表示初始化屏幕分辨率为128*32,i2c表示OLED屏幕将和主板通过i2c进行通讯
oled.text('Hello World', 0, 0) # 在位置(0,0)显示字符串'Hello World'
oled.show() # 注意!只有执行了这一句话,所有字符串才会显示!
time.sleep(1)
oled.fill(0) # 清空整块屏幕,将所有像素点都设定为0(不显示)
oled.show()
小车电机运动
该功能是小车运动的主要模块,代码如下:
import time
from pico_car import pico_car
Motor = pico_car()
l, r = 255, 255 # 左右轮速度取值范围为0~255
Motor.Car_Run(l, r) # 左轮以速度l前进,右轮以速度r前进
Motor.Car_Back(l, r) # 左轮以速度l后退,右轮以速度r后退
Motor.Car_Left(l, r) # 左轮以速度l后退,右轮以速度r前进
Motor.Car_Right(l, r) # 左轮以速度l前进,右轮以速度r后退