一、项目介绍
本次寒假一起练是基于树莓派Pico的嵌入式系统学习平台,此平台专为嵌入式系统学习而设计,可以通过C/C++以及MicroPython编程来学习嵌入式系统的工作原理和应用。这里我选择thonny作为开发软件,使用MicroPyhthon进行编程。
由于是嵌入式初学者,我选择了较简单的项目1-制作一个反应测试器。
具体要求:随机点亮板上的一个LED,按下板上的一个按键,在显示屏上显示出从灯亮到按键之间的时间,这是心理学上的一个重要实验
实现方式:通过软件产生随机数,程序启动以后在随机数控制的时间下点亮板上的LED,被测试者按下按键以后,处理器计算从点亮灯到接收到按键之间的时间差,并将时间差通过USB显示在PC上,也可以将OLED用起来,在OLED上显示时间信息
二、硬件介绍
平台包含:
树莓派Pico扩展板 x1
硬禾版本树莓派Pico核心模块 - STEP Pico x1
Type-C 数据线 x1
本次项目需使用:
k1按键
12个WS2812B RGB三色灯
128*64 OLED显示屏
三、设计思路
根据项目要求:
第一步、先产生1-12之间的一个整数,对应板子上围绕oled屏幕的12个led灯,并点亮;
第二步、观察者看到灯亮后,按下板子上的k1按键,表明接收到灯亮的信号并作出反应;
第三步、程序计算出灯亮至按下按键的时间,以毫秒表示,并在oled屏幕和电脑上显示,经过2-4秒后灯灭并点亮下一个灯,进行下一轮测试。
四、代码实现
实现该项目要用到如下6个python文件,其中my_test_game.py文件是自己编写的。其他5个文件为电子森林的开源代码得到,初学时跟着寒假练平台提供的15节micropython课程(嵌入式系统入门 - 用树莓派Pico嵌入式系统学习板学用MicroPython编程 (eetree.cn)),代码文件可以在开源项目里面下载到https://gitee.com/picospuch/eetree-mpy-lecture-code
my_test_game.py文件主要代码部分讲解:
while True:
oled.fill(0)
oled.show()
ws2812b.on(random.randint(1,12),"ff0000")
time_start = time.ticks_ms()
time.sleep(random.uniform(2,4))
ws2812b.off_all()
randint可产生随机整数,这里设定为1-12
ws2812b为灯亮和灯灭部分的库,ws2812b.on可点亮指定的一个led灯,ff0000为设定的灯的颜色(红色)
time_start = time.ticks_ms() 表示灯亮后开始计时
time.sleep(random.uniform(2,4)) 让灯亮持续2-4秒后在灭,灯灭后立即进入下一轮测试
def k1_callback(pin):
global time_start
oled.fill(0)
oled.show()
reaction_time = time.ticks_ms() - time_start
print(str(reaction_time) + "ms")
oled.text(str(reaction_time) + "ms",32,0)
oled.show()
k1 = button(pin_cfg.k1, k1_callback, trigger = Pin.IRQ_FALLING)
此部分为k1按键被按下后的反馈部分:
k1 = button(pin_cfg.k1, k1_callback, trigger = Pin.IRQ_FALLING) 此部分定义了k1在上升沿(按下)时运行k1_callback函数
reaction_time = time.ticks_ms() - time_start 计算反应时间
print(str(reaction_time) + "ms")
oled.text(str(reaction_time) + "ms",32,0)
oled.show() 将反应时间显示在电脑和oled屏幕上
五、实现的功能及图片展示
在thonny中运行my_test_game.py文件,随机点亮一个led灯:
按下按键后oled屏幕显示反应时间:
同时电脑屏幕显示反应时间,此次测试的反应时间为793ms
六、遇到的主要难题及解决方法
此次项目也遇到了不少困难,具体如下:
1.在直播课时学习使用thonny,电脑可以识别pico的盘符,但是在thonny里找不到pico端口,提示解释器不匹配,且uf2文件拖进pico就断开,重启后uf2文件消失。
解决方法:按照直播课的方法,uf2文件拖进pico后就是会断开的,后面看了微信群大家的讨论,发现大家也有类似情况,thonny软件的右下角是可以配置解释器的,选择Paspberry Pi Pico后就可以了。
作为初学者,当时因为这个耽误了很长时间,及时交流沟通太关键了!
2.由于之前没有接触过python,有了设计思路后,不知道如何计算反应时间,怎么去实现。在看了赠送的 micropython课程后,才知道有time.ticks_ms这样的函数,为了让按下按键后屏幕有显示,可以设置k1_callback函数。
七、未来的计划
目前只完成了最简单的一个项目,在后面的学习中会继续完成后面的项目,学海无涯。通过这次学习,发现python学习起来挺容易的,而且有很多库,方便调用,未来也会自学一些python的编程。