L-chikaキットで遊ぼう(python編)

2018.03.24(sinse2018.03.05)
サイトマップ 、 トップ  <  ラズパイの部屋 < . > L-chikaキットで(ターミナル編操作)

L-chikaキットで(ターミナル編操作)で、ターミナルから、コマンド発行してGPIOの入出力の操作方法を示しました。
次に、RPiライプラリをつかってpythonプログラムによる操作する場合に使うキーワードを紹介しましょう。 PWMによる仮想アナログ出力の話とかにも少し触れる。

参考資料
 キット販社の説明書(おかしくない?と質問したらきちんと改訂版作ってくれました)

 まめりうむ さん(RPiライブラリのページをリンクさせていただきました)

 QiitaさんからRPi関連ページをリンク

 最新RaspberryPiで学ぶ電子工作 講談社(ブルーバックス) 金丸隆志著

pyton版
ちなみにプログラム書いたら、拡張子は、”.py”が標準らしい

------pytonプログラムであることの宣言---------

# 使用言語(環境)宣言:
#  実行するホスト環境pytonを明示  
#  (2018.03.22) 次の行は#で始まってもコメント行ではなく、以降つづくテキスト(プログラム)をpyton(インタプリタ―)で実行する!ことを示す。
#  たとえば、"test.py"というサイトンプログラムを作ると、 "$ ./test.py" と、入力すると、pyton管理下で、pyton文法を解釈実行される($はプロンプトです)。
#  無いとlinux標準コマンドに存在しないと怒られるはず(L-chikaキットターミナル編のサンプルソース中の"#!/bin/bash"も同じ。
#  個人的には貧相な機能のbashではなく、”zsh”使いたいのだが、ラズパイへの導入方法調べていない。 
#  ヒストリーとか補完機能とか素敵です(MSDOSのvz環境も懐かしい)。
#  シェルのそのような機能になれると、win3.1もwin95もたこ(エクセルのために泣く泣くwin2000へ移行)。


#!/usr/bin/python

------RPiライブラリ使用宣言---------

# ライブラリの宣言(他にもあるらしいがとりあえずこれがお勧めらしい)
# 2015年ころのweb情報では↓のライブラリインストールが必要だったらしいが、”NOOBS_v2_4_5”では不要(財団公認かな?)
# $ sudo apt-get install python-rpi.gpio

import RPi.GPIO as GPIO

------出力使用法---------

# 出力宣言:
PIO.setup(27, GPIO.OUT)

# 出力:(ノーマル編)
GPIO.output(27, GPIO.HIGH)
GPIO.output(27, GPIO.LOW)

# ちなみに、”GPIO.HIGH”の代わりに、"True",とか"1"が使えるらしい。GPIO_LOWの代替えも推して知るべし(Falseとか 0 )

# 出力:(PWM編)

# GPIO27 に、100 Hzサイクル周波数のPWM出力(オブジェクト指向記述とかホン嫌い カムバーック!!カーニハン&リッチ―)。
LED = GPIO.PWM(27, 100)
LED.start(0)
LED.ChangeDutyCycle(50) # パラメータは0~100のディューティ

# 100Hz程度のPWMはまあ実用的。1kHzになると割り込み等の関係か波形がときどき暴れはじめる。10kHzではまったくだめでしょう。
# モータサーボ等には10k帯域いるかどうか良く解らんが、プログラム(ライブラリ)程度での対応では、失格だと思う。
# どうりでモータ用(かな?)PWM専用アドオンボードが売られているわけですね。 まあ、LEDの調光程度ならつかえるかな。
# ゆっくり動く(平均処理ができる)マブチモータ制御のラジコン等が暴走するかどうかというのはまた別の話でしょうけど。

-------入力使用法--------

# 入力

# 入力宣言 GPIO17をプルアップ抵抗付入力とする

GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# 第三引数”pull_up_down”の指定をしない場合、プルアップダウン抵抗がない素の入力ピンになる。
# シェルコマンド編で入力設定すると自動的に抵抗が着くように感じたが、現状素の入力設定方法良く解らないでいる(リセット時RS232C関連出力ピンTxDは確かに素の入力設定になるようなのでそういう機能があるのが正しい気がする)。
# 2ケ目の","の後ろの第三引数空欄ではなく、2つ目の","も削除して、単に、引数2ケで可らしい
# データを読む方法は

data = GPIO.input(17)

-------条件分岐 if/(then)/else--------

# コロン":"をおいて複文実行可能。 basic言語でいうthenというキーワードなし

if  条件 :

実行文1
実行文2

else:

実行文3
実行文4

条件分岐の次の実行文


条件文の書き方例
  比較一致 data1 == data2
  否定(条件に当たらないという条件) !=
  比較対象の例えばハイレベルは、"GPIO.HIGH"とか、"True"とか、"1"と表示比較してよいらしい。

-------条件ループwhile--------

#  よくわからんループ記述 "while 条件 :" (2018.03.22)
#  条件が信であるあいだ一連のコマンド実行while文行末のコロン":"によって、次の行からの字下げされた一群を繰り返す
# 字下げは、デフォルト4文字(IDLE環境では自動に整形)。字下げ量が文毎ことなると、エラーの表示がうっとおしい
# せめて、()や{}の範囲とかいうわかりやすい表現がいいなぁ (エディタはよいとして、ここに記載するためのHTMLエディタ(ホームページビルダー)で字下げ実行大変)

while True:

GPIO.output(27, GPIO.HIGHT)
sleep(0.5)
GPIO.output(27, GPIO.LOW)
sleep(0.5)

# time.sleep()ではなく、sleep()の表記になった理由は、後ろのタイマー利用を参照

-----キーボード強制-終了---------

# 例えば無限ループのプログラムをキーボドの”^c”で強制終了する場合、本来次節のGPIOの終了処理が必要となる。
# キーボードからの強制終了の場合に、後で手動終了ではなく、プログラムがこれを実行する後処理記述

try:

(字下げの実行ループ群)

except KeyboradInterrupt:

# 単に終了処理ルーチンに移るだけなので、素通りする命令(pass)で、字下げループを無理やり作る構成する
pass

# 終了宣言(GPIOの初期化)

GPIO.cleanup()

# 命令実行しようとしたとき"This channel is already in use"のエラーがでたら、上記のクリア命令が有効らしい
# GPIO27だけ終了する場合は、

GPIO.cleanup(27)

------タイマー利用---------

# タイマー利用
# ちなみにLED焼切るのもおかしいし、注意を引くのは連続ではなく点灯が望ましいので、ので時間関数をつかう。
# プログラム先頭付近に

import time

# 0.1秒にスリープ

time.sleep(0.1)

#  (2018.03.22) いろいろな定義を含むtime全体を使うのでなく、スリープ関数だけでよいなら先頭で関数単体利用宣言する

from time import sleep

# その時の実行は 単に↓で可

sleep(0.1)

# (2018.03.24)  ちなみに、whileループ等で連続コマンド実行させると、インタプリタ―がCPU独占して、ラズパイ本体OSが悲鳴をあげるらしい。
# ループ中に”sleep(0.01)”程度の開放時間をCPUに与えるべきと、”RaspberryPiで学ぶ電子工作”に記載がありました。

-------python開発環境--------

(2018.03.22) ちなみに、今のところテキストエディタ+コンソール派ですが、ビジュアル環境(IDLE)からプログラム編集実行することもできます。文法チェックとかもあるし、字下げなどのサポート機能もあるので、こっちから勉強するほうがいいかな?(nanoエディタもいまいち手になじまないので、切り替える方がいいかも)
LXターミナルではなく、デスクトップで、左上のラズベリーアイコン下の、プルグラム→Pyton2(IDLE)とか、Pyton3(IDLE)をクリックすると、ビジュアル開発環境が起動します。ここまで実行したプログラムをファイル→オープンで、開いて実行し、問題なし(先頭の#!pyton の記述は不要。サイトン自らの監理下実行)。メニューからは面倒なので、コンソールからIDLEって、入力すると、メッセージがいっぱい出て起動できませんでした(素人なので何が気に入らないのかわかんねぇ 勉強してればおいおいわかるでしょう)
え?pyton2とpyton3の相違は? 素人なのでまったくわかりません。これから勉強するんだから、pyton3を選んでますけど。

-------雑談編--------

さて、どんなプログラムを書いてみようか?? あまり作りたいものがないなぁ 三色LEDで白色に見える混合比でも探してみようかな?

どうもオブジェクト指向というのか、pythonプログラム良く解らん。レジスタベースの解説発見。カーニハン&リッチ仕様で遊べるこっちで対応考えようかなぁ? 直感的にわかりやすい気がするしい。でもGCCってほとんど使ったことないしぃ..

----------------------------------------------------
サイトマップ 、 トップ  <  ラズパイの部屋< . > L-chikaキットで(ターミナル編操作)