H_On个人小站

个人站

这都被你发现了【惊
奖励你一朵小红花~


从零开始的树莓派 Pico

目录

简介

从树莓派开始,多少关注一点树莓派相关信息,前两年看到 Pico 之后很心动,因为不想用 c 编程,当时又很喜欢 python,加上做了点兼职有钱没处花,前后买了十几片 Pico。结果没怎么玩就扔到那吃灰了。

脱产二战失败后,想找工作缺什么都不会了,由于想从事硬件(或者说比较物联网)的行业,因此开始尝试重新捡起嵌入式编程。总之手上有什么用什么。51 的软件用起来好像很复杂,还是从 Pico 开始重拾单片机游戏吧。

对了,由于之前玩的时候没有文档,导致我现在重拾这块板子很麻烦,于是在此编写一个完整的记录博客。

入门文章参考的是 这个

单片连接

  1. 首先下载 Thonny IDE。初次运行时选择 简体中文Raspberry pi
    将 Pico 通过带有读写功能的 micro 数据线连接到电脑上,电脑上会多出一个叫做 RPI-RP2 的驱动器。若没有出现,就拔掉,按住主板上的 BOOTSET 按钮,按住不松手的情况下连接电脑,之后继续按住几秒松开。
  2. 配置 Pico。驱动器中的文件可能不一样,但应该都有一个名为 INDEX.HTM 的网页文件。
    1. 它会重定向到树莓派 Pico 的入门页面。
    2. 选择 MicroPython 的标签,观看官方的入门步骤,有一步会要求你下载一个 UF2 文件
    3. 将刚才下载的文件拖入 RPI-RP2 驱动器中,驱动器会消失,此时 Pico 会自动以 MicroPython 模式 启动。
  3. 此时查看你的 Thonny IDE 右下角的 Python 版本的位置,点击应该有一个 MicroPython 的选项。选择之后命令行会输出形如:
     MicroPython v1.19.1-891-g8d9a7fd22 on 2023-02-23; Raspberry Pi Pico with RP2040
     Type "help()" for more information.
     >>>
    

    的提示性文字,表示你的 Thonny 已经连接到 Pico。

  4. 你可以输入 print("Hello Pico") 来测试,可以看到输出了对应文字,而且这是 pico 做的。
  5. 在上面的文本编辑器中输入代码 print("Hello Pico") 并保存为 .py 文件,如 Hello.py。此时一个给 pico 运行的脚本就创建成功了。你可以保存在电脑或 pico 上,尝试保存在 pico 中。
  6. 保存后,点击 “运行” 按钮就可以查看运行结果。

I/O 功能 - 输出

作为一个单片机,引脚的输出是最基本的功能。所幸 pico 上继承了一个 LED 与 25 引脚连接,我们不需要做任何焊接或接线就可以进行简单的 I/O 操作。从而学习如何进行基础的信号输出。

新建一个文件,写入如下代码并命名为例如 flush.py 的 Python 文件。之后点击运行观察板载 LED 的闪烁情况。

from machine import Pin
from utime import sleep

led = Pin(25, Pin.OUT)

while True:
    led.value(1)
    sleep(1)
    led.value(0)
    sleep(1)

可以看到:

  • 基础的 I/O 操作库 machine 中的 Pin 类为引脚控制类。
  • utime 库功能基本类似 time 库。
  • led.value(bool) 方法可以控制输出引脚输出的电平。
  • 常用的 led.toggle() 方法可以反转输出的电平信号,即 高变低/低变高

因此上面的代码可也写为:

import machine
import utime

led = machine.Pin(25, machine.Pin.OUT)

while True:
    led.toggle()
    utime.sleep(1)

I/O 功能 - 输入

接下来进行按键的测试.

可以看到,使用 machine.Pin.IN 来指定引脚的工作状态为输入。并且在第三个参数的位置指定下降沿触发还是上升沿触发。

一定要说明第三个参数,如果不指明第三个参数,也就是不指明输入引脚的工作条件,那么判定会出一些位置的问题。
你可以尝试把注释掉的代码取消注释,之后运行查看运行结果。

from machine import Pin
import utime

button_D = Pin(15, Pin.IN, Pin.PULL_DOWN)
button_U = Pin(16, Pin.IN, Pin.PULL_UP)
# button = Pin(17, Pin.IN)

while True:
    if button_U.value() == 0:
        print("UP")
    if button_D.value() == 1:
        print("DOWN")
    # if button.value() == 1:
    #     print("DEF DOWN")
    # if button.value() == 0:
    #     print("DEF UP")
    utime.sleep(0.25)

结合上一节的输出,你已经可以做到简单的按键控制或是传感器控制啦~

末尾闲言

可能是去年的实习写过教程,即使是这个网站里我给自己写的 “教程”,也不想一个章节的信息量过大,希望能点到为止,给学习者一个缓和的契机。

掌握了基础的输入输出之后,已经能解决大多数本科期间的课设了,可以说是实用性拉满。因此我想在这里中断一下,下一章 再进行有关 pi pico 更高级应用的内容。