raspberry Pi の開発環境として、最初からインストールされているPythonを用いてプログラミングを行う。
Pythonは初めてであり、備忘録もかねて記録する。またRaspberry piの特徴である拡張コネクタの制御には、Python 対応であるRPi.GPIOを用いる。
Python
- time・メソッド
- tkinter・メソッド
time・メソッド
<メソッド> sleep(DELAY)
<説明> 遅延
<引数> DELAY:遅延時間(秒)
<使用例>
import time
time.sleep(0.5) #0.5Sec 遅延
————————————————————————————–
<メソッド>
<説明>
<引数>
<使用例>
tkinter・メソッド
<メソッド>
<説明>
<引数>
<使用例>
import tkinter
Raspberry Pi おすすめのPythonモジュール
モジュール名 | 説明 | パッケージ名 |
RPi.GPIO | GPIOを利用 | python-rpi.gpio |
Pygame | ゲーム用 | python-pygame |
SimpleCV | ComputerVisonのためのAPI | |
Scipy | 科学計算 | python-scipy |
Numpy | 科学計算パッケージ | python-numpy |
Requests | HTTPライブラリー | python-requests |
PIL | 画像処理 | python-imaging |
wxPython | GUIフレームワーク | python-wxgth2.8 |
Pyserial | シリアルポートアクセス | python-serial |
PyUSB | FTDI-USBインターフェース |
インストール方法は sudo apt-get install python-serial
RPi.GPIOライブラリ(拡張コネクタ制御)
- ベーシック・メソッド
- 割込み処理・メソッド
- PWM・メソッド
- シリアル・メソッド
- SPI・メソッド
- I2C・メソッド
- picamera・メソッド
ベーシック・メソッド( デジタル入出力)
<メソッド> setmode(number)
<説明> 拡張コネクタのピン番号を指定する
<引数> number:GPIO.BOARD( コネクタのピン番号 ) または GPIO.BCM( GPIOの番号 )
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #ボードのピン番号で指定する
GPIO.cleanup #GPIO解放
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BCM) #GPIO番号で指定する
GPIO.cleanup #GPIO解放
————————————————————————————-
<メソッド> setup(channel,input/output,[pull_up_downまたはinitial])
<説明> 使用するGPIOピンの設定を行う
<引数>
channel: setmodeで指定したピン番号を設定する。
input/output:GPIO.INまたはGPIO.OUT、
pull_up_down:GPIO.PUD_UPまたはGPIO.PUD_DOWN
initial:GPIO.HIGHまたはGPIO.LOW( 出力ピンの場合は、初期状態をinitialで指定する )
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #ボードのピン番号で指定する
#[1チャンネル]
GPIO.setup(11,GPIO.OUT,initial = GPIO.LOW) #11ピンを出力で、初期値はLow
# [2チャンネル以上]
chan_list = [11,12]
GPIO.setup(chan_list,GPIO.OUT) #ピン番号11,12を出力に設定
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド> input(channel)
<説明> channelで指定されたピンの状態を返す。戻り値は0/GPIO.LOW/Falseまたは1/GPIO.HIGH/True
<引数> channel: setmodeで指定したピン番号を設定する。
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #ボードのピン番号で指定する
SW = 7 # ピン番号7をスイッチ入力
GPIO.setup(SW,GPIO.IN,pull_up_down = GPIO.PUD_UP) #7ピンをプルアップ
GPIO.setup(SW,GPIO.IN) #7ピンを入力に設定
key_in = GPIO.input(SW) #SWの状態を変数key_inに設定
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド> output(channel,state)
<説明> channelで指定したピンにstate(値:0/1)を出力する
<引数>
channel: setmodeで指定したピン番号を設定する。
state:0/GPIO.LOW/Falseまたは1/GPIO.HIGH/True
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #ボードのピン番号で指定する
#[1チャンネルの場合]
LED = 11 # ピン番号11 をLED出力とする。
GPIO.output(LED,1) #LED出力をHighに設定
GPIO.output(LED,0) #LED出力をLowに設定
#[2チャンネル以上の場合]
chan_list = [11,12]
GPIO.output(chan_list,0) #チャンネル11,12共 0に設定
GPIO>output(chan_list,(0,1)) #チャンネル11は0、チャンネル12は1に設定
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド> cleanup(channel)
<説明> channelで使用したGPIOを開放する。引数が指定されていない場合は全てのGPIOを開放する。プログラムの終了時必ず実行する。
<引数> channel: setmodeで割り当てたピン番号を指定する。
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #ボードのピン番号で指定する
GPIO.cleanup() #全GPIO解放
GPIO.cleanup(channel=11) #ピン番号11を開放
GPIO.cleanup((channel11,channel12)) #ピン番号11,12を開放
————————————————————————————–
割込み処理・メソッド
<メソッド> wait_for_edge(channel,edge,timeout)
<説明> channelで指定したピンにedgeのイベントが発生するまで待機する
<引数>
channel: setmodeで指定したピン番号を設定する。
edge:信号の立下り(GPIO.FALLING),立ち上がり(GPIO.RISING),両方(GPIO.BOTH)のいずれかを指定する。
timeout:タイムアウト時間
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #ボードのピン番号で指定する
channel = GPIO.wait_for_edge(11,GPIO.RISING,timeout=5000)
if channel is None:
print('Timeout occurred')
else:
print('Edge detected on channel 11')
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド> add_event_detect(channel,edge,[callback,bouncetime])
<説明> channelで指定したピンにedgeでしてしたイベントが発生した場合に、callback(関数)を実行する
<引数>
channel: setmodeで指定したピン番号を設定する。
edge:信号の立下り(GPIO.FALLING),立ち上がり(GPIO.RISING),両方(GPIO.BOTH)のいずれかを指定する。
callback: イベントが発生した場合に呼び出す関数を指定する。
bouncetime: チャタリングを除去するための待機時間をmsecで指定する。
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #ボードのピン番号で指定する
sw = 7 #ピン番号7をスイッチ入力とする。
def my_callback(sw) #割り込み処理関数
print('You pressed the button')
GPIO.add_event_detect(sw, GPIO.FALLING ,callback=my_callback, bouncetime=200)
#sw7の立下りエッジを検出するとmy_callbackを実行する。
#チャタリング時間は200ms
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド> event_detected(channel)
<説明> 事前にadd_event_detectメソッドで指定したchannelに、イベントが発生した場合にTrueを返す
<引数> channel: setmodeで指定したピン番号を設定する。
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #ボードのピン番号で指定する
#??? GPIO.event_detected(11) #ピン11のイベントを検出
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド> add_event_callback(channel,callback[,bouncetime])
<説明> 事前にadd_event_detectメソッドで指定したchannelに、イベントが発生した場合、関数callbackの実行を追加する
<引数>
channel: setmodeで指定したピン番号を設定する。
callback: イベントが発生した場合に呼び出す関数を指定する。
bouncetime: チャタリングを除去するための待機時間をmsecで指定する。
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #ボードのピン番号で指定する
#??? GPIO.add_event_callback(channel,callback[,bouncetime])
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド> remove_event_detect(channel)
<説明> channelに指定したピンのイベント検出を停止する。
<引数> channel: setmodeで指定したピン番号を設定する。
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #ボードのピン番号で指定する
sw=7
GPIO.remove_event_detect(sw) #イベント検出停止
GPIO.cleanup #GPIO解放
PWM・メソッド
<メソッド> PWM(channel,freq)
<説明> setmodeで指定したピン番号 を 周波数(freq)で動作するPWMの設定をする
<引数>
channel: setmodeで指定したピン番号を設定する
freq: PWMの動作周波数[Hz]を設定する
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #拡張コネクタのピン番号で指定する
LED = 11 # 拡張コネクタのピン番号 をLED出力とする。
p = GPIO.PWM(LED,1000) #PWM設定 frequency[Hz]
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド> start(dc)
<説明> PWMを指示されたデューティサイクル(dc)で開始する
<引数> dc:(0.0~100.0)
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #拡張コネクタのピン番号で指定する
LED = 11 # 拡張コネクタのピン番号 をLED出力とする。
p = GPIO.PWM(LED,1000) #PWM設定 frequency[Hz]
p.start(50.0) #PWM開始 dc(デューティ比:0.1-100.0)
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド> ChangeFrequency(freq)
<説明> PWM周波数を指示された周波数(freq)に変更する
<引数> freq:周波数[Hz]
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #拡張コネクタのピン番号で指定する
LED = 11 #拡張コネクタのピン番号 をLED出力とする。
p = GPIO.PWM(LED,1000) #PWM設定 frequency[Hz]
p.start(50.0) #PWM開始 dc(デューティ比:0.1-100.0)
p.ChangeFrequency(2000) #PWM周波数変更
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド> ChangeDutyCycle(dc)
<説明> 指示されたデューティ比(dc)に 変更
<引数> dc:(0.0~100.0)
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #拡張コネクタのピン番号で指定する
LED = 11 # 拡張コネクタのピン番号 をLED出力とする。
p = GPIO.PWM(LED,1000) #PWM設定 frequency[Hz]
p.start(50.0) #PWM開始 dc(デューティ比:0.1-100.0)
p.ChangeDutyCycle(30) #デューティ比 変更
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド> stop()
<説明> PWM出力停止
<引数> なし
<使用例>
import RPi.GPIO as GPIO #ライブラリ名をGPIOとして導入
GPIO.setmode(GPIO.BOARD) #拡張コネクタのピン番号で指定する
LED = 11 #拡張コネクタのピン番号 をLED出力とする。
p = GPIO.PWM(LED,1000) #PWM設定 frequency[Hz]
p.start(50.0) #PWM開始 dc(デューティ比:0.1-100.0)
p.stop() #PWM出力停止
GPIO.cleanup #GPIO解放
————————————————————————————–
<メソッド>
<説明>
<引数>
<使用例>
シリアル・メソッド
<メソッド>
<説明>
<引数>
<使用例>
import serial
ser = serial.Serial(DEVICE, BAUD) #DEVICE:シリアルポートデバイス、
#BAUT:ボーレート
ser = serial.Serial('/dev/ttyAMA0', 9600)
ser.write('some text') #'some text'を送信
while True:
print(ser.read()) #シリアル通信の応答を待つ
SPI・メソッド
<メソッド> open(bus,device)
<説明> bus、deviceで指定したSPIデバイスに接続する
<引数>
bus:番号(0のみ使用可)
device:番号(0または1が使用可)
<使用例>
import spidev #SPIライブラリをインポート
spi = spidev.SpiDev() #SpiDevオブジェクトのインスタンスを生成
spi.open(bus,device) #RaspberryPiではbusは0のみ、deviceは0 or 1
————————————————————————————–
<メソッド> close()
<説明> SPIデバイスを切り離す
<引数> なし
<使用例>
import spidev #SPIライブラリをインポート
spi = spidev.SpiDev() #SpiDevオブジェクトのインスタンスを生成
spi.open(bus,device) #RaspberryPiではbusは0のみ、deviceは0 or 1
spi.close() #SPI クローズ
————————————————————————————-
<メソッド> max_speed_hz
<説明> SPI通信スピード
<引数> なし
<使用例>
import spidev #SPIライブラリをインポート
spi = spidev.SpiDev() #SpiDevオブジェクトのインスタンスを生成
spi.open(bus,device) #RaspberryPiではbusは0のみ、deviceは0 or 1
spi.max_speed_hz = 1000000 #max_speed=1MHz
spi.close() #SPI クローズ
————————————————————————————–
<メソッド> bits_per_word
<説明> SPI通信ワード
<引数> なし
<使用例>
import spidev #SPIライブラリをインポート
spi = spidev.SpiDev() #SpiDevオブジェクトのインスタンスを生成
spi.open(bus,device) #RaspberryPiではbusは0のみ、deviceは0 or 1
spi.max_speed_hz = 1000000 #max_speed=1MHz
spi.bits_per_word = 8 #1ワード8ビット
spi.close() #SPI クローズ
————————————————————————————–
<メソッド> readbytes(len)
<説明> SPIデバイスからlenで指定したバイト数のデータを受信して、リストとして返す
<引数> len:受信するバイト数を指定する
<使用例>
import spidev #SPIライブラリをインポート
spi = spidev.SpiDev() #SpiDevオブジェクトのインスタンスを生成
spi.open(bus,device) #RaspberryPiではbusは0のみ、deviceは0 or 1
readbytes(len) #???
spi.close() #SPI クローズ
————————————————————————————–
<メソッド> writebytes([values])
<説明> リストvaluesで指定したデータをSPIデバイスに送信する
<引数> values:送信するデータをリストで指定する
<使用例>
import spidev #SPIライブラリをインポート
spi = spidev.SpiDev() #SpiDevオブジェクトのインスタンスを生成
spi.open(bus,device) #RaspberryPiではbusは0のみ、deviceは0 or 1
writebytes([value]) #???
spi.close() #SPI クローズ
————————————————————————————–
<メソッド> xfer([values])
<説明> リストvaluesで指定したデータをSPIデバイスに送信すると同時に、受信したデータをリストで返す。送信するバイトの区切りでCS信号がインアクティブになる
<引数> values: 送信するデータをリストで指定する
<使用例>
import spidev #SPIライブラリをインポート
spi = spidev.SpiDev() #SpiDevオブジェクトのインスタンスを生成
spi.open(bus,device) #RaspberryPiではbusは0のみ、deviceは0 or 1
ad = spi.xfer([value]) #???
spi.close() #SPI クローズ
————————————————————————————–
<メソッド> xfer2([values])
<説明> リストvaluesで指定したデータをSPIデバイスに送信すると同時に、受信したデータをリストで返す。送信中、CSはアクティブのまま
<引数> values: 送信するデータをリストで指定する
<使用例>
import spidev #SPIライブラリをインポート
spi = spidev.SpiDev() #SpiDevオブジェクトのインスタンスを生成
spi.open(bus,device) #RaspberryPiではbusは0のみ、deviceは0 or 1
ad = spi.xfer2([value]) #???
spi.close() #SPI クローズ
SPI・プロパティ
- bits_per_word:1ワード当たりのビット数を指定する。値は8~9
- cshigh:CS信号の値。ブール値で設定。デフォルトはFalse(CS信号がActiveLow)
- loop:ループバックに設定。動作テストなどに使用せる
- lsbfirst:LSBから送信するかどうかをブール値で設定。デフォルトはFalseでMSBから送信される
- max_speed_hz:最大バススピード。Hzで指定する
- mode:クロックと位相の組み合わせによる転送モードを設定する。設定値は0~3でデフォルトは0
- threewire:データの入出力を1本の信号線で行うかどうかをブール値で設定。デフォルトはFalseで入力と出力で別の信号線を使う
I2C・メソッド
<メソッド> write_quick(addr)
<説明> addrで指定したデバイスにリード/ライトビットのみを送信する
<引数> addr:デバイスのアドレス(7bit)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
————————————————————————————–
<メソッド> read_byte(addr)
<説明> addrで指定したデバイスから1バイトのデータを読む。戻り値は1バイトの読み込みデータ
<引数> addr:デバイスのアドレス(7bit)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
————————————————————————————–
<メソッド> write_byte(addr,val)
<説明> addrで指定したデバイスに、val(1バイト)を送信する
<引数>
addr:デバイスのアドレス(7bit)
val:送信データ(1バイト)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
————————————————————————————–
<メソッド> read_byte_data(addr,cmd)
<説明> addrで指定したデバイスにcmd(コマンド)を送り、1バイトのデータを読む。戻り値は1バイトの読み込みデータ
<引数>
addr:デバイスのアドレス(7bit)
cmd:送信するコマンド(1バイト)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
acc0 = bus.read_byte_data(add,cmd) #アドレス、cmd受信
————————————————————————————–
<メソッド> write_byte_data(addr,cmd,val)
<説明> addrで指定したデバイスにcmd(コマンド)を送り、val(1バイトデータ)を送信する
<引数>
addr:デバイスのアドレス(7bit)
cmd:送信するコマンド(1バイト)
val:送信データ (1バイト)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
bus.write_byte_data(add,val) #アドレス、val送信
————————————————————————————–
<メソッド> read_word_data(addr,cmd)
<説明> addrで指定したデバイスにcmd(コマンド)を送り、 1ワードのデータを読む。戻り値は1ワードの読み込みデータ
<引数>
addr:デバイスのアドレス(7bit)
cmd:送信するコマンド(1バイト)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
————————————————————————————–
<メソッド> write_word_data(addr,cmd)
<説明> addrで指定したデバイスにcmd(コマンド)を送り、 val(1ワードデータ)を送信する
<引数>
addr:デバイスのアドレス(7bit)
cmd:送信するコマンド(1バイト)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
————————————————————————————–
<メソッド> process_call(addr,cmd,val)
<説明> addrで指定したデバイスにcmd(コマンド)を送り、val(データ)に依存したデータを読む。戻り値は1ワードの読み込みデータ
<引数>
addr:デバイスのアドレス(7bit)
cmd:送信するコマンド(1バイト)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
————————————————————————————–
<メソッド> read_block_data(addr,cmd)
<説明> addrで指定したデバイスにcmd(コマンド)を送り、 ブロックデータを読む。
<引数>
addr:デバイスのアドレス(7bit)
cmd:送信するコマンド(1バイト)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
————————————————————————————–
<メソッド> write_block_data(addr,cmd,vals[])
<説明> addrで指定したデバイスにcmd(コマンド)を送り、 vals[]の32バイトデータを送信する
<引数>
addr:デバイスのアドレス(7bit)
cmd:送信するコマンド(1バイト)
vals[]:送信データ (バイト列)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
————————————————————————————–
<メソッド> block_process_call(addr,cmd,vals[])
<説明> addrで指定したデバイスにcmd(コマンド)を送り、vals[](データ)に依存したデータをブロックで読む。戻り値は指定したバイト数のブロックデータ
<引数>
addr:デバイスのアドレス(7bit)
cmd:送信するコマンド(1バイト)
vals[]:送信データ (バイト列)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
————————————————————————————–
<メソッド> read_i2c_block_data(addr,cmd)
<説明> addrで指定したデバイスにcmd(コマンド)を送り、戻り値はバイト数をコマンドを送り、 ブロックデータを読む。
<引数>
addr:デバイスのアドレス(7bit)
cmd:送信するコマンド(1バイト)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
————————————————————————————–
<メソッド> write_i2c_block_data(addr,cmd,vals[])
<説明> addrで指定したデバイスにcmd(コマンド)を送り、 vals[]の32バイトデータを送信する
<引数>
addr:デバイスのアドレス(7bit)
cmd:送信するコマンド(1バイト)
vals[]:送信データ (バイト列)
<使用例>
import smbus #I2Cライブラリをインポート
bus = smbus.SMBus(1) #SMBusオブジェクトのインスタンスを生成
————————————————————————————-
参考:拡張コネクタ(ハードウエア)
RaspberryPi3拡張コネクタpicamera・メソッド
<メソッド> カメラの設定
<引数>
- iso: カメラのISO値を設定。100,200,320,400,500,640,800,1600が設定できる。デフォルトは0(オート)
- awb_mode: オートホワイトバランスモード設定。off,auto,sunlight,cloudy,shade,tungsten,fluorescent,incandescent,flash,horizonが設定できる。デフォルトはauto
- brightness: ブライトネス(輝度)。0~100の範囲で指定する。
- contrast: コントラスト。-100~100の範囲で指定する。
- exposure_mode: 露出モードを設定off,auto,night,nightpreview,backlight,spotlight,sports,snow,beach,verylong,fixedfps,antishake,fireworksが設定できる。デフォルトはauto
- exposure_conpensation: 露光補正レベル。 -25~25の範囲で指定する。デフォルトは0
- saturation: 彩度。-100~100の間で設定。デフォルトは0
- sharpness: シャープネス。 -100~100の間で設定。デフォルトは0
- resolution:解像度。ピクセル数をwidthとheightの2つのパラメータのタプルで指定する
- video_stabilization: 手振れ補正機能。デフォルトはFalse
- zoom:ズームを設定。(x,y,w,h)タプルで、浮動小数点型の0.0~1.0の範囲で指定する。デフォルト値は(0.0,0.0,1.0,1.0)
- shutter_speed: シャッタースピード。マイクロ秒で指定する。デフォルトは0(自動)
- hflip:カメラからの出力を水平方向に反転する
- vflip:カメラからの出力を垂直方向に反転する
- rotation:イメージを回転する。設定できる値は0、90、180、270のいずれか
- image_effect:現在の画像にエフェクトをかける。none,negative,solarize,sketch,denoise,emboss,oilpaint,hatch,gpen,pastel,watercolor,film,blur,saturation,colorswap,washedout,posterise,colorpoint,colorbalance,cartone,deinterlace1,deinterlace2 を指定できる
- color_effects:カラーエフェクト。デフォルトはNone。値を設定する場合は、(u,v)というタプルで0~255の範囲で指定する。例えば(128,128)を指定すると白黒画像になる。
- meter_mode:カメラの計測モード。average,spot,backlit,matrixのいずれかを指定する。デフォルトはaverage
- video_denoise:ノイズ除去アルゴリズムを適用するかどうかを設定。Trueで適用。デフォルトはTrue
- frame:録画中のフレーム情報
- recording:録画中にTrueを返す
- framerate:ビデオポートのフレームレート
- preview:プレビューが動作しているときはPiRendererのインスタンスを返し、動作していないときはNoneを返す。PiRendererのアトリビュートを使ってプレビューを設定可能
- exif_tags:画像に追加されるexifタグ情報。追加または書き換えが可能
- led:GPIOを通じてカメラLEDの状態を設定する
<使用例>
import picamera #ライブラリをインポート
with picamera.Picamera() as camera #Picameraオブジェクトのインスタンスを生成
camera.iso = 100 #iso100に設定
camera.awb_mode = 'auto' #オートホワイトバランスモード設定。
camera.brightness = 70 #ブライトネス(輝度)を70に設定
camera.contrast = 0 #コントラスト
camera.exposure_mode = 'auto' #露出モードを設定
camera.exposure_compensation = 0 #露出補正レベル
camera.saturation = 0 #彩度
camera.sharpness = 0 #シャープネス
camera.resolution = (1024,768) #解像度
camera.video_stabilization = False #手振れ補正機能
camera.zoom = (0.0,0.0,1.0,1.0) #ズームを設定
camera.shutter_speed = 0 #シャッタースピード
camera.hflip = False #カメラからの出力を水平方向に反転する
camera.vflip = False #カメラからの出力を垂直方向に反転する
camera.rotation = 0 #イメージを回転する
camera.image_effect = 'none' #画像にエフェクトをかける
camera.color_effects = None #カラーエフェクト
camera.meter_mode = 'average' #カメラの計測モード
camera.video_denoise = True #ノイズ除去アルゴリズムを適用
————————————————————————————–
<メソッド> capture(output,[format,use_video_port,resize,splitter_port,options])
<説明> カメラから取得した画像データをoutputに保存する
<引数>
output: 保存先のファイル名。
format: 保存ファイル形式(None,jpeg,png,gif,bmp,yuv,rgb,rgba,bgr,bgra,rawのいづれかを選択) 。デフォルトはNone、この場合はoutputで指定したファイル名の拡張子から保存形式が判断される。
use_video_port: カメラのビデオポートを使用するかどうかを決定する。Trueの場合は ビデオポートを、Falseの場合はイメージポートを使用する。デフォルトはfalse。イメージポートの方が動作は遅いが高画質な画像を撮ることができる。ビデオポートを指定した場合はsplitter_portパラメータw指定可能。
resize: 撮影した画像サイズを変更する場合に使用する。デフォルトはNone。変更する場合はwidth、heightの2つのパラメータをタプルで渡す
splitter_port: ビデオスプリッターのポート番号を指定する。デフォルトは0。
option:jpeg時のみ有効(quality:0~100,thumnail:None or width,heigh and quality、bayer:true or False
<使用例>
import time
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (1280, 720)
camera.start_preview()
camera.exposure_compensation = 2
camera.exposure_mode = 'spotlight'
camera.meter_mode = 'matrix'
camera.image_effect = 'gpen'
# Give the camera some time to adjust to conditions
time.sleep(2)
camera.capture('foo.jpg')
camera.stop_preview()
————————————————————————————–
<メソッド> capture_continuous (output[,format,use_video_port,resize,splitter_port,options])
<説明> カメラから繰り返し画像データを取得してoutputに保存する
<引数>
caputureと同じ
outputには、次の2つの値を入れておくと、これらにformatメソッドの変換規則を適用した名前で保存される。
{capture}:1から始まる整数値が連番で付加される。
{timestamp}:日時が付加される。
<使用例>
import time
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (1280, 720)
camera.start_preview()
time.sleep(1)
for i, filename in enumerate(camera.capture_continuous('image{counter:02d}.jpg')):
print('Captured image %s' % filename)
if i == 100:
break
time.sleep(60)
camera.stop_preview()
————————————————————————————–
<メソッド> capture_sequence (outputs[,format,use_video_port,resize,splitter_port,burst,options])
<説明> カメラから取得した画像データをoutputsで与えられたリストの個数分、順次保存する。
<引数>
outputs:ファイル名のリスト
format:ファイル形式(jpeg,png,gif,bmp,yuv,rgb,rgba,bgr,bgra,rawのいづれか)
burst:True または False
その他オプション:captureと同じ
<使用例>
import time
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.start_preview()
start = time.time()
camera.capture_sequence((
'image%03d.jpg' % i
for i in range(120)
), use_video_port=True)
print('Captured 120 images at %.2ffps' % (120 / (time.time() - start)))
camera.stop_preview()
————————————————————————————–
<メソッド> close()
<説明> カメラを終了する。
<引数> なし
<使用例>
import time
import picamera
camera = picamera.PiCamera()
try:
camera.start_preview()
time.sleep(10)
camera.stop_preview()
finally:
camera.close()
————————————————————————————–
<メソッド> record_sequence(outputs[,format,resize,splitter_port,options])
<説明> カメラからの映像をoutputsで与えられたリストの個数分、順次録画する。
<引数>
outputs: 録画した映像を保存するファイル名のリスト
その他オプション:start_recordingと同じ。 formatのデフォルト値はh246。
<使用例>
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
for filename in camera.record_sequence(
'%d.h264' % i for i in range(1, 11)):
camera.wait_recording(5)
————————————————————————————–
<メソッド> split_recording(output[,splitter_port])
<説明> 録画の出力先をoutputで指定した先に切り替える
<引数>
output:ファイル名(録画した画像を保存する)
splitter_port:ポート番号(ビデオスプリッターのポート番号。デフォルトは1)
<使用例>
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.start_recording('1.h264')
camera.wait_recording(5)
for i in range(2, 11):
camera.split_recording('%d.h264' % i)
camera.wait_recording(5)
camera.stop_recording()
————————————————————————————–
<メソッド> start_preview(options)
<説明> プレビューウインドウを表示する。
<引数> options:picameraのプロパティを指定。プレビューの表示中に変更可能
<使用例>
import time
import picamera
camera = picamera.PiCamera()
try:
camera.start_preview()
time.sleep(10)
camera.stop_preview()
finally:
camera.close()
————————————————————————————–
<メソッド> start_recording(output[,format,resize,splitter_port,options])
<説明> カメラからの録画を開始する。
<引数>
output:ファイル名(録画した映像を保存するファイル名)
format:None,h246,mjpeg,yuv,rgb,rgba,bgr,bgra(映像のファイル形式。デフォルトはNone。この場合はoutputで指定したファイル名の拡張子から、保存形式が判断される)
resize:Noneまたはwidth,heigh(録画した映像のサイズを変更する。デフォルトはNone。変更する場合はwidth,heighの2つのパラメータをタプルで渡す。)
splitter_port:ポート番号(ビデオスプリッターのポート番号。デフォルトは1)
options:ファイル形式がh264の場合、以下のオプションが指定可能
profile:h246のプロファイルを指定デフォルトはhigh。baseline,main、high、constrainedが指定できる。
intra_period:キーフレームを指定。デフォルトはNone。フレーム数を整数値(32ビット)で指定。
inline_header:Trueを指定するとストリーム内に「supplemental Enhancement Information」を含める。デフォルトはFalse。
motion_output:動きベクトル検出データの出力先(ファイル名)を指定。デフォルトはNoneで、データは出力されない。
全てのファイル形式で、以下のオプションが指定可能
bitrate:ビットレート。デフォルトは17Mbps。最大値は25Mbps。0を指定するとビットレートの制御は行わない。
quality:h246形式では10(高品質)~40(低品質)を指定(通常は20~25)。mjpeg形式の場合、1(低品質)~100(高品質)を指定。0を指定するとリーズナブルな品質になる。
<使用例>
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.start_preview()
camera.start_recording('foo.h264')
camera.wait_recording(60)
camera.stop_recording()
camera.stop_preview()
————————————————————————————–
<メソッド> stop_preview()
<説明> プレビューウインドウを閉じる
<引数> なし
<使用例>
import time
import picamera
with picamera.PiCamera() as camera:
camera.start_preview()
try:
for i in range(100):
camera.brightness = i
time.sleep(0.2)
finally:
camera.stop_preview()
————————————————————————————–
<メソッド> stop_recording([splitter_port])
<説明> 録画を停止する。
<引数> splitter_port:ビデオスプリッターのポート番号。デフォルトは1
<使用例>
import io
import picamera
stream = io.BytesIO()
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.start_recording(stream, format='h264', quality=23)
camera.wait_recording(15)
camera.stop_recording()
————————————————————————————–
<メソッド> wait_recording([timeout,splitter_port])
<説明> timeoutで指定した秒数ビデオのエンコードを待機する。
<引数>
timeout:待機する秒数。デフォルトは0。
splitter_port:ビデオスプリッターのポート番号。デフォルトは1
<使用例>
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.start_recording('1.h264')
camera.wait_recording(5)
for i in range(2, 11):
camera.split_recording('%d.h264' % i)
camera.wait_recording(5)
camera.stop_recording()
————————————————————————————–
参考:CAMERAコネクタ(FCC 15ピン)
ピンNo | 内容 |
1 | GND |
2 | CAM1_DN0 |
3 | CAM1_DP0 |
4 | GND |
5 | CAM1_DN1 |
6 | CAM1_DP1 |
7 | GND |
8 | CAM1_CN |
9 | CAM1_CP |
10 | GND |
11 | CAM_GPIO |
12 | CAM_CLK |
13 | CAM_SCL |
14 | CAM_SDA |
15 | 3.3V |