mpython — 板载硬件相关函数
mpython 是基于掌控板封装的专有模块,内含掌控板板载资源相关功能函数。 详细代码实现可查阅 mpython.py源码 。
tft显示屏
掌控板板载1.47寸320*172分辨率显示屏,可以用来显示彩色文字、图片、简单动画。
通过display对象,可以实现相关显示功能。
- display.DispChar(str, x, y, color=lcd.WHITE, auto_wrap=False)
内置思源中文字体显示函数,参数:
str待显示的字符串x显示坐标xy显示坐标ycolor字体颜色,默认白色auto_wrap是否换行,默认不换行
- display.DispChar_font(font, str, x, y, color=lcd.WHITE, auto_wrap=False)
内置数码管及dvsm字体显示函数,这些字体由font-to-py.py制作,内置的只有英文和数字,用户可用这个工具自已制字体,参数:
font待显示的字体名str待显示的字符串x显示坐标xy显示坐标ycolor字体颜色,默认白色auto_wrap是否换行,默认不换行
- display.clear(color=lcd.BLACK)
清屏(背景设置)函数
color背景颜色,默认黑色
- display.show():
缓存内容送显示屏显示
注意
display继承自micropython framebuf对象,并实例了一个framebuf缓存做显存。因此display实现了framebuf一些api,下面是相关api:
- class framebuf.FrameBuffer(buffer, width, height, format, stride=width, /)
构造一个 FrameBuffer 对象。
buffer缓存区width height缓存区宽度、高度format像素点类型,掌控板V3强制为RGB565stride行像素点字节数
- display.fill(color)
显存填充函数,通常用来设置显示背景, 通常不会直接调用,使用上面的display.clear(color = lcd.BLACK)。
color待填充颜色
- display.fill_rect(x, y, w, h, color)
显存局部区域填充函数, 通常用来清除局部区域内容。
x y起点坐标w h区域宽度、高度color填充颜色
- display.pixel(x, y, color)
设置/获取相应坐标点颜色。
x y显示坐标color填充颜色,无此参数时,为获取点颜色
- display.hline(x, y, w, color)
画水平线。
x y起点坐标w水平线长color填充颜色
- display.vline(x, y, h, color)
画垂直线。
x y起点坐标h垂直线长color填充颜色
- display.rect(x, y, w, h, color)
画矩形。
x y起点坐标w h矩形宽度、高度color填充颜色
- display.line(x1, y1, x2, y2, color)
画直线。
x1 y1起点坐标x2 y2终点坐标color填充颜色
- display.circle(x, y, radio, color)
画圆。
– x y 圆心坐标
radio半径color圆弧颜色
- display.quarter_circle(x, y, radio, cornername, color)
画1/4圆。
– x y 圆心坐标
radio半径cornername所在象限color圆弧颜色
- display.fill_circle(x, y, radio, color)
画实心圆。
– x y 圆心坐标
radio半径color填充颜色
- display.triangle(x0, y0, x1, y1, x2, y2, color)
画三角形。
x0 y0 x1 y1 x2 y2三个角点坐标color边颜色
- display.fill_triangle(x0, y0, x1, y1, x2, y2, color)
画实心三角形。
x0 y0 x1 y1 x2 y2三个角点坐标color填充颜色
- display.RoundRect(x, y, w, h, r, color)
- display.round_rect(x, y, w, h, r, color)
画圆角矩形。
x y起点坐标w h矩形宽高r倒角半径color边颜色
- display.ellipse(x, y, xr, yr, color, mask)
画椭圆弧。
x y起点坐标xr yrx y轴半径color边颜色mask0x01:画第一象限 0x02:画第二象限 0x04:画第三象限 0x08:画第四象限 0xff:画完整椭圆 0x10:填充椭圆
- display.blit(fb, x, y, key=-1, palette=None)
将一个缓存区,绘入显示framebuf给定位置。
fb待绘制缓存区x y起点坐标key如果指定了键,那么它应该是一个颜色整数,相应的颜色将被视为透明:所有具有该颜色值的像素都不会被绘制palettepalette 参数支持在不同格式的帧缓冲区之间进行位块传输。典型用法是将单色或灰度的字形 / 图标渲染到彩色显示器上。该调色板是一个帧缓冲区实例,其格式与当前帧缓冲区的格式一致。调色板的高度为 1 个像素,其像素宽度等于源帧缓冲区中的颜色数量。N 位源的调色板需要 2**N 个像素;单色源的调色板有 2 个像素,分别代表背景色和前景色。应用程序为调色板中的每个像素分配一种颜色。当前像素的颜色将与调色板中某个像素的颜色一致,该像素的 x 坐标即为对应源像素的颜色。
- display.text(str, x, y, color)
绘制micropython内置字体,不能显示中文,掌控板上显示过小,一般不用。
str待显示的字符串x y显示坐标color字体颜色,默认白色
- display.decode_png_internal(index)
解码内置png图片,返回图片宽高及framebuf对象。
index内置图片索引
- display.background_color(color)
设置/获取背景颜色,有参数为设置,否帽获取
color背景颜色
GUI库
GUI库实现一些基础GUI功能:进度条、二维码、时钟、图象解码、图表、表格。
- class gui.UI()
构造一个UI对象。
- ui.ProgressBar(x, y, width, height, progress, color=lcd.WHITE)
绘制一个进度条。
x y显示坐标width height矩形宽高progress进度值color颜色
- ui.stripBar(self, x, y, width, height, progress, dir=1, frame_color=lcd.WHITE, color=lcd.WHITE)
绘制一个进度条。
x y显示坐标width height矩形宽高progress进度值frame_color边框颜色color颜色
- ui.qr_code(str, x, y, scale=4)
绘制一个二维码。
str二维码内容x y显示坐标scale缩放比例
- class gui.Image()
构造一个Image对象,用于加载Image图象,当前支持png格式。
- ui.load(path, invert=0)
加载并解码图片文件。
path图片文件路径invert图片反转,参数暂未用
- class gui.MicroExcelTable(self, display = display, x0=0, y0=0, cols=3, rows=4, cell_width=85, cell_height=30, col_header_text_color=lcd.RED, row_header_width=60, row_header_text_color=lcd.RED, data_text_color=lcd.WHITE, border_color=lcd.GREEN, show_border=True, font_size=(16, 16), cross_text="")
构造一个表格对象。
cols rows行列数cell_width cell_height单元格宽高col_header_text_color列表头文本颜色row_header_width行表头宽row_header_text_color行表头文本颜色data_text_color数据区文本颜色border_color数据区边框颜色show_border是否显示边框font_size字体宽高cross_text表头交叉处文本
- exectable.draw_headers(col_header_data, row_header_data)
绘制表头内容。
col_header_data列表头内容,e.g. [“温度”, “湿度”, “气压”]row_header_data行表头内容,e.g. [“设备1”, “设备2”, “设备3”]
- exectable.update_data(new_data)
更新整个数据区内容。
new_data数据区内容
- exectable.update_cell(row, row, text)
更新整个数据区内容。
row row待更新表格行列值text待更新内容
- exectable.clear_all()
清除内容。
- class gui.MicroChart(display = display, x0=0, y0=0, width=200, height=100, val_min = 0, val_max = 100, bg_color=lcd.BLACK, axis_color=lcd.WHITE, data_colors=[lcd.RED, lcd.GREEN, lcd.BLUE], padding=10)
构造一个图表对象
display显示器x0 y0位置width height图表宽高val_min val_max数值范围bg_color背景颜色axis_color坐标轴颜色data_colors数据颜色列表,多条数据线时,可分别设置颜色padding偏移
- chart.draw_axis(show_ticks=True)
绘制坐标轴
show_ticks是否显示刻度
- chart.draw_grid(grid_color=None)
绘制参考点
grid_color点颜色
- chart.draw_line_chart(data, show_grid=False)
绘制折线图
data待绘制数据show_grid是否显示参考点
- chart.draw_bar_chart(data, show_grid=False)
绘制柱状图
data待绘制数据show_grid是否显示参考点
声音、光线
- light.read()
读取板载光线传感器值,范围0~4095。
- sound.read()
读取板载麦克风,范围0~4095。
加速度计
通过accelerometer对象,您可以获取3轴加速度计值,单位g。 加速度范围±2g/±4g/±8g/±16g,默认为±2g。
- accelerometer.get_x()
获取x轴上的加速度测量值,正整数或负整数,具体取决于方向。
- accelerometer.get_y()
获取y轴上的加速度测量值,正整数或负整数,具体取决于方向。
- accelerometer.get_z()
获取z轴上的加速度测量值,正整数或负整数,具体取决于方向。
- accelerometer.set_range(range)
设置加速度范围,在默认,不修改为,范围在±2g。
加速度范围值为以下常量:
常量
值
定义
RANGE_2G
0
范围±2g
RANGE_4G
1
范围±4g
RANGE_8G
2
范围±8g
RANGE_16G
3
范围±16g
- accelerometer.set_resolution(resolution)
设置加速度分辨率,默认,不修改为10bit分辨率。
分辨率值为以下常量:
常量
值
定义
RES_14_BIT
0
14 bit 分辨率
RES_12_BIT
1
12 bit 分辨率
RES_10_BIT
2
10 bit 分辨率
- accelerometer.set_offset(x=None, y=None, z=None)
该函数用于校准加速度计的3个轴(x,y,z)的加速值偏差。一般情况下无需校准,只有当遇到加速度偏差较大时修正。
注意,校准数据断电后不会保存。x , y , z 为调整偏差值,可修正范围±1g。
掌控板v2.3版本以上,掉电会保存校准数据。
- accelerometer.roll_pitch_angle()
返回通过加速度计计算得出的欧拉角(横滚角roll、俯仰角pitch)。注意,偏航角(yaw)需要角速度,故无法测得。返回2元组(roll,pitch),单位角度。
假定,掌控板为飞机:
横滚角指飞机两翼所在的平面与平行线之间的夹角,机体向右滚为正,范围为[-180,180].
俯仰角是指机头与水平面的夹角,当飞机平行时则为0,抬头时则为正,范围为[-180,180]
注意
只通过3轴加速度计算方式,只适用于静态下,只受重力下的测量。实际中,会受到其他加速度干扰,如震动。
运动侦测事件
提供多种平面倾斜、翻转、敲击(类似鼠标点击)、掉落的运动姿态事件。用户可预先设定回调函数,当事件发生后,触发事件回调。 回调函数定义如,function_callback(event)。event 参数为对应事件常量。
- accelerometer.event_tilt_left
向左倾斜
- accelerometer.event_tilt_right
向右倾斜
- accelerometer.event_tilt_up
向前倾斜
- accelerometer.event_tilt_down
向后倾斜
- accelerometer.event_face_up
正面朝上
- accelerometer.event_face_down
正面朝下
- accelerometer.event_single_click
单次敲击,类似鼠标的单击操作。
- accelerometer.event_double_click
连续敲击两次,类似鼠标的双击操作。
- accelerometer.event_freefall
坠落
event事件定义如下:
事件
值
accelerometer.TILT_LEFT
0
accelerometer.TILT_RIGHT
1
accelerometer.TILT_UP
2
accelerometer.TILT_DOWN
3
accelerometer.FACE_UP
4
accelerometer.FACE_DOWN
5
accelerometer.SINGLE_CLICK
6
accelerometer.DOUBLE_CLICK
7
accelerometer.FREEFALL
8
注意
掌控板v2.3版本以上,去除加速度计运动侦测事件
1# The MIT License (MIT)
2# Copyright (c) 2020, Tangliufeng for labplus Industries
3
4# accelerometer event simple example
5
6from mpython import *
7
8def motion_callback_function(event):
9 """ 运动事件回调函数 """
10 if event == accelerometer.TILT_LEFT:
11 print("tilt left")
12 elif event == accelerometer.TILT_RIGHT:
13 print("tilt right")
14 elif event == accelerometer.TILT_UP:
15 print("tilt up")
16 elif event == accelerometer.TILT_DOWN:
17 print("tilt down")
18 elif event == accelerometer.FACE_UP:
19 print("face up")
20 elif event == accelerometer.FACE_DOWN:
21 print("face down")
22 elif event == accelerometer.SINGLE_CLICK:
23 print("single click")
24 elif event == accelerometer.DOUBLE_CLICK:
25 print("double click")
26 elif event == accelerometer.FREEFALL:
27 print("freefall")
28
29# 事件回调注册
30accelerometer.event_tilt_up = motion_callback_function
31accelerometer.event_tilt_down = motion_callback_function
32accelerometer.event_tilt_left = motion_callback_function
33accelerometer.event_tilt_right = motion_callback_function
34accelerometer.event_face_up = motion_callback_function
35accelerometer.event_face_down = motion_callback_function
36accelerometer.event_single_click = motion_callback_function
37accelerometer.event_double_click = motion_callback_function
38accelerometer.event_freefall = motion_callback_function
39
40
陀螺仪(gyroscope)
通过gyroscope对象,您可以获取陀螺仪角速度值,角速度的单位是dps(°/S)。 角速度范围±16dps/±32dps/±64dps/±128dps/±256dps/±512dps/±1024dps/±2048dps ,默认为±256 dps。
- gyroscope.get_x()
获取x轴上的角速度测量值,具体取决于方向。
- gyroscope.get_y()
获取y轴上的角速度测量值,具体取决于方向。
- gyroscope.get_z()
获取z轴上的角速度测量值,具体取决于方向。
- gyroscope.set_range(range)
设置角速度范围,默认不修改为,范围在±256 dps。
角速度范围值为以下常量:
常量
值
定义
RANGE_16_DPS
0
范围±16 dps
RANGE_32_DPS
16
范围±32 dps
RANGE_64_DPS
32
范围±64 dps
RANGE_128_DPS
48
范围±128 dps
RANGE_256_DPS
64
范围±256 dps
RANGE_512_DPS
80
范围±512 dps
RANGE_1024_DPS
96
范围±1024 dps
RANGE_2048_DPS
112
范围±2048 dps
- gyroscope.set_offset(x=None, y=None, z=None)
该函数用于校准陀螺仪的3个轴(x,y,z)的角速值偏差。一般情况下无需校准,只有当遇到角速度偏差较大时修正。
x , y , z 为调整偏差值,可修正范围±1024dps。
注意
掌控板v2.3版本以上加入陀螺仪传感器
磁力计(magnetic)
MMC5983MA磁力计函数接口,可获取3轴磁感应强度、地磁场强度、获取电子罗盘角度。
注意
掌控板v2.0版本以上,才有MMC5983MA磁力计!
- magnetic.get_x()
获取x轴的磁感应值,正整数或负整数,范围±8191,单位mG(毫高斯)。
- magnetic.get_y()
获取y轴的磁感应值,正整数或负整数,范围±8191,单位mG(毫高斯)。
- magnetic.get_z()
获取z轴的磁感应值,正整数或负整数,范围±8191,单位mG(毫高斯)。
- magnetic.get_field_strength()
返回计算后的磁感应值,即3轴磁力的和。计算公式,x^2+y^2+z^2的平方根。
- magnetic.peeling()
磁力去皮。类似电子秤去皮功能, peeling() 后,下次 get_field_strength() 返回的值为减去当前磁力值后计算得出的结果。可用于去除地磁感应值的测量应用。
- magnetic.clear_peeling()
磁力去皮功能取消。使用 peeling() 后,可用该函数,恢复正常地磁测量。
- magnetic.get_heading()
获取电子罗盘角度,即改方向与地磁北极的夹角,掌控板的正上方,即USB位置视为正北方。单位角度,范围0~360。
注意
由于在角度计算并没有做z轴的倾斜补偿,在使用 get_heading() 读取罗盘角度时,掌控板应保持水平放置!
注意
如需得到精准的罗盘角度,请确保周边无强磁场干扰或在使用前 calibrate() 校准。
- magnetic.calibrate()
电子罗盘校准。当掌控板周边存在强磁干扰,可使用该函数清除强磁分量,才能计算准确的地磁北偏角。注意,断电后不保存校准偏移值。
校准方法,按照掌控板显示屏指示步骤操作:
掌控板水平放置,在水平面旋转数圈,过程约15秒。
掌控板垂直放置,沿着垂直于地面轴旋转数圈,过程约15秒。
蜂鸣器(music)
由 music 模块驱动掌控板蜂鸣器,具体操作详见 music 模块。
touch对象
掌控板上共有6个触摸引脚分别touchpad_p/y/t/h/o/n。是Touch类的实例对象,具体包含函数方法如下。
- class mpythons.Touch(pin)
- Touch.event_pressed
触摸按键按下事件。当按键事件发生,触发事件回调。回调函数定义如,function_callback(value), value 为该触摸按键的状态值。
- Touch.event_released
触摸按键释放事件。
- Touch.read()
返回触摸值
- Touch.config(threshold)
触摸阈值设置
- Touch.is_pressed()
返回当前是否按住。 True 表示按键按下,False 则未按下。
- Touch.was_pressed()
返回 True 或 False 指示自设备启动以来或上次调用此方法以来是否按下按钮。调用此方法将清除按下状态,因此必须再次按下按钮,然后才能再次返回 True 。
- Touch.get_presses()
返回按键的按下总数,并在返回之前将该总数重置为零。注意,计数器超过100将不再计数。
rgb对象
用于控制掌控板的3颗RGB ws2812灯珠。rgb对象为neopixel的衍生类,继承neopixel的方法。更多的使用方法请查阅 neopixel 。
- rgb.write()
把数据写入RGB灯珠中。
提示
通过给rgb[n]列表赋值来写入RGB颜色值。如,rgb[0]=(50,0,0)
from mpython import *
rgb[0] = (255, 0, 0) # 设置为红色,全亮度
rgb[1] = (0, 128, 0) # 设定为绿色,半亮度
rgb[2] = (0, 0, 64) # 设置为蓝色,四分之一亮度
rgb.write()
- rgb.fill(rgb_buf)
填充所有LED像素。
- rgb.brightness(brightness)
亮度调节,范围0~1.0
i2c对象
mPython掌控板已实例 I2C 类,P19、P20 为I2C的SCL、SDA引脚。I2C设备可连接掌控板I2C总线进行操作。
详细有关I2C的读写操作,请查看 machine.I2C 模块或 I2C基础教程 章节。
MPythonPin类
- class mpythons.MPythonPin(pin, mode=PinMode.IN, pull=None)
构建Pin对象
pin掌控板定义引脚号,具体定义看查看 掌控板引脚定义 。mode引脚模式。未设定时,默认 mode = PinMode.INPinMode.IN等于1,数字输入模式PinMode.OUT等于2,数字输出模式PinMode.PWM等于3,模拟输出模式PinMode.ANALOG
映射
- mpythons.numberMap(inputNum, bMin, bMax, cMin, cMax)
映射函数,参数:
inputNum为需要映射的变量bMin为需要映射的最小值bMax为需要映射的最大值cMin为映射的最小值cMax为映射的最大值