JAWS-Festa 2015登壇資料 URL の訂正

JAWS Festa 2015 「Raspberry Pi と AWS でIoT」資料ダウンロード先の訂正

http://jft2015.jaws-ug.jp/speaker/yukihito-kataoka/
JAWS Festa 2015 IoTトラック 「Raspberry Pi と AWS でIoT」資料ダウンロード先のURLが間違っていました。
誠に申し訳けございません。

お詫びと同時に、以下URLに訂正させて頂きます。
http://goo.gl/forms/41oaevDrAA

広告

Raspberry Pi + L-02A で SORACOM SIM を試す

前に Raspberry Pi で SORACOM SIM を激安 docomo USB 3G モデム L-02A でネットに繋いだ記録です。

Raspberry Pi を最新のRasbianで設定した後からの内容です。

0.L-02AをUSBに差し込んで Raspberry Pi を起動

1.念のため最新の状態にUpdate

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

2.必要なソフトを追加インストール

$ sudo apt-get install wvdial eject usb-modeswitch

3.USBモデムが認識されているか確認

$ sudo lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 1004:610c LG Electronics, Inc.

docomo の USB モデムはほぼLG製、赤字の部分が該当します。

$ ls /dev/ttyUSB* -la
ls: cannot access /dev/ttyUSB*: No such file or directory

この時点でUSBモデムとしては認識されていません。
これはL-02Aが少し古い型で、デフォルトの設定に含まれていないのが理由です。

4.L-02AのUSBモデムを認識するための設定を追加

$ sudo nano /etc/udev/rules.d/99-foma_l-02a.rules
# for FOMA L-02A
# USB Storage (Zero Installation)
KERNEL==”sr[0-9]*”, ENV{ID_VENDOR_ID}==”1004″, ENV{ID_MODEL_ID}==”610c”, RUN+=”/usr/bin/eject /dev/$kernel”
# USB Modem (ttyUSB)
SUBSYSTEM==”usb”, ATTR{idVendor}==”1004″, ATTR{idProduct}==”6109″, RUN+=”/sbin/modprobe usbserial vendor=0x$attr{idVendor} product=0x$attr{idProduct}”</del>

設定が終わったら再起動します。

$ sudo reboot

$ ls /dev/ttyUSB* -la
crw-rw—T 1 root dialout 188, 0 Jan 1 1970 /dev/ttyUSB0
crw-rw—T 1 root dialout 188, 1 Jan 1 1970 /dev/ttyUSB1
crw-rw—T 1 root dialout 188, 2 Jan 1 1970 /dev/ttyUSB2

無事認識されました。
複数表示されていますが、モデム部分は /dev/ttyUSB0 です。

$ ifconfig ppp0
ppp0: error fetching interface information: Device not found

当然まだ接続設定がないので、USBモデムで3G接続されていません。

5.3G通信接続の設定と接続

wvdial という接続ソフトの3G接続設定を追加します。

$ sudo nano /etc/wvdial.conf
[Dialer Defaults]
Init1 = ATH
Init2 = AT&F
Init3 = ATZ
Init4 = AT+CGDCONT=1,”IP”,”soracom.io”
Dial Attempts = 3
Stupid Mode = 1
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
APN = soracom.io
Modem = /dev/ttyUSB0
ISDN = 0
Phone = *99***1#
Username = sora
Password = sora
Carrier Check = no
Check Def Route = 1

接続してみます。

$ sudo wvdial &
[1] 2195
pi@raspberrypi ~ $ –> WvDial: Internet dialer version 1.61
–> Cannot get information for serial port.
–> Initializing modem.
–> Sending: ATH
ATH
OK
–> Sending: AT&F
AT&F
OK
–> Sending: ATZ
ATZ
OK
–> Sending: AT+CGDCONT=1,”IP”,”soracom.io”
AT+CGDCONT=1,”IP”,”soracom.io”
OK
–> Modem initialized.
–> Sending: ATD*99***1#
–> Waiting for carrier.
ATD*99***1#
CONNECT 7200000
–> Carrier detected. Starting PPP immediately.
–> Starting pppd at Mon Oct 5 02:10:23 2015
–> Pid of pppd: 2197
–> Using interface ppp0
–> pppd: 睆・
D
–> pppd: 睆・
D
–> pppd: 睆・
D
–> pppd: 睆・
D
–> pppd: 睆・
D
–> pppd: 睆・
D
–> local IP address 10.192.190.193
–> pppd: 睆・
D
–> remote IP address 10.64.64.64
–> pppd: 睆・
D
–> primary DNS address 169.254.0.53
–> pppd: 睆・
D

上記のようなIPとDNS情報を取得した表示があれば無事接続です。
念のため、接続結果を表示すると、以下のようになります。

$ ifconfig ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.192.190.193 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:7 errors:1 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:112 (112.0 B) TX bytes:145 (145.0 B)

128kbpsなどの、s1.slow 以下の契約だと3G通信でも全く問題ありません。
安価な L-02A は買いですね!
10月5日から接続試験している Raspberry Pi は今のところトラブルはありません。

6.関連情報リンク集(参考)

SORACOM Airとは
https://soracom.jp/services/air/

半年でNGNの世界観を実現したソラコム、どんだけすごいんだ(ASCIIxクラウド)
http://ascii.jp/elem/000/001/059/1059511/

もうちょっと楽にRaspberry PiでSORACOM Airを使う(FS01BU USBモデムを用いて)
http://qiita.com/dietposter/items/bf3b0311a044eaf36df8

Raspberry Pi + L-03D + SORACOM SIM で通信を行う
http://niccloud.niandc.ne.jp/?p=1595

SORACOM Air/BeamでRaspberry Piからkintoneにセンサデータを連携してみよう!
https://www.joyzo.co.jp/blog/1644

SORACOM Beam とは
https://soracom.jp/services/beam/
SIMからインターネットを経由しないAWS直結が魅力!

4.センサの設定とプログラミング

20150617_231446
実際の配線の様子ですが、配線の色を揃えれなくて見苦しい所はご容赦を。

以下、ブロッグの構造上Pythonのプログラムの前スペースが消えてます。
そのままでは動きませ。参照サイトからダウンロードのうえ、お試しください。

4.1.今回準備したもの

温湿度センサ HDC1000(秋月電子)
http://akizukidenshi.com/catalog/g/gM-08775/

CO2センサ K30 (co2meter)
http://www.co2meter.com/products/k-30-co2-sensor-module

Grove OLED Display (スイッチサイエンス)
https://www.switch-science.com/catalog/829/

光センサ TSL2561 (スイッチサイエンス)
https://www.switch-science.com/catalog/1174/

Raspberry Pi2 B+
http://jp.rs-online.com/web/p/processor-microcontroller-development-kits/8326274/

Raspberry Pi2 B+ ケース
http://jp.rs-online.com/web/p/development-board-enclosures/8787594/

その他
2000mA 5V 1ポート 2A高出力 USB AC アダプタ USB(Amazon)
USB電源ケーブル(ダイソー 100均)
屋内・屋外兼用ケース P10-22CA (Amazon)
小さいブレットボード(白)(秋月電子)
LTE通信USBモデムカード docomo L-03D (Amazon)
Transcend microSDHCカード 16GB Class10(Amazon)
普通のジャンパワイヤ(オス~オス)(スイッチサイエンス)
普通のジャンパワイヤ(オス~メス)(スイッチサイエンス)
普通のジャンパワイヤ(メス~メス)(スイッチサイエンス)

開発言語は、可能な限り C,C++ の入門者に敷居が高い言語を使わず、Python、node.js(Java Script) を用いる方針です。

4.2.センサ値獲得用プログラム言語Python環境確認

センサ値取得に利用する開発言語 Python のバージョンを確認します。
最新の3にはまだ未対応のライブラリィなどが多く、2.7 を用います。

$ python -V
Python 2.7.3

Pythonのセンサ用開発環境を追加インストールします。

$ sudo apt-get install python-dev

4.3.CO2センサ K30 I2Cプログラム計測

参考情報

K-30 10,000ppm CO2 Sensor
http://www.co2meter.com/products/k-30-co2-sensor-module

メーカPDF資料
http://co2meters.com/Documentation/AppNotes/AN142-RaspberryPi-K_series.pdf

説明は難しくなるので、以下の手順をこなしてみてください。

$ mkdir notsmb
$ cd notsmb
$ wget http://www.byvac.com/downloads/sws/notsmb_1_3.zip
$ unzip notsmb_1_3.zip
$ sudo python setup.py install

以下インデントが表示されていません。
実際に解答したファイルの内容をご参照ください。

$ nano CO2meter.py
import time
from notsmb import notSMB
I2CBUS = 1
CO2_ADDR = 0x68
READ = 0x22
readBytes = [0x00, 0x08, 0x2A]
bus = notSMB(I2CBUS)
while True:
try:
resp = bus.i2c(CO2_ADDR,[0x22,0x00,0x08,0x2A],4)
time.sleep(0.1)
co2Val = (resp[1]*256) + resp[2]
print(resp)
print(co2Val);
break
except:
blank =0;

$ sudo python ./CO2meter.py
[33, 11, 116, 160]
2932

4.3.温湿度センサHDC1000 I2C プログラム計測

参考情報

秋月電子 HDC100使用 温湿度センサーモジュール
http://akizukidenshi.com/catalog/g/gM-08775/

RaspberryPi + wiringPi-Python + HDC1000 で温湿度を取る(femmnomenaさん)
http://d.hatena.ne.jp/femm/20150426/1430033839

説明は難しくなるので、以下の手順をこなしてみてください。

$ sudo apt-get install python-pip
$ sudo pip install wiringpi2

$ nano HDC1000.py
import wiringpi2
import os
import struct
from time import sleep

wiringpi2.wiringPiSetup()
i2c = wiringpi2.I2C()
dev = i2c.setup(0x40)
i2c.writeReg16(dev,0x02,0x10)
i2c.writeReg8(dev,0x00,0x00) #start conversion.
sleep((6350.0 + 6500.0 + 500.0)/1000000.0)

temp = ((struct.unpack(‘4B’, os.read(dev,4)))[0] << 8 | (struct.unpack(‘4B’, os.read(dev,4)))[1])
hudi = ((struct.unpack(‘4B’, os.read(dev,4)))[2] << 8 | (struct.unpack(‘4B’, os.read(dev,4)))[3])
os.close(dev)

print “Humidity %.2f” % (( hudi / 65535.0 ) * 100)
print “Temperature %.2f” % (( temp / 65535.0) * 165 – 40 )

$ sudo python ./HDC1000.py
Temperature 28.0
Humidity 74.3

4.4.OLED ディスプレイ 128×64 表示プログラム

参考情報

GROVE – I2C OLEDディスプレイ128×64
https://www.switch-science.com/catalog/829/

Seeed-Studio/Grove-RaspberryPi
https://github.com/Seeed-Studio/Grove-RaspberryPi/tree/master/Grove%20-%20OLED%20Display%20128×64

こちらだけC++でコンパイルします。
説明は難しくなるので、以下の手順をこなしてみてください。

$ git clone https://github.com/Seeed-Studio/Grove-RaspberryPi
$ cd “Grove-RaspberryPi\Grove – OLED Display 128×64”
$ nano main.cpp
#include <sstream>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include “SeeedOLED.h”

using namespace std;

SeeedOLED oled = SeeedOLED(0x3c);

string GetStdoutFromCommand(string cmd) {
int len;
string data;
FILE * stream;
const int max_buffer = 256;
char buffer[max_buffer];
cmd.append(” 2>&1″);

stream = popen(cmd.c_str(), “r”);
if (stream) {
while (!feof(stream)) {
if (fgets(buffer, max_buffer, stream) != NULL) {
data.append(buffer);
}
}
pclose(stream);
}
len = data.size() – 1;
data = data.substr(0, len);
return data;
}

int main (int argc, char *argv[])
{

string line0 = ” “;

string argv1 = line0;
string argv2 = line0;
string argv3 = line0;
string argv4 = line0;
if(argc > 1) argv1 = argv[1];
if(argc > 2) argv2 = argv[2];
if(argc > 3) argv3 = argv[3];
if(argc > 4) argv4 = argv[4];

oled.writeString(0, 0, (char*)line0.c_str());
oled.writeString(1, 0, (char*)line0.c_str());
oled.writeString(2, 0, (char*)line0.c_str());
oled.writeString(3, 0, (char*)line0.c_str());

oled.writeString(0, 0, (char*)argv1.c_str());
oled.writeString(1, 0, (char*)argv2.c_str());
oled.writeString(2, 0, (char*)argv3.c_str());
oled.writeString(3, 0, (char*)argv4.c_str());
return 0;
}

$ make clean
$ make
$ OLED 1111 2222 3333 4444

4.5.照度センサ TSL2561 I2C プログラム計測

参考情報

GROVE – I2C デジタル光センサ
https://www.switch-science.com/catalog/1174/

seanbechhofer/raspberrypi
https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/tree/master/Adafruit_I2C
https://github.com/seanbechhofer/raspberrypi/blob/master/python/TSL2561.py

説明は難しくなるので、以下の手順をこなしてみてください。

$ git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code
$ git clone https://github.com/seanbechhofer/raspberrypi

以下、インデントが分からないので以下を参照してください。
https://github.com/yukataoka/IoT_Raspi_AWS_Demo/blob/master/TSL2561.py

$ nano TSL2561.py
#!/usr/bin/python

import sys
import time
from Adafruit_I2C import Adafruit_I2C

class TSL2561:
i2c = None

def __init__(self, address=0x29, debug=0, pause=0.8):
self.i2c = Adafruit_I2C(address)
self.address = address
self.pause = pause
self.debug = debug
self.gain = 0 # no gain preselected
self.i2c.write8(0x80, 0x03) # enable the device

def setGain(self,gain=1):
“”” Set the gain “””
if (gain != self.gain):
if (gain==1):
self.i2c.write8(0x81, 0x02) # set gain = 1X and timing = 402 mSec
else:
self.i2c.write8(0x81, 0x12) # set gain = 16X and timing = 402 mSec
self.gain=gain; # safe gain for calculation
time.sleep(self.pause) # pause for integration (self.pause must be bigger than integration time)
def readWord(self, reg):

“””Reads a word from the I2C device”””
try:
wordval = self.i2c.readU16(reg)
newval = self.i2c.reverseByteOrder(wordval)
if (self.debug):
print(“I2C: Device 0x%02X returned 0x%04X from reg 0x%02X” % (self.address, wordval & 0xFFFF, reg))
return newval
except IOError:
print(“Error accessing 0x%02X: Check your I2C address” % self.address)
return -1
def readFull(self, reg=0x8C):

“””Reads visible+IR diode from the I2C device”””
return self.readWord(reg);
def readIR(self, reg=0x8E):

“””Reads IR only diode from the I2C device”””
return self.readWord(reg);
def readLux(self, gain = 0):

“””Grabs a lux reading either with autoranging (gain=0) or with a specified gain (1, 16)”””
if (gain == 1 or gain == 16):
self.setGain(gain) # low/highGain
ambient = self.readFull()
IR = self.readIR()
elif (gain==0): # auto gain
self.setGain(16) # first try highGain
ambient = self.readFull()
if (ambient < 65535):
IR = self.readIR()
if (ambient >= 65535 or IR >= 65535): # value(s) exeed(s) datarange
self.setGain(1) # set lowGain
ambient = self.readFull()
IR = self.readIR()

if (self.gain==1):
ambient *= 16 # scale 1x to 16x
IR *= 16 # scale 1x to 16x

ratio = 0
if (ambient != 0):
ratio = (IR / float(ambient)) # changed to make it run under python 2

if ((ratio >= 0) & (ratio <= 0.52)):
lux = (0.0315 * ambient) – (0.0593 * ambient * (ratio**1.4))
elif (ratio <= 0.65):
lux = (0.0229 * ambient) – (0.0291 * IR)
elif (ratio <= 0.80):
lux = (0.0157 * ambient) – (0.018 * IR)
elif (ratio <= 1.3):
lux = (0.00338 * ambient) – (0.0026 * IR)
elif (ratio > 1.3):
lux = 0

return lux

if __name__ == “__main__”:
while True:
tsl=TSL2561()
print “LUX HIGH GAIN “, tsl.readLux(16)
print “LUX LOW GAIN “, tsl.readLux(1)
print “LUX AUTO GAIN “, tsl.readLux()

$ sudo python TSL2561.py
LUX HIGH GAIN 0
LUX LOW GAIN 2318.77744967
LUX AUTO GAIN 0.45162

続きは 5.センサ値をクラウドに保管・表示 へ

3.センサなどを使うための詳細設定

3.1.開発言語・ライブラリィ環境の設定

C,C++,pythonなどの言語及びライブラリィをインストールしておきます。

$ sudo apt-get install cmake libtool doxygen graphviz
$ sudo apt-get install ttf-bitstream-vera ttf-dejavu unzip python-numpy

この作業はしばらく時間がかかります。

3.2.Webサーバの設定

Webサーバは必須ではありません。
設定をしておくと、センサ値をhttp経由でJSON、CSV、htmlで外部からGETできると、活用範囲が広がり便利です。

今回はApacheではなく、軽量でPHPが問題なく稼働する lighttpd を利用します。
PHPは fastcgi で割とサクサク動きます。

先ずインストール。

$ sudo apt-get install lighttpd php5 php5-cgi php5-gd php5-mcrypt

設定ファイルの設定。

$ sudo nano /etc/lighttpd/lighttpd.conf
(中略)
server.document-root = “/var/www/html”
(中略)
server.username = “pi”
server.groupname = “pi”
(中略)
#include_shell “/usr/share/lighttpd/use-ipv6.pl ” + server.port
(中略)
server.modules += ( “mod_cgi” )
cgi.assign = ( “.pl” => “/usr/bin/perl”,
“.cgi” => “/usr/bin/perl”,
“.py” => “/usr/bin/python” )

include “fastcgi.conf”

PHP fastcgi の設定。

$ sudo nano /etc/lighttpd/fastcgi.conf
server.modules += (“mod_fastcgi”)
index-file.names += (“index.php”)
fastcgi.server = (
“.php” => (
“localhost” => (
“bin-path” => “/usr/bin/php-cgi”,
“socket” => “/tmp/php-fastcgi.sock”,
“broken-scriptfilename” => “enable”,
“max-procs” => 4, # default value
“bin-environment” => (
“PHP_FCGI_CHILDREN” => “1” # default value
)
)
)
)

コンテンツフォルダの作成とパーミッション(利用権限など)設定。

$ sudo mkdir /var/www/html
$ sudo mkdir /var/www/etc
$ sudo chown -R pi.pi /var/www
$ sudo chown -R pi.pi /var/log/lighttpd

Webサーバを再起動します。

$ sudo service lighttpd restart

3.3.FTPサーバの設定

FTPサーバも必須ではありません。
設定しておくと、慣れたPCのエディタでプログラムを作成し、Raspberry Pi でデバックすると作業がはかどります。

FTPサーバのインストール。

$ sudo apt-get install vsftpd ftp

設定ファイルの設定

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.back
$ sudo rm /etc/vsftpd.conf
$ sudo nano /etc/vsftpd.conf
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
tcp_wrappers=YES

FTPサーバを再起動します。

$ sudo service vsftpd restart

Raspberry Pi で稼働試験します。

$ ftp localhost
Connected to localhost.
220 (vsFTPd 2.3.5)
Name (localhost:pi): pi
331 Please specify the password.
Password:*******
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 “/home/pi”
ftp> by
221 Goodbye.

3.4.外部IO端子を活用するためのライブラリィ設定

今回利用するセンサは Raspberr Pi の I2C(データ転送方式) の外部端子を使います。

I2C用のライブラリィをインストールします。

$ sudo apt-get install libi2c-dev

Raspberry Pi でGPIOやIC2、SPIなどの外部端子に接続した機器のプログラムを容易に開発するためのライブラリィ Wiring Pi を導入します。

Wiring Pi
http://wiringpi.com/

Gitでソースコードを取得し、以下でコンパイル、インストールします。

$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build
$ cd

インストールが完了したら、以下を実行し表示を確認します。

$ gpio -v
gpio version: 2.20
Copyright (c) 2012-2014 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
Type: Model B, Revision: 2, Memory: 512MB, Maker: Sony

今回、I2Cを利用しますので、モジュールをロードする設定をします。

$ sudo nano /etc/modules
#snd-bcm2835
i2c-dev

モジュールをロードするため、再起動します。

$ sudo reboot

I2Cのデバイスを外部端子と配線し、問題がなければ各センサの番地が表示されます。
照度センサ、LCD液晶、温湿度、CO2の各I2cセンサの番地 29,3c,40,68,69 が確認できます。

$ sudo /usr/sbin/i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: — — — — — — — — — — — — —
10: — — — — — — — — — — — — — — — —
20: — — — — — — — — — 29 — — — — — —
30: — — — — — — — — — — — — 3c — — —
40: 40 — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: — — — — — — — — 68 69 — — — — — —
70: — — — — — — — —

以上でI2Cセンサのプログラミングができる状態になりました。

続きは 4.センサの設定とプログラミング へ

2.OSインストール後の設定

2.1. raspi-config による基本環境の設定

先ず、raspi-config で基本環境の設定を行います。
青色の入力、選択の手順に従って進めてください。
$ 行の先頭にあるのはコマンド実行を意味しますので、$ を除いてコマンドを実行してください。

$ sudo raspi-config
PI-15

1 Expand Filesystem

2 Change User password

You will now be asked to enter a new password for the pi user
Enter new UNIX password: passwd
Retype new UNIX password: passwd

4 Internationalisation Option

I1 Change Locale
Configuring locales
en_US.UTF-8
ja_JP.UTF-8 UTF-8
Default locale for the system environment:
en_US.UTF-8

I2 Change TImezone
Configuring tzdata
Asia
Time zone:
Tokyo

I3 Change Keyboard Layout
※ssh接続では以下表示されない場合あり。
Keyboard model:
Generic 101-key PC
Keyboard layout:
Other
Country of origin for the keyboard:
Japanese
Keyboard layout:
Japanese
Key to function as AltGr:
The default for the keyboard layout
Compose key:
No Compose Key
Use Control+Alt+Backspace to terminate the X server?
No

5 Enable Camera
Enable support for Raspberry Pi camera?
Disable

8 Advanced Options

A2 Hostname
任意な名前

A3 Memory Split
32
※私はX-Window(Windowsのようなグラフィカル画面)を使わないので、最少にとどめています。
※32~128の間で設定するのが良いでしょう。

A7 I2C
I2C kernel module will now be loaded by default
Yes
The ARM I2 C interface is enabled
Ok
Would you like the I2C kernel module to be loaded by default?
Yes
I2C kernel module will now be loaded by default
Ok

A8 Serial
Would you like a login shell to be accessible over serial?
Yes
Serial is now enabled
Ok

A0 Update
更新が始まりますので、終わるまで待ちます。

以上が終わったら、Finish します。

Linux の Windows Update にあたるソフトの更新を行います。

$ sudo apt-get update
$ sudo apt-get upgrade
双方とも終わるまで、しばらく時間を要します。
途中の質問にはすべて Y で答えます。

スワップ領域(メモリが不足する場合などに利用する)を設定します。

$ free
total used free shared buffers cached
Mem: 218420 56860 161560 0 10456 24908
-/+ buffers/cache: 21496 196924
Swap: 102396 0 102396

$ sudo /etc/init.d/dphys-swapfile stop

$ sudo nano /etc/dphys-swapfile
CONF_SWAPSIZE=1024

Raspberry Pi 2 B+ 以外は 512 に設定します。

$ sudo /etc/init.d/dphys-swapfile start

$ free
total used free shared buffers cached
Mem: 981920 79264 902656 0 11188 32920
-/+ buffers/cache: 35156 946764
Swap: 1048572 0 1048572

ネットワークは、以下の赤字のように固定IPに設定しておくと便利です。

 

$ sudo nano /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
#allow-hotplug eth0
#iface eth0 inet manual
iface eth0 inet static
address 固定IPアドレス
netmask サブネットマスク
gateway デフォルトGWのIPアドレス

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

nano は、コマンドラインで簡単に使えるテキストエディタです。
以下を参考に操作を行ってください。

“nano”を終了する
http://www.obenri.com/_nano/close_nano.html

端末で使うテキストエディタ nano
https://sites.google.com/site/linuxnomemo/mint-use/nano

DNS は Goole提供のものを利用します。
インターネットのどのプロバイダーからでも利用でき、トラブルが少なく便利です。

$ sudo nano /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

$ sudo chattr +i /etc/resolv.conf

ここまで設定したら、一旦再起動します。

$ sudo reboot

2.2.時計の設定

センサなどを活用する場合、正確な時刻設定は重要です。
Raspberry Pi には内臓電池がなく、再起動などで時刻がずれ易く、インターネット先のntpサーバで、1時間に1回時計合わせを行うよう設定します。

$ sudo nano /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
(中略)

$ sudo /etc/init.d/ntp restart

$ sudo ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp-b3.nict.go. .NICT. 1 u 1 64 1 30.011 -12.760 2.490
ntp-a3.nict.go. .NICT. 1 u – 64 1 22.472 -12.338 0.282
ntp-b2.nict.go. .NICT. 1 u 1 64 1 34.106 -13.638 0.580
ntp-a2.nict.go. .NICT. 1 u – 64 1 19.484 -10.860 0.430

$ crontab -e
0 * * * * sudo ntpq -p

$ sudo nano /etc/rc.local
( exit 0 の直前に以下を追加)
ntpq -p

続きは 3.センサなどを使うための詳細設定 へ

 

 

1.Raspberry Pi 初期設定

1.1.OSのインストール設定

OS には Raspberry Pi で一番メジャーな Rasbian Linux を選択します。

事前に8GB以上のSDカード(Model B と A の場合)か、microSDカード(Model B+, A+, 2 B+ の場合)を用意します。
データの転送速度が早いClass10のものを選択します。

NOOBS をダウンロードして Windowsのようにインストール方法もありますが時間がかかります。
OSのインストールされたイメージをSDカードに書き込むのが早道です。

以下のサイトよりZipファイルに圧縮されたOSイメージファイルをダウンロードします。
https://www.raspberrypi.org/downloads/
PI-00
あああ2015/06/17現在では、2015-05-05 更新分が最新でした。

ダウンロードしたZipファイルを解答し、SDカードに書き込みます。
但し、Windwsの場合は別途ソフトが必要です。
以下のリンク先から、簡単に使える DD for Windows を入手すると良いでしょう。
http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows
PI-09

SDカードをPCに差し込み後、上記ソフト起動する際は右クリックして、管理権限で実行します。
管理者権限がない場合は、対象ディスクのSDカードを認識しません。
PI-02

PI-03

ファイルの選択で、先ほどダウンロードして解答したイメージを選択します。
PI-04

「<< 書込 <<」 をクリックすると以下の3つの確認が表示されますが、全て「はい(Y)」で答えます。
PI-05

PI-06
PI-07
PI-08

以上で、OSイメージのSDカードへの書き込みが始まります。
PI-09

SDカードが準備できたら、いよいよ Raspberry Pi を起動します。
Raspberry_Pi_2_Model_B_v1.1_front_angle_new

配線他は以下のブロッグなどを参考にさせてもらうと良いでしょう。

Raspberry Pi に入門してみた。(tomk79さん)
http://qiita.com/tomk79/items/cdc1b88358afba2c6337

1.2.Raspberry Pi に接続する

Raspberry Pi HDMIかビデオ端子につなぎ、USBキーボードを接続すると、ログイン画面が表示されます。
私の場合その作業が面倒なので、LANケーブルをつないで、Windows では TeraTerm、Macのターミナルでssh接続して作業を行います。
Raspberry Pi のLANの初期設定はDHCPなので、割り当てIPを調べる必要があります。
画面をモニタで表示すると、そちらでも確認できますが、私は以下のソフトを利用してDHCPで割り当てられたIPアドレスを確認しています。

LanScan(Mac)
https://itunes.apple.com/jp/app/lanscan/id472226235?mt=12

Advanced IP Scanner(Windows)
http://www.forest.impress.co.jp/library/software/advipscanner/

NetEnum(Windows)
http://www.forest.impress.co.jp/library/software/netenum/

Windows の TeraTerm については以下を参照ください。

Tera Termのインストール
http://webkaru.net/linux/tera-term-install/

パスワード認証によるSSH接続
http://webkaru.net/linux/tera-term-ssh-login/

以下、Tera Termの接続例です。
初期ユーザは pi パスワードは raspberry です。
PI-12

最初の1回目だけ、この画面が出ます。
PI-11

Raspberry Pi にssh接続ができました。
PI-13

最初に、 sudo raspi-config コマンドを実行して、パスワード変更などOSの設定を行います。
PI-14

グラフィックでないですが、矢印キーで簡単に操作できます。
PI-15

Macの場合はターミナルで以下のコマンドを実行し、パスワードを入力すると接続できます。

ssh pi@IPアドレス

続きは 2.OSインストール後の設定 へ

AWSとRaspberry Pi でIoT入門 (第9回JAWS-UG佐賀)

- Raspberry Pi で農業(施設園芸)用センサ、クラウド環境分析システム構築入門 -

JAWS-UG佐賀で上記内容で話をさせて頂きました。
理論中心の座学だけでなく、実践を見て頂きたくも仕事の本番環境は全て公開できません。
そこで、新しいセンサを評価がてら、実際の機器、作業で、センサによる値の計測から、クラウドAWSでのデータ保管、グラフによるデータ解析を行う一連のデモシステムを作成しました。

折角のご縁で、時間を頂いて話を聞きに来られた訳ですので、少しでもお役に立ちたく思います。
そこで、興味のある方に是非「ダイブ」(実際に試)して頂くための、デモシステムを構築した記録を以下にまとめました。
是非、ご参照ください。

以下で紹介するプログラムのソースコードは以下に公開しています。
https://github.com/yukataoka/IoT_Raspi_AWS_Demo

1.Raspberry Pi 初期設定
https://yukataoka.wordpress.com/2015/06/20/raspi01/

2.OSインストール後の設定
https://yukataoka.wordpress.com/2015/06/20/raspi02/

3.センサなどを使うための詳細設定
https://yukataoka.wordpress.com/2015/06/20/raspi03/

4.センサの設定とプログラミング
https://yukataoka.wordpress.com/2015/06/20/raspi04/

5.センサ値をクラウドに保管・表示
https://yukataoka.wordpress.com/2015/06/20/raspi05/

6.S3静的htmlのJavaScriptでグラフ表示
https://yukataoka.wordpress.com/2015/06/20/raspi06/

当日のスライド。
(後日公開予定)

実際のWebコンテンツ
http://s.ykata.net/