【得捷电子Follow me第1期】Raspberry Pi Pico的敏捷开发的总结
[复制链接]
本帖最后由 北方 于 2023-7-13 16:16 编辑
Raspberry Pi Pico的敏捷开发的总结
1 感谢得捷电子和EEWORLD提供的项目开发机会,通过学习视频和文档,熟悉了Raspberry Pi Pico使用和开发 。这个过程最大的体会就是敏捷开发,也就是使用最快捷的方式熟悉并掌握开发硬件和软件,并且高效地开发出可以应用的实际项目。
这样的快速开发,可以使用记忆MicroPython的thonny,还同时支持基于C++开发的VS code,分别在如下两个帖子中描述。这样把注意力在代码和逻辑实现,在应用上提高了开发和使用效率。
https://bbs.eeworld.com.cn/thread-1242823-1-1.html
https://bbs.eeworld.com.cn/thread-1247125-1-1.html
2 总结视频
基于上述的项目总结
lv_0_20230713160842
3 项目总结报告
本次活动用到的硬件有5项
主控板:Raspberry Pi Pico w ——RP2040
扩展板:103100142——方便将pico w开发板的信号引出,连接到各种 grove 设备
屏幕:104020208——I2C接口 单色 OLED显示屏,可以通过编程显示各种文字、图案
外设1:107020000——蜂鸣器,可以通过GPIO驱动发出声音
外设2:109020022——高性能、高集成度、低功耗的多模卫星定位导航模块
从而完成以下规定的基本任务和扩展,
3.1 任务1:熟悉thonny软件与micropython的基本语法
基于Rpi Pico W的开发工具有很多选择,其中thonny是最便捷和快速的,安装方法简单,在已经安装好python的电脑上,使用如下pip命令安装,
pip install thonny
启动后,这个工具分为上下两个主视窗,上面的是代码编辑区域,下面是输出区域。右下角的硬件状态显示当前的软件和硬件状态,即可以用本地python调试运行,也可以直接在PICO的硬件平台上编辑后运行。
MicroPython是标准python语句的一个子集,可以在https://micropython.org/help/ 这个官网上查到使用的说明和更新的手册。具体到Pico开发板,有专门的页面,在标准库之外,还列出了完整的外设库。了解整个开发环境和工具后可以通过以下简单代码完成测试。简单设定主频的代码如下
import machine
machine.freq() # get the current frequency of the CPU
machine.freq(240000000) # set the CPU frequency to 240 MHz
点击保存,可以在Pico开发板上保存,并在上电后自动运行。
基于Raspberry Pico W的micropython固件更新及开发,使用thonny就可以快速完成,避免了复杂过程,快捷有效。
3.2 任务2:驱动外设
本任务使用的搭配器件:有Raspberry Pi Pico w开发板、GROVE SHIELD、GROVE OLED扩展板、GROVE BUZZER扩展板
3.2.1 驱动LED
本任务驱动板载LED,直接调用外设库machine,然后对led直接写入数值,加上延时函数就可以简单完成,代码如下,
LED控制运行成功。
3.2.2 驱动OLED显示屏
这里选用的OLED是I2C驱动的0.96点阵128x64的OLED,这样,这款SSD1315驱动,可以直接下载SSD1306驱动使用, , 下载后直接复制到Pico W开发板,
OLED显示控制成果,其中自己制作了得捷的logo做成buff文件,显示代码有误,还需要再找找明确的说明才好。
3..2.3 驱动蜂鸣器
驱动蜂鸣器,可以用直接用pwm的驱动控制实现,因为语音的感受程度在20Hz~2000Hz之间,完全在PWM驱动范围内无压实现,这个范例实现的是频率从200Hz到2400Hz的逐步变化,到最高之后再从最低开始重新升高频率。
硬件连接有了grove开发板,就变得极其简单,如下,其中GROVE接口上有编号,这里选择了D20端子对应Pizzo的SIG信号线,运行通过。
3.3同步网络时间
3.3.1 同步网络时间,主要是学习网络的连接和参数查看等方法,网络同步时间是其中的应用。网络同步时间是专门提供一个网络时间同步服务器,不断给访问提供时间反馈和时间戳,这样,发送者从发送和接受的时间对比,可以比较精确地算出网络时延补偿,减去反馈的时间戳就是实际时间。这个就是ntp协议的主要内容。这个功能可以自己计算,也可以直接引入包。这个功能,只用Raspberry Pi Pico w开发板就可以实现的。
3.3.2 network模块用法
Network模块是标准库,具体用法参加https://datasheets.raspberrypi.com/picow/connecting-to-the-internet-with-pico-w.pdf
总体来说,这个和arduino的wifi库相似,都是高度封装,只需要输入联网热点数据,依次执行连接,就可以读取信息并反馈数据。具体示例如下。
3.3.3 连接网络、查看网络参数等用法,
3.3.4 实现通过网络同步系统时间。
这个采用封装的ntptime,首先在thonny的会话框,如下安装ntptime。然后就可以直接引入并使用,见如下代码
3.4 实现定位功能
3.4.1 掌握GNSS模块用法
器件:Raspberry Pi Pico w开发板、GROVE - GPS扩展板
GNSS是GPS定位功能,这个是Air530模块支持的全球定位系统模块,这个模块是通过UART串口进行数据交互的,具体搜索卫星和卫星定位的算法都是在模块内实现的。在pico W中使用GPS功能,更进一步把UART的AT命令会话过程封装成gps库,可以直接简化读取。
3.4.2实现定位功能。
首先需要安装GPS模块,访问 ,然后下载其中的micropyGPS.py,
3.5 使用C++实现OV2640摄像头的访问
使用MicroPython实现了很多功能,逻辑清楚,效果显著,不过美中不足的是对于PicoW的资源利用不充分,比如DMA等高速访问都不能简单实现。所以,还是要考虑用C++的方法来实现,这里对于摄像头的访问就需要比较大的数据交换,最适合体现这个过程。
在windows下的visual code实现,也可以用树莓派4B在linux环境下实现,也是很有意思的,不过在windows实现也是大同小异。访问 下载并安装,可以直接创建PICO SDK的开发环境并直接实现。
摄像头的端口是SCCB协议和并行数据口,因为PicoW的端口有限,所以实际上还是用I2C来实现SCCB协议的模拟实现,用SCCB来传输数据包,这样的速度不如并行端口来实现的快,这里的硬件连接使用的SIOC,SIOD作为SCK和SDIO,另外是XCLK等行同步命令和列同步信号,实现扫描。访问的方法是通过i2c的地址0x60访问,写入不同的OV2640地址,分别确定为命令和数据,这样在完成初始化之后,读取I2C的通道数据直接入DMA写入设定的内存buff中。 在对于高速传输的要求,还混合编程,还采用了image.pio的汇编代码实现快速的DMA初始化
这个开发的过程中,使用c++比micropython负责很多,但是即使这样,也是非常好用的,同时还可以支持更多的资源和能力,是对于复杂一些程序的更优选择。
4 代码提交,按照上面的顺序依次为
|