一到年关事情多,周末也要加班,都没有什么时间来玩行空板了。趁着下午休息时间,继续进行行空板的评测计划。
按照评测计划,这章节是学习和了解行空板的专用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免驱摄像头到了,后面可以正式进入图像识别和语音识别的学习了。
pingpong库如果想扩展其他传感器要怎么改?能直接改库吗?