张高兴的 MicroPython 入门指南:(一)环境配置、Blink、部署

目录
  • 什么是 MicroPython
  • 环境配置
    • 硬件部分
    • 软件部分
    • Hello World!
  • Blink
    • Pico 的引脚
    • 常见电子元件
      • 面包板
      • 跳线
      • 开关
      • 发光二极管
      • 电阻
    • 使你的 Pico 闪烁
  • 部署
  • 参考

什么是 MicroPython

MicroPython 是一个基于 Python 3.4 的高效实现,它专为微控制器和嵌入式系统设计。它提供了一个小型的 Python 环境,包含了一些标准库的部分,并且能够在资源受限的设备上运行。MicroPython 支持交互式编程(REPL)、任意精度整数、列表解析、生成器、异常处理等高级功能,使开发者可以在边缘设备上编写和运行复杂的程序。

与 MicroPython 类似的 CircuitPython,也是一种运行在微控制器上的 Python 技术。它是由一家美国设计制造开源电子硬件的公司 Adafruit 推动的,基于 MicroPython 的 Folk 版本,所以 CircuitPython 的很多内容和 MicroPython 是相似的。关键的区别是 CircuitPython 对 Adafruit 的开发版以及传感器的支持更好,Adafruit 基本上对推出的每一款传感器都提供了相关的 CircuitPython 包,更方便初学者以及 DIY。但 MicroPython 的社区更大,设备支持的更广泛。至于学习哪一项技术,也就仁者见仁,智者见智了。

环境配置

支持 MicroPython 的微控制器有很多,这里使用 Raspberry Pi Pico。Raspberry Pi Pico 是树莓派基金会发布的首款微控制器级产品,基于 RP2040 芯片构建,售价仅 4 美元。Pico 家族目前由 Raspberry Pi Pico(最左),Pico H(左),Pico W(右)和 Pico WH(最右)组成。

Pico 使用了一颗 RP2040 芯片:

  • 采用 40nm 工艺制造,双核 Cortex-M0+ @ 133MHz
  • 芯片内置 264KB SRAM 和 2MB 的板载闪存
  • 30 个 GPIO 引脚,其中 4 个可用作模拟输入
  • 2 个 UART、2 个 SPI 控制器、2 个 I2C 控制器、16 个 PWM 通道
  • 支持 UF2 的 USB 大容量存储启动模式,用于拖放式编程
  • ……

硬件部分

  1. 在 MicroPython 官网下载适用于 Pico 的 UF2 文件:https://micropython.org/download/RPI_PICO
  2. 按住 Pico 开发板上的 BOOTSEL 按钮,然后将 Pico 插入电脑的 USB 接口,然后松开 BOOTSEL 按钮。
  3. Pico 会被识别为大容量存储设备。
  4. 将下载的 MicroPython UF2 文件放入 RPI-RP2 卷上。Pico 将自动重启,然后 MicroPython 就会开始运行。

软件部分

MicroPython 的开发可以使用 Thonny IDE,但是作为一款开源软件其表明了开发者的政治立场,我是比较反感的。在这里使用 Visual Studio Code 配置一个最小开发环境。

  1. 首先下载安装 Visual Studio Code:https://code.visualstudio.com
  2. 选择 “扩展”,在 “扩展:商店” 的搜索栏中输入“RT-Thread MicroPython”,点击 “安装”。由于 MicroPython 是运行在微控制器上的,到这里最小开发环境就配置完成了。
  3. 如果想使用代码补全功能还需要 Python 环境。访问 Python 官网,下载 Python 安装包:https://www.python.org/downloads
  4. 在 VS Code 中安装 Python 插件:“Python”、“Pylance”。

在安装完 MicroPython 插件后,VS Code 底部会出现几个按钮,其中:

  1. 用于创建、打开 MicroPython 项目。
  2. 用于连接 Pico 设备。
  3. 用于运行 MicroPython 程序。
  4. 用于停止运行 MicroPython 程序。
  5. 用于将 MicroPython 项目下载至 Pico 设备。

Hello World!

根据上面的步骤,新建一个 MicroPython 项目,打开 main_example.py 文件。

def main():print("Welcome to RT-Thread MicroPython!")if __name__ == '__main__':main()

与 C、Java、C# 等编译型语言不同,Python 是一种解释型脚本语言,运行时是从模块顶行开始,逐行进行翻译执行。所以 Python 中并不需要一个统一的 main() 作为程序的入口。if __name__ == '__main__' 是一个标志,象征着 Java 等语言中的程序主入口。

点击“运行”按钮后,第一个程序就在 Pico 开发板上运行了,在 Python 解释器中可以观察到运行结果。

当人们想到“编程”时,通常很自然地想到软件。然而,编程不仅仅是和软件有关,它还可以通过硬件编程影响现实物理世界。这也是所谓的 物理计算。顾名思义,物理计算就是用你的程序控制现实世界中的事物——硬件,而不是软件。比如在空调上设置程序,改变可编程恒温器上的温度;或者在微波炉上选择不同烹饪模式。这些设备通常是由单片机控制的。

Pico 的引脚

Pico 通过其边缘一系列的引脚与硬件通信。这些引脚大多是作为 通用输入/输出(GPIO) 引脚工作,它们可以被编程作为输入或输出,并没有自己的固定用途。有些引脚有额外的功能和与更复杂的硬件通信的模式,另一些则有一个固定的功能,比如供电和提供连接的功能。

Pico 的 40 个引脚被标记在板的底部,这些标签帮助你记住编号是如何排序的。浅绿色标签的 GPxx,就是 GPIO 引脚,大多数情况下需要对其编程,对外部硬件进行操作。所有引脚的用途见下面的表格。

引脚作用描述
3V33.3V 电源Pico 的工作电压
VSYS2-5V 电源可作为电源输入引脚
VBUS5V 电源从 Pico 的 USB 端口获取的 5V 电源
GND0V 接地接地连接
GPxx通用输入/输出引脚程序可以使用的GPIO引脚,标记为GP0-GP28
ADCx模数转换引脚既可以用作模拟输入,也可以用作数字输入或输出,但不能同时用作两者
ADC_VREF模数转换器参考电压模拟输入设置参考电压的特殊输入引脚
AGND模数转换器 0V 参考电压特殊的接地引脚
UARTx串口协议引脚与其他设备进行串口通信
I2CxI2C总线协议引脚与其他设备进行 I2C 通信
SPIxSPI 协议引脚与其他设备进行 SPI 通信
RUN启用或禁用 Pico其他微控制器可以通过此引脚控制 Pico,拉低用于复位

常见电子元件

面包板

面包板(Breadboard)是搭建基础电路原型的试验产品。最初人们都是在类似于切面包的木板上做电路搭接试验,随着技术发展直到 1970 年无需焊接的插接板变得普及,面包板慢慢的变成了这种便捷电路原型实验产品的统称。面包板上下区是横向5位相通,一般用于接电源和接地,中间区域是纵向5位相通,通常用于放置电路元件和电路连接线。

跳线

跳线(Jumper Wire),也被称为杜邦线。有三种不同的类型:公对母线(M2F)、母对母线(F2F)以及公对公线(M2M)。如果不使用面包板,可以使用 F2F 将组件连接到 Pico,如果使用面包板,可以将组件插入到面包板中,使用 M2M 进行连接。

开关

开关(Switch),也称为瞬时开关、轻触开关,通常有两条或四条脚可供选择,按下按钮时相当于导线被连通。按钮是一种输入设备,可以告诉程序它是否被按下,然后执行任务。另一种常见的开关类型是锁定开关,按下开关时一直保持活动状态,直到再次切换它。

发光二极管

发光二极管(LED)是输出设备,从洗衣机、微波炉等小家电的指示灯,到路边的路灯、房间的吊灯等,LED 灯随处可见。LED 有各种各样的形状、颜色、工作电压,为了防止其被击穿,通常会配合限流电阻使用。二极管具有单向导电性,只有在连接正确的电极方向时,才能正常工作。LED 的长端为阳极,接在电源正极,短端为阴极,接在电源负极。

电阻

电阻是控制电流流动的元件,使用欧姆 Ω 为单位,欧姆的值越大,提供的阻力就越大。

有些电阻的表面涂有一些带有颜色的环状标志,称为色环电阻。色环具有特殊的意义,即电阻的值。要读取电阻的值,从左侧第一个环开始,在表的 1st/2nd Band 列中查找它的颜色,得到第一个和第二个数字。例如下图电阻有两个橙色色环,橙色值为 3,总共为 33。第三个色环的颜色表示乘数,即需要用前两个色环得到的数乘以乘数才能得到电阻的实际值。例如下图电阻的棕色色环,意思是 ×10。前两个色环是 33,棕色色环是 x10,33x10=330Ω 这样就得到了电阻的值。最后一个环是电阻的容差,表示实际阻值与标称阻值之间的偏离程度,对于大多数业余项目来说,容差并不是很重要。

使你的 Pico 闪烁

就像在屏幕上打印“Hello, World!”是学习编程语言的第一步一样,在电路板上通过编程点亮 LED 灯是学习物理计算的经典入门方式。Blink 译为“眨眼、闪烁”,下面通过编程使 Pico 开发板上的 LED 灯不断闪烁,模拟“眨眼”的效果。

Pico 上的这颗 LED 连接到 GPIO 引脚之一的 GP25,正因为这个引脚已经用于在板上连接 LED,所以 Pico 边缘引出的 GPIO 引脚上就没有 GP25 了。这个 LED 的工作原理和其它任何 LED 一样:

  • 通电时,它会发光
  • 当它断电时,熄灭。

下面新建一个 MicroPython 项目来控制这颗 LED 的闪烁。首先导入 machine 包。

import machine

这很短的一行代码对于在 Pico 上使用 MicroPython 是非常关键的,它包含了 MicroPython 与 Pico 通信所需的所有指令,扩展了用于物理计算的语言。如果没有这一行命令,我们是无法控制 Pico 的任何 GPIO 引脚,自然也无法使板载的 LED 点亮。

接着使用 Pin() 函数获取引脚。

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

这一行定义了一个名为 led 的对象,调用 machine 库中的 Pin() 函数,这个函数是专为处理 GPIO 引脚。第一个参数25,是我们要设置的引脚的编号; 第二个 machine.Pin.Out 是告诉 Pico 引脚应该用作输出而不是输入。

💡 提示

也可以在代码中使用字符串常量 'LED' 特指与板载 LED 相连的引脚:led = machine.Pin('LED', machine.Pin.OUT)

上面的代码只是完成了引脚的设置,但还不能点亮LED,要点亮LED,还需要通过程序告诉 Pico 把引脚打开。

led.value(1)

前面的行创建了对象 led,作为 GP25 引脚上的输出,这一行将该对象的值设定为 1(二进制中的高电平),用于'on',它也可以将值设置为 0,用于'off'。

led.value(0)

如何才能让 LED 闪烁起来呢?我们可以在 LED 的开与关之间加入一点延时。像导入 machine 库一样,将 utime 库导入到程序中。

import utime

这个库处理与时间有关的所有事情。在开启 LED 的代码后面添加一段延时,调用 utime 库中的 sleep() 函数,这将使程序暂停输入的秒数,这里暂停 1s

utime.sleep(1)

创建一个循环后,就可以让 LED 闪烁了。

import machine
import utimedef main():led = machine.Pin(25, machine.Pin.OUT)while True:led.value(1)utime.sleep(1)led.value(0)utime.sleep(1)if __name__ == '__main__':main()

💡 提示

也可以使用 toggle() 函数把引脚当作开关一样对待:led.toggle()

部署

上面的程序都是运行在 REPL 环境中,当断电重置 Pico 时,程序会消失。怎样才能将程序持久化到 Pico 中呢?在新建 MicroPython 项目时,默认提供了一个文件名为 main_example.py 的文件,通常会在这个文件里编写代码,进行调试。当代码可以烧录时,将文件重命名为 main.py,点击“同步”按钮,或者右击想要下载到 Pico 中的文件或文件夹点击“下载该文件/文件夹到设备上”,下载完成后断电重启,这样 Pico 就会执行 main.py 中的代码。

有些时候可能会将问题代码固化到 Pico 中,这时可以烧录重置 Flash 的 UF2 flash_nuke.uf2 清空 Flash,重置完成后还需要重新烧录 MicroPython 的 UF2,下载地址:https://datasheets.raspberrypi.com/soft/flash_nuke.uf2

参考

  1. Raspberry Pi Documentation:https://www.raspberrypi.com/documentation/microcontrollers/micropython.html
  2. Getting started with Raspberry Pi Pico:https://projects.raspberrypi.org/en/projects/getting-started-with-the-pico
  3. 树莓派 Pico 实验室:https://pico.nxez.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot ResourceLoader获取指定package目录下所有的类(get class in jar on Linux)

get class in jar on Linux Springboot ResourceLoader获取指定package目录下所有的类 PathMatchingResourcePatternResolver resolver new PathMatchingResourcePatternResolver();String pattern ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX ClassUtils.convertClas…

“吃饭大学”!中国大学食堂排行TOP10(含西电)

同学们们,考研择校考虑的因素除了学术,地理位置等方面,你们还会考虑哪些因素呢?小研作为一个吃货,必定会考虑的一个因素当然是大学的食堂美食啊~ 那中国超级好吃的大学食堂在哪?一起来看看有没有你的目标院…

软考初级网络管理员__网站单选题

1.以下关于服务器端脚本的说法中,正确的是()。 Script 编写 只能采用VBScript 编写 浏览器不能解释执行 由服务器发送到客户端,客户端负责运行 2.站点首页最常用的文件名是()。 index.html homepage.html resource.html mainfrm.html 3.在HTML…

Java 项目的构建工具 Maven

Maven 一、Maven 简介二、Maven 安装配置1、Maven 下载安装2、Maven 配置 三、IDEA 集成 Maven四、Maven 依赖管理1、依赖配置2、依赖传递3、依赖范围4、生命周期 五、Maven 高级特性1、分模块设计与开发2、Maven 继承3、Maven 版本管理4、Maven 聚合5、私服 一、Maven 简介 M…

Mac虚拟机软件有什么用?

随着苹果M系列芯片电脑的推出,虚拟机的使用变得越来越流行。不同于苹果以往的Intel处理器电脑,其M系列芯片电脑无法安装双系统。如果要使用非macOS系统,可以通过创建虚拟机系统的方式实现。那么,虚拟机软件有什么作用和用途&#…

设计模式-代理模式和装饰者模式

二者都是结构型的设计模式. 1.代理模式 1.1定义 为其他对象提供一种代理以控制对这个对象的访问. 代理从code实现方面分为静态代理和动态代理两种; 从适用范围来看,分为远程代理,虚拟代理,保护代理,智能引用几种. 远程代理:为某个对象在不同的内存地址空间提供…

【Python】已解决:The method is not allowed for the requested URL.

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项进阶讨论总结 已解决:The method is not allowed for the requested URL. 一、分析问题背景 在开发Web应用程序时,常常需要处理不同的HTTP请求方法&#xff…

WPF的IValueConverter用于校验和格式化TextBox的数字输入

在数据绑定(Data Binding)的上下文中,我们经常使用继承 IValueConverter 接口的类,用于在源值和目标值之间进行转换。该接口定义了两个方法:Convert 和 ConvertBack,这两个方法分别用于从源值到目标值的转换…

centos 7.9 离线环境安装GPU服务环境

文章目录 centos 7.9 离线环境安装GPU服务环境系统配置更新 gcc更新内核安装显卡驱动安装cuda安装docker 和 nvidia-container-runtime验证 centos 7.9 离线环境安装GPU服务环境 基于centos 7.9 离线安装gpu 服务基础环境,用于在docker 中运行算法服务 系统配置 …

LeetCode 全排列

思路:这是一道暴力搜索问题,我们需要列出答案的所有可能组合。 题目给我们一个数组,我们很容易想到的做法是将数组中的元素进行排列,如何区分已选中和未选中的元素,容易想到的是建立一个标记数组,已经选中的…

二轴机器人装箱机:重塑物流效率,精准灵活,引领未来装箱新潮流

在现代化物流领域,高效、精准与灵活性无疑是各大企业追求的核心目标。而在这个日益追求自动化的时代,二轴机器人装箱机凭借其较佳的性能和出色的表现,正逐渐成为装箱作业的得力助手,引领着未来装箱新潮流。 一、高效:重…

解析桥式整流电路

下面这个桥式整流电路出场率很高,看着一定眼熟。 事实证明,强行灌输的东西总是难以下咽。记得读书那会,第一次看到这个电路时被吓到了,以至于直到这门课结束了也没搞清楚。 本文就来分析一下此电路中电流的走向,进而理…

Spark SQL 的总体工作流程

Spark SQL 是 Apache Spark 的一个模块,它提供了处理结构化和半结构化数据的能力。通过 Spark SQL,用户可以使用 SQL 语言或 DataFrame API 来执行数据查询和分析。这个模块允许开发者将 SQL 查询与 Spark 的数据处理能力结合起来,实现高效、优化的数据处理。下面是 Spark S…

Labview绘制柱状图

废话不多说,直接上图 我喜欢用NXG风格,这里我个人选的是xy图。 点击箭头指的地方 选择直方图 插值选择第一个 直方图类型我选的是第二个效果如图。 程序部分如图。 最后吐槽一句,现在看CSDN好多文章都要收费了,哪怕一些简单的入…

Spark SQL----ANSI Compliance

Spark SQL----ANSI Compliance 一、算术运算二、Cast2.1 Rounding in cast 三、存储分配四、Type coercion4.1 类型提升和优先级4.2 最不常见类型解析 五、SQL函数5.1 函数调用5.2 具有不同行为的函数 六、SQL操作符七、ANSI模式的有用函数八、SQL关键字(可选,默认禁…

浪子易支付最新增加订单投诉版源码

此版本增加了订单投诉功能,和一个好看的二次元模板。

【Python实战因果推断】9_元学习器4

目录 Double/Debiased Machine Learning Double/Debiased Machine Learning Double/Debiased ML 或 R-learner 可以看作是 FrischWaugh-Lovell 定理的改进版。其思路非常简单--在构建结果和治疗残差时使用 ML 模型 结果和干预残差: , 预估,预估 由于 …

Python28-4 KNN近邻算法

KNN(K-Nearest Neighbors)算法是一种常用的机器学习算法,主要用于分类和回归问题。 1. KNN算法的基本概念 KNN算法是一种基于实例的学习算法,也称为惰性学习(Lazy Learning)算法,因为它在训练…

51单片机第17步_外部中断

本章重点学习外部中断。 1、外部中断0框图: 2、外部中断1框图: 3、Keil C51中有一些关键字,需要牢记: interrupt 0:指定当前函数为外部中断0; interrupt 1:指定当前函数为定时器0中断&#x…

2 z变换与离散时间傅里叶变换

目录 序列的z变换 z变换的定义 常用典型序列的z变换 序列类型与z变换的收敛域 序列的分类 X(z)的极点与收敛域 单边序列 双边序列 z变换的性质 线性 序列移位 单边序列 双边序列 z域尺度变换 序列乘以n 复共轭序列的z变换 初值定理 终值定理 时域卷积定理 …