树莓派pico及拓展板的功能体验
本次项目是在树莓派pico及拓展版的硬件支持下进行的功能实现和体验,支持的功能如下:LCD屏幕显示、光电编码器、SD卡读写器、麦克风、电位计、蜂鸣器、姿态传感器、光传感器。
标签
树莓派
嵌入式系统
PICO
1234567888888
更新2021-03-13
2671

首先,在拿到pico和拓展板后,第一件事一定是准备好设备的资料。在这里我就截几张图放在下面,原文链接:https://www.eetree.cn/project/detail/103

Fk_-ULG0Uo4RgEr2e1QTYwWn39QeFkVynsLgfpFtloDcJUyb7eo76jVQFtNvC3g2Npo29Va6ZyTrg9TG2AHs

接着需要配置一下micrpython的环境。下载Thonny的IDE,官网下载一个uf2文件。按住pico上的boostel键接入电脑,把文件拖入出现的磁盘中,这样就配置完成了。

开始玩拓展板咯!

首先吸引到我的就是这个LCD屏幕-st7789。然而,当我想要去简单地下载库开始设计时,悲剧发生了,库不能直接使用。在此之后,我又陆续发现,所有的器件库都无法直接使用。在不断测试下,发现pico与之前的支持mycropython的pyb board 函数库相差较大,又因为pico刚刚出世,网上查找到的库都无法直接使用。这时候,一位大佬改写了库文件,才让我有了使用这块屏幕的权力。大佬改写的库文件会放在附件里面,大家可以进行参考(三个文件都要放到pico里面,两个字体文件要放在名为fonts的文件夹里)。在此我就放上封面上显示一行字的代码:

import uos
import machine
import st7789 as st7789
from fonts import vga2_8x8 as font1
from fonts import vga1_16x32 as font2
import random
from MMA7660 import Accelerometer,MMA7660_DATA

st7789_res = 0
st7789_dc  = 1

spi_sck=machine.Pin(2)
spi_tx=machine.Pin(3)
spi0=machine.SPI(0,baudrate=4000000, phase=0, polarity=1, sck=spi_sck, mosi=spi_tx)
disp_width = 240
disp_height = 240
print(spi0)
display = st7789.ST7789(spi0, disp_width, disp_width,
                          reset=machine.Pin(st7789_res, machine.Pin.OUT),
                          dc=machine.Pin(st7789_dc, machine.Pin.OUT),
                        xstart=0, ystart=0, rotation=0)
while True:
    display.text(font2,"HELLO,PICO!",40,100,st7789.WHITE)

相较于C语言的编写,micropython确实简单了很多。

接着到了麦克风,由于麦克风和电位计是通过跳帽二选一的,两者的程序编写是一模一样,就放在一起了。在这里,两者都是放在了26号GPIO上,因为26号GPIO是支持ADC输入的。两者都会改变输入电压,只有在ADC管脚上才能够读取具体数据。下面是一个简单的例子,读取ADC数据并以波形显示在屏幕上(前面部分和上面一样就不放了):

potentiometer = machine.ADC(26)

while True:
    for x in range (0,240):
        y=potentiometer.read_u16()
        display.pixel(x,y//200,st7789.color565(255,255,255))
    display.fill(st7789.color565(0,0,0))

由于ADC输入最大数据

是4095,当整除200后,屏幕上240的像素点大致够用。

Frr9-XkRHH57o5oZkcZTM9-k02mI

这张图是用的麦克风,可见变化较大。

Fm9xxyf_h8qX2kbaikTQdxvsoz3s

这张图用的是电位计,波形就很稳定。

接下来就是蜂鸣器。蜂鸣器的使用就是相当于输出一个PWM信号,在micropython中只需要设定好频率和占空比就可以输出了。

buzzle=machine.PWM(machine.Pin(28))
buzzle.freq(200)
while True:
    buzzle.duty_u16(2047)

这里的频率为200是因为用频率高的声音会让耳朵不舒服,干脆用很低的声音做实验,而占空比就取到4095的一半。

然后是编码器,编码器接上了三个管脚,两个管脚可以检测旋转方向,另一个是按钮。旋转编码器通常是用两个相位相差90°的波的先后来判断顺时针还是逆时针转动。在代码里就是判断两个管脚的值的情况。类似的还有led灯,有着三个管脚分别控制着RGB(led是0有效)。因为仅需控制输出输入的值,比较简单,代码就不放了。

最后是还没有解决的部分:SD卡读写和两个I2C通信的传感器。两个传感器的库需要修改,但是本人水平较差,暂时还没能够调通,等到能够正常使用了再来更新。SD卡的读写还没有涉及,之后也会继续研究。

另外,PICO自带的温度传感器就隐藏在ADC(4)里面,有了温度传感器也可以多一些乐趣。

可以参考的一些资料:1.https://mp.weixin.qq.com/s/YgWKk_RhAIODREgLT3T5yg

2.github上的一些代码参考

3.向大佬请教!

附件:st7789库文件(前面出现的代码都只有几句就不放了)

附件下载
st7789.py
vga1_16x32.py
字体1
vga2_8x8.py
字体2
团队介绍
团队成员
高昂
西交利物浦大学 大二 通信工程
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号