除了通过连接扩展板和电子模块实现功能扩展,童芯派自身也能够实现强大的功能扩展。目前, cyberpi 库中提供了“精灵”和“涂鸦” API 用于实现童芯派显示屏的功能扩展,更多 API 正在开发中。 :::tips 提示:这些 API 不支持 Python 3 编程,仅支持 MicroPython 编程,只能在“上传”模式下使用。有关编程模式的说明和使用,参见“在线模式和上传模式”。 :::

为了让您更好的阅读童芯派的API文档,我们对API的可使用场景(Python3与MicroPython)进行了标识。Python3 对应的是童芯派在线模式的编程,MicroPython对应的是上传模式的编程。
支持Python 3 的标识: Py2.png
支持MicroPython 的标识:Mp2.png

显示屏+ API

精灵(显示屏)

精灵 API 能够极大地发挥童芯派彩色显示屏的创作潜力。通过这些 API,你能够制作各种小游戏和 UI 界面。

设置背景

Mp2.png **cyberpi.background.fill(r, g, b)**
初始化背景,目前只支持将背景设置为某一个统一的颜色。参数:

  • r int ,有效范围是 0~255,表示背景的红色色值。
  • g int,有效范围是 0~255,表示背景的绿色色值。
  • b int,有效范围是 0~255,表示背景的蓝色色值。

Mp2.png **cyberpi.background.copy()**
将屏幕当前显示的画面复制,作为背景,此版本暂不对外使用。

创建精灵

Mp2.png **sprite1 = cyberpi.sprite()**
声明一个精灵对象 sprite1。
精灵在创建时,各个属性的默认值为:

属性 默认值
x 坐标 64
y 坐标 64
方向 90°
image.png
大小 100%
锚点 中心
是否显示
默认颜色 白色
图层 新创建的精灵位于更高的图层

**sprite.set_pixel(color, x, y)**
改变精灵图层指定像素点的颜色,此版本暂不对外使用。参数:

  • color str,有效范围为 "0x000000""0xFFFFFF" 表示设置像素点的 RGB 颜色的色值。
  • x int,有效范围 0~127,表示设置的像素点的 x 坐标。
  • y int,有效范围 0~127,表示设置的像素点的 y 坐标。

童芯派显示屏坐标轴定义如下:
image.png

Mp2.png **sprite.draw_text(text)**
使用一段文字做为精灵,默认为 16像素高度的字体大小。参数:

  • text str ,表示作为精灵的字符串。

当输入的文字为字库不支持的语言时,显示会混乱。童芯派支持的语种如下:

  • 简体中文 SC
  • 英文 EN
  • 法文 | French | Français
  • 西班牙文 | Spanish | Español
  • 繁体中文 | Traditional Chinese | 繁體中文
  • 德文 | German | Deutsch
  • 意大利文 | Italian | Italiano
  • 葡萄牙文 | Portuguese | Português
  • 俄文 | Russian | русский язык
  • 韩文 | Korean | 한국어
  • 日文
  • 荷兰语

**sprite.draw_icon(name)【未实装】**
使用图标做为精灵。参数:
name str ,选择的图标名称,其有效范围如下:

参数值 对应图标 参数值 对应图标
“music” music.png “download” download.png
“image” image.png “sunny” sunny.png
“video” 视频@2x.png “cloudy” cloudy.png
“clock” clock.png “rain” rain.png
“play” 播放.png “snow” snow.png
“pause” Asset 1@2x-8.png “train” train.png
“next” next.png “rocket” rocket.png
“prev” previous.png “truck” truck.png
“sound” sound.png “car” car.png
“temperature” temperature.png “droplet” droplet.png
“light” light.png “distance” ruler-1.png
“motion” motion.png “fire” fire.png
“home” home.png “magnetic” magnetic.png
“gear” gear.png “gas” gas.png
“list” list.png “vision” vision.png
“right” right.png “color” color.png
“wrong” wrong.png “overcast” overcast.png
“shut_down” shut-down.png “sandstorm” sandstorm.png
“refresh” refresh.png “foggy” foggy.png
“trash_can” trash can.png

Mp2.png **sprite.draw_pixel(pixel, x_size, y_size)**
使用自定义像素画做为精灵。参数:

  • pixel array,十六进制数列,用以描述像素画从左到右,从上到下的像素点颜色。如 [0xFF0000, 0x00FF00, 0x0000FF] 即表示一个头 3 个像素点颜色为红、绿、蓝的像素画。
  • x_size int,默认值为 16 ,表示像素画的横向宽度。
  • y_size int,默认值为 16 ,表示像素画的纵向高度。

对于超出 x、y 长宽定义部分的颜色会被丢弃,未满的部分颜色会被定义为透明。

Mp2.png **sprite.draw_QR(content)**
使用二维码做为精灵。参数:
content str,表示需要显示的二维码的内容。

示例程序:

  1. import cyberpi
  2. qrcode = cyberpi.sprite()
  3. qrcode.draw_qrcode("Welcome")
  4. qrcode.set_size(size=300)
  5. qrcode.show()
  6. cyberpi.screen.render()

Mp2.png **sprite.draw_sketch()**
使用当前的涂鸦结果做为精灵。

Mp2.png **sprite.mirror(axis)**
将精灵的形象进行上下或水平的垂直的镜像翻转。参数:

  • axis str,有效范围为:

"x":表示将精灵绕 x 轴方向进行镜像翻转,即垂直镜像。
"y":表示将精灵绕 y 轴方向进行镜像翻转,即水平镜像。

Mp2.png **sprite.delete()**
删除精灵对象。

移动精灵

Mp2.png **sprite.set_align(align_point = "center")**
设置精灵的锚点,锚点决定了精灵移动、旋转时的中心点。参数:

  • align_point str 表示信息显示的位置,有效值为:

"top_mid",此时锚点在精灵顶部居中。
"top_left",此时锚点在精灵顶部左侧。
"top_right",此时锚点在精灵顶部右侧。
"center",此时锚点在精灵居中。
"mid_left",此时锚点在精灵居中靠左。
"mid_right",此时锚点在精灵居中靠右。
"bottom_mid",此时锚点在精灵底部居中。
"bottom_left",此时锚点在精灵底部靠左。
"bottom_right",此时锚点在精灵底部靠右。

Mp2.png **sprite.move_x(step)**
精灵朝 x 轴方向移动指定像素。参数:

  • step int,表示精灵移动的像素大小。

Mp2.png **sprite.move_y(step)**
精灵朝 y 轴方向移动指定像素。参数:

  • step int,表示精灵移动的像素大小。

Mp2.png **sprite.move_to(x, y)**
精灵移动到指定的坐标位置。参数:

  • x int,表示设置的精灵的 x 坐标。
  • y int,表示设置的精灵的 y 坐标。

Mp2.png **sprite.move_random()**
精灵移动到随机位置。该 API 会使精灵的 x、y 坐标变为 0~127 中的某个数。

旋转精灵

Mp2.png **sprite.rotate(angle)**
精灵顺时针旋转指定角度。参数:

  • angle int

Mp2.png **sprite.rotate_to(angle = 90)**
精灵旋转到指定的角度,参数:

  • angle int,默认值为 90°。

以声音图标作为精灵为例,朝向角度的效果如下图:
image.png

缩放精灵

Mp2.png **sprite.set_size(size = 100)**
设置精灵的等比放大百分比,参数:

  • size int,默认值为 100%。

Mp2.png **sprite.set_scale(x_size = 100, y_size = 100)**
设置精灵长宽的放大百分比,参数:

  • x_size int,默认值为 100%,表示精灵 x 轴的放大尺寸。
  • y_size int,默认值为 100%,表示精灵 y 轴的放大尺寸。

该 API 本版本不对外。

颜色特效

Mp2.png **sprite.set_color(**``**r, g, b)**
设置精灵颜色,精灵的所有非空像素点将会被渲染为指定的颜色。参数:

  • r int ,有效范围是 0~255,表示颜色滤镜的红色色值。
  • g int,有效范围是 0~255,表示颜色滤镜的绿色色值。
  • b int,有效范围是 0~255,表示颜色滤镜的蓝色色值。

Mp2.png **sprite.close_color()**
取消颜色设置,精灵的颜色效果会恢复为默认状态,即 draw_XXX() 函数定义的样子。

图层及显示控制

Mp2.png **sprite.show()**
显示精灵(精灵默认处于显示状态)。

Mp2.png **sprite.hide()**
隐藏精灵。

Mp2.png **sprite.z_up(step)**
将精灵向上移动指定层数。参数:
step int,表示精灵向上移动的图层数。

Mp2.png **sprite.z_down(step)**
将精灵向下移动指定层数。参数:
step int,表示精灵向下移动的图层数。

Mp2.png **sprite.z_max()**
将精灵移到最上面。

Mp2.png **sprite.z_min()**
将精灵移到最下面。

检测

Mp2.png **screen.get_color(x, y)**
获得屏幕显示画面特定坐标上的显示颜色。参数:

  • x int,有效范围 0~127,表示检测的像素点的 x 坐标。
  • y int,有效范围 0~127,表示检测的像素点的 y 坐标。

返回 int,可能的范围为 0x0000000xFFFFFF。代表对应 RGB 颜色的 16 进制表示。

Mp2.png **sprite.is_touch(other_sprite)**
判断精灵是否与其他精灵或屏幕边沿发生了碰撞———精灵间的非空像素点发生了接壤认为他们是碰撞的;精灵的非空像素点的坐标的x、y值大于等于128时认为其与屏幕边缘发生了碰撞.参数:
other_sprite,sprite对象或 str
当 other_sprite 为 sprite 时,可能的范围为任意一个精灵对象。表示检测精灵间是否发生了碰撞。
当 other_sprite 为 str 时,有效值为 "edge",表示检测精灵是否与屏幕边缘发生了碰撞。
返回 bool

Mp2.png **sprite.get_align()**
获得精灵的锚点位置。
返回 str,可能值为:

  • "top_mid",此时锚点在精灵顶部居中。
  • "top_left",此时锚点在精灵顶部左侧。
  • "top_right",此时锚点在精灵顶部右侧。
  • "center",此时锚点在精灵居中。
  • "mid_left",此时锚点在精灵居中靠左。
  • "mid_right",此时锚点在精灵居中靠右。
  • "bottom_mid",此时锚点在精灵底部居中。
  • "bottom_left",此时锚点在精灵底部靠左。
  • "bottom_right",此时锚点在精灵底部靠右。

Mp2.png **sprite.get_x()**
获得精灵的 x 轴坐标。
返回 int

Mp2.png **sprite.get_y()**
获得精灵的 y 轴坐标。
返回 int

Mp2.png **sprite.get_rotation()**
获得精灵的面向角度。
返回 int。,有效范围-180~180°

Mp2.png **sprite.get_xsize()**
获得精灵的 x 轴放大尺寸。
返回 int

Mp2.png **sprite.get_ysize()**
获得精灵的 y 轴放大尺寸。
返回 int

渲染

渲染是精灵极其重要的机制,精灵需要需要通过渲染才能使得设置的属性(坐标、大小、角度等)变更生效。

Mp2.png **cyberpi.screen.enable_autorender()**
开启显示屏默认渲染,帧数为 10 帧。

Mp2.png **cyberpi.screen.disable_autorender()**
关闭显示屏默认渲染,帧数为 10 帧。

Mp2.png **cyberpi.screen.render()**
手动渲染。

涂鸦(显示屏)

喷枪有如下初始状态

属性 初始值
x 坐标 64
y 坐标 64
粗细 1 像素
颜色
是否落下

Mp2.png **cyberpi.sketch.clear()**
清空涂鸦。

Mp2.png **cyberpi.sketch.start()**
笔头落下,开始涂鸦。

Mp2.png **cyberpi.sketch.end()**
笔头抬起,结束涂鸦。

Mp2.png **cyberpi.sketch.set_speed(speed)**
设置画笔的移动速度。参数:

  • speed int ,有效范围是 1~10,表示画笔移动的速度。

Mp2.png **cyberpi.sketch.set_color(r, g, b)**
设置笔颜色。
该API的使用上有两种方式。
方式1-通过RGB值的方式设置画笔颜色。
参数:

  • r 为 int 时,有效范围是 0~255,表示笔头颜色的红色色值。
  • g int,有效范围是 0~255,表示喷枪的绿色色值。
  • b int,有效范围是 0~255,表示喷枪的蓝色色值。

方式2-通过预设的颜色进行调用。

  • r 为 str 时,表示颜色名称或缩写,其它参数不需要填写。颜色名称及其缩写对照表:
    1. red r
    2. orange o
    3. yellow y
    4. 绿 green g
    5. cyan c
    6. blue b
    7. purple p
    8. white w
    9. black k

Mp2.png **cyberpi.sketch.set_size(size)**
设置笔的粗细,笔触形状为圆形。参数:

  • size int ,表示喷枪的粗细。

Mp2.png **cyberpi.sketch.cw(angle)**
笔头原地顺时针转动。参数:

  • angle int ,表示旋转的角度大小。

Mp2.png **cyberpi.sketch.ccw(angle)**
笔头原地逆时针转动。参数:

  • angle int ,表示旋转的角度大小。

Mp2.png **cyberpi.sketch.set_angle(angle)**
笔头设置面向角度。

Mp2.png **cyberpi.sketch.move(step)**
笔头朝面向方向移动指定像素距离。参数:

  • step int,表示精灵朝面向方向移动的像素大小。

Mp2.png **cyberpi.sketch.move_x(step)**
笔头向x轴方向(右)移动指定像素距离。参数:

  • step int,表示精灵朝 x 轴移动的像素大小。

Mp2.png **cyberpi.sketch.move_y(step)**
笔头向 y 轴方向(下)移动指定像素距离。参数:

  • step int,表示精灵朝 y 轴移动的像素大小。

Mp2.png **cyberpi.sketch.move_to(x, y)**
笔头移动到指定坐标位置。参数:

  • x int,表示设置的笔头的 x 坐标。
  • y int,表示设置的笔头的 y 坐标。

Mp2.png **cyberpi.sketch.circle(r, angle)**
笔头以指定半径(圆心位于笔头方向顺时针 90°指向的方向上)划过指定角度。参数:

  • r int,表示设置的笔头的滑动半径。
  • y int,表示设置的笔头的滑动弧度。

Mp2.png **cyberpi.sketch.get_x()**
获得笔头的 x 坐标。
返回 int

Mp2.png **cyberpi.sketch.get_y()**
获得笔头的 y 坐标。
返回 int

Mp2.png **cyberpi.sketch.get_size()**
获得笔头的粗细。
返回 int

Mp2.png **cyberpi.sketch.get_angle()**
获得笔头的面向角度。
返回 int

Mp2.png **cyberpi.sketch.is_start()**
判断笔头的是否落下。
返回 bool

Mp2.png **sprite_sketch = sprite.draw_sketch()**
使用当前涂鸦做为精灵。精灵会获取当前涂鸦的形状。另外,由于精灵的初始位置 坐标是 64,64,涂鸦被设置为精灵后会处于屏幕的中心。

涂鸦示例程序(仅支持上传模式):

  1. import cyberpi
  2. import random
  3. def draw():
  4. cyberpi.sketch.move_to(0, 0)
  5. cyberpi.sketch.start()
  6. cyberpi.sketch.set_size(1)
  7. cyberpi.sketch.set_speed(16)
  8. x = 0
  9. y = 0
  10. for k in range(0, 9, 1):
  11. r = random.randint(1, 255)
  12. g = random.randint(1, 255)
  13. b = random.randint(1, 255)
  14. cyberpi.led.on(r, g, b)
  15. cyberpi.sketch.set_color(r, g, b)
  16. for i in range(1, 5, 1):
  17. for j in range(0, 8 - k, 1):
  18. cyberpi.sketch.move(16)
  19. cyberpi.sketch.cw(90)
  20. x += 8
  21. y += 8
  22. cyberpi.sketch.end()
  23. cyberpi.sketch.move_to(x, y)
  24. cyberpi.sketch.start()
  25. cyberpi.sketch.end()
  26. cyberpi.led.off()
  27. while True:
  28. if cyberpi.controller.is_press('a'):
  29. draw()
  30. if cyberpi.controller.is_press('b'):
  31. cyberpi.sketch.clear()

MESH 局域网【未实装】

在光环板上,我们使用了 MESH 机制建立光环板间的无线局域网通信;而在童芯派上,我们使用基于 ESP32-NOW 的技术来实现无线局域网通信,你理解为这是两种不同的通信协议。
在应用上,他们的主要的区分点为:

MESH(光环板默认局域网通信方式) ESP32-NOW(童芯派默认局域网通信方式)
是否支持同时联网 不支持 支持
是否需要先组建和加入局域网 需要 不需要,只要在信号范围内就可
抗干扰能力
只有同名局域网的信息能够被收到

附近所有童芯派的广播消息都会被收到
稳定性 更强 稍弱

所以,童芯派局域网机制的使用门槛更低(它通过了一种近似红外通信的体验),但光环板的局域网机制性能更好。
因此,我们决定将 MESH 组网的功能以积木扩展的形式加入童芯派,以实现光环板和童芯派的便捷通信,并给到用户更好性能局域网通信的选择。以下是相关的 API:

Mp2.png **cyberpi.mesh.set(name = "mesh1")**
组建一个局域网,参数:

  • name 字符串,默认值为 “mesh1”,表示要建立的 MESH 局域网名称。

Mp2.png **cyberpi.mesh.join(name = "mesh1")**
加入一个局域网,参数:

  • name 字符串,默认值为 “mesh1”,表示要加入的 MESH 局域网名称。

Mp2.png **cyberpi.mesh_broadcast.set(message, val)**
发送局域网广播并附带值,参数:

  • message 字符串类型,广播消息的名称。
  • val 局域网广播消息的值。

Mp2.png **cyberpi.mesh_broadcast.get(message)**
获取广播信息的附带值,参数:

  • message 字符串数据,广播的信息名称。

返回局域网广播消息的值。

Mp2.png **cyberpi.event.mesh_broadcast(message)**
mesh 局域网广播事件,参数:

  • message 字符串类型,mesh 局域网广播的消息名称。