热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【树莓派Pico基于MicroPython编程Thonny开发】

【树莓派Pico基于MicroPython编程Thonny开发】1.MicroPython介绍2.入门2.1硬件设置2.2软件设置3.RP2040连接到PC并点亮3.1步骤13.2


【树莓派 Pico 基于MicroPython编程Thonny开发】

  • 1. MicroPython 介绍
  • 2. 入门
    • 2.1 硬件设置
    • 2.2 软件设置
  • 3. RP2040 连接到 PC 并点亮
    • 3.1 步骤 1
    • 3.2 步骤 2
    • 3.3 步骤 3
  • 4. IIC 连接RP2040在SSD1306显示
    • 4.1 硬件连接
  • 5. 其他资源


1. MicroPython 介绍

MicroPython是具有部分原生代码编译功能的 Python 解释器。MicroPython 实现了 Python 3.4 和 Python 3.5 及更高版本的一些精选功能,用于嵌入式处理器和受限系统。它与 CPython 不同,您可以在此处阅读有关差异的更多信息。
在这里插入图片描述


  • MicroPython 是 Python 3编程语言的精简高效实现,其中包括 Python 标准库的一小部分,并且经过优化,可在微控制器和受限环境中运行。
  • MicroPython pyboard是在裸机上运行 MicroPython 的紧凑型电子电路板,为您提供可用于控制各种电子项目的低级 Python 操作系统。
  • MicroPython 充满了高级功能,例如交互式提示、任意精度整数、闭包、列表推导、生成器、异常处理等等。然而,它足够紧凑,可以在 256k 的代码空间和 16k 的 RAM 内安装和运行。
  • MicroPython 旨在尽可能与普通 Python 兼容,让您可以轻松地将代码从桌面传输到微控制器或嵌入式系统。

在这里插入图片描述


2. 入门

首先,我们将Pi RP2040 连接到计算机,并从 MicroPython 上传一个简单的代码来检查板子是否运行良好。
![在这里插入图在这里插入图片描述


2.1 硬件设置


  • Pi RP2040 x1
  • 安卓Micro数据线 x1
  • 电脑 x1

2.2 软件设置


  • 步骤 1 :根据您的操作系统下载并安装最新版本的Thonny 编辑器
    在这里插入图片描述
    我的是windows,选推荐的第一个,下载地址
    在这里插入图片描述

  • 步骤 2 :启动Thonny
    选择简体中文和Pi
    在这里插入图片描述

  • 步骤 3 :点击“切换至一般模式”,重新启动。
    在这里插入图片描述

效果如下
在这里插入图片描述

第 4 步。连接Pi Pico,依次选择运行>配置解释器>解释器>端口,选择设备为MicroPython(Raspberry Pi Pico),端口为Try to detect prot automatically
在这里插入图片描述


3. RP2040 连接到 PC 并点亮

请添加图片描述


3.1 步骤 1

按住“BOOT”按钮,然后通过安卓线将RP2040连接到PC。如果运行良好,PC 上会显示“RPI-RP2”桌面。👻👻👻
在这里插入图片描述


3.2 步骤 2

按下“停止/重启后端”按钮,将弹出一个窗口,帮助您在板上安装 MicroPython 固件。
为您的开发板下载正确的 MicroPython UF2 文件:


  • Raspberry Pi Pico
  • Raspberry Pi Pico W
    固件完成后,打开设备管理器查看端口。😀😀😀

在这里插入图片描述
端口是COM25


3.3 步骤 3

检查解释器是否一致COM25
将以下代码复制到 Thonny。

from machine import Pin, Timerled = Pin(25, Pin.OUT)
Counter = 0
Fun_Num = 0def fun(tim):global CounterCounter = Counter + 1print(Counter)led.value(Counter%2)tim = Timer(-1)
tim.init(period=1000, mode=Timer.PERIODIC, callback=fun)

第 4 步。通过单击“运行当前脚本”按钮上传代码。第一次,Thonny 会询问您要将代码文件保存在哪里。This Computer和Raspberry Pi Pico都很好。
在这里插入图片描述

在这里插入图片描述

如果运行良好,您将看到 LED 灯每秒打开和关闭一次。并且越来越多的输出也将显示在 Shell 中。
在这里插入图片描述


4. IIC 连接RP2040在SSD1306显示

在本项目中,我们将通过IIC接口连接Grove - OLED Display 0.96" (SSD1306),在Seeed Studio XIAO RP2040上演示IIC功能。


4.1 硬件连接

步骤 1。下载ssd1306.py库并用 Thonny 打开它。

# MicroPython SSD1306 OLED driver, I2C and SPI interfacesfrom micropython import const
import framebuf# register definitions
SET_CONTRAST = const(0x81)
SET_ENTIRE_ON = const(0xA4)
SET_NORM_INV = const(0xA6)
SET_DISP = const(0xAE)
SET_MEM_ADDR = const(0x20)
SET_COL_ADDR = const(0x21)
SET_PAGE_ADDR = const(0x22)
SET_DISP_START_LINE = const(0x40)
SET_SEG_REMAP = const(0xA0)
SET_MUX_RATIO = const(0xA8)
SET_COM_OUT_DIR = const(0xC0)
SET_DISP_OFFSET = const(0xD3)
SET_COM_PIN_CFG = const(0xDA)
SET_DISP_CLK_DIV = const(0xD5)
SET_PRECHARGE = const(0xD9)
SET_VCOM_DESEL = const(0xDB)
SET_CHARGE_PUMP = const(0x8D)# Subclassing FrameBuffer provides support for graphics primitives
# http://docs.micropython.org/en/latest/pyboard/library/framebuf.html
class SSD1306(framebuf.FrameBuffer):def __init__(self, width, height, external_vcc):self.width = widthself.height = heightself.external_vcc = external_vccself.pages = self.height // 8self.buffer = bytearray(self.pages * self.width)super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)self.init_display()def init_display(self):for cmd in (SET_DISP | 0x00, # off# address settingSET_MEM_ADDR,0x00, # horizontal# resolution and layoutSET_DISP_START_LINE | 0x00,SET_SEG_REMAP | 0x01, # column addr 127 mapped to SEG0SET_MUX_RATIO,self.height - 1,SET_COM_OUT_DIR | 0x08, # scan from COM[N] to COM0SET_DISP_OFFSET,0x00,SET_COM_PIN_CFG,0x02 if self.width > 2 * self.height else 0x12,# timing and driving schemeSET_DISP_CLK_DIV,0x80,SET_PRECHARGE,0x22 if self.external_vcc else 0xF1,SET_VCOM_DESEL,0x30, # 0.83*Vcc# displaySET_CONTRAST,0xFF, # maximumSET_ENTIRE_ON, # output follows RAM contentsSET_NORM_INV, # not inverted# charge pumpSET_CHARGE_PUMP,0x10 if self.external_vcc else 0x14,SET_DISP | 0x01,): # onself.write_cmd(cmd)self.fill(0)self.show()def poweroff(self):self.write_cmd(SET_DISP | 0x00)def poweron(self):self.write_cmd(SET_DISP | 0x01)def contrast(self, contrast):self.write_cmd(SET_CONTRAST)self.write_cmd(contrast)def invert(self, invert):self.write_cmd(SET_NORM_INV | (invert & 1))def show(self):x0 = 0x1 = self.width - 1if self.width == 64:# displays with width of 64 pixels are shifted by 32x0 += 32x1 += 32self.write_cmd(SET_COL_ADDR)self.write_cmd(x0)self.write_cmd(x1)self.write_cmd(SET_PAGE_ADDR)self.write_cmd(0)self.write_cmd(self.pages - 1)self.write_data(self.buffer)class SSD1306_I2C(SSD1306):def __init__(self, width, height, i2c, addr=0x3C, external_vcc=False):self.i2c = i2cself.addr = addrself.temp = bytearray(2)self.write_list = [b"\x40", None] # Co=0, D/C#=1super().__init__(width, height, external_vcc)def write_cmd(self, cmd):self.temp[0] = 0x80 # Co=1, D/C#=0self.temp[1] = cmdself.i2c.writeto(self.addr, self.temp)def write_data(self, buf):self.write_list[1] = bufself.i2c.writevto(self.addr, self.write_list)class SSD1306_SPI(SSD1306):def __init__(self, width, height, spi, dc, res, cs, external_vcc=False):self.rate = 10 * 1024 * 1024dc.init(dc.OUT, value=0)res.init(res.OUT, value=0)cs.init(cs.OUT, value=1)self.spi = spiself.dc = dcself.res = resself.cs = csimport timeself.res(1)time.sleep_ms(1)self.res(0)time.sleep_ms(10)self.res(1)super().__init__(width, height, external_vcc)def write_cmd(self, cmd):self.spi.init(baudrate=self.rate, polarity=0, phase=0)self.cs(1)self.dc(0)self.cs(0)self.spi.write(bytearray([cmd]))self.cs(1)def write_data(self, buf):self.spi.init(baudrate=self.rate, polarity=0, phase=0)self.cs(1)self.dc(1)self.cs(0)self.spi.write(buf)self.cs(1)

步骤 2。单击“文件→另存为”并将库保存在“Raspberry Pi Pico”中

选择“Raspberry Pi Pico”作为我们保存的位置。

确保保存的文件名为“ssd1306.py”,否则将无法使用。
在这里插入图片描述

步骤 3。将以下代码复制到 Thonny。

from ssd1306 import SSD1306_I2C
from machine import Pin, I2C
from time import sleepi2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=200000)#Grove - OLED Display 0.96" (SSD1315)
oled = SSD1306_I2C(128, 64, i2c)while True: oled.fill(0)#clearoled.text("Hello,World!",0,0)oled.show()#sleep(0.5)

第 4 步。通过单击“运行当前脚本”按钮上传代码。第一次,Thonny 会询问您要将代码文件保存在哪里。This Computer和Raspberry Pi Pico都很好。

在这里插入图片描述

接线入下


端口A板子端口B板子
VCCSSD13063V3Pico
GNDSSD1306GNDPico
SCLSSD1306GPIO7Pico
SDASSD1306GPIO6Pico

如果运行良好,您将看到文本“Hello,World!” 显示在屏幕上。
在这里插入图片描述


5. 其他资源

一些额外的库和示例代码在这里:

[ZIP] XIAO-RP2040-MicroPython-Grove.zip
MicroPython
【树莓派 Pico 基于Arduino IDE编程开发】
【树莓派 Pico 和 Pico W】


推荐阅读
  • Joomla!软件介绍【Joomla!概括介绍】国外相当知名的内容管理系统。【Joomla!基本介绍】Joomla!是一套在国外相当知名的内容管理系统(ContentManagem ... [详细]
  • 在Linux/WSL环境中,本文对Shell任务的并行处理进行了详细的测试与分析。通过多种并行处理技术,如GNU Parallel和xargs,探讨了如何有效提升任务执行效率和系统资源利用率。实验结果表明,合理配置并行参数能够显著缩短任务完成时间,提高系统整体性能。此外,文章还介绍了Shell脚本编写的基本原则和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 本文深入探讨了 AdoDataSet RecordSet 的序列化与反序列化技术,详细解析了将 RecordSet 转换为 XML 格式的方法。通过使用 Variant 类型变量和 TStringStream 流对象,实现数据集的高效转换与存储。该方法不仅提高了数据传输的灵活性,还增强了数据处理的兼容性和可扩展性。 ... [详细]
  • 本文详细探讨了 Java 中定义宏的方法,并与 C++ 中的 `#define` 用法进行了对比。通过具体示例,深入解析了两者在预处理阶段的不同机制及其应用场景,帮助开发者更好地理解和选择合适的宏定义方式。 ... [详细]
  • 本文介绍了一个基于C++标准库实现的INI文件读写操作类。该类在现有网络资源的基础上进行了扩展和优化,增加了获取当前可执行文件路径和宽字节与多字节字符串转换的功能。通过这些增强功能,该类能够更好地适应各种应用场景,提高代码的可移植性和健壮性。具体实现细节请参见 `IniFileSTL.h` 文件。 ... [详细]
  • 【高效构建全面的iOS直播应用】(美颜功能深度解析)
    本文深入探讨了如何高效构建全面的iOS直播应用,特别聚焦于美颜功能的技术实现。通过详细解析美颜算法和优化策略,帮助开发者快速掌握关键技术和实现方法,提升用户体验。适合对直播应用开发感兴趣的开发者阅读。 ... [详细]
  • 本文探讨了Node.js Cluster模块在多核CPU环境下的应用及其性能测试。通过安装`async`包并利用Node.js自带的`http`和`cluster`模块,创建了一个名为`cluster.js`的文件,该文件根据系统CPU核心数动态生成多个工作进程,以实现负载均衡和提高应用性能。实验结果表明,使用Cluster模块能够显著提升高并发场景下的响应速度和处理能力。 ... [详细]
  • 本文详细介绍了在Windows操作系统上使用Python 3.8.5编译支持CUDA 11和cuDNN 8.0.2的TensorFlow 2.3的步骤。文章不仅提供了详细的编译指南,还分享了编译后的文件下载链接,方便用户快速获取所需资源。此外,文中还涵盖了常见的编译问题及其解决方案,确保用户能够顺利进行编译和安装。 ... [详细]
  • 在编写数据库应用程序时,常常需要用户自己在控制面板中配置ODBC数据源。然而对一般用户而言,配置ODBC数据源的工作是有一定困难的。因此, ... [详细]
  • c#学Java–Java基本语法1.类比JAVA .NETJVM CLRJDK  FCL2.java命名约定类名称应以大写字母开头,并成为容易理解的名词或组合。如 ... [详细]
  • 开源地址:GitHub-SpeltZXing.DelphiatQRCode ZXing.Delphi是一个原生ObjectPascal库,它基于众所周知 ... [详细]
  • 程序连接MySQL数据库的多种方法详解 ... [详细]
  • 深入解析Android中图像资源的内存占用问题及其优化策略
    在Android开发过程中,图像资源的内存占用是一个值得关注的问题。本文将探讨图像内存占用与哪些因素相关,包括设备性能的影响,并提供一系列优化策略,帮助开发者有效管理图像资源,提升应用性能。 ... [详细]
  • MySQL 5.6 引入了全局事务标识符(GTID)和多线程复制机制,显著提升了数据库的可靠性和性能。GTID 作为一种新的事务标识方式,确保了事务在主从节点间的一致性,避免了传统基于日志位置的复制可能出现的问题。多线程复制则通过并行处理多个复制任务,大幅提高了复制效率,特别是在大型数据库环境中表现更为突出。这些新特性不仅增强了 MySQL 的高可用性和扩展性,还为数据库管理带来了更多灵活性和便利性。 ... [详细]
  • JetBrains RubyMine 2021 for Mac(Ruby代码编辑工具) v2021.2.2中文激活版
    内容介绍RubyMine2021一款全面的Ruby代码编辑器,可以识别动态语言细节。RubyMine破解版提供智能编码辅助,智能代码重构和深度代码分析功能。通过简单的项目配置,自动 ... [详细]
author-avatar
mobiledu2502940265
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有