LedBag¶
介绍¶
可编程书包(也兼容可编程相框、音响...)
demo¶
hello world¶
from codelab_adapter.led_bag import LedBag bag = LedBag() bag.connect() # 默认连接 jupyterlab 模拟器,输入书包id可连接到书包: bag.connect(DEVICE_ID) # 点亮第一个led bag.set_pixel(0, 0, 'red') # bag.set_pixel(0, 0, (255,0,0))
LedBag API¶
可以在 Adapter notebooks 里的 hello_LedBag.ipynb
做实验
控制像素¶
color = (255, 0, 0) # 设置像素 bag.set_pixel(0, 0, color) # 查询像素, renturn RGB tuple bag.get_pixel(0, 0)
清理画布¶
bag.clear()
show¶
bag.show()
全屏颜色¶
color = (255, 0, 0) # red (RGB), 通过调整 RGB 的数值调整亮度 bag.set_color(color)
显示字符¶
# 显示 emoji 字符 bag.display_emoji('🐳') # 英文字符 bag.display_text('hello world') # 中文字符串 bag.display_text_zh('早上好', color=(255,0,0)) # 显示中文字符 bag.display_char_zh('早', color=(255,0,0))
硬件特殊功能¶
# 内置效果 bag.show_visualization(1) # 参数: 特效 ID # 记分板 bag.show_scoreboard(3, 2) # 显示时钟 bag.show_clock() # show design bag.show_design()
保存、加载图片¶
# 保存当前图像 bag.save(name="test") # 加载图像(自动转为16x16格式) bag.load('test.png')
断开蓝牙¶
bag.close()
动画(Animation) API¶
from codelab_adapter.led_bag import Animation animation = Animation() # bag set pixel ... animation.add_frame(bag) # 把 bag 当前状态(bag._img)作为 animation 的一帧 # bag set pixel ... animation.add_frame(bag) # 在模拟器里展示动画 animation.show(duration=0.1) # 将动画同步到书包 animation.show(to_bag=bag) # 保存为gif animation.save(name='hello') # 加载 gif, 建议使用手机 APP 设计动图。 也可参看动图网站 https://giphy.com/,或者试试表情包 animation.load('./hello.gif') # 查看、修改某一帧 animation.show_frame(FRAME_ID) animation.remove_frame(FRAME_ID)
积木说明¶
进阶¶
游戏平台¶
与像素交互
# import pynput import time from codelab_adapter.led_bag import LedBag import ipywidgets as widgets from IPython.display import display bag = LedBag() # bag.connect() block_location = (0, 0) button_up = widgets.Button(description="上") button_down = widgets.Button(description="下") button_left = widgets.Button(description="左") button_right = widgets.Button(description="右") output = widgets.Output() vbox = widgets.VBox([button_up, button_down]) hbox = widgets.HBox([button_left, vbox, button_right]) display(hbox, output) def move(direction): global block_location bag.clear() if direction == "上": x, y = block_location block_location = (max(x-1, 0), y) bag.set_pixel(block_location[0], block_location[1], 'red') if direction == "下": x, y = block_location block_location = (min(x+1, 15), y) bag.set_pixel(block_location[0], block_location[1], 'red') if direction == "左": x, y = block_location block_location = (x, max(y-1, 0)) bag.set_pixel(block_location[0], block_location[1], 'red') if direction == "右": x, y = block_location block_location = (x, min(y+1, 15)) bag.set_pixel(block_location[0], block_location[1], 'red') def on_button_clicked(b): global block_location with output: move(b.description) button_up.on_click(on_button_clicked) button_down.on_click(on_button_clicked) button_left.on_click(on_button_clicked) button_right.on_click(on_button_clicked)
连接游戏手柄: ...