AS-E405 Raspberry Pi GPIO実験ボード

HOME > サポート > 技術情報 > AS-E405 Raspberry Pi GPIO実験ボード
AS-E405 Raspberry Pi GPIO実験ボード用の使用例とサンプルコードの紹介です。

本サンプルコードは

本体:Raspberry Pi 3
OS:2016-05-27-raspbian-jessie
Python:2.7.9

で作成しています。


①Raspberry Piのセットアップ

・ネットワーク設定
・日本語化
など初期設定を済ませておいてください。

※設定手順についてはRaspberry Pi関連書籍や関連サイトを参考にしてください。


②Raspberry Pi上でのPythonの使い方について

デスクトップの適当な場所で「右クリック→新規作成→空のファイルを作成」と操作し、ファイル名をtest.pyとして保存してください。

作成したtest.pyをダブルクリックするとPythonの開発環境でファイルが開きます。

test.pyに以下のコードを書いて保存します。
#!/usr/bin/python
print "Hello, world!"

保存(ctrl+s)してキーボードのF5を押すとShellという別ウィンドウが開きコードが実行され
Hello, world!
と表示されるはずです。


以降はGPIO、温度センサー、A/Dコンバーターのサンプルコードを紹介します。


③GPIOの使用例

ジャンプワイヤで
・GPIO21とLED1
・GPIO20とLED2
・GPIO7とSW1
・GPIO8とSW2
を接続します。




以下のコード(GPIO.py)を実行すると
・LED1とLED2が交互に点滅
・1秒ごとにSW1とSW2の状態が0(OFF)/1(ON)で表示
が行われます。
#!/usr/bin/python
# coding: utf-8
 
#モジュールをインポート
import RPi.GPIO as GPIO
import time
 
#GPIO番号で指定
GPIO.setmode(GPIO.BCM)
 
GPIO.setup(21, GPIO.OUT)    #21 - LED1
GPIO.setup(20, GPIO.OUT)    #20 - LED2
GPIO.setup(7,  GPIO.IN)     #7  - SW1
GPIO.setup(8,  GPIO.IN)     #8  - SW2
 
while 1:
    GPIO.output(21, 1)  # 21番ピンをH(3.3V)にする=LED1点灯
    GPIO.output(20, 0)  # 20番ピンをL(0.0V)にする=LED2消灯
    print "SW1=",
    print GPIO.input(7) # 7番ピンの状態を出力
    print "SW2=",
    print GPIO.input(8) # 8番ピンの状態を出力
   
    time.sleep(1)       #1秒待つ
   
    GPIO.output(21, 0)  # 21番ピンをH(3.3V)にする=LED1点灯
    GPIO.output(20, 1)  # 20番ピンをL(0.0V)にする=LED2点灯
   
    time.sleep(1)       #1秒待つ


④Raspberry PiでI2Cを使えるように設定を行う

初期設定ではRaspberry PiのI2C機能は無効になっています。設定を変更して有効にしてください。

ターミナルから以下のコマンドを実行してI2Cライブラリをインストールします。
 $ sudo apt-get install i2c-tools libi2c-dev python-smbus

I2Cライブラリインストール後、「Menu→設定→Raspberry Piの設定」から「インターフェイス」を選択しI2Cの項目を有効に変更してください。

設定が反映されるように再起動を行ったのちI2Cが有効になっていることを確認します。

ターミナルから以下のコマンドを実行すると接続されているデバイスのアドレスが表示されます。
$sudo i2cdetect –y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 49 -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
48がTMP120(温度センサー)
49がADS1015(A/Dコンバーター)
です。


⑤温度センサー(TMP102)使用例

温度センサーは基板上でI2Cバスに接続されているので配線は不要です。


以下のコード(TMP102.py)を実行すると1秒ごとに基板上の温度が表示されます。
#!/usr/bin/python
# coding: utf-8
 
import smbus
import time
 
bus = smbus.SMBus(1)    #I2Cバス番号
address = 0x48          #TMP102のI2Cアドレス
 
#I2C data write (1byte)
def write(reg, value):
    bus.write_byte_data(address, reg, value)
 
#I2C data read (1byte)
def read(reg):
    value = bus.read_byte_data(address, reg)
    return value
 
#I2C data write (block)
def blockread(reg, value):
    value = bus.read_i2c_block_data(address, reg, value)
    return value
 
while 1:
    temp_raw = blockread(0x00, 2)   #I2Cで温度データ(2byte)を取得
    #温度データを整形
    temp = ((temp_raw[0] << 8) | temp_raw[1]) >> 4
    #分解能(0.0625℃)倍する
    temp = temp * 0.0625
    #表示出力
    print("temp = " + str(temp) + "*C")
 
    time.sleep(1)   #1秒


⑥A/Dコンバーター(ADS1015)使用例

A/Dコンバーターには可変抵抗などから0-3.3Vの範囲の電圧を入力してください。



以下のコード(ADS1015.py)を実行するとAIN0に入力されている電圧が1秒ごとに表示されます。
#!/usr/bin/python
# coding: utf-8
 
import smbus
import time
 
bus = smbus.SMBus(1)    #I2Cバス番号
address = 0x49          #ADS1015のI2Cアドレス
 
#I2C data write (1byte)
def write(reg, value):
    bus.write_byte_data(address, reg, value)
 
#I2C data write (block)
def blockwrite(reg, s):
    bus.write_i2c_block_data(address, reg, s[0:])
 
#I2C data read (1byte)
def read(reg):
    value = bus.read_byte_data(address, reg)
    return value
 
#I2C data write (block)
def blockread(reg, value):
    value = bus.read_i2c_block_data(address, reg, value)
    return value
 
while 1:
    #初期設定(single,+/-4.096V range(GAIN=1),single-shot mode,1600 sample per sec)
    blockwrite(0x01, [0xC3,0x83])   #CONFIGレジスタに0xC383を書き込む(AIN0)
#    blockwrite(0x01, [0xD3,0x83])   #CONFIGレジスタに0xD383を書き込む(AIN1)
#    blockwrite(0x01, [0xE3,0x83])   #CONFIGレジスタに0xE383を書き込む(AIN2)
#    blockwrite(0x01, [0xF3,0x83])   #CONFIGレジスタに0xF383を書き込む(AIN3)
 
    time.sleep(0.01)    #10ms(A/D変換処理待ちを少しいれる)
 
    #データ取得
    ad_raw = blockread(0x00, 2)
    #データ整形
    ad_val = ((ad_raw[0] & 0xFF) << 8) | (ad_raw[1] & 0xFF)
    ad_val = ad_val >> 4
    #+/- 4.096Vで11bit分解能(GAIN=1設定)
    ad = ad_val * 4.096 / 2048
 
    #表示出力
    print "ad = " + str(ad) + " V"
 
    time.sleep(1)   #1秒
 
製品検索