Help us understand the problem. What is going on with this article?

myThingsをはじめよう - Part1: はじめてのRaspberry Pi 2セットアップ

More than 5 years have passed since last update.

Raspberry Piにはじめて興味を持った方でも、インターネットへの接続、Lチカと環境センサからデータを取得できるようになるまでの手順をまとめてみようと思います。

myThingsをはじめようキット

今回はスイッチサイエンスから発売されたmyThingsをはじめようキットを使います。このスターターキットを使うとIDCFクラウドを経由して、自作したIoT機器をmyThingsと連係できるようになります。はじめてのRaspberry Piの入門キットとして必要な部品が集まっています。

用意するもの

Raspberry Piなどをすでに持っている場合は、個別に必要な部品を用意します。Lチカだけだと物足りないので、気温、湿度、気圧が計測できる環境センサのBME280もあわせて使います。

USBシリアル変換アダプター

初心者の方から無線LAN USBアダプタを挿したけど、その後どうすればインターネットに接続できるかわからないといった相談を受けたので、USBシリアル変換アダプターも用意してホストマシンと直接シリアル接続できるようにします。

FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)を使ってOSXとRaspberry Pi 2を接続します。Software Installation (Mac)を参考にしてGPIOピンにつなぎます。電圧切り換えジャンパは3.3V側にしてください。電源はUSB ACアダプタから供給するのでこのUSBシリアル変換アダプタから電源供給はしないでください。

  • GND 黒 (USB-TTL) -> GND P6 (Raspberry Pi)
  • RXD 黄色 (USB-TTL) -> TXD GPIO14 P8 (Raspberry Pi)
  • TXD 緑 (USB-TTL) -> RXD GPIO15 P10 (Raspberry Pi)

raspi-ftdi2.png

FTDIのFT232RL用のドライバはVCP Driversからダウンロードしてインストールします。今回のホストマシンはOSX Yosemite 10.10.4です。Mac OS X 10.9 and aboveFTDIUSBSerialDriver_v2_3.dmgをインストールします。Mac OS X 10.3 to 10.8の場合は、FTDIUSBSerialDriver_v2_2_18.dmgを使います。

OSXからScreenを使ってターミナル接続します。Axxxxの箇所は環境によって異なります。

$ screen /dev/tty.usbserial-Axxxx 115200

無線LAN USBアダプタ

インターネットに接続するために無線LANの設定をします。無線LAN USBアダプタはPLANEX GW-USNANO2Aを使います。
wpa_passphraseコマンドから/etc/wpa_supplicant/wpa_supplicant.confにssidとpskの設定を入れます。
{ssid}の部分に自宅のssid, {passphrase}にパスフレーズを入力して実行してください。

$ sudo sh -c 'wpa_passphrase {ssid} {passphrase} >> /etc/wpa_supplicant/wpa_supplicant.conf'

さらに複数のネットワーク設定を記述する場合は、/etc/wpa_supplicant/wpa_supplicant.confpriorityを追加します。デフォルトは0で、値が大きい方が優先されます。

また、今回の無線LAN環境はSSIDステルスモードだったので/etc/wpa_supplicant/wpa_supplicant.confを編集してscan_ssid=1を追加しています。

/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        priority=0
        scan_ssid=1
        ssid="xxx"
        proto=WPA2
        key_mgmt=WPA-PSK
        #psk="xxx"
        psk=xxx
}

/etc/network/interfacesを編集します。今回はIPアドレスはDHCPから取得するため、iface wlan0 inet manualiface wlan0 inet dhcpまたwpa-confになっていることを確認します。今回はwlan1は使いませんがこちらもdhcpに変更しておきます。

/etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet manual

auto wlan0
allow-hotplug wlan0
#iface wlan0 inet manual
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

auto wlan1
allow-hotplug wlan1
#iface wlan1 inet manual
iface wlan1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

wlan0を再起動します。

$ sudo ifdown wlan0
$ sudo ifup wlan0

DHCPからIPアドレスが取得できたら、pingでインターネットに接続できることを確認します。

$ ip addr show wlan0
$ ping -c 1 www.yahoo.co.jp
PING www.g.yahoo.co.jp (183.79.198.116) 56(84) bytes of data.
64 bytes from f9.top.vip.kks.yahoo.co.jp (183.79.198.116): icmp_req=1 ttl=50 time=20.8 ms

--- www.g.yahoo.co.jp ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 20.884/20.884/20.884/0.000 ms

raspi-configの初期設定

raspi-configをroot権限で実行して、Raspberry Pi 2の初期設定をしていきます。

$ sudo raspi-config

ファイルシステムの拡張とタイムゾーンの変更を行います。

  • Expand Filesystem > Select
  • Internationalisation Options > Change Timezone > Asia > Tokyo

再起動します。

$ sudo reboot

再起動後にファイルシステムがリサイズされました。ようやくパッケージをインストールする準備ができました。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          7.3G  2.4G  4.6G  35% /
/dev/root       7.3G  2.4G  4.6G  35% /
devtmpfs        460M     0  460M   0% /dev
tmpfs            93M  240K   93M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           186M     0  186M   0% /run/shm
/dev/mmcblk0p1   56M   19M   37M  34% /boot

ファームウェアの更新

初期状態の確認

今回利用しているRaspberry Pi用microSD 8GB(Raspbian OS 書き込み済)のバージョンを確認します。

$ uname -a
Linux raspberrypi 3.18.11-v7+ #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU/Linux
$ cat /proc/version
Linux version 3.18.11-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015

Raspbian OSは3.18.11-v7+が入っていました。つぎにpiユーザーのグループを確認すると、i2cグループに最初から入っています。piユーザーはsudoなしでi2cデバイスを操作できるようになっています。

$ id -a
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),106(netdev),996(gpio),997(i2c),998(spi),999(input)

パッケージの更新とアップグレードをします。

$ sudo apt-get update
$ sudo apt-get upgrade

ファームウェアの更新もしておきます。

$ sudo rpi-update
...
 *** A reboot is needed to activate the new firmware

rebootします。

$ sudo reboot

カーネルのバージョン、RaspbianOSのバージョンが4.0.8-v7+にあがりました。

$ uname -a
Linux raspberrypi 4.0.8-v7+ #805 SMP PREEMPT Thu Jul 16 18:46:20 BST 2015 armv7l GNU/Linux
$ cat /proc/version
Linux version 4.0.8-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #805 SMP PREEMPT Thu Jul 16 18:46:20 BST 2015

その他設定

vim

エディタは好みですがvimを使います。

$ sudo apt-get install vim
$ mkdir ~/tmp

バックアップを作らない設定だけします。

~/.vimrc
set backupdir=~/tmp

時間合わせ

NTPサーバーを日本のサーバーに設定します。

/etc/ntp.conf
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
pool ntp.nict.jp iburst

ntpdの再起動をして時間あわせをします。

$ sudo /etc/init.d/ntp restart
Stopping NTP server: ntpd.
Starting NTP server: ntpd.

Python

Raspberry Pi 2でセンサーデータを取得する場合はPythonを使うことが多いです。Pythonの開発環境をインストールします。

$ sudo apt-get update
$ sudo apt-get install python-dev
$ python -V
Python 2.7.3
$ curl https://bootstrap.pypa.io/get-pip.py -o - | sudo python
$ pip -V
pip 7.1.0 from /usr/local/lib/python2.7/dist-packages (python 2.7)

Lチカ

Raspberry Pi 2 Model B GPIO 40 Pin Block Pinoutを参考にブレッドボード配線をします。LEDのアノード(足がながい方)はGPIO 17につなぎます。

  • アノード (LED) -> GPIO17 P11 (Raspberry Pi)
  • カソード (LED) -> 抵抗器1K(茶黒赤金) -> GND P14 (Raspberry Pi)

raspi-led2.png

RPi.GPIOはRaspberry Pi 2にインストール済になっています。

$ apt-cache show python-rpi.gpio
Package: python-rpi.gpio
Source: rpi.gpio
Version: 0.5.11-1
Architecture: armhf
Maintainer: Ben Croston <ben@croston.org>
Installed-Size: 174
...

最初にプログラムを配置するディレクトリを作成します。

$ mkdir -p ~/python_apps

LチカをするPythonのプログラムを書きます。GPIO17 P11を使います。PINに11を指定します。

~/python_apps/led-blink.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time

COUNT = 3
PIN = 11
GPIO.setmode(GPIO.BOARD)
GPIO.setup(PIN,GPIO.OUT)

for _ in xrange(COUNT):
    GPIO.output(PIN,True)
    time.sleep(1.0)
    GPIO.output(PIN,False)
    time.sleep(1.0)

GPIO.cleanup()

GPIOを操作する場合はroot権限が必要になります。プログラムを実行すると3回、1秒間隔でLチカします。

$ chmod +x led-blink.py
$ sudo ./led-blink.py

I2Cをつかう

I2Cのバスを有効にします。最初に必要なパッケージをインストールします。

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

raspi-configを実行してI2Cサポートを有効にします。

$ sudo raspi-config
  • Advanced Options > I2C

rebootします。

$ sudo reboot

カーネルが3.18 以上の場合は/boot/config.txtに以下の設定が入ります。

/boot/config.txt
dtparam=i2c_arm=on

/etc/modulesにI2Cを有効にする設定します。snd-bcm2835の下に追記します。

/etc/modules
snd-bcm2835

i2c-bcm2708
i2c-dev

rebootします。

$ sudo reboot

lsmodでi2c_devとi2c_bcm2708が表示されるとI2Cが有効になっています。

$ lsmod
Module                  Size  Used by
i2c_dev                 6047  0
snd_bcm2835            19761  0
snd_pcm                74433  1 snd_bcm2835
snd_seq                53553  0
snd_seq_device          6455  1 snd_seq
snd_timer              18205  2 snd_pcm,snd_seq
snd                    51646  5 snd_bcm2835,snd_timer,snd_pcm,snd_seq,snd_seq_device
8192cu                528381  0
i2c_bcm2708             5006  0
uio_pdrv_genirq         2958  0
uio                     8219  1 uio_pdrv_genirq

BME280

Raspberry Pi 2にBME280を配線します。

SDI      (BME280)  -> GPIO2 P03 (Raspberry Pi SDA1)
SCK      (BME280)  -> GPIO3 P05 (Raspberry Pi SCL1)
GND,SDO  (BME280)  -> GND  P09 (Raspberry Pi)
Vio,CSB  (BME280)  -> 3.3v P01 (Raspberry Pi)

raspi-bme280.png

i2cdetectコマンドで正しく配線できたか確認します。0x76アドレスを使っています。

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --

サンプルプログラムをダウンロードします。

$ cd ~/python_apps
$ git clone https://github.com/IDCFChannel/bme280-meshblu-py
$ cd bme280-meshblu-py

bme280_sample.pyを実行すると、temp(気温)、pressure(気圧)、hum(湿度)のデータを取得することができます。

$ python bme280_sample.py
temp : 29.66  ℃
pressure : 1004.27 hPa
hum :  49.71 %

まとめ

ごちゃっとしていますが、まとめると感じになりました。

raspi2-bme28-led.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away