GPIO
导入GPIO模块
from Maix import GPIO #
from fpioa_manager import fm
GPIO注册函数:
fm.register(pin,function,force=False)
[pin]芯片外部IO
[functon]芯片功能
[force]=True则强制注册,清除之前的注册记录;=False则不允许同一引脚多次注册。
eg:
fm.register(12,fm.fpioa.GPIO0,force=True)#将12注册为GPIO功能
配置GPIO模式:
GPIO(ID,MODE,PULL,VALUE)
[ID]内部GPIO编号
[MODE]GPIO模式
GPIO.IM
GPIO.OUT
[PULL]上下拉
GPIO.PUL_UP
GPIO.PULL_DOWN
GPIO.PULL_NONE
[VALUE]GPIO初始电平
1--高电平
0--低电平
输出电平:
GPIO.value(value)
[value]GPIO输出电平值
1--高电平
0--低电平
注:输入模式时参数为空,表示获取当前IO输入电平值。
GPIO外部中断:
GPIO.irq(CALLBACK_FUNC,TRIGGER_CONDITION)#开启中断
[CALBACK_FNC]中断执行的回调函数
[TRIGGER_CONDITION]中断触发方式:
GPIO.IRQ_RISING
GPIO.IRQ_FALLING
GPIO.IRQ_BOTH
GPIO.disirq() #关闭中断
定时器
创建定时器
machine.Timer(id,channel,mode=Timer.MODE_ONE_SHOT,period=1000,
unit=Timer.UNIT_MS, callback=None, arg=None, start=True,
priority=1, div=0)
[id]定时器编号,[Timer.TIMER0~TIMER2]定时器0-2
[channel]Timer通道,[Timer.CHANNEL~Timer.CHANNEL3]
[mode]定时器模式
MODE_ONE_SHOT--一次性
MODE_PERIDIC--周期性
MODE_PWM
[period]定时器为周期性模块时每个周期时间值
[unit]周期单位
Timer.UNIT_S
Timer.UNIT_MS
Timer.UNIT_US
Timer.UNIT_NS
[callback]定时器中断执行的回调函数;; 注意:回调函数是在中断中调用的,所以在回调函数中请不要占用太长时间以及做动态内存分配开关中断等动作。
[arg]回调函数第2参数
[start]是否在构建对象后立即开始定时器,=True--立即开启,=False--不立即开启,需调用start()开启
[priority]硬件中断优先级,在K210中,取值范围是[1,7],值越小优先级越高
[div]硬件分频器
其他函数:
Timer.callback(fun) #定义回调函数
Timer.period([value]) #配置周期
Timer.start() #启动定时器
Timer.stop() #停止定时器
Timer.deinit() #注销定时器
PWM
创建PWM:
machine.PWM(tim,freq,dutty,pin,eable=True)
[tim]K210的PWM依赖于定时器来产生波形
[freq]PWM频率
[duty]PWM占空比
[pin]PWM输出引脚
[enbale]是否再构建对象后立即产生波形,默认值True
其他函数:
PWM.freq(freq) #设置频率。不传参数返回当前频率值。
PWM.duty(duty) #设置占空比。不传参数返回当前占空比值。[0-100]表示占空比百分比
PWM.enable() #使能 PWM 输出
PWM.disable() #暂停 PWM 输出
PWM.deinit() #注销 PWM
IIC
创建IIC:
machine.I2C(id, mode=I2C.MODE_MASTER, scl=None, sda=None,
freq=400000, timeout=1000, addr=0, addr_size=7)
[id]I2C ID,[I2c.I2C0~I2C.I2C2]
[scl]时钟引脚,直接传引脚编号
[sda]数据引脚,直接传引脚编号
[freq]通信频率
[timeou]保留
[addr]从机地址
[addr_size]地址长度,支持7位、10位寻址,取值7或10
其他函数:
i2c.scan() #扫描 I2C 总线的设备。返回地址,如:0x3c
i2c.readfrom(addr,len) #从指定地址读数据。addr:指定设备地址;len:读取字节数
i2c.writeto(addr,buf) #写数据。addr:从机地址;buf:数据内容
i2c.deinit() #注销 I2C
k210 OLED封装函数
oled = SSD1306_I2C(i2c, addr) #构 OLED 显示屏对象。默认分辨率 128*64;
【i2c】定义好的 I2C 对象
【addr】显示屏设备地址
oled.fill([value]) #清屏
value=0x00 (黑屏)
value=0xFF(白屏)
oled.text(string,x,y) #将string字符写在指定为位置
【string】:字符
【x】横坐标;[0-127]
【y】纵坐标。[0-7] 共 8 行
线程
import _thread #导入线程模块
_thread.start_new_thread(func,("1",)) #开启线程1,参数必须是元组“1”--线程名
def func(name) #线程函数
while True:
print("Hello {}".frmat(name))
K210 LCD封装函数
import lcd #导入lcd模块
lcd.init(type=1,freq=15000000,color=lcd.BLACK) #初始化LCD
【type】LCD 类型;
【freq】通信频率;
【color】LCD 初始化的颜色
lcd.deinit() #注销 LCD 驱动,释放 IO 引脚
lcd.clear(color) #填充指定颜色。默认是黑色
lcd.draw_string(x,y,str,color,bg_color) #写字符
【x,y】起始坐标;
【str】字符内容
【color】字体颜色
【bg_color】字体背景颜色
lcd.display(image,roi=Auto) #显示图片
【image】RGB565 或 GRAYSCALE 图片。
【ROI】显示的感兴趣区域,未指定则为图像大小
lcd.rotation(dir) #LCD 屏幕方向设定
【dir】取值范围[0-3],从 0 到 3 依顺时钟旋转。
lcd.mirror(invert) #【invert】=True 则为镜面显示;=False 则否。
K210 摄像头封装函数
import sensor #导入模块
sensor.reset() #初始化摄像头
sensor.set_pixformat(pixformat) #设置像素格式
sensor.GRAYSCAL:灰度图像,每像素 8 位(1 字节),处理速度快;
sensor.RGB565: 每像素为 16 位(2 字节),5 位用于红色,6 位用于绿色,5 位用于蓝色,处理速度比灰度图像要慢。
sensor.set_framesize(framesize) #设置每帧大小(即图像尺寸)。常用的 framesize 参数有下面这些:
sensor.QQVGA: 160*120;
sensor.QVGA: 320*240;
sensor.VGA: 640*480;
sensor.skip_frames([n,time]) #摄像头配置后跳过 n 帧或者等待时间 time 让其变稳定。n:跳过帧数;time:等待时间,单位 ms
sensor.snapshot() #拍摄一张照片,并返回image对象
clock=time.clock() #创建一个时钟
clock.tick() #开始追踪运行时间。
clock.fps () #停止追踪运行时间,并返回当前 FPS(每秒帧数)。在调用该函数前始终首先调用 tick 。
绘图
img=sensor.snapshot() #或
img=image.Image(path[, copy_to_fb=False]) #创建图像,通过拍摄或者读取文件路径获取。
copy_to_fb=True :可以加载大图片;
copy_to_fb=False:不可以加载大图片。
示例:img = image.Image("01Studio.bmp", copy_to_fb=True),表示加载根目录下的 01Studio.bmp 图片。
image.draw_line(x0, y0, x1, y1[, color[, thickness=1]]) #画线段。
(x0,y0):起始坐标;(x1,y1):终点坐标;
color:颜色,如(255,0,0)表示红色;
thickness:粗细。eg:thickness=1
image.draw_rectangle(x, y, w, h[, color[, thickness=1[, fill=False]]]) #画矩形。
(x,y):起始坐标;w:宽度;h:长度;
color:颜色;thickness:边框粗细;
fill:是否填充。
image.draw_circle(x, y, radius[, color[, thickness=1[, fill=False]]]) #画圆。
(x,y):圆心;
radius:半径;
color:颜色;
thickness:线条粗细;
fill:是否填充。
image.draw_arrow(x0, y0, x1, y1[, color[, size,[thickness=1]]]) #画箭头。
(x0,y0):起始坐标;
(x1,y1):终点坐标;
color:颜色;
size:箭头位置大小。
thickness:线粗细。
image.draw_cross(x, y[, color[, size=5[, thickness=1]]]) #画十字交叉。
(x,y): 交叉坐标;
color:颜色;
size:尺寸;
thickness:线粗细。
image.draw_string(x, y, text[, color[, scale=1[,mono_space=True…]]]]) #写字符。
(x,y): 起始坐标;
text:字符内容;
color:颜色;
scale:字体大小;
mono_space:强制间距。
查找二维码
image.find_qrcodes([roi]) #查找 roi 区域内的所有二维码并返回一个 image.qrcode 的对象列表,该函数返回 image.qrcode 对象列表
qrcode.rect() #返回一个矩形元组(x,y,w,h)
qrcode.payload() #返回二维码字符串信息,可以通过索引【4】来获取这个值
qrcode.version() #返回二维码版本号