.. note:: こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。 **参加する理由は?** - **エキスパートサポート**:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。 - **学び&共有**:ヒントやチュートリアルを交換してスキルを向上させましょう。 - **独占的なプレビュー**:新製品の発表や先行プレビューに早期アクセスしましょう。 - **特別割引**:最新製品の独占割引をお楽しみください。 - **祭りのプロモーションとギフト**:ギフトや祝日のプロモーションに参加しましょう。 👉 私たちと一緒に探索し、創造する準備はできていますか?[|link_sf_facebook|]をクリックして今すぐ参加しましょう! .. _1.1.4_py: 1.1.4 7セグメントディスプレイ ============================= はじめに ------------------- 7セグメントディスプレイを使って、0から9、AからFまでの数字を表示しましょう。 必要な部品 ------------------------------ このプロジェクトで必要な部品は以下の通りです。 .. image:: ../img/list_7_segment.png キットとして購入するのが便利です。こちらがリンクです: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - 名前 - このキットのアイテム - リンク * - Raphael Kit - 337 - |link_Raphael_kit| 下のリンクから個別に購入することもできます。 .. list-table:: :widths: 30 20 :header-rows: 1 * - コンポーネントの紹介 - 購入リンク * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_7_segment` - |link_7segment_buy| * - :ref:`cpn_74hc595` - |link_74hc595_buy| 回路図 --------------------- 74HC595のST_CPをRaspberry PiのGPIO18に、SH_CPをGPIO27に、DSをGPIO17に接続し、並列出力ポートをLEDセグメントディスプレイの8セグメントに接続します。DSピンでの入力データは、SH_CP(シフトレジスタのクロック入力)が立ち上がりエッジにあるときにシフトレジスタに、ST_CP(メモリのクロック入力)が立ち上がりエッジにあるときにメモリレジスタに送られます。次に、Raspberry PiのGPIOを使用して、SH_CPおよびST_CPの状態を制御して、シリアルデータ入力を並列データ出力に変換し、Raspberry PiのGPIOを節約してディスプレイを駆動します。 ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 ============ ======== ======== === .. image:: ../img/schematic_7_segment.png 実験手順 ------------------------------ **ステップ1:** 回路を組み立てます。 .. image:: ../img/image73.png **ステップ2:** コードのフォルダに移動します。 .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **ステップ3:** 実行します。 .. raw:: html .. code-block:: sudo python3 1.1.4_7-Segment.py コードを実行すると、7セグメントディスプレイに0-9、A-Fが表示されます。 **コード** .. note:: 下のコードは **変更/リセット/コピー/実行/停止** ができます。しかし、それをする前に、ソースコードのパス ``raphael-kit/python`` に移動する必要があります。コードを変更した後、その効果を直接確認するために実行することができます。問題がないことを確認したら、変更したコードをコピーするためのコピーボタンを使用し、 ``nano`` コマンドでターミナルでのソースコードを開き、貼り付けることができます。 .. raw:: html .. code-block:: python import RPi.GPIO as GPIO import time # Set up pins SDI = 17 RCLK = 18 SRCLK = 27 # Define a segment code from 0 to F in Hexadecimal segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71] def setup(): GPIO.setmode(GPIO.BCM) GPIO.setup(SDI, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(RCLK, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(SRCLK, GPIO.OUT, initial=GPIO.LOW) # Shift the data to 74HC595 def hc595_shift(dat): for bit in range(0, 8): GPIO.output(SDI, 0x80 & (dat << bit)) GPIO.output(SRCLK, GPIO.HIGH) time.sleep(0.001) GPIO.output(SRCLK, GPIO.LOW) GPIO.output(RCLK, GPIO.HIGH) time.sleep(0.001) GPIO.output(RCLK, GPIO.LOW) def main(): while True: # Shift the code one by one from segCode list for code in segCode: hc595_shift(code) print ("segCode[%s]: 0x%02X"%(segCode.index(code), code)) # %02X means double digit HEX to print time.sleep(0.5) def destroy(): GPIO.cleanup() if __name__ == '__main__': setup() try: main() except KeyboardInterrupt: destroy() **コードの説明** .. code-block:: python segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71] 0からFまでの16進数(共通カソード)のセグメントコード配列。 .. code-block:: python def setup(): GPIO.setmode(GPIO.BCM) GPIO.setup(SDI, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(RCLK, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(SRCLK, GPIO.OUT, initial=GPIO.LOW) ds、st_cp、sh_cpの3つのピンを出力として設定し、初期状態を低レベルにする。 .. code-block:: python GPIO.output(SDI, 0x80 & (dat << bit)) datデータをビットごとにSDI(DS)に割り当てます。ここでは、dat=0x3f(0011 1111)と仮定します。bit=2の場合、0x3fは2ビット左にシフトされます。1111 1100 (0x3f << 2) & 1000 0000 (0x80) = 1000 0000、これは真です。 .. code-block:: python GPIO.output(SRCLK, GPIO.HIGH) SRCLKの初期値はLOWに設定されていましたが、ここではHIGHに設定されています。これは立ち上がりエッジのパルスを生成し、DSのデータをシフトレジスタにシフトするためです。 .. code-block:: python GPIO.output(RCLK, GPIO.HIGH) RCLKの初期値はLOWに設定されていましたが、ここではHIGHに設定されています。これは立ち上がりエッジを生成し、シフトレジスタからストレージレジスタにデータをシフトするためです。 .. note:: 0~15までの数値の16進数形式は、(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B 現象の画像 ------------------------ .. image:: ../img/image74.jpeg