市桥做网站的公司,android 开发wordpress,织梦cms做视频网站,网站备案 新闻审批号0 介绍
不同于作为单板计算机的树莓派5#xff0c;树莓派 pico 是一款低成本、高性能的微控制器板#xff0c;具有灵活的数字接口。主要功能包括#xff1a;
英国树莓派公司设计的 RP2040 微控制器芯片双核 Arm Cortex M0 处理器#xff0c;弹性的时钟频率高达 133 MHz26…0 介绍
不同于作为单板计算机的树莓派5树莓派 pico 是一款低成本、高性能的微控制器板具有灵活的数字接口。主要功能包括
英国树莓派公司设计的 RP2040 微控制器芯片双核 Arm Cortex M0 处理器弹性的时钟频率高达 133 MHz264kB SRAM 和 2MB 板载闪存 RP2040 能够支持高达 16MB 的片外闪存不过在 Pico 中只有 2MB。 USB 1.1支持设备和主机低功耗睡眠和休眠模式通过 USB 使用大容量存储器进行拖放编程26 × 多功能 GPIO 引脚2 × SPI、2 × I2C、2 × UART、3 × 12 位 ADC、16 × 可控 PWM 通道精确的片上时钟和定时器温度传感器片上加速浮点库8 × 用于支持定制外设的可编程 I/O (PIO) 状态机
树莓派 pico W/WH 引脚定义布局 引脚附加说明
板子上有好几个地线GPIO 有 8 个地线加上 3 针 Debug 连接器上的一个附加地线一个位于33号针脚的地线被指定为模拟地线所有与电源相关的引脚都被安排在了一起靠近 microUSB 连接器 VBUS这是来自 microUSB 总线的输出电源5 V。如果 Pico 不是由 microUSB 连接器供电那么这里将没有输出。VSYS这是输入电压范围为 2 至 5 V。板载电压转换器将为 Pico 将其改为 3.3 V。3V3这是 Pico 内部调节器的 3.3 伏输出。只要将负载保持在 300ma 以下它就可用于为其他组件供电。 几个输入可以控制 Pico 的电源 3V3_EN可以使用此输入禁用 Pico 的内部电压调节器从而关闭 Pico 和由其供电的任何组件。RUN可以启用或禁用 RP2040 微控制器也可以将其复位。
树莓派 Pico W 在保留 Pico 外形尺寸的同时使用英飞凌 CYW43439 增加了板载单频 2.4GHz 无线接口802.11n。板载 2.4GHz 无线接口具有以下功能
无线802.11n单频2.4 千兆赫WPA3软接入点最多支持四个客户端蓝牙 5.2 支持蓝牙 LE 中央和外设功能支持经典蓝牙
天线采用 ABRACON前 ProAnt授权的板载天线。无线接口通过 SPI 与 RP2040 微控制器连接。
由于引脚限制部分无线接口引脚是共享的。CLK 与 VSYS 监视器共享因此只有在没有 SPI 传输时才能通过 ADC 读取 VSYS。英飞凌 CYW43439 DIN/DOUT 和 IRQ 均共享 RP2040 上的一个引脚。只有当 SPI 没有进行传输时才适合检查 IRQ。接口的运行频率通常为 33MHz。
在 Pico 上进行编程开发
可以使用两种编程语言之一开始使用 Pico
MicroPython一种专门为微控制器制作的解释语言C许多微控制器用户都熟悉 C因为它被用于 Arduino 和 ESP32 板上
使用 C 在树莓派 pico 上进行开发能够更有效榨干 pico 的性能但是 MicroPython 更容易上手。
1 使用 MicroPython 在 Pico 上进行编程开发
1.1 Thonny IDE
Thonny IDE 适用于Windows、Mac OSX 和 Linux也是树莓派操作系统(以前的 Raspbian)的一部分。
这里在 Windows11 上使用 Thonny IDE 尝试利用 MicroPython 进行编程开发。
1.2 安装和启动 MicroPython 将 microUSB 连接到 Pico 上并准备将另一端插入电脑。在插入之前先按下Pico上的Boot Select开关按钮。按住BOOTSEL键几秒钟然后松开。 在电脑上应该会看到一个新的驱动器类似于将 U 盘插入电脑时的情况 如果这里没有反应可能是线的问题需要使用具备数据传输功能的线 打开新的 “驱动器”会看到一个名为 RPI-RP2 的文件夹。在这个驱动器里会看到几个文件其中一个是网页文档index.htm点击该网页文件浏览器就会打开会被重定向到树莓派 Pico 入门页面 点击 MicroPython 入门的标签。会看到一个链接来下载一个 UF2 文件这就是可下载的 MicroPython 文件。把这个文件下载到电脑上 现在将下载的文件拖到 Pico 的 RPI-RP2 文件夹中。一旦这样做了文件夹就会消失Pico 将以 MicroPython 模式启动
注这里实际上将之前下载的 MUF2 文件拖进去之后pico 会自动重启重启后就看不到那个移动硬盘了
打开设备管理器在端口一栏下有一个 USB 串行设备记住方框中的东西例如我的是 COM4
1.3 安装并配置 Thonny IDE 去官网下载即可链接https://thonny.org/ 官网下载速度非常慢还容易下载失败也可以去 github 下载https://github.com/thonny/thonny/releases 安装并打开Thonny然后选择视图打开这三个 选择工具 - 设置按下图选择 下面的端口选择刚刚记住的那个我的是 COM4 。点击确认完成
1.4 点亮板载 LED
在 Shell 中依此执行
from machine import Pin
led Pin(25, Pin.OUT)
led.value(1)可以看到板载的 LED 亮了。 Hello World 在 shell 中输入如下代码 print(Hello World)查看板子的型号 对于用 MicroPython 编写的脚本没有直接的方法可以通过查看硬件来确定它是运行在树莓派 Pico还是Pico W上。不过可以通过查看特定 MicroPython 固件中是否包含网络功能来间接判断 import network
if hasattr(network, WLAN):print(pico-W)
else:print(pico)也可以使用 sys 模块检查 MicroPython 固件版本以查看它是针对树莓派Pico还是Pico W编译的。 import sys
sys.implementation1.5 脚本测试
前面的实验都是在 Shell 中执行的这样存在缺点
一旦执行了程序代码就会消失对于比较大/复杂的程序来说很不方便
可以直接在编辑器中编写程序代码代码编写完成之后可以通过 ctrls 来保存代码这个时候会弹出选择存放在本地电脑或Pico上。可以选择存放在 pico 上并给代码命名名称需要以 .py 结尾。
此时脚本就保存在 pico 上了可以通过执行按钮来执行脚本。
1.6 在没有主机的情况下运行脚本
开发好的程序希望能够独立在 pico 上运行由 microUSB 端口或通过 Pico VSYS 电源输入供电而不是每次都需要让其通过连接主机上手动执行。前面的方式都是从 Thonny IDE 将程序加载到 Pico 上运行的依赖连接的主机。
前面已经将脚本保存在 pico 上了只需要把脚本命名为main.py即可这样当 Pico 启动时它会查找名为main.py的程序。如果它找到了它就会加载它并在启动时运行它。
此时把 pico 从主机上拔下来只需要给其供电pico 就会在启动之后自动执行 main.py。
2 使用 C/C 在 Pico 上进行编程开发
这里使用的编辑器是 CLion 和 VS-Code这两个二选一即可。
2.1 准备软件/文件
2.1.1 下载 SDK
clone 这个仓库也就是下载这个仓库的代码https://github.com/raspberrypi/pico-sdk
git clone https://github.com/raspberrypi/pico-sdk2.1.2 下载示例代码
clone这个仓库也就是下载这个仓库的代码https://github.com/raspberrypi/pico-examples
git clone https://github.com/raspberrypi/pico-examples2.1.3 下载安装 gcc-arm-none-eabi
下载链接在这个网站里https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
windows 下载这个就可以gcc-arm-none-eabi-xxxx-win32.exe
安装注意记住安装位置。
2.2 配置环境
2.2.1 CLion
在 CLion 中打开示例代码项目文件夹 pico-examples进入设置找到 CMake
配置环境
加入两个
PICO_SDK_PATH 值为下载的 pico sdk 的目录PICO_TOOLCHAIN_PATH 安装 gcc-arm-none-eabi 的目录下的 bin 目录
配置完成
2.2.2 VS-Code
打开Visual Studio的 Developer Command Prompt 命令行cmd 不行的
输入 code 打开 VSCode必须这样打开
然后安装 cmake tools 插件重启 VSCode依然是从 Developer Command Prompt 命令行打开 VSCode
打开设置选择拓展 - CMake Tools Configuration - Configure Environment - 添加项 加入两个
PICO_SDK_PATH 值为下载的 pico sdk 的目录PICO_TOOLCHAIN_PATH 安装 gcc-arm-none-eabi 的目录下的 bin 目录
再选择拓展 - CMake Tools Configuration - Generator设置值为 NMake Makefiles
关闭设置打开示例代码文件夹右下角出现是否配置项目点 是。然后提示配置项目选择 GCC for arm-none-eabi
配置完成
2.3 点亮板载 LED
以 CLion 为例打开示例代码下的 blink 下的 blink.c 点击构建
构建完成后在 cmake-build-debug/blink/elf2uf2 目录下可以找到 blink.uf2 文件这即是编译后的需要烧录的文件
按住 pico 上的按钮使用 USB 线连接电脑后松开按钮将 blink.uf2 拖进去。
OKpico 自动重启LED 已经亮了
这个时候应该已经发现了没错MicroPython 的固件也是 .uf2 后缀说明 MicroPython 也是用 C 写出来、编译好的。
3 添加 OLED 屏幕
可以将一个 OLED 显示器连接到 Pico 上这样就可以在上面打印一些东西。
显示屏使用的是 0.91 英寸 I2C 协议的 OLED 屏OLED 屏幕模块和树莓派 Pico 的 GPIO 连线如下
OLEDPICOVCC(电源正3.3-5V)3V3GNDGNDSCL(I2C时钟线)GP21SDA(I2C数据线)GP20
显示器需要一个库可以使用 Thonny ID 安装:
点击 工具 菜单点击 “管理包”搜索 “ssd1306”找到 ssd1306并安装它
3.1 OLED 显示屏的演示脚本
# 树莓派 Pico OLED Display Test
# Uses ssd1306 moduleimport machine
import utimesdamachine.Pin(20)
sclmachine.Pin(21)i2cmachine.I2C(0, sdasda, sclscl, freq400000)from ssd1306 import SSD1306_I2C
oled SSD1306_I2C(128, 32, i2c)print(i2c.scan())oled.text(Welcome to the, 0, 0)
oled.text(Pi Pico-W, 0, 10)
oled.text(Display Demo, 0, 20)
oled.show()
utime.sleep(4)oled.fill(1)
oled.show()
utime.sleep(2)
oled.fill(0)
oled.show()while True:oled.text(Hello World,0,0)for i in range (0, 164):oled.scroll(1,0)oled.show()utime.sleep(0.01)这里的 OLED 显示屏是一个 I2C 设备所以在脚本的开头将两个 GPIO 引脚定义为 SDA (GPIO 20) 和 SCL (GPIO 21)。
Pico 有两条 I2C 总线可以使用几种不同的 GPIO 引脚来连接它们。但它们并不是随便的引脚例如某些引脚被指定为总线 0 的 SDA只有它们才能用于 SDA 总线 0。
使用机器库的I2C函数定义一个 I2C 连接。我们需要给它提供以下参数。
I2C总线号例子中是 0SDA引脚SCL引脚I2C总线频率例子中是400KHz
这里我们没有传递 I2C 地址。因为 SD1306 OLED 显示器有一个固定的 I2C 地址所以我们不需要指定它。不过在这里添加了一行与显示器无关的内容但可以扫描 I2C 总线并打印出它发现占用的地址。在 Shell 中打印出来的是十进制而不是十六进制。
3.2 显示 Pico 的系统信息
下面的代码可以用来打印树莓派 Pico 的系统信息包括 MicroPython 版本号、内建模块清单、CPU 频率、内存大小、磁盘空间使用情况等。
import uos
d uos.uname()
print(board name:, d[4])
print(micropython version:, d[2])
print(\nbuildin modules:)
help(modules)import machine
print(\nsystem freq: {} MHz.format(machine.freq()//1000000))import gc
print(memory:, gc.mem_free() gc.mem_alloc())d uos.statvfs(/)
print(Disk size:)
print(total:, d[0]*d[2])
print(free:, d[0]*d[3])对上面的脚本做一点点的修改并保存到 pico 上命名为main.py就可以在 pico 启动后再 OLED 上显示 pico 的系统信息。 main.py
import uos
import machine
import utime
import gc
import timedef stat():sdamachine.Pin(20)sclmachine.Pin(21)i2cmachine.I2C(0, sdasda, sclscl, freq400000)from ssd1306 import SSD1306_I2Coled SSD1306_I2C(128, 32, i2c)d uos.uname()oled.text(f{d[4]}, 0, 0)oled.text(Mem: {:.2f}% {:.0f}KB.format(gc.mem_alloc()/(gc.mem_free() gc.mem_alloc()) * 100, (gc.mem_free() gc.mem_alloc()) / 1024), 0, 11)d uos.statvfs(/)if int(time.time()) % 2 0:oled.text(fCPU Freq: {machine.freq()//1000000}MHz, 0, 22)else:oled.text(Disk: {:.2f}% {:.0f}KB.format((d[0]*d[2] - d[0]*d[3]) / (d[0]*d[2]) * 100, d[0]*d[2] / 1024), 0, 22)oled.show()utime.sleep(1.5)if __name__ __main__:d uos.statvfs(/)print(d[0]*d[2] - d[0]*d[3]:, d[0]*d[2] - d[0]*d[3])print(d[0]*d[2]:, d[0]*d[2])print(d[0]*d[3]:, d[0]*d[3])while True:stat()