.. 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