.. note::

    こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ！Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

    **参加する理由は？**

    - **エキスパートサポート**：コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
    - **学び＆共有**：ヒントやチュートリアルを交換してスキルを向上させましょう。
    - **独占的なプレビュー**：新製品の発表や先行プレビューに早期アクセスしましょう。
    - **特別割引**：最新製品の独占割引をお楽しみください。
    - **祭りのプロモーションとギフト**：ギフトや祝日のプロモーションに参加しましょう。

    👉 私たちと一緒に探索し、創造する準備はできていますか？[|link_sf_facebook|]をクリックして今すぐ参加しましょう！

.. _1.1.1_py:

1.1.1 LEDの点滅
=========================

はじめに
-----------------

このプロジェクトでは、プログラミングによってLEDを点滅させる方法を学びます。
あなたの設定によって、LEDはさまざまな興味深い現象を生み出すことができます。さあ、始めましょう。

必要な部品
------------------------------

このプロジェクトには、以下のコンポーネントが必要です。

.. image:: ../img/blinking_led_list.png
    :width: 800
    :align: center

一式を購入するのが便利です、こちらがリンクです：

.. 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_led`
        - |link_led_buy|

回路図
---------------------

この実験では、220Ωの抵抗をLEDのアノード（長いピン）に接続し、その抵抗を3.3Vに、そしてLEDのカソード（短いピン）をRaspberry PiのGPIO17に接続します。したがって、LEDを点灯させるには、GPIO17を低（0V）レベルにする必要があります。これはプログラミングによって実現できます。

.. note::

    **Pin11** は、Raspberry Piの左から右へ11番目のピンを指し、対応する **wiringPi** および **BCM** のピン番号は以下の表に示されています。

C言語に関連する内容では、wiringPiでGPIO0を0としています。
Python言語に関連する内容では、BCM 17は以下の表のBCM列で17です。同時に、これらはRaspberry Pi上の11番目のピン、Pin 11と同じです。

============ ======== ======== ===
T-Board Name physical wiringPi BCM
GPIO17       Pin 11   0        17
============ ======== ======== ===

.. image:: ../img/image48.png
    :width: 800
    :align: center

実験手順
-----------------------------

**ステップ1:** 回路を組み立てる。

.. image:: ../img/image49.png
    :width: 800
    :align: center

**ステップ2:** コードのフォルダに移動して、実行する。

1. スクリーンを使用する場合は、以下の手順をお勧めします。

1.1.1_BlinkingLed.pyを見つけてダブルクリックで開きます。これで、ファイル内に入ります。

ウィンドウ内で **Run** ->\ **Run Module** をクリックすると、以下の内容が表示されます。

実行を停止するには、右上のXボタンをクリックして閉じれば、コードに戻ります。コードを修正する場合は、 **Run Module (F5)** をクリックする前に、まず保存する必要があります。それから結果を確認できます。



2. ラズベリーパイにリモートでログインした場合、以下のコマンドを入力してください：

.. raw:: html

   <run></run>

.. code-block::

   cd ~/raphael-kit/python

.. note::
    ``cd`` コマンドを用いて、この実験でのコードがあるディレクトリに移動してください。

**ステップ3：** コードを実行

.. raw:: html

   <run></run>

.. code-block::

   sudo python3 1.1.1_BlinkingLed.py

.. note::
    ここでのsudoはスーパーユーザー権限で、pythonはPythonでファイルを実行することを意味します。

コードが実行された後、LEDが点滅するのを見ることができます。

**ステップ4：** コードファイル1.1.1_BlinkingLed.pyを編集したい場合は、 ``Ctrl + C`` を押してコードの実行を停止します。次に以下のコマンドを入力して1.1.1_BlinkingLed.pyを開きます。

.. raw:: html

   <run></run>

.. code-block::

   nano 1.1.1_BlinkingLed.py

.. note::
    nanoはテキストエディターのツールです。このコマンドは、このツールでコードファイル1.1.1_BlinkingLed.pyを開くために使用されます。

``Ctrl+X`` を押して終了します。コードを変更した場合、変更を保存するかどうかを尋ねるプロンプトが表示されます。 ``Y`` （保存する）または ``N`` （保存しない）を入力してください。

その後、 ``Enter`` を押して終了します。再度nano 1.1.1_BlinkingLed.pyを入力して、変更後の効果を確認してください。

**コード**

以下はプログラムコードです：

.. note::

   下記のコードは **変更/リセット/コピー/実行/停止** が可能です。ただし、それを行う前に、ソースコードのパス、例えば ``raphael-kit/python`` に移動する必要があります。コードを変更した後、その効果を直接確認することができます。

.. raw:: html

    <run></run>

.. code-block:: python

   #!/usr/bin/env python3
   import RPi.GPIO as GPIO
   import time
   LedPin = 17
   def setup():
      # Set the GPIO modes to BCM Numbering
      GPIO.setmode(GPIO.BCM)
      # Set LedPin's mode to output,and initial level to High(3.3v)
      GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH)
   # Define a main function for main process
   def main():
      while True:
         print ('...LED ON')
         # Turn on LED
         GPIO.output(LedPin, GPIO.LOW)
         time.sleep(0.5)
         print ('LED OFF...')
         # Turn off LED
         GPIO.output(LedPin, GPIO.HIGH)
         time.sleep(0.5)
   # Define a destroy function for clean up everything after the script finished
   def destroy():
      # Turn off LED
      GPIO.output(LedPin, GPIO.HIGH)
      # Release resource
      GPIO.cleanup()
   # If run this script directly, do:
   if __name__ == '__main__':
      setup()
      try:
         main()
      # When 'Ctrl+C' is pressed, the program destroy() will be  executed.
      except KeyboardInterrupt:
         destroy()


**コード説明**

.. code-block:: python

   #!/usr/bin/env python3

このコードがシステムに検出された場合、環境設定でPythonのインストールパスを検索し、対応するインタープリターを呼び出して操作を完了します。これは、ユーザーがPythonをデフォルトのパス ``/usr/bin`` にインストールしていない場合に備えるためです。

.. code-block:: python

   import RPi.GPIO as GPIO

このようにして、RPi.GPIOライブラリをインポートし、以降のコードでRPI.GPIOを置き換える変数、GPIOを定義します。

.. code-block:: python

   import time

時間遅延関数が必要なため、timeパッケージをインポートします。

.. code-block:: python

   LedPin = 17

LEDはT字型拡張ボードのGPIO17、すなわちBCM17に接続されています。

.. code-block:: python

   def setup():
      GPIO.setmode(GPIO.BCM)
      GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH)

LedPinのモードを出力に設定し、初期レベルをHigh（3.3V）にします。

RPi.GPIOでは、IOピンの番号付け方法が2つあります：BOARD番号とBCM番号。当社のプロジェクトでは、BCM番号を使用しています。使用する各チャンネルを入力または出力として設定する必要があります。

.. code-block:: python

   GPIO.output(LedPin, GPIO.LOW)

GPIO17（BCM17）を0V（ローレベル）に設定します。LEDのカソードがGPIO17に接続されているため、LEDが点灯します。

.. code-block:: python

   time.sleep(0.5)

0.5秒遅延します。この文はC言語の遅延関数で、単位は秒です。

.. code-block:: python

   def destroy():
      GPIO.cleanup()  

スクリプトが終了した後、全てをクリーンアップするdestroy関数を定義します。

.. code-block:: python

   if __name__ == '__main__':
      setup()
      try:
         main()
      # When 'Ctrl+C' is pressed, the program destroy() will be  executed.
      except KeyboardInterrupt:
         destroy()

これがコードの一般的な実行構造です。プログラムが実行を開始すると、setup()を実行してピンを初期化し、main()関数内のコードを実行してピンを高レベルと低レベルに設定します。 ``Ctrl+C`` が押された場合、destroy()プログラムが実行されます。

現象の画像
--------------------

.. image:: ../img/image54.jpeg
    :width: 800
    :align: center

