2013年12月8日日曜日

Raspberry Pi (3) IO制御 1

Raspberry PiでIO制御 1

Raspberry PiでIO制御をしてみます。

InterFace12月号の記事を元に、まずは設定とLEDの点灯テストを行います。

手順

  1. raspi-blacklist.confの編集。spiとi2cが使えるようにコメントアウトします。

    sudo vim /etc/modprobe.d/raspi-blacklist.conf

    として、先頭に#を入れてコメントアウトします。

    # blacklist spi and i2c by default (many users don't need them)
    #blacklist spi-bcm2708
    #blacklist i2c-bcm2708

  2. デバイス作成時のアクセス権の設定。

    sudo vim /etc/udev/rules.d/50-udev.rules

    として、以下の文を書き込みます。

    KERNEL=="spidev*", SUBSYSTEM=="spidev", GROUP="spi", MODE="0666"

  3. Pythonモジュールをインストールします。

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

    と打ち込むと、

    パッケージリストを読み込んでいます... 完了
    依存関係ツリーを作成しています
    状態情報を読み取っています... 完了
    以下のパッケージが自動でインストールされましたが、もう必要とされていません:
    libblas3gf liblapack3gf
    これを削除するには 'apt-get autoremove' を利用してください。
    以下の特別パッケージがインストールされます:
    libssl-dev libssl-doc python-pkg-resources python2.7-dev
    提案パッケージ:
    libi2c-dev python-distribute python-distribute-doc
    以下のパッケージが新たにインストールされます:
    i2c-tools libssl-dev libssl-doc python-dev
    python-pkg-resources python-setuptools python-smbus
    python2.7-dev
    アップグレード: 0 個、新規インストール: 8 個、削除: 0 個、保留: 1 個。
    32.0 MB のアーカイブを取得する必要があります。
    この操作後に追加で 43.2 MB のディスク容量が消費されます。
    続行しますか [Y/n]? y

    .........

    man-db のトリガを処理しています ...
    libssl-dev (1.0.1e-2+rpi1) を設定しています ...
    libssl-doc (1.0.1e-2+rpi1) を設定しています ...
    python2.7-dev (2.7.3-6) を設定しています ...
    python-dev (2.7.3-4+deb7u1) を設定しています ...
    python-pkg-resources (0.6.24-1) を設定しています ...
    python-setuptools (0.6.24-1) を設定しています ...
    i2c-tools (3.1.0-2) を設定しています ...
    /run/udev or .udevdb or .udev presence implies active udev. Aborting MAKEDEV invocation.
    python-smbus (3.1.0-2) を設定しています ...

    となれば成功です。失敗した時は、sudo apt-get updateを行って、もう一度トライして下さい。
  4. 次にpythonのソースリストを入手します。

    git clone git://github.com/doceme/py-spidev

    次の様になれば成功です。

    Cloning into 'py-spidev'...
    ./hello
    ./hello
    remote: Counting objects: 9, done.
    remote: Compressing objects: 100% (8/8), done.
    remote: Total 9 (delta 2), reused 5 (delta 1)
    Receiving objects: 100% (9/9), 5.56 KiB, done.
    Resolving deltas: 100% (2/2), done.

    更に、次のコマンドを打ち込みます。

    cd py-spidev/
    chmod 755 setup.py
    sudo ./setup.py install

    次の様になれば成功です。

    running install
    running build
    running build_ext
    building 'spidev' extension
    creating build
    creating build/temp.linux-armv6l-2.7
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/src/linux/include -I/usr/include/python2.7 -c spidev_module.c -o build/temp.linux-armv6l-2.7/spidev_module.o
    creating build/lib.linux-armv6l-2.7
    gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-armv6l-2.7/spidev_module.o -o build/lib.linux-armv6l-2.7/spidev.so
    running install_lib
    copying build/lib.linux-armv6l-2.7/spidev.so -> /usr/local/lib/python2.7/dist-packages
    running install_egg_info
    Writing /usr/local/lib/python2.7/dist-packages/spidev-2.0.egg-info

  5. 次にWiringPi(GPIO Interface library for the Raspberry Pi)のソースをダウンロード、インストールします。

    git clone git://git.drogon.net/wiringPi

    次の様になれば成功です。

    Cloning into 'wiringPi'...
    remote: Counting objects: 599, done.
    remote: Compressing objects: 100% (541/541), done.
    remote: Total 599 (delta 425), reused 96 (delta 58)
    Receiving objects: 100% (599/599), 233.09 KiB | 121 KiB/s, done.
    Resolving deltas: 100% (425/425), done.

    次に、以下のコマンドを実行します。

    cd wiringPi/
    $git pull origin
    chmod 755 build
    ./build

    途中でワーニングが出ますが、おそらく成功でしょう。

    wiringPi Build script
    =====================


    WiringPi Library
    [UnInstall]
    [Compile] wiringPi.c
    [Compile] wiringSerial.c
    [Compile] wiringShift.c
    [Compile] piHiPri.c
    [Compile] piThread.c
    [Compile] wiringPiSPI.c
    [Compile] wiringPiI2C.c
    [Compile] softPwm.c
    [Compile] softTone.c
    [Compile] mcp23008.c
    [Compile] mcp23016.c
    [Compile] mcp23017.c
    [Compile] mcp23s08.c
    [Compile] mcp23s17.c
    [Compile] sr595.c
    [Compile] pcf8574.c
    [Compile] pcf8591.c
    [Compile] mcp3002.c
    [Compile] mcp3004.c
    [Compile] mcp4802.c
    [Compile] mcp3422.c
    [Compile] max31855.c
    [Compile] max5322.c
    [Compile] sn3218.c
    [Compile] drcSerial.c
    [Link (Dynamic)]
    [Install Headers]
    [Install Dynamic Lib]

    WiringPi Devices Library
    [UnInstall]
    [Compile] ds1302.c
    [Compile] maxdetect.c
    [Compile] piNes.c
    [Compile] gertboard.c
    [Compile] piFace.c
    [Compile] lcd128x64.c
    [Compile] lcd.c
    [Compile] piGlow.c
    [Link (Dynamic)]
    [Install Headers]
    [Install Dynamic Lib]

    GPIO Utility
    [Compile] gpio.c
    gpio.c:85:12: warning: ‘decodePin’ defined but not used [-Wunused-function]
    [Compile] extensions.c
    [Compile] readall.c
    [Link]
    [Install]

    All Done.

    NOTE: This is wiringPi v2, and if you need to use the lcd, Piface,
    Gertboard, MaxDetext, etc. routines then you must change your
    compile scripts to add -lwiringPiDev

  6. pythonで使える様にWiring-pythonをインストールします。

    git clone https://github.com/WiringPi/WiringPi-Python.git

    以下の様になれば成功です。

    Cloning into 'WiringPi-Python'...
    remote: Counting objects: 195, done.
    remote: Compressing objects: 100% (96/96), done.
    remote: Total 195 (delta 98), reused 181 (delta 91)
    Receiving objects: 100% (195/195), 255.08 KiB | 134 KiB/s, done.
    Resolving deltas: 100% (98/98), done.

    次のコマンドを実行します。

    cd WiringPi-Python/
    git submodule update --init

    次の様になればOKです。

    Submodule 'WiringPi' (https://github.com/WiringPi/WiringPi.git) registered for path 'WiringPi'
    Cloning into 'WiringPi'...
    remote: Counting objects: 206, done.
    remote: Compressing objects: 100% (119/119), done.
    remote: Total 206 (delta 113), reused 173 (delta 86)
    Receiving objects: 100% (206/206), 149.91 KiB | 111 KiB/s, done.
    Resolving deltas: 100% (113/113), done.
    Submodule path 'WiringPi': checked out 'dda3305ce14a750e7529ff20b0acf9e53bd8eb7a'

    最後にインストールします。

    sudo python setup.py install

    以下の様になれば完了です。

    running install
    Checking .pth file support in /usr/local/lib/python2.7/dist-packages/
    /usr/bin/python -E -c pass
    TEST PASSED: /usr/local/lib/python2.7/dist-packages/ appears to support .pth files
    running bdist_egg
    running egg_info
    writing wiringpi.egg-info/PKG-INFO
    writing top-level names to wiringpi.egg-info/top_level.txt
    writing dependency_links to wiringpi.egg-info/dependency_links.txt

    ....................

    Extracting wiringpi-1.1.0-py2.7-linux-armv6l.egg to /usr/local/lib/python2.7/dist-packages
    Adding wiringpi 1.1.0 to easy-install.pth file

    Installed /usr/local/lib/python2.7/dist-packages/wiringpi-1.1.0-py2.7-linux-armv6l.egg
    Processing dependencies for wiringpi==1.1.0
    Finished processing dependencies for wiringpi==1.1.0

  7. コマンドラインからテストをします。適当な発光ダイオードと抵抗(330Ω位でいいでしょう)を図の様GPIO25とGroundに繋ぎます。

    次のコマンドを入力します。

    gpio -g mode 25 out
    gpio -g write 25 1
    gpio -g write 25 0

    最初の行は、25番ピンを出力にしますよ。と言う意味です。
    次のwrite 25 1でLEDが点灯します。(25番ピンがHi=3.3Vになる。)
    次のwrite 25 0でLEDが消灯します。(25番ピンがLo=0.0Vになる。)

うまくLEDが点灯しましたか?

0 件のコメント:

コメントを投稿

コメントをどうぞ