初めてのRaspberry Pi Pico ⑪ Circuitpythonで7セグLEDに表示


 アマゾンやebayで入手しやすいHT16K33コントローラを使った7セグメントLEDを点灯します。HT16K33コントローラは、マトリクスなどの表示にも使われています。

7セグメントLED

 時計の表示にも使えるドットがついています。インターフェースはI2Cです。ピン穴の横に書かれているシルク印刷で、CはSCL、DはSDA、+はVcc、ーはGNDへ接続します。

7segLED端子 Pico物理的ピン番号 Pico GPIOピン番号
+ Vcc 36 3.3V
ー GND 13 GND
C SCL 12 GP9
D SDA 11 GP8

(2020/02/11) このボードにはプルアップ抵抗はありません。AdafruitのSTEMMA QTボードを一つつないでいます。このSTEMMA QTボードにはプルアップ抵抗が内蔵されています。

  4桁 7セグメント 0.56インチ LEDディスプレイモジュール I2C Arduino用 HT16K33 高性能

必要なファイル

 ダウンロードして解凍したファイルのうちlibとexamplesは、ラズパイの/home/piにコピーしています(第2回を参照)。
 ダウンロード・フォルダにあったadafruit-circuitpython-raspberry_pi_pico-en_US-6.2.0-beta.1.uf2をデスクトップにドロップしておきます。
 BOOTSELボタンを押したまま、ラズパイとPicoをUSBケーブルをつなげます。つながったら、BOOTSELから手を放します。RPI-RP2ドライブがマウントされます。そのRPI-RP2ドライブへ、adafruit-circuitpython-raspberry_pi_pico-en_US-6.2.0-beta.1.uf2をドラッグします。コピーが数秒で終わると、デスクトップには、CIRCUITPYドライブがマウントされています。

 CIRCUITPYドライブを開きます。この中にあるlibフォルダに、/home/pi/libにあるadafruit_ht16k33フォルダをコピーします。

 今までコピーしたファイル類です。130kバイトぐらいなので、まだ余裕です。

プログラム

 Muを立ち上げます。
 /home/pi/examplesのなかにあるht16k33_segments_simpletest.pyをエディタで開きます。中身をMuのcode.pyへコピーします。19行目を次のようにピン番号を変更してSaveします。Serialを開きます。Saveすると、7セグLEDでデモ表示が始まります。

i2c = busio.I2C(board.GP9, board.GP8)

 display.print("12:30")の実行例です。

ラーメン・タイマ

 3分をカウントダウンします。正確でないかもしれません。Resetスイッチを押すとスタートします。Resetスイッチは第6回を参照してください。

# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
# Author: Tony DiCola

import time
import board
import busio

# Import the HT16K33 LED segment module.
from adafruit_ht16k33 import segments

# Create the I2C interface.
i2c = busio.I2C(board.GP9, board.GP8)

# Create the LED segment class.
# This creates a 7 segment 4 character display:
display = segments.Seg7x4(i2c)
# Finally you can optionally specify a custom I2C address of the HT16k33 like:
# display = segments.Seg7x4(i2c, address=0x70)

# Clear the display.
display.fill(0)

#display.print("3"+':'+"00")
TIME =180
for i in  range(TIME, -1, -1):
    time.sleep(1)
    TIME -= 1
    display.fill(0)
    display.print(str(int(TIME/60))+':'+str(int(TIME/3)))