[原创] 【行空板 Python编程学习主控板】评测七、行空板专用Python库:unihiker和pingpong

天意无罪   2022-11-20 17:24 楼主

    一到年关事情多,周末也要加班,都没有什么时间来玩行空板了。趁着下午休息时间,继续进行行空板的评测计划。

    按照评测计划,这章节是学习和了解行空板的专用Python库:unihiker和pingpong库;

    (一)unihiker库

    顾名思义,即为官方专门为行空板开发的一套Python库,将行空板需要而第三方python库没有或使用不便的功能集成于此库中。

    通过Python pip工具即可进行安装和更新:

    安装:

    pip install unihiker

    更新:

    pip install -U unihiker

    行空板unihiker库提供了如下控件或功能:

  1. 基础控件

表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)

 

  1. 基础图形

    表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)

 

  1. 鼠标键盘侦测

    表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。

  1. 多线程

    表4

序号

对象名称

语法说明

1

开启线程

线程对象 = GUI对象.start_thread(线程函数名)

2

停止线程

 

GUI对象.stop_thread(线程对象)

 

    说明:线程函数默认不循环执行;

  1. 录音及播放

    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兼容的扩展板使用。

image-20221120172149-1.png  

图1 UART1和SPI0/1金手指定义

    行空板专用的unihiker和pingpong库就介绍到这里,后续很多相关的设计都会用到这这2类库。

    等会儿去取快递,在网上买的免驱USB声卡和USB免驱摄像头到了,后面可以正式进入图像识别和语音识别的学习了。

回复评论 (3)

 行空板专用的unihiker和pingpong库确实比较全的

点赞  2022-11-21 08:30

原来这个板子是DFRobot的。可以可以。

默认摸鱼,再摸鱼。2022、9、28
点赞  2022-11-24 15:13

pingpong库如果想扩展其他传感器要怎么改?能直接改库吗?

点赞  2022-11-24 16:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复