正規のオンライン小売業者:
紹介
前回の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