正規のオンライン小売業者:
![]() |
![]() |
![]() |
紹介
前回の2回のレッスンでは、Raspberry Piのプログラムを使って信号を出力し、LEDを点灯させる方法を紹介しました。今回のレッスンでは、ボタンスイッチから入力信号を取得し、プログラムを介してLEDを点灯させる方法を紹介します。
1 * ブレッドボード
1 * LED 1 * ボタン
1 * 抵抗器 (200Ω)
1 * 抵抗器 (10KΩ)
ジャンパーワイヤー
1 * T-Extension Board with 40-Pin Cable
ソフトウェアの準備
注: 今回のレッスンでは、PC上のPuTTyを使用してRaspberry Piをリモート制御します。Raspberry Piの設定方法については、レッスン1「Raspberry Piのはじめ方」を参照してください。 lesson 1: getting started with raspberry pi.
ボタンは一般的な部品で、回路をオン/オフするスイッチとして機能します。当キットのボタンには4つのピンがあり、写真に示されています。
ピン1とピン2は導電性であり、ピン3とピン4も導電性です。ボタンを押すと、ピン1とピン3が導通し、ピン2とピン4が導通します。写真に示されている通りです。
ボタンを押していない場合
ボタンを押した場合
このプロジェクトでは、ボタンをB17に接続し、LEDをB18に接続します。回路グラフは以下の通りです。

回路グラフのB17は、BCM GPIO#17または物理ピン#11またはwiringPi#0(ゼロ)を意味し、B18はBCM GPIO#18または物理ピン#12またはwiringPi#1を意味します。
注:BはBCM(Broadcomピン番号)を意味します。BCMピン#、物理ピン#、wiringPi#がわからない場合は、レッスン2「Raspberry Pi GPIOの紹介」を確認してください: Introduction Of Raspberry Pi GPIO
ボタンが押されていない場合、B17(wiringPi#0(ゼロ))の入力電圧は、10KΩの抵抗器を介して3.3Vに引き上げられます。サンプルコードがB17から高電圧を読み取った場合、LEDを消すためにB18(wiringPi#1)に高レベルを出力します。
ボタンが押されている場合、B17(wiringPi#0(ゼロ))の入力がゼロに設定され、サンプルコードはB18(wiringPi#1)にゼロ電圧を出力し、LEDを点灯させます。
ハードウェアの設定
以下の接続グラフに従って回路を組み立てます。

C言語のユーザーとPython言語のユーザー向けに、2種類のコードを提供します。
注意:必ずwiringpiをインストールしてください。hereをクリックして、wiringpiがインストールされているかどうかを確認し、wiringpiをインストールする方法について詳しく学ぶことができます。
Step 1) ターミナルで以下のコマンドを入力して、osoyoo.comからbutton_led.cのサンプルコードをダウンロードしてください。
pi@raspberry:~ $ cd ~
pi@raspberry:~ $ sudo wget http://osoyoo.com/driver/pi3_start_learning_kit_lesson_7/button_led.c

注: サンプルコードファイルをカスタマイズしたい場合は、以下のコマンドをターミナルで入力してnanoエディタを使用してソースコードを編集できます。
pi@raspberry:~ $ sudo nano button_led.c

Step 2) コードをコンパイルする
pi@raspberry:~ $ gcc -Wall -o button_led button_led.c -lwiringPi
gcc: はGNUコンパイラコレクションです。自分でCコードを書いてコンパイルして実行するには、gccをマスターする必要があります。gccについての詳細はこちらをご覧ください here
-Wall: コードをコンパイルするときにエラーが発生した場合、詳細なエラーを取得するためのものです。
-o: コンパイル後のファイル名を任意で指定できます。ここでは、flow_ledという名前を指定します。
flow_led.c: コンパイル元のファイルを意味します。
-lwiringPi: ライブラリwiringPiをロードするためのもので、lはlibrary(ライブラリ)の略です。
Step 3) プログラムを実行する
pi@raspberry:~ $ sudo ./button_led

Step 4) プログラムの結果
プログラムが実行されると、ターミナルに最初にコードを表示するメッセージが表示され、その後LEDがオフになります。ボタンを押すと、LEDが点灯し、ターミナルにLED Onと表示されます。ボタンを離すと、LEDが消灯し、ターミナルにLED Offと表示されます。プログラムを停止する場合は、ターミナルに移動してCtrl + Cと入力してください。
#include < wiringPi.h>
#include < stdio.h>
#include < stdlib.h>
//setup wirping#0(BCM_GPIO17) as Button pin
#define ButtonPin 0
//setup wiringPi#1(BCM_GPIO18) as LED pin
#define LedPin 1
int main(void){
// When initialize wiring failed, print messageto screen
if(wiringPiSetup() == -1){
printf("setup wiringPi failed!");
exit(1);
}
//set LedPin BCM18 working at OUTPUT mode
pinMode(LedPin, OUTPUT);
//set ButtonPin BCM17 working at INPUT mode
pinMode(ButtonPin, INPUT);
// Pull up to 3.3V,make GPIO1 a stable level
pullUpDnControl(ButtonPin, PUD_UP);
printf("\n");
printf("|**************************************|\n");
printf("| Button control LED |\n");
printf("| ------------------------------ |\n");
printf("| LED connect to GPIO1 |\n");
printf("| Button connect to GPIO0 |\n");
printf("| |\n");
printf("| Press button to turn on LED. |\n");
printf("| |\n");
printf("| OSOYOO|\n");
printf("|**************************************|\n");
printf("\n");
digitalWrite(LedPin, HIGH);
printf("|****************|\n");
printf("| LED off... |\n");
printf("|****************|\n");
for(;;){
// Indicate that button has pressed down
if(digitalRead(ButtonPin) == 0){
// Led on
digitalWrite(LedPin, LOW);
printf("|****************|\n");
printf("| ...LED on |\n");
printf("|****************|\n");
delay(400);
}
else{
// Led off
digitalWrite(LedPin, HIGH);
printf("|****************|\n");
printf("| LED off... |\n");
printf("|****************|\n");
delay(400);
}
}
return 0;
}
Python言語を使用する場合、以下の手順に従ってください。
Python言語でプログラミングする場合、通常はRasbian Jessie OSに付属するGPIOライブラリであるRPi.GPIOを使用します。ここをクリックすると、RPI.GPIOとPythonについて詳しく学ぶことができます。
Step 1) ターミナルコマンドに従って、サンプルのPythonコードを/home/piにダウンロードしてください。
pi@raspberry:~ $ cd ~
pi@raspberry:~ $ sudo wget http://osoyoo.com/driver/pi3_start_learning_kit_lesson_7/button_led.py

注意:
サンプルコードファイルをカスタマイズする場合は、ターミナルで以下のコマンドを入力してソースコードを編集することができます。
pi@raspberry:~ $ sudo nano button_led.py

Step 2) プログラムを実行します。
pi@raspberry:~ $ sudo python ./button_led.py

Step 3) プログラムの結果
プログラムが実行されると、ターミナルに最初にコードの印刷メッセージが表示されます。ボタンを押すと、LEDが点灯し、ターミナルにLED Onと表示されます。再度ボタンを押すと、LEDが消灯し、ターミナルにLED Offと表示されます。プログラムを停止したい場合は、ターミナルに移動し、Ctrl + Cコマンドを入力してください。
Pythonコードの説明
import RPi.GPIO as GPIO import time #set BCM_GPIO 17(GPIO0) as button pin ButtonPin = 17 #set BCM_GPIO 18(GPIO1) as LED pin LedPin = 18 #set led status to True(OFF) led_status = True
a.Python GPIOライブラリとtimeライブラリをインポートします。GPIOライブラリは、PythonでGPIOとのやり取りをするためのライブラリです。処理を簡素化するための役割を果たします。timeライブラリは、遅延を設定できるようにするために必要です。さもないと、点滅が速すぎて気づかないかもしれません。LEDとボタンのGPIOを定義します(ここではBCM#を使用)。
def setup():
GPIO.setwarnings(False)
#set the gpio modes to BCM numbering
GPIO.setmode(GPIO.BCM)
#set all LedPin's mode to output,and initial level to HIGH(3.3V)
GPIO.setup(LedPin,GPIO.OUT,initial=GPIO.HIGH)
#set ButtonPin's mode to input,and pull up to high(3.3v)
GPIO.setup(ButtonPin,GPIO.IN,pull_up_down = GPIO.PUD_UP)
#set up a falling detect on ButtonPin,and callback function to ButtonLed
GPIO.add_event_detect(ButtonPin,GPIO.FALLING,callback = ButtonLed)
pass
b. pinMode(ButtonPin, INPUT)とpullUpDnControl(ButtonPin, PUD_UP)は、ButtonPinをプルアップ入力に設定します。プログラムはボタンピンからレベルを何度も取得します。ボタンが押されている間は、プログラムは低レベルを取得し、LEDPinに低レベルを出力するため、LEDが点灯します。それ以外の場合、LedPinは高レベルになり、LEDは消灯します。setup関数は、LEDPinを出力モード、ボタンをプルアップ入力モードに設定し、ButtonPinでの落下を検出するように設定します。Raspberry PiがButtonPinの落下を検出すると、プログラムはコールバック関数に戻って、終了コードを実装します。
def ButtonLed(ev=None):
global led_status
# Switch led status(on-->off; off-->on)
led_status = not led_status
GPIO.output(LedPin, led_status)
if led_status:
print('|*************|')
print('| LED OFF... |')
print('|*************|')
print('\n')
else:
print('|*************|')
print('| ...LED ON |')
print('|*************|')
print('\n')
c. コールバック関数では、LedPinのレベルが反転します。つまり、LedPinのレベルがオフの場合、LEDはオンになり、LedPinのレベルがオンの場合、LEDはオフになります。
def main():
# Print messages
print_message()
while True:
# Don't do anything.
time.sleep(1)
d. main関数は、終了を待つ以外の何もしない関数です。
DownLoad Url osoyoo.com