【雕爷学编程】MicroPython动手做(04)——零基础学MaixPy之尝试运行

1、hello micropython


#croPython动手做(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)


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、查询闪存目录

#MicroPython动手做(04)——零基础学MaixPy之基本示例

#程序之二:查询闪存目录

import uos

mount_points = uos.listdir("/")

for fs in mount_points:

    print("------------")

    print(" dir:", fs)

    uos.listdir("/"+fs)


uos – 基本的“操作系统”服务模块(标准库)

uos.ilistdir([dir])

此函数返回一个迭代器,然后生成与列出的目录中的条目对应的元组。如果不传参数,它列出了当前目录,否则它列出了dir给出的目录。

dir: flash

['boot.py', 'main.py', 'freq.conf']

3、JSON编码和解码

#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"])


ujson –编码和解码模块(标准库)

该模块实现了相应 CPython 模块的子集,允许在 Python 对象和 JSON 数据格式之间进行转换。

load

ujson.load(stream)

解析给定的流,将其解释为 JSON 字符串并将数据反序列化为 Python 对象。返回结果对象。解析继续,直到遇到文件结尾。如果未正确形成流中的数据,则会引发 ValueError。

loads

ujson.loads(str)

解析JSON str并返回一个对象。如果字符串格式出错,则引发ValueError。

4、thread多线程


#MicroPython动手做(04)——零基础学MaixPy之基本示例

#程序之四:thread多线程

import _thread

import time

def func(name):

    while 1:

        print("hello {}".format(name))

        time.sleep(1)

_thread.start_new_thread(func,("1",))

_thread.start_new_thread(func,("2",))

while 1:

    pass


_thread多线程支持模块

该模块提供了用于处理多个线程(也称为轻量级进程或任务)的低级原语-多个控件线程共享其全局数据空间。为了进行同步,提供了简单的锁(也称为互斥体或二进制信号量)。该threading模块提供了易于使用的功能,并在此模块之上构建了更高级别的线程API。

_thread.start_new_thread(函数,args [,kwargs ] )

启动一个新线程并返回其标识符。线程使用参数列表args(必须是元组)执行函数 功能。可选的 kwargs参数指定关键字参数的字典。当函数返回时,线程以静默方式退出。当函数以未处理的异常终止时,将打印堆栈跟踪,然后线程退出(但其他线程继续运行)。

5、更新频率演示


#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)



6、引脚索引

#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号引脚的信息


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秒后打印信息

#MicroPython动手做(04)——零基础学MaixPy之基本示例

#程序之七:定时3秒后打印信息

frommachineimportTimer

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())


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 秒后关闭并注销定时器


#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.sleep(5)

tim.stop()

time.sleep(5)

tim.restart()

time.sleep(5)

tim.stop()

del tim



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 基本读写

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)



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个可配置任意引脚的硬件片选


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容