編集履歴一覧に戻る
akira.keiのアイコン画像

akira.kei が 2026年07月20日22時50分46秒 に編集

コメント無し

タイトルの変更

-

RP2040-ZeroをCircuitPythonで(その2):7セグ

+

RP2040-ZeroをCircuitPythonで(その2):7セグLEDディスプレイ

本文の変更

[<前の記事](https://elchika.com/article/6f53a0fa-e738-49b1-a539-3d0125e8fa88/) : 次の記事> ## 7セグLEDディスプレイ

-

秋月電子通商でずいぶんと前にシコタマ買ってあったダイナミック点灯用の7セグLEDディスプレイを今更ながら引っ張り出してみた。いつも使っているアルカリ単三・単四電池の残量をちょっと調べてみるテスターの表示部分に使う予定だ。

+

秋月電子通商でずいぶんと前にシコタマ買ってあった[ダイナミック点灯用の7セグLEDディスプレイ](https://akizukidenshi.com/catalog/g/g103673/)を今更ながら引っ張り出してみた。いつも使っているアルカリ単三・単四電池の残量をちょっと調べてみるテスターの表示部分に使う予定だ。

![103673](https://akizukidenshi.com/img/goods/4/103673.jpg) タイトルにあるようにCircuitPythonで始めてみたが、苦労の割には全然良くなかった。7セグのダイナミック点灯なので桁をインターバルタイマー割り込みで切り替えながら表示するのが王道なんだが、**CircuitPythonにはタイマー割り込みがない**。そのかわり標準ライブラリとしてasyncioを使え、とGeminiが教えてくれた。 ## MicroPythonなら普通にインターバルタイマー CircuitPythonとは異なり、MicroPythonなら普通にインターバルタイマーが使えるので、ライブラリ化した7セグは以下のようにシンプルに使用できる。表示したい数値をセットするだけで4桁表示が可能というシンプル加減だ。 ```Python: import time from SevenSeg4d import SevenSegment4D SEG_PINS = [5, 7, 1, 3, 4, 6, 0, 2] DIG_PINS = [9, 10, 11, 12] display = SevenSegment4D(SEG_PINS, DIG_PINS) counter = 0 while True: display.value = counter time.sleep(0.1) counter = (counter + 1) % 10000 ```

-

@[youtube](https://youtube.com/shorts/2xkVoS1NKg4?feature=share)

+

![Dynamic](https://camo.elchika.com/e8498d93546309d013c6b35dab3384cb9d426bf3/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33363031626666382d633530632d343762382d613765362d3531663731393163323336642f36396565353731372d313039312d343961652d626538662d666663663635376637373830/) ## CircuitPythonではどうにもならん CircuitPythonでインターバルタイマーを使うには```import asicio```を使う。asyncを冒頭に付けたコード群をスレッドのように登録して使うという使い方らしいが、割り込み処理をライブラリ内では完結できず、async化したメインプログラムを起動しなければいけない。Geminiに頼んだコードは公開するのはあまりにも汚いので、[チュートリアルを示しておく](https://docs.circuitpython.org/projects/asyncio/en/latest/examples.html)が、使い勝手の悪さと直感との乖離はどうしようもない。 マイクロコントローラーの制御言語としてCircuitPythonの使い勝手の悪さが露呈したなぁという印象だ。開発方針なんだろうから仕方がないけど、MicroPythonの方が断然、使い勝手が良いだろう。