电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
【雕爷学编程】MicroPython动手做(04)——零基础学MaixPy之尝试运行
分 享
扫描二维码分享
【雕爷学编程】MicroPython动手做(04)——零基础学MaixPy之尝试运行
雕爷学编程
雕爷学编程
关注
发布时间: 2020-04-14
丨
阅读: 1076
#### 1、hello micropython #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之一:hello micropython ```python #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之一:hello micropython import sys for i in range(0, 2): print("hello micropython") print("hello ", end="micropython\n") print("implementation:", sys.implementation) print("platform:", sys.platform) print("path:", sys.path) print("Python version:", sys.version) print("please input string, end with Enter") r = sys.stdin.readline() w_len = sys.stdout.write(r) ``` ![](https://cf03.ickimg.com/bbsimages/202004/0545232d8f5d650203f67e9090d26c1c.jpg) **sys – 系统特定功能模块(标准库之一)** sys.implementation——包含有关当前Python实现的信息的对象 系统:micropython 固件:V0.5.0 sys.platform——运行 MicroPython 的平台 平台:MaixPy sys.path——用于搜索导入模块的可变目录列表 路径:['','。','/ flash'] sys.version——实现的 Python 版本, 返回一个字符串 Python版本:3.4.0 sys.stdin——标准输入 sys.stdout——标准输出 #### 2、查询闪存目录 ```python #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之二:查询闪存目录 import uos mount_points = uos.listdir("/") for fs in mount_points: print("------------") print(" dir:", fs) uos.listdir("/"+fs) ``` ![](https://cf03.ickimg.com/bbsimages/202004/696ec12b85b7bd3cbe224ca50e15b0e6.jpg) ** uos – 基本的“操作系统”服务模块(标准库)** uos.ilistdir([dir]) 此函数返回一个迭代器,然后生成与列出的目录中的条目对应的元组。如果不传参数,它列出了当前目录,否则它列出了dir给出的目录。 dir: flash ['boot.py', 'main.py', 'freq.conf'] #### 3、JSON编码和解码 ```python #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之三:JSON编码和解码 import ujson json_str = '''{ "name": "sipeed", "babies": [ { "name": "maixpy", "birthday": 2.9102, "sex": "unstable" } ] }''' obj = ujson.loads(json_str) print(obj["name"]) print(obj["babies"]) ``` ![](https://cf03.ickimg.com/bbsimages/202004/1ce4d901f12c97548c7ccf1990982307.jpg) **ujson –编码和解码模块(标准库)** 该模块实现了相应 CPython 模块的子集,允许在 Python 对象和 JSON 数据格式之间进行转换。 load ujson.load(stream) 解析给定的流,将其解释为 JSON 字符串并将数据反序列化为 Python 对象。返回结果对象。解析继续,直到遇到文件结尾。如果未正确形成流中的数据,则会引发 ValueError。 loads ujson.loads(str) 解析JSON str并返回一个对象。如果字符串格式出错,则引发ValueError。 #### 4、thread多线程 ```python #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之四:thread多线程 import _thread import time def func(name): while 1: print("hello {}".format(name)) time.sl<ickey>eep(1) _thread.start_new_thread(func,("1",)) _thread.start_new_thread(func,("2",)) while 1: pass ``` ![](https://cf03.ickimg.com/bbsimages/202004/b5ba79c460574733779ac6ecd98b6449.jpg) **_thread多线程支持模块** 该模块提供了用于处理多个线程(也称为轻量级进程或任务)的低级原语-多个控件线程共享其全局数据空间。为了进行同步,提供了简单的锁(也称为互斥体或二进制信号量)。该threading模块提供了易于使用的功能,并在此模块之上构建了更高级别的线程API。 _thread.start_new_thread(函数,args [,kwargs ] ) 启动一个新线程并返回其标识符。线程使用参数列表args(必须是元组)执行函数 功能。可选的 kwargs参数指定关键字参数的字典。当函数返回时,线程以静默方式退出。当函数以未处理的异常终止时,将打印堆栈跟踪,然后线程退出(但其他线程继续运行)。 #### 5、更新频率演示 ```python #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之五:更新频率演示 from Maix import freq cpu_freq, kpu_freq = freq.get() print(cpu_freq, kpu_freq) freq.set(cpu = 400, pll1=400, kpu_div = 1) ``` ![](https://cf03.ickimg.com/bbsimages/202004/7eb2abc91e8c8b9e4046237799267f76.jpg) #### 6、引脚索引 ```python #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之六:引脚索引 from board import board_info wifi_en_pin = board_info.WIFI_EN print(wifi_en_pin)#输出为8 board_info.pin_map()#打印所有 board_info.pin_map(8)#只打印8号引脚的信息 ``` ![](https://cf03.ickimg.com/bbsimages/202004/63521f109c8819377df60fadeb31f61c.jpg) board_info内置库 主要用于方便用户使用开发板引脚配置,其中内置了对人友好的命名及接口,可以使用户减少对电器连接原理图的依赖。是内部定义的一个 Board_Info 全局变量, 使用 MicroPython 语法编写。 引脚索引 主要是将数字转换为人类友好的字符串,让用户方便编程。输入以下,请注意不要忽略 . 号,然后按下 tab键 进行补全,可以看到板级相关的引脚功能 board_info. 比如 输入以下代码,将返回数字 8,代表的是开发板的第8号引脚,其电器连接是wifi模块的使能引脚 board_info.WIFI_EN 查找方法 当用户不清楚引脚电器连接时,可以使用该方法查找 board_info.pin_map(pin_num) 参数 该方法不传入参数或者传入一个参数 pin_num: 引脚编号,范围[6,47] 当不传入参数时,将打印所有引脚的板级电气连接信息,传入参数时,仅打印指定引脚的板级电气连接信息。 #### 7、定时3秒后打印信息 ```python #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之七:定时3秒后打印信息 from machine import Timer def on_timer(timer): print("time up:",timer) print("param:",timer.callback_arg()) tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_ONE_SHOT, period=3000, callback=on_timer, arg=on_timer) print("period:",tim.period()) ``` ![](https://cf03.ickimg.com/bbsimages/202004/d513dc2a621c5c7f0252c641f337c91c.jpg) machine.Timer函数 硬件定时器,可以用来定时触发任务或者处理任务,设定时间到了后可以触发中断(调用回调函数),精度比软件定时器高。 需要注意的是,定时器在不同的硬件中可能会有不同的表现。 MicroPython 的 Timer 类定义了在给定时间段内(或在一段延迟后执行一次回调)执行回调的基本操作,并允许特定的硬件上定义更多的非标准行为(因此不能移植到其他板)。 共有 3 个定时器, 每个定时器有 4 个通道可以使用。 参数 id: Timer ID, [0~2] (Timer.TIMER0~TIMER2) channel: Timer 通道, [Timer.CHANNEL0~Timer.CHANNEL3] mode: Timer 模式, MODE_ONE_SHOT 或者 MODE_PERIODIC 或者 MODE_PWM period: Timer 周期, 在启动定时器后 period 时间, 回调函数将会被调用,(0,~) unit: 设置周期的单位,默认位毫秒(ms),Timer.UNIT_S 或者 Timer.UNIT_MS 或者 Timer.UNIT_US 或者Timer.UNIT_NS callback: 定时器回调函数, 定义了两个参数, 一个是定时器对象Timer, 第二个是在定义对象是希望传的参数arg,更多请看arg参数解释 注意:回调函数是在中断中调用的,所以在回调函数中请不要占用太长时间以及做动态分配开关中断等动作 arg: 希望传给回调函数的参数,作为回调函数的第二个参数 start: 是否在对象构建成功后立即开始定时器, True:立即开始, False:不立即开启,需要调用start()函数来启动定时器 priority: 硬件定时器中断优先级, 与特定的CPU相关, 在K210中,取值范围是[1,7], 值越小优先级越高 div: 硬件定时器分频器,取值范围[0,255], 默认为0, clk_timer(定时器时钟频率) = clk_pll0(锁相环0频率)/2^(div+1) clk_timer*period(unit:s) 应该 < 2^32 并且 >=1 #### 8、每隔 1 秒打印消息, 停止 5 秒后再重启, 5 秒后关闭并注销定时器 ```python #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之八:每隔 1 秒打印消息, 停止 5 秒后再重启, 5 秒后关闭并注销定时器 import time from machine import Timer def on_timer(timer): print("time up:",timer) print("param:",timer.callback_arg()) tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PERIODIC, period=1, unit=Timer.UNIT_S, callback=on_timer, arg=on_timer, start=False, priority=1, div=0) print("period:",tim.period()) tim.start() time.sl<ickey>eep(5) tim.stop() time.sl<ickey>eep(5) tim.restart() time.sl<ickey>eep(5) tim.stop() del tim ``` ![](https://cf03.ickimg.com/bbsimages/202004/a6cd37124573f9bbb60772631270633e.jpg) machine.Timer 硬件定时器,可以用来定时触发任务或者处理任务,设定时间到了后可以触发中断(调用回调函数),精度比软件定时器高。 需要注意的是,定时器在不同的硬件中可能会有不同的表现。MicroPython 的 Timer 类定义了在给定时间段内(或在一段延迟后执行一次回调)执行回调的基本操作,并允许特定的硬件上定义更多的非标准行为(因此不能移植到其他板)。共有 3 个定时器, 每个定时器有 4 个通道可以使用。 常量 TIMER0: Timer0 id TIMER1: Timer1 id TIMER2: Timer2 id CHANNEL0: Timer 通道 0 CHANNEL1: Timer 通道 1 CHANNEL2: Timer 通道 2 CHANNEL3: Timer 通道 3 MODE_ONE_SHOT: Timer 只运行一次(回调一次) MODE_PERIODIC: Timer 始终运行(连续回调) MODE_PWM: 定时器不用来回调函数,用以产生PWM UNIT_S: 单位秒 (s) UNIT_MS: 单位毫秒 (ms) UNIT_US: 单位微秒 (us) UNIT_NS: 单位纳秒 (ns) #### 9、SPI 基本读写 ```python MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之九:SPI 基本读写 from machine import SPI spi1 = SPI(SPI.SPI1, mode=SPI.MODE_MASTER, baudrate=10000000, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=28, mosi=29, miso=30, cs0=27) w = b'1234' r = bytearray(4) spi1.write(w) spi1.write(w, cs=SPI.CS0) spi1.write_readinto(w, r) spi1.read(5, write=0x00) spi1.readinto(r, write=0x00) ``` ![](https://cf03.ickimg.com/bbsimages/202004/de25b17f2cba1c6f9c8206d86c0dd591.jpg) **machine.SPI** SPI(Serial Peripheral Interface) 是一个同步串行协议,由主机和从机组成。 标准4线模式由 SCK(SCLK), CS(片选), MOSI, MISO 4条线连接主从机 在 K210 上, SPI 有一下特征: 共有 4 个 SPI 设备, 其中 SPI0 、SPI1、 SPI3 只能工作在主机模式下, SPI2 只能工作在从机模式时下, 在 MaixPy 上, SPI3已经用来连接了 SPI Flash, 暂时保留, 以后如果有必要再考虑开放接口与 SPI Flash 分时复用 支持 1/2/4/8 线全双工模式, 在 MaixPy 中, 目前只支持标准(摩托罗拉)4线全双工模式(即 SCK, MOSI, MISO, CS 四个引脚) 最高传输速率45M 支持DMA 4个可配置任意引脚的硬件片选 ![](https://cf03.ickimg.com/bbsimages/202004/103ee63d6c38b0ea8c1fd9d087ca013d.jpg)
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
雕爷学编程
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交