読者です 読者をやめる 読者になる 読者になる

日記とか、工作記録とか

自分に書けることを何でも書いてゆきます。作った物、買ったもの、コンピュータ系の話題が多くなるかもしれません。

Raspberry pi 2 + ブレッドボード with LEDで点灯しよう

コンピュータ Raspberry pi

Amazonから、Raspberry pi電子工作エントリーキット(Premium)を購入しました。

Raspberry Piスターターパック (Pi2 用Standard)

Raspberry Piスターターパック (Pi2 用Standard)

Raspberry piの入出力ポートに何かつないで遊んでみたいと思ったら、ハードウェア初心者の私のような人は、まずこういったセットを買ってしまうのがよいと思います。初めての人に必要な物が一通りそろっていますし…… と思っていたのですが、なんか足りないですよこれ。ブレッドボードやジャンパーワイヤーなどは入っていましたが、よく見ると、入っているはずの抵抗が入っていませんでした。欠品のようですが、対応も面倒なので以前「CPUの創りかた」を読んでいたときに手に入れた抵抗などで代用することにしました。

また、このエントリーキットには、説明書は付属していません。URLが書かれており、説明はそちらでみてね、ということになっています。これはある意味正しい対応です(紙で封入するとあとで追記や更新ができないからね)。

しかし、正直なところ初心者には、このWebページにある説明ではハードウェア初心者にはツラいと思います。読めばわかる、というようなものではなく、あれもこれもと調べ回って作り上げなければなりません。ところどころソースコード画像がリンクされていなかったりして、Webページとして未完成のようです。あえてポジティブ思考するならば、苦心して調べているうちに技術力がつく…… かもしれません。

さて、なにはともあれHello World的な何かをしようということで、LEDを点灯することにします。GPIOの18番からプラスの電源をとり、最後は0V(Ground:GNDと書かれていたりする)に接続する回路を作ります。

回路をテキストであえて書くとすれば、こんな感じです。一応写真もつけておきます。

  • Raspberry pi 2のGPIO 18番に黒い配線(ジャンパワイヤ)をつなぎました。GPIO 18番というのは、12番ピンのことです(ややこしい……)。どういうことかわからないと思いますが、検索で"Raspberry pi 2 pinout"で探すとイラストつきの情報がみつかりますので、場所をよく確かめましょう。英語で書かれているのは…… がんばりましょう。

f:id:WindVoice:20150228084800j:plain

  • ケーブルのもう一つの端をブレッドボードにつなぐ。
  • 抵抗(1kΩ)につなぐ。
  • LEDの足の長い方(アノード)につなぐ。
  • Raspberry pi 2のGroundにつなぐ。Groundはいくつもありますが、どれでもいいみたいです。今回は一番左下の39番ピンにつなぎました。

f:id:WindVoice:20150228084840j:plain

私の写真では他にも配線がありますが、黒いジャンパワイヤとそれにつながっている部分が今回話題にしている回路ですので他は無視してください。配線ができたら、それを制御するPythonプログラムを書きます。それがこちら。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
import RPi.GPIO as GPIO
import signal, os
import sys

def handler( signum, frame ):
        """
        Ctrl-Cで呼び出される終了処理。
        LEDが点灯したままにならないようにします。
        """
        print "\ncleanup GPIO"
        GPIO.cleanup()
        sys.exit(0)

# Ctrl-Cを検知する仕組み
signal.signal(signal.SIGINT, handler)

# GPIO 18番を準備
GPIO.setmode(GPIO.BCM)
led = 18
GPIO.setup(led, GPIO.OUT)

# 点滅
while True:
    GPIO.output(led, True)  # 点灯
    time.sleep(0.3)
    GPIO.output(led, False) # 消灯
    time.sleep(0.3)

自分のホームディレクトリ等に保存したら、実行権限をつけて実行します。GPIOを操作するときにはroot権限が必要なので、sudoしましょう。これで0.3秒ごとにLEDがついたり消えたりします。自動では終了しないので、Ctrl+Cで終了しましょう。終了するときにタイミングによってLEDがついたままになってしまうことを避けるため、Ctrl+Cの割り込みハンドラ(handler関数)を作って、そこで終了処理をしています。

pi@raspberrypi:~/led$ chmod +x gpio18.py
pi@raspberrypi:~/led$ sudo ./gpio18.py
^C
cleanup GPIO
pi@raspberrypi:~/led$

初めてハードウェアをプログラムから操作する人の、Hello World的な課題としてはちょうど良いのではないでしょうか。

CPUの創りかた

CPUの創りかた