1、hello micropython
#MicroPython動手做(04)——零基礎學MaixPy之基本示例
#程序之一:hello micropython
#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)
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秒后打印信息 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())
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個可配置任意引腳的硬件片選