|
【行空板 Python编程学习主控板】评测七、行空板专用Python库:unihiker和pingpong
[复制链接]
一到年关事情多,周末也要加班,都没有什么时间来玩行空板了。趁着下午休息时间,继续进行行空板的评测计划。
按照评测计划,这章节是学习和了解行空板的专用Python库:unihiker和pingpong库;
(一)unihiker库
顾名思义,即为官方专门为行空板开发的一套Python库,将行空板需要而第三方python库没有或使用不便的功能集成于此库中。
通过Python pip工具即可进行安装和更新:
安装:
pip install unihiker
更新:
pip install -U unihiker
行空板unihiker库提供了如下控件或功能:
- 基础控件
表1
序号
|
控件名称
|
语法说明
|
1
|
文字
draw_text
|
控件对象名 = GUI对象.draw_text(x, y, w, text, color, origin, onclick, font_family,font_size)
|
2
|
数码管字体 draw_digit
|
控件对象名 = GUI对象.draw_digit(x, y, text, color, origin, onclick, font_size)
|
3
|
图片 draw_image
|
控件对象名 = GUI对象.draw_image(x, y, w, h, image,origin,onclick)
|
4
|
表情 draw_emoji
|
控件对象名 = GUI对象.draw_emoji(x, y, w, h, emoji,duration,origin,onclick)
|
5
|
按钮 add_button
|
控件对象名 = GUI对象.add_button(x, y, w, h, text, origin, state,onclick)
|
6
|
时钟 draw_clock
|
控件对象名 = GUI对象.draw_clock(x, y, r, h, m, s, color, onclick)
|
7
|
填充时钟 fill_clock
|
控件对象名 = GUI对象.fill_clock(x, y, r, h, m, s, color,fill,style, onclick)
|
8
|
二维码 draw_qr_code
|
控件对象名 = GUI对象.draw_qr_code(x, y, w, text, origin, onclick)
|
- 基础图形
表2
序号
|
控件名称
|
语法说明
|
1
|
线 draw_line
|
控件对象名 = GUI对象.draw_line(x0, y0, x1, y1, width, color, onclick)
|
2
|
矩形 draw_rect
|
控件对象名 = GUI对象.draw_rect(x, y, w, h, width, color , onclick)
|
3
|
填充矩形 fill_rect
|
控件对象名 = GUI对象.fill_rect(x, y, w, h, color , onclick)
|
4
|
圆角矩形 draw_round_rect
|
控件对象名 = GUI对象.draw_round_rect(x, y, w, h, r, width, color , onclick)
|
5
|
填充圆角矩形 fill_round_rect
|
控件对象名 = GUI对象.fill_round_rect(x, y, w, h, r,color , onclick)
|
6
|
圆 draw_circle
|
控件对象名 = GUI对象.draw_circle(x, y, r,width,color , onclick)
|
7
|
填充圆 fill_circle
|
控件对象名 = GUI对象.fill_circle(x, y, r,color , onclick)
|
- 鼠标键盘侦测
表3
序号
|
对象名称
|
语法说明
|
1
|
鼠标坐标获取on_mouse_move
|
GUI对象.on_mouse_move(回调函数名)
|
2
|
键盘事件 on_key_click
|
GUI对象.on_a_click(回调函数名)
|
说明:
行空板上有三个按键:Home、A、B,其中Home按键仅供Home菜单使用,A、B按键可供用户调用。由于A、B按键同时被映射为了键盘的AB按键,因此除了使用pinpong或unihiker库调用,还可使用pygame、opencv等能任何能获取键盘AB键按下的库调用,并不一定要使用unihiker库或pingpong。
- 多线程
表4
序号
|
对象名称
|
语法说明
|
1
|
开启线程
|
线程对象 = GUI对象.start_thread(线程函数名)
|
2
|
停止线程
|
GUI对象.stop_thread(线程对象)
|
说明:线程函数默认不循环执行;
- 录音及播放
Unihiker库提供了一个Audio类,用于实现录音和播放功能,这在后面的评测设计中需要用到这个类。
Audio类的导入:
from unihiker import Audio #导入包
audio = Audio() #实例化GUI类
其中与录音操作相关的对象共有4个。
表5
序号
|
对象名称
|
语法说明
|
1
|
录音x秒(阻塞线程)record
|
Audio对象.record(file,duration)
|
2
|
开始录音 start_record
|
Audio对象.start_record(file)
|
3
|
停止录音 stop_record
|
Audio对象.stop_record()
|
4
|
获取环境音量 sound_level
|
Audio对象.sound_level()
|
说明:环境音量范围为0%-100%,与电脑上麦克风音量类似。
其中与播放操作相关的对象共有6个。
表6
序号
|
对象名称
|
语法说明
|
1
|
播放音频文件(阻塞线程)play
|
Audio对象.play(file)
|
2
|
开始播放 start_play
|
Audio对象.start_play(file)
|
3
|
暂停播放 pause_play
|
Audio对象.pause_play()
|
4
|
继续播放 resume_play
|
Audio对象.resume_play()
|
5
|
停止播放 stop_play
|
Audio对象.stop_play()
|
6
|
获取剩余播放时长 play_time_remain
|
剩余时长 = Audio对象.play_time_remain()
|
(二)pingpong库
行空板上板载了一颗GD的单片机协处理器负责部分板载外设器件及GPIO的控制,因此我们通过Python进行控制需要使用该pinpong库。
通过Python pip工具即可进行安装和更新
安装:
pip install pinpong
更新:
pip install -U pinpong
说明:行空板出厂固件中已经内置了pinpong库,因此不用单独安装;
行空板上通过pingpong库进行控制的外设芯片或传感器主要有以下几类。
表7
序号
|
对象名称
|
语法说明
|
1
|
LED灯
|
行空板背面有一颗蓝色LED灯(标记为L)可供用户控制,并接到了行空板的P25接口上,因此控制P25的IO输出电平状态即可控制LED灯的亮灭。
语法:Pin(Pin.P25, Pin.OUT).write_digital(电平信号)
|
2
|
按钮AB
|
在pinpong库中,按钮有两种方式调用,一种是直接读取查询式,第二种是中断事件回调式。
查询式语法:
button_a.is_pressed()
button_b.is_pressed()
回调式语法:
button_a.irq(trigger=触发模式, handler = 回调函数)
button_b.irq(trigger=触发模式, handler = 回调函数)
|
3
|
光线传感器
|
行空板正面屏幕上方有一颗光线传感器,可以获取环境光线强度(注:单位为模拟输入值,非勒克斯)。
语法:light.read()
(说明:光线传感器接到行空板的P29接口上,因此还可以通过ADC输入方法读取。)
|
4
|
6轴加速度传感器
|
行空板背面板载一颗6轴加速度陀螺仪传感器,可以分别读取加速度和陀螺仪的x、y、z的值。
语法:
加速度:
accelerometer.get_x()
accelerometer.get_y()
accelerometer.get_z()
陀螺仪:
gyroscope.get_x()
gyroscope.get_y()
gyroscope.get_z()
|
5
|
蜂鸣器
|
行空板背面板载一颗蜂鸣器,可以发出设定的音调。
语法:
buzzer.set_tempo() #引脚重定向,只支持PWM引脚
buzzer.pitch() #播放一个音符
buzzer.play() #连续播放
buzzer.stop() #暂停
buzzer.redirect() #引脚重定向,只支持PWM引脚
|
行空板的GPIO引脚操作与pinpong通用语法相同,并支持以下四类对象。
表8
序号
|
对象名称
|
语法说明
|
1
|
数字输出
|
行空板所有引脚均支持数字输出,电平电压为3.3V。
|
2
|
数字输入
|
行空板所有引脚均支持数字输入,电平电压为3.3V。
|
3
|
模拟输入(ADC)
|
行空板支持8路12位高精度模拟输入ADC,分别对应引脚为: P0 P1 P2 P3 P4 P10 P21 P22
|
4
|
模拟输出(PWM)
|
行空板支持8路10位PWM,分别对应引脚为: P0 P2 P3 P10 P16 P21 P22 P23
注意: 其中P8与P2共用一路PWM,P9与P10共用一路PWM,因此P8与P9也可以使用PWM,但使用时P2和P10不能使用。
|
行空板同时通过金手指引出了1路UART串口和2路SPI接口,可搭配micro:bit兼容的扩展板使用。
图1 UART1和SPI0/1金手指定义
行空板专用的unihiker和pingpong库就介绍到这里,后续很多相关的设计都会用到这这2类库。
等会儿去取快递,在网上买的免驱USB声卡和USB免驱摄像头到了,后面可以正式进入图像识别和语音识别的学习了。
|
|