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
SimpleCVComputerVisonのためのAPI
Scipy科学計算python-scipy
Numpy科学計算パッケージpython-numpy
RequestsHTTPライブラリーpython-requests
PIL画像処理python-imaging
wxPythonGUIフレームワークpython-wxgth2.8
Pyserialシリアルポートアクセスpython-serial
PyUSBFTDI-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内容
1GND
2CAM1_DN0
3CAM1_DP0
4GND
5CAM1_DN1
6CAM1_DP1
7GND
8CAM1_CN
9CAM1_CP
10GND
11CAM_GPIO
12CAM_CLK
13CAM_SCL
14CAM_SDA
153.3V