1.1.1 点滅LED

前書き

このレッスンでは、プログラミングによってLEDを点滅させる方法を学習する。設定により、LEDは一連の興味深い現象を生成できる。今、行動しよう。

部品

_images/blinking_led_list.png

注釈

スムーズに進めるには、独自のRaspberry Pi、TFカード、およびRaspberry Piの電源を用意する必要がある。

原理

ブレッドボード

ブレッドボードは、電子装置のプロトタイピングの構築基盤である。それは回路設計を完了する前に、回路を迅速に作って、テストするために使用される。また、上記の部品をICや抵抗器、ジャンパー線などのように挿入できる多くの穴が搭載されている。ブレッドボードを使用すると、部品を簡単に差し込んだり、取り外したりすることができる。

この写真は、full +ブレッドボードの内部構造を示している。ブレッドボード上のこれらの穴は互いに独立しているように見えるが、実際には内部で金属ストリップを介して互いに接続されている。

_images/image41.png

LED

LEDは一種のダイオードである。LEDの長いピンが正極に接続され、短いピンが負極に接続されている場合にのみ、LEDが点灯する。

image42image43

LEDを電源に直接接続することはできないため、部品に損傷を与える可能性がある。160Ω以上の抵抗(5V動作電圧)は、LEDの回路に直列に接続する必要がある。

抵抗器

抵抗器は、分岐電流を制限できる電子素子である。固定抵抗器は抵抗値を変更できない抵抗器の一種であるが、ポテンショメータまたは可変抵抗器の抵抗値は調整できる。

このキットには固定抵抗器が適用される。回路では、接続された部品を保護することは重要である。次の図は、実際の物体、220Ω抵抗器、および抵抗器汎用の二つの回路記号を示している。Ωは抵抗値の単位で、より大きな単位はKΩ、MΩなどである。それらの関係は次のように示している:1M= 1000KΩ、1KΩ=1000Ω。通常、抵抗値はマークされている。したがって、回路にこれらの記号が表示される場合、抵抗があることを意味する。

_images/image44.png

image45image46

抵抗器を使用する場合、まず抵抗値を知る必要がある。以下の二つの方法がある:抵抗の帯域を観察すること、またはマルチメーターを使用して抵抗を測定すること。より便利で迅速なので、一番目の方法をお勧めする。値を測定するには、マルチメーターを使用してください。

カードに示されているように、各色は数字を表している。

_images/image47.jpeg

回路図

この実験では、まず220Ωの抵抗器を陽極(LEDの長いピン)に接続し、それから抵抗器を3.3 Vの電源に接続し、LEDの陰極(短いピン)をRaspberry PiのGPIO17に接続する。したがって、LEDをオンにするには、GPIO17を低(0V)レベルにする必要がある。プログラミングを通じてこの現象を取得できる。

注釈

Pin11 はRaspberry Piの左から11番目のピンを指し、それに対応する wiringPiBCM のピン番号は以下の表の通りです。

C言語関連のコンテンツでは、wiringPiでGPIO0を0と同等にする。Python言語関連のコンテンツの中で、BCM 17は次の表のBCM列の17である。同時に、それらはRaspberry Piの11番目のピン-ピン11と同じである。

Tボード名

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

_images/image48.png

実験手順

ステップ1: 回路を作る。

_images/image49.png

C言語ユーザー向け

ステップ2: コードのフォルダーに入る。

  1. モニターを使用する場合は、次の手順を実行することをお勧めする。

/home/pi/ に入り、 davinci-kit-for-raspberry-pi フォルダーを見つけてください。

フォルダー内で C を見つけて右クリックし、 Open in Terminal を選択する。

_images/image50.png

それから以下のようなウィンドウがポップアップされる。これで、コード 1.1.1_BlinkingLed.c のパスに入っていた。

_images/image51.png

次のレッスンでは、右クリックの代わりにコマンドを使用してコードファイルを入力する。ただし、お好みの方法を選択可能である。

  1. Raspberry Piにリモートでログインする場合、 cd を使用してディレクトリを変更する:

cd /home/pi/davinci-kit-for-raspberry-pi/c/1.1.1/

注釈

この実験では、cdを使用してディレクトリをコードのパスに変更します。

どちらにしても、現在はCフォルダにいることになります。この2つの方法に基づくその後の手順は同じです。次に進みましょう。

ステップ3: コードをコンパイルする

gcc 1.1.1_BlinkingLed.c -o BlinkingLed -lwiringPi

注釈

gcc は GNU Compiler Collection です。ここでは、C言語ファイル*1_BlinkingLed.c*をコンパイルし、実行ファイルを出力するような機能を持っています。

コマンドでは、 -o は出力を意味し(-oの直後の文字はコンパイル後のファイル名出力であり、 BlinkingLed という名前のEXEファイルがここで生成される)、 -lwiringPi はライブラリーのwiringPiをロードする( l はlibraryの省略形である)。

ステップ4: 前のステップで出力されたEXEファイルを実行する。

sudo ./BlinkingLed

注釈

GPIOを制御するには、コマンドsudo(superuser do)でプログラムを実行してください。コマンド ./ は現在のディレクトリを示している。コマンド全体は、現在のディレクトリで BlinkingLed を実行することである。

_images/image52.png

コードの実行後、LEDが点滅する。

注釈

If it does not work after running, or there is an error prompt: "wiringPi.h: No such file or directory", please refer to Cコードが機能していませんか?.

コードファイル 1.1.1_BlinkingLed.c を編集する場合は、 Ctrl + C を押してコードの実行を停止する。次に、次のコマンドを入力してそれを開く:

nano 1.1.1_BlinkingLed.c

注釈

nanoはテキストエディターツールである。このコマンドは、このツールを通して、コードファイル 1.1.1_BlinkingLed.c を開くために使用される。

Ctrl + X を押して終了する。コードを修正した場合、変更を保存するかどうかを尋ねるプロンプトが表示される。 Y (保存)または N (保存しない)を入力する。次に、 Enter キーを押して終了する。 ステップ3ステップ4 を繰り返して、修正後の効果を確認する。

_images/image53.png

コード

プログラムコードは次のように表示される:

#include <wiringPi.h>
#include <stdio.h>
#define LedPin      0
int main(void)
{
   // When initialize wiring failed, print message to screen
   if(wiringPiSetup() == -1){
      printf("setup wiringPi failed !");
      return 1;
   }
   pinMode(LedPin, OUTPUT);// Set LedPin as output to write value to it.
   while(1){
      // LED on
      digitalWrite(LedPin, LOW);
      printf("...LED on\n");
      delay(500);
      // LED off
      digitalWrite(LedPin, HIGH);
      printf("LED off...\n");
      delay(500);
   }
   return 0;
}

コードの説明

include <wiringPi.h>

ハードウェアドライブライブラリは、Raspberry PiのC言語用に設計されている。このライブラリを追加すると、ハードウェアの初期化、およびI/Oポート、PWMなどの出力に役立つ。

#include <stdio.h>

標準I/Oライブラリ。画面に表示されるデータの印刷に使用されるpintf機能は、このライブラリによって実現される。他にも多くのパフォーマンス機能がある。

#define LedPin 0

T_Extension BoardのGPIO17ピンは、wiringPiのGPIO0に対応している。GPIO0をLedPinに割り当て、LedPinは後のコードでGPIO0を表す。

if(wiringPiSetup() == -1){
    printf("setup wiringPi failed !");
    return 1;

これにより、wiringPiが初期化され、呼び出しのプログラムがwiringPiピン番号スキームを使用することになると想定される。

この関数を呼び出すには、ルート権限が必要である。配線の初期化に失敗すると、画面にメッセージが表示される。関数「return」は現在の関数から飛び出すために使用される。main()関数で関数「return」を使用すると、プログラムが終了する。

pinMode(LedPin, OUTPUT);

LedPinを出力として設定し、値を書き込む。

digitalWrite(LedPin, LOW);

GPIO0を0V(低レベル)に設定SURU。LEDの陰極はGPIO0に接続されているため、GPIO0が低レベルに設定されるとLEDが点灯する。それに反して、GPIO0を高レベルに設定すると(digitalWrite(LedPin、HIGH)):LEDが消灯する。

printf("...LED off\n");

printf関数は標準ライブラリ関数であり、その関数プロトタイプはヘッダーファイル「stdio.h」にあります。呼び出しの一般的な形式は次のとおりです。printf("フォーマット制御文字列"、出力テーブルの列)。フォーマット制御文字列は、フォーマット文字列と非フォーマット文字列に分けられる出力フォーマットを指定するために使用されます。フォーマット文字列は「%」で始まり、10進整数出力の場合は「%d」などのフォーマット文字が続きます。 フォーマットされていない文字列はプロトタイプとして印刷されます。 ここで使用されているのは、フォーマットされていない文字列であり、その後に改行文字である"n "が続きます。これは、文字列を印刷した後の自動行折り返しを表します。

delay(500);

Delay (500) は、現在のHIGHまたはLOW状態を500ms維持する。

これは、プログラムを一定期間中断する機能である。また、プログラムの速度はハードウェアによって決まる。ここで、LEDをオンまたはオフにする。遅延機能がない場合、プログラムはプログラム全体を非常に高速で実行し、継続的にループする。そのため、プログラムの作成とデバッグに役立つ遅延機能が必要である。

return 0;

通常、メイン関数の後ろに配置され、関数が正常に実行されると0を返すことを示す。

Python言語ユーザー向け

ステップ2: コードのフォルダーに入り、それを実行する。

  1. モニターを使用する場合は、次の手順を実行することをお勧めする。

1.1.1_BlinkingLed.pyを見つけて、ダブルクリックして開く。今、ファイルに入った。

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

実行を停止するには、右上の「X」ボタンをクリックして閉じるだけで、コードに戻る。コードを変更する場合は、Run Module (F5) をクリックする前に、まず保存しなければならない。その後、結果を確認できる。

  1. Raspberry Piにリモートでログインする場合、次のコマンドを入力する:

cd /home/pi/davinci-kit-for-raspberry-pi/python

注釈

cd を使用して、この実験のコードのパスにディレクトリを変更できる。

ステップ3: コードを実行する

sudo python3 1.1.1_BlinkingLed.py

注釈

ここではsudo-superuser doとpythonは、Pythonでファイルを実行することを意味する。

コードの実行後、LEDが点滅する。

ステップ4: コードファイル1.1.1_BlinkingLed.pyを編集する場合は、 Ctrl + C を押してコードの実行を停止してください。それから次のコマンドを入力して1.1.1_BlinkingLed.pyを開く:

nano 1.1.1_BlinkingLed.py

注釈

nanoはテキストエディターツールである。このツールは、コマンドを使用してコードファイル1.1.1_BlinkingLed.pyを開く。

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

次に、 Enter を押して終了する。変更後の効果を確認するには、nano 1.1.1_BlinkingLed.pyをもう一度入力してください。

コード

注釈

以下のコードを 変更/リセット/コピー/実行/停止 できます。 ただし、その前に、 davinci-kit-for-raspberry-pi/python のようなソースコードパスに移動する必要があります。

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()

コードの説明

#!/usr/bin/env python3

システムがこれを検出すると、env設定でpythonの実装パスを検索し、対応するインタープリターを呼び出して操作を完了させる。その目的は、ユーザーがPythonを/usr/binのデフォルトパスに実装することを防止することである。

import RPi.GPIO as GPIO

この方法で、RPi.GPIOライブラリをインポートし、変数GPIOを定義して、次のコードでRPI.GPIOを置き換える。

import time

次のプログラムの時間遅延機能を行うために、時間パッケージをインポートしなければならない。

LedPin = 17

LEDはT字型拡張ボードのGPIO17、つまりBCM 17に接続している。

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

LedPinのモードを出力に設定し、初期レベルを高(3.3v)に設定する。

RPi.GPIO内のRaspberry PiのIOピンに番号を付けるには、BOARDとBCM二つの番号付与方法がある。レッスンでは、使用しているのはBCM番号である。入力または出力として使用しているチャンネルをすべて設定する必要がある。

GPIO.output(LedPin, GPIO.LOW)

GPIO17(BCM17)を0V(低レベル)に設定する。LEDのカソードはGPIO17に接続されているため、LEDが点灯する。

time.sleep(0.5)

0.5秒の遅延。ここで、ステートメントはC言語の遅延機能に似ており、単位は秒である。

def destroy():
   GPIO.cleanup()

スクリプトの終了後にすべてを消去する破棄関数を定義する。

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()が実行される。

現象画像

_images/image54.jpeg