PICOLAB-HDMI

ショップ

取扱説明書

  • 準備中

製品概要

PICOLAB-HDMI はPICO用モニタ表示実験用拡張ボードです。

PICOLABシリーズの拡張ボード群は、CircuitPythonやMicroPython を使用したプログラミングでの利用を主眼として、Raspberry Pi PICOの拡張ボードとして開発されました。PICOLAB-HDMIは、HDMIコネクタを備えており、CircuitPythonやArduinoとpicodviライブラリを使用してモニタ表示を利用したゲームやデジタルサイネージなどの作成や実験を行うことができます。

  • Raspberry Pi PICO/PICO 2用の多機能拡張ボードです。HDMI出力機能が強化されメモリ容量が倍増したPICO2の利用を推奨します。
  • CircuitPythonでのプログラミングに重点を置いて開発されていますが、Arduinoを使用することもできます。
  • PICOのプログラム実験で利用される主要な入出力を搭載しており、PICOLAB-HDMIだけで様々な実験を行うことができます。また、拡張端子を使用して、様々なセンサーや周辺装置を追加で利用できます。
  • 出力として、HDMI(映像出力のみ)、カラーLEDx4、単色LEDx2、圧電スピーカーを搭載しています。
  • 入力として、タクトスイッチx4、ジョイスティックを搭載しています。
  • ストレージとして、マイクロSDカードソケットを搭載しています。
  • RCサーボやWS2812Bを接続できる端子を2個、人感センサーを接続できる端子を装備しています。
  • 各種のセンサー等を接続できるI2C端子を2個装備しています。
  • 基板上部に拡張端子を備えており、ブレッドボードに直接接続して、ブレッドボード上に作成した外部回路を利用することができます。
  • Raspberry Pi PICO/PICO 2等のMCUボードは付属しませんので別途お買い求めください。

入出力とセンサー

  • 出力
    • HDMI (映像出力のみ)
    • カラーLED x 4
    • LED x2
    • 圧電スピーカー
  • 入力
    • タクトスイッチ x4
    • ジョイスティック (上下左右のアナログ入力とスイッチ)
  • ストレージ (SPI)
    • マイクロSDカード ソケット
  • OLED拡張端子
    • OLEDディスプレイ(オプション)
  • 拡張コネクタ (接続機器はオプション)
    • RCサーボ, WS2812BカラーLED x2
    • 人感センサー
  • I2C拡張端子(センサーはオプション)
    • 温度、湿度センサー
    • 照度センサー
    • 加速度、ジャイロセンサー
    • レーザー距離センサー

サンプルプログラム

モニタ画面に文字と簡単な図形を表示するプログラム例を以下に示します。

import displayio, picodvi, board, framebufferio

# 表示システムの初期化を行う
displayio.release_displays()

fb = picodvi.Framebuffer(
    width=320, height=240, color_depth=8,
    clk_dp=board.GP14, clk_dn=board.GP15,
    red_dp=board.GP12, red_dn=board.GP13,
    green_dp=board.GP18, green_dn=board.GP19,
    blue_dp=board.GP16, blue_dn=board.GP17)

display = framebufferio.FramebufferDisplay(fb)

group = displayio.Group()
display.root_group = group
# ここまではグラフィックス利用の初期化で今後も共通

# 文字列の表示を行う
from adafruit_display_text import label
import terminalio

group.append(label.Label(terminalio.FONT, text="MicroFan", x=0, y=10, scale=2, color=0xFFFFFF))
group.append(label.Label(terminalio.FONT, text="PICOLAB-HDMI:PicoDVI", x=0, y=30, scale=2, color=0xFFFFFF))

# 図形の表示を行う
from adafruit_display_shapes.line import Line
from adafruit_display_shapes.rect import Rect
from adafruit_display_shapes.circle import Circle
from adafruit_display_shapes.triangle import Triangle

group.append(Line(0, 80, 320, 80, 0xFF00FF))
group.append(Rect(0, 120, 100, 100, fill=0xFF0000, outline=0xFFFF00))
group.append(Circle(160, 170, 50, fill=0x00FF00, outline=0xFFFF00))
group.append(Triangle(260, 120, 210, 220, 310, 220, fill=0x0000FF, outline=0xFFFF00))

ボールを4つのスイッチで上下左右に操作するプログラムを示します。押したスイッチに対応するLEDも点灯するようにしています。

import displayio, picodvi, digitalio, board, framebufferio, neopixel

# 表示システムの初期化を行う
displayio.release_displays()

fb = picodvi.Framebuffer(
    width=320, height=240, color_depth=8,
    clk_dp=board.GP14, clk_dn=board.GP15,
    red_dp=board.GP12, red_dn=board.GP13,
    green_dp=board.GP18, green_dn=board.GP19,
    blue_dp=board.GP16, blue_dn=board.GP17)

display = framebufferio.FramebufferDisplay(fb)

group = displayio.Group()
display.root_group = group
# ここまではグラフィックス利用の初期化で今後も共通

# スイッチの初期化
sw1 = digitalio.DigitalInOut(board.GP2) # 初期状態は入力用
sw2 = digitalio.DigitalInOut(board.GP3)
sw3 = digitalio.DigitalInOut(board.GP6)
sw4 = digitalio.DigitalInOut(board.GP7)

# カラーLEDの初期化
rgb = neopixel.NeoPixel(board.GP21, 4, auto_write=False)
rgb[0] = (0,0,0)
rgb[1] = (0,0,0)
rgb[2] = (0,0,0)
rgb[3] = (0,0,0)
rgb.show()

# 動かすボールの処理
from adafruit_display_shapes.circle import Circle

ball = Circle(display.width//2, display.height//2, 10, fill=0x00FF00, outline=0xFFFF00)
group.append(ball)

v = 5
import time
while True:
    rgb[0] = (0,0,0)
    rgb[1] = (0,0,0)
    rgb[2] = (0,0,0)
    rgb[3] = (0,0,0)

    if sw1.value == 0: # 左
        rgb[0] = (10,0,0)
        if ball.x0 <= ball.r:
            ball.x0 = ball.r
        else:
            ball.x0 -= v
    if sw2.value == 0: # 右
        rgb[1] = (0,10,0)
        if ball.x0 >= (display.width-1)-ball.r:
            ball.x0 = (display.width-1)-ball.r
        else:
            ball.x0 += v
    if sw3.value == 0: # 上
        rgb[2] = (0,0,10)
        if ball.y0 <= ball.r:
            ball.y0 = ball.r
        else:
            ball.y0 -= v
    if sw4.value == 0: # 下
        rgb[3] = (5,5,5)
        if ball.y0 >= (display.height-1)-ball.r:
            ball.y0 = (display.height-1)-ball.r
        else:
            ball.y0 += v
    rgb.show()
    time.sleep(0.05)

# スイッチを押さないとボールは動かないよ!

ボールをジョイスティックで上下左右に操作するプログラムを示します。

import displayio, picodvi, digitalio, board, framebufferio, analogio

# 表示システムの初期化を行う
displayio.release_displays()

fb = picodvi.Framebuffer(
    width=320, height=240, color_depth=8,
    clk_dp=board.GP14, clk_dn=board.GP15,
    red_dp=board.GP12, red_dn=board.GP13,
    green_dp=board.GP18, green_dn=board.GP19,
    blue_dp=board.GP16, blue_dn=board.GP17)

display = framebufferio.FramebufferDisplay(fb)

group = displayio.Group()
display.root_group = group
# ここまではグラフィックス利用の初期化で今後も共通

# ジョイスティックのアナログ読み取りの初期化
joyx = analogio.AnalogIn(board.GP26)
joyy = analogio.AnalogIn(board.GP27)

# 動かすボールの処理
from adafruit_display_shapes.circle import Circle

ball = Circle(display.width//2, display.height//2, 10, fill=0x00FF00, outline=0xFFFF00)
group.append(ball)

v = 5
import time
while True:
    ball.x0 = joyx.value*display.width//65535
    ball.y0 = (65535-joyy.value)*display.height//65535
    time.sleep(0.1)

# ジョイスティックを動かさないとボールは動かないよ!

ボールが自分で動き壁で跳ね返るプログラムを示します。ボールをオブジェクト化しています。ボールが壁に当たったときに音が出るようにしています。

import displayio, picodvi, board, framebufferio

# 表示システムの初期化を行う
displayio.release_displays()

fb = picodvi.Framebuffer(
    width=320, height=240, color_depth=8,
    clk_dp=board.GP14, clk_dn=board.GP15,
    red_dp=board.GP12, red_dn=board.GP13,
    green_dp=board.GP18, green_dn=board.GP19,
    blue_dp=board.GP16, blue_dn=board.GP17)

display = framebufferio.FramebufferDisplay(fb)

group = displayio.Group()
display.root_group = group
# ここまではグラフィックス利用の初期化で今後も共通

import simpleio
from adafruit_display_shapes.circle import Circle

class Ball(Circle):
    # 初期座標、縦横速度、色を与える
    def __init__(self, x0, y0, r, vx, vy, color):
        super().__init__(x0, y0, r, fill=color, outline=0xFFFF00)
        self.vx = vx
        self.vy = vy
    def tick(self):
        # 縦横速度分移動して
        self.x0 += self.vx
        self.y0 += self.vy
        # 画面の端に来たら速度を反転させて跳ね返る
        if self.x0 <= self.r or self.x0 >= (display.width-1)-self.r:
            simpleio.tone(board.GP20, 1000, 0.01)
            self.vx = -self.vx
        if self.y0 <= self.r or self.y0 >= (display.height-1)-self.r:
            simpleio.tone(board.GP20, 500, 0.01)
            self.vy = -self.vy

ball = Ball(100, 100, 10, 2, 5, 0x00FF00)
group.append(ball)

import time

while True:
    group[0].tick()
    time.sleep(0.02)

回路図


関連製品

PICOLAB-SENS

PICOLABシリーズのフラグシップとなるPICO拡張多機能実験ボードで、プログラミングで多用される多くの入出力やセンサーを装備しており、このボードだけで多様な実験を行うことができます。

PICOLAB-BASE

PICOLAB-SENSからセンサー群とD級アンプ・スピーカーが取り除かれた廉価版です。

PICOLAB-MUSIC

タッチスイッチによる鍵盤や、D級アンプ・スピーカーを備えており、CircuitPythonとsynthioライブラリを使用して楽器の作成や実験を行うことができます。