putixの日記

ガジェット好き。iPad mini とオンボロPC を使ってblog更新しています。

GPIO2(raspberry pi その11)

はじめての電子工作ステップ50
(日経linux 2014年11月号)

■ステップ17(LED明暗)
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)

# LED1
GPIO.output(25, True)

# LED2
p = GPIO.PWM(18, 50)
p.start(0)

for dc in range(0, 101, 5):
        p.ChangeDutyCycle(dc)
        time.sleep(0.05)

for dc in range(100, -1, -5):
        p.ChangeDutyCycle(dc)
        time.sleep(0.05)

p.stop()
GPIO.cleanup()

python(RPi.GPIO)のサイクルの値は0.0~100.0
http://sourceforge.net/p/raspberry-gpio-python/wiki/PWM/


■ステップ19(スイッチが押されたらLED ON)
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)


while 1:
        if GPIO.input(18):
                GPIO.output(25, True)
        else:
                GPIO.output(25, False)
        time.sleep(0.5)

p.stop()
GPIO.cleanup()


■ステップ21(温度センサーを読む)
ADT7410
http://akizukidenshi.com/catalog/g/gM-06675/

・下準備
sudo pico /etc/modules
i2c-dev #追記

sudo pico /etc/modprobe.d/raspi-blacklist.conf
blacklist i2c-bcm2708 #コメントアウト

sudo reboot

sudo apt-get install i2c-tools
sudo apt-get install python-smbus

sudo i2cdetect -y -l
sudo i2cdetect 1

・ソース
import smbus
import time

i2c = smbus.SMBus(1)

while 1:
        block = i2c.read_i2c_block_data(0x48, 0x00)
        temp = (block[0] << 8 | block[1]) >> 3

        if(temp >= 4096):
                temp -= 8192
        value = temp / 16.0

        print "%6.2f [Deg. C.]" % value
        time.sleep(5)


■ステップ23(アノードコモンLEDをPWM制御
※ 雑誌の図にはアノードがないので注意
OSTA71A1D
http://akizukidenshi.com/catalog/g/gI-01444/

・ソース
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

list = [22, 23, 7]

for i in list:
        GPIO.setup(i, GPIO.OUT)
        p = GPIO.PWM(i, 50)
        p.start(0)

        for dc in range(0, 101, 5):
                p.ChangeDutyCycle(dc)
                time.sleep(0.05)

        for dc in range(100, -1, -5):
                p.ChangeDutyCycle(dc)
                time.sleep(0.05)

        p.stop()
        GPIO.cleanup()