MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
インストール - RPi.GPIOのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
インストール - RPi.GPIO
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == RPi.GPIOモジュールは、Raspberry PiのGPIOピンを制御するための基本的なPythonモジュールである。<br> このモジュールを使用することにより、LEDの点灯、スイッチの入力検知、センサからのデータ読み取り等、GPIO (汎用入出力) ピンを通じて外部の電子部品と通信できる。<br> <br> このモジュールのメリットは、簡便な構文でありながら、デジタル入出力、PWM出力、割り込み処理等、多岐にわたる機能を提供していることである。<br> ビギナーでも扱いやすく、高度な制御も可能なバランスの取れたモジュールとなっている。<br> 同時に、高度な制御も可能で、複雑なプロジェクトにも対応できる柔軟性を備えている。<br> <br> また、豊富なドキュメントやサンプルコードが提供されており、ビギナーでも学習しやすい環境が整っている。<br> <br> まず、重要な概念として、ピン番号の指定方法がある。<br> BCMモードとBOARDモードという2つの方式が存在しており、多くの開発者は理解のしやすさからBCMモードを採用している。<br> * BCMモード *: GPIO番号を使用 * BOARDモード *: 物理的なピン番号を使用する。 <br> GPIOピンの設定には、入力と出力の2つの基本モードがある。<br> * 入力モード *: スイッチの状態読み取りやセンサからのデータ取得などが可能である。 *: 入力ピンには、プルアップやプルダウン抵抗の設定もできる。 * 出力モード *: LEDの点灯や電子部品の制御等ができる。 <br> 実際の制御においては、出力ピンではHIGH (オン) と LOW (オフ) の2つの状態を制御できる。<br> 入力ピンでは、接続された部品の状態 (ON / OFF) を読み取ることができる。<br> <br> より高度な機能として、イベント検出機能 (割り込み検出) がある。<br> これは、ピンの状態変化を監視して、変化が発生した時に特定の処理を実行する機能である。<br> 例えば、特定の物理スイッチが押下された時、特定の関数を呼び出すことが可能である。<br> <br> また、PWM (パルス幅変調) 出力にも対応しており、LEDの明るさを段階的に制御したり、モータの速度を制御したりすることも可能である。<br> <br> プログラム終了時には、使用したGPIOピンを適切に解放することが重要である。<br> これにより、次回使用時に問題が発生することを防ぐことができる。<br> <br><br> == RPi.GPIOモジュールのインストール == まず、Raspberry Pi OSのアップデートを行う。<br> sudo apt update sudo apt upgrade <br> 次に、pipのインストールを行う。<br> sudo apt install python3-pip <br> Python3のRPi.GPIOモジュールをインストールする。<br> sudo apt install python3-rpi.gpio # または sudo pip3 install RPi.GPIO <br><br> == 確認 == Python 3を使用して、モジュールをインポートできることを確認する。<br> このとき、import RPi.GPIOコマンドは出力を返さなければ成功である。(モジュールが正常にインポートされたことを意味する)<br> python3 <br> import RPi.GPIO <br><br> == GPIOのピン番号の指定 == まず、プログラムの冒頭で以下に示すようにモジュールをインポートする。<br> <br> <syntaxhighlight lang="python"> import RPi.GPIO as GPIO </syntaxhighlight> <br> GPIOにはピン番号の指定方法として2つのモードがある。<br> 多くの開発者はBCMモードを使用することが多い。<br> * BCMモード *: GPIO番号 (例: GPIO18) を使用する。 * BOARDモード *: 物理的なピン番号を使用する。 <br> <syntaxhighlight lang="python"> GPIO.setmode(GPIO.BCM) # BCMモードを使用 # または GPIO.setmode(GPIO.BOARD) # BOARDモードを使用 </syntaxhighlight> <br><br> == 入出力ピンの設定 == GPIOピンの入力 / 出力を明確に指定する必要がある。<br> <br> <syntaxhighlight lang="python"> # 出力ピンの設定例 (LED接続等) GPIO.setup(18, GPIO.OUT) # 入力ピンの設定例 (スイッチ接続等) GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP) </syntaxhighlight> <br> <syntaxhighlight lang="python"> // 使用例 (LEDのON / OFF 制御) # LEDを点灯 GPIO.output(18, GPIO.HIGH) # LEDを消灯 GPIO.output(18, GPIO.LOW) </syntaxhighlight> <br> <syntaxhighlight lang="python"> // 使用例 (入力の読み取り) # スイッチの状態を読み取る switch_state = GPIO.input(23) </syntaxhighlight> <br><br> == イベント検出 (割り込み制御) == イベント検出 (割り込み制御) を使用することにより、特定の物理スイッチが押下された場合等の状態変化を検知して、特定の関数を実行できる。<br> <syntaxhighlight lang="python"> def button_pressed(channel): print(f"ボタンが押されました!ピン:{channel}") GPIO.add_event_detect(23, GPIO.FALLING, callback=button_pressed, bouncetime=200) </syntaxhighlight> <br><br> == GPIOのクリーンアップ == 以下に示す理由から、プログラム終了時には、必ずGPIOのクリーンアップを行うことが推奨されている。<br> 特に、電子工作やハードウェア制御を行う場合は、安全性の観点からも非常に重要な処理である。<br> <br> * 安全性の確保 *: クリーンアップを行わない場合、GPIOピンが前回の状態を保持したままになる可能性がある。 *: これは接続されている電子部品に予期せぬ電流が流れ続けることを意味しており、部品の損傷やショートの原因となりかねない。 *: 特に、LEDやモータ等のアクティブな部品が接続されている場合、この問題は重要である。 *: <br> * メモリ・リソースの解放 *: GPIOの設定はシステムメモリ内に保持される。 *: クリーンアップを行わない場合、これらの設定が不要になった後もメモリを占有し続けることになる。 *: 長時間稼働するシステムや複数のプログラムを実行する環境では、このメモリの効率的な利用が重要である。 *: <br. * 次回起動時の問題回避 *: クリーンアップを行わずにプログラムを終了した場合、次回のプログラムを実行した時に「このピンは既に使用されている」というようなエラーが発生する可能性がある。 *: これは、特に開発時のデバッグを困難にする要因となる。 *: <br> * 割り込み処理の適切な終了 *: イベント検出等の割り込み処理を使用している場合、クリーンアップによってこれらの処理が適切に終了される。 *: これにより、システムリソースの無駄な消費を防ぎ、次回の実行時に問題が発生することを防ぐことができる。 *: <br> * システムの安定性維持 *: Raspberry Piは組み込みシステムとして使用されることが多く、長期的な安定性が求められる。 *: 適切なクリーンアップを行うことにより、システム全体の安定性が向上して、予期せぬ動作を防ぐことができる。 <br> <syntaxhighlight lang="python"> GPIO.cleanup() </syntaxhighlight> <br><br> == RPi.GPIOを使用したサンプルコード == <syntaxhighlight lang="python"> # Import necessary modules import RPi.GPIO as GPIO import time # Set up GPIO pins GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) pins = [17,18] for pin in pins: GPIO.setup(pin,GPIO.OUT) GPIO.output(pin,1) # Set variables (change these to change behaviour as desired) runcycles = 2 ontime = 45 # minutes offtime = 20 # minutes # Convert run times from minutes to seconds for sleep function ontime *= 60 offtime *= 60 # Run furnace on cycle cycle = 0 try: while cycle < runcycles: cycle += 1 GPIO.output(17,0) print("Furnace turned on for %d seconds. Cycle %d of %d." %(ontime, cycle, runcycles)) time.sleep(ontime) GPIO.output(17,1) if cycle == runcycles: break print("Furnace paused for %s seconds. %s heat cycles remaining." %(offtime, runcycles - cycle)) time.sleep(offtime) except KeyboardInterrupt: # if Ctrl C is pressed... GPIO.output(17,1) # shut off the boiler print("Program stopped and furnace shut off.") # print a clean exit message print("Heat cycles completed.") </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Raspberry_Pi]]
インストール - RPi.GPIO
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse