森川敬一 CTO ブログ

unimediaでCTOやってます森川敬一です。エンジニアブログ。IoT、ウエアブルとか書いていきます。

RaspberryPi

f:id:m-kei1:20150213124718j:plain
気がついたらRaspberryPi2が発売されてましたが、

RaspberryPi B+を購入しました。

RaspberryPi2では、Windows10も提供って事でIoT周りがドンドン盛り上がってきてます。


「Raspberry Pi 2」にWindows 10が無償提供されることが決定 - GIGAZINE


動かすに当たって、RaspberryPi だけではダメで色々と必要です。

・シリアル接続のコード
ディスプレイやキーボードを持ってればいいけど持ってなかったので。普通持ってないよね?
Amazon.co.jp: Raspberry Pi Arduino PL2303HX内蔵USBシリアル変換ケーブル: パソコン・周辺機器

・OSインストール済みSDカード
 普通、SDカードが読めるPCって持ってないよね。
Amazon.co.jp: debian OS for Raspberry Pi (Raspbian), OSインストール済み SDカード (microSDHC 32GB Class 6 (SDカードアダプタ付)): パソコン・周辺機器

wifiアダプター
 これも最近、ネットワークケーブルって周りに出てないでしょ
Amazon.co.jp: PLANEX 無線LAN子機 (USBアダプター型) 11n/g/b 150Mbps GW-USNANO2A (FFP): パソコン・周辺機器

って形で色々と揃える必要があります。

f:id:m-kei1:20150213115725j:plain
写真の様な形で接続して、下記からドライバーをDLしてインストールします。

http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41

マニュアルに書いてある通り、自動でセットアップされたドライバーを削除して、このドライバーをインストールする必要がありました。

1.telnetで接続です。teratermを使いました。
f:id:m-kei1:20150213122221p:plain
接続後、シリアルのレートをraspberryPiに合わせて115200に変更します。

f:id:m-kei1:20150213122414p:plain
無事に接続されます!
こんな小さいのみ普通にLinuxが動いている事に感動です。

2.wifi設定
/etc/network/interfacesを編集

iface wlan0 inet dhcp
#iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

/etc/wpa_supplicant/wpa_supplicant.confを編集

network={
ssid="YOUR_NETWORK_NAME"
psk="YOUR_NETWORK_PASSWORD"
proto=WPA2
key_mgmt=WPA-PSK
}

最後に
sudo ifdown wlan0
sudo ifup wlan0

で完了です。
ifconfigでwlan0 のIPを確認して、PCからsshも繋がりました。

3.node.jsを入れてみる

最初にnode.jsのバーション管理のnodebrewを入れます。

pi@raspberrypi:~$ curl -L git.io/nodebrew | perl - setup
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
100 22630  100 22630    0     0  10503      0  0:00:02  0:00:02 --:--:--  920k
fetching nodebrew...
install nodebrew in $HOME/.nodebrew

========================================
Add path:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================

言われた通り環境変数追加

pi@raspberrypi:~$ vi ~/.bashrc
export PATH=$HOME/.nodebrew/current/bin:$PATH
pi@raspberrypi:~$ source ~/.bashrc

ということでnode.jsインストール

pi@raspberrypi:~$ nodebrew install-binary 0.10.28
fetch: http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-arm-pi.tar.gz
######################################################################## 100.0%                           36.9%
Install successful

pi@raspberrypi:~$ nodebrew use 0.10.28
use v0.10.28
pi@raspberrypi:~$ node -v
v0.10.28

expressでwebサーバー化

pi@raspberrypi ~ $ npm install -g express-generator
npm http GET https://registry.npmjs.org/express-generator
npm http 200 https://registry.npmjs.org/express-generator
npm http GET https://registry.npmjs.org/express-generator/-/express-generator-4.11.2.tgz
npm http 200 https://registry.npmjs.org/express-generator/-/express-generator-4.11.2.tgz
npm http GET https://registry.npmjs.org/commander
npm http GET https://registry.npmjs.org/mkdirp
npm http GET https://registry.npmjs.org/sorted-object
npm http 200 https://registry.npmjs.org/mkdirp
npm http 200 https://registry.npmjs.org/sorted-object
npm http 200 https://registry.npmjs.org/commander
npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz
npm http GET https://registry.npmjs.org/sorted-object/-/sorted-object-1.0.0.tgz
npm http GET https://registry.npmjs.org/commander/-/commander-2.6.0.tgz
npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz
npm http 200 https://registry.npmjs.org/sorted-object/-/sorted-object-1.0.0.tgz
npm http 200 https://registry.npmjs.org/commander/-/commander-2.6.0.tgz
npm http GET https://registry.npmjs.org/minimist
npm http 200 https://registry.npmjs.org/minimist
npm http GET https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz
npm http 200 https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz
/home/pi/.nodebrew/current/bin/express -> /home/pi/.nodebrew/current/lib/node_modules/express-generator/bin/express
express-generator@4.11.2 /home/pi/.nodebrew/current/lib/node_modules/express-generator
├── sorted-object@1.0.0
├── commander@2.6.0
└── mkdirp@0.5.0 (minimist@0.0.8)
pi@raspberrypi ~ $

pi@raspberrypi:~$ vi ~/.bashrc
追加

export PATH=$HOME/.nodebrew/current/bin:$PATH
export PATH=$HOME/.nodebrew/node/v0.10.28/bin/express:$PATH
export NODE_PATH=$HOME/.nodebrew/node/v0.10.28/lib/node_modules

pi@raspberrypi:~$ source ~/.bashrc


pi@raspberrypi:~$ mkdir httpd
pi@raspberrypi:~$ cd httpd


pi@raspberrypi ~/httpd $ express -e sample

   create : sample
   create : sample/package.json
   create : sample/app.js
   create : sample/public
   create : sample/public/javascripts
   create : sample/public/images
   create : sample/public/stylesheets
   create : sample/public/stylesheets/style.css
   create : sample/routes
   create : sample/routes/index.js
   create : sample/routes/users.js
   create : sample/views
   create : sample/views/index.ejs
   create : sample/views/error.ejs
   create : sample/bin
   create : sample/bin/www

   install dependencies:
     $ cd sample && npm install

   run the app:
     $ DEBUG=sample:* ./bin/www

pi@raspberrypi ~/httpd $



pi@raspberrypi ~/httpd $ cd sample && npm install
npm http GET https://registry.npmjs.org/body-parser
npm http GET https://registry.npmjs.org/cookie-parser
npm http GET https://registry.npmjs.org/ejs
npm http GET https://registry.npmjs.org/morgan
npm http GET https://registry.npmjs.org/serve-favicon
npm http GET https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/express
npm http 200 https://registry.npmjs.org/cookie-parser
npm http 200 https://registry.npmjs.org/serve-favicon
npm http 304 https://registry.npmjs.org/debug
npm http 304 https://registry.npmjs.org/express
npm http 200 https://registry.npmjs.org/morgan
npm http 200 https://registry.npmjs.org/ejs
npm http 200 https://registry.npmjs.org/body-parser
npm http GET https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.2.0.tgz
npm http GET https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.3.tgz
npm http GET https://registry.npmjs.org/morgan/-/morgan-1.5.1.tgz
npm http 200 https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.2.0.tgz
npm http GET https://registry.npmjs.org/ejs/-/ejs-2.2.4.tgz
npm http 200 https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.3.tgz
npm http GET https://registry.npmjs.org/body-parser/-/body-parser-1.10.2.tgz
npm http 200 https://registry.npmjs.org/ejs/-/ejs-2.2.4.tgz
npm http 200 https://registry.npmjs.org/morgan/-/morgan-1.5.1.tgz
npm http 200 https://registry.npmjs.org/body-parser/-/body-parser-1.10.2.tgz
npm http GET https://registry.npmjs.org/etag
npm http GET https://registry.npmjs.org/fresh
npm http GET https://registry.npmjs.org/ms
npm http GET https://registry.npmjs.org/parseurl
npm http GET https://registry.npmjs.org/cookie
npm http GET https://registry.npmjs.org/cookie-signature
npm http 304 https://registry.npmjs.org/fresh
npm http 304 https://registry.npmjs.org/etag
npm http 304 https://registry.npmjs.org/cookie-signature
npm http 304 https://registry.npmjs.org/ms
npm http 304 https://registry.npmjs.org/parseurl
npm http 304 https://registry.npmjs.org/cookie
npm http GET https://registry.npmjs.org/basic-auth
npm http GET https://registry.npmjs.org/depd
npm http GET https://registry.npmjs.org/on-finished
npm http 200 https://registry.npmjs.org/basic-auth
npm http 304 https://registry.npmjs.org/on-finished
npm http 304 https://registry.npmjs.org/depd
npm http GET https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.0.tgz
npm http 200 https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.0.tgz
npm http GET https://registry.npmjs.org/bytes
npm http GET https://registry.npmjs.org/iconv-lite
npm http GET https://registry.npmjs.org/raw-body
npm http GET https://registry.npmjs.org/media-typer
npm http GET https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/type-is
npm http 200 https://registry.npmjs.org/raw-body
npm http 200 https://registry.npmjs.org/bytes
npm http 304 https://registry.npmjs.org/media-typer
npm http 304 https://registry.npmjs.org/type-is
npm http 200 https://registry.npmjs.org/iconv-lite
npm http 304 https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/raw-body/-/raw-body-1.3.2.tgz
npm http GET https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz
npm http GET https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.6.tgz
npm http 200 https://registry.npmjs.org/raw-body/-/raw-body-1.3.2.tgz
npm http 200 https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz
npm http 200 https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.6.tgz
npm http GET https://registry.npmjs.org/crc
npm http 304 https://registry.npmjs.org/crc
npm http GET https://registry.npmjs.org/ee-first
npm http 304 https://registry.npmjs.org/ee-first
npm http GET https://registry.npmjs.org/on-finished
npm http GET https://registry.npmjs.org/parseurl
npm http GET https://registry.npmjs.org/methods
npm http GET https://registry.npmjs.org/range-parser
npm http GET https://registry.npmjs.org/type-is
npm http GET https://registry.npmjs.org/send
npm http GET https://registry.npmjs.org/cookie
npm http GET https://registry.npmjs.org/serve-static
npm http GET https://registry.npmjs.org/vary
npm http GET https://registry.npmjs.org/merge-descriptors
npm http GET https://registry.npmjs.org/utils-merge
npm http GET https://registry.npmjs.org/accepts
npm http GET https://registry.npmjs.org/cookie-signature
npm http GET https://registry.npmjs.org/content-disposition
npm http GET https://registry.npmjs.org/depd
npm http GET https://registry.npmjs.org/escape-html
npm http GET https://registry.npmjs.org/etag
npm http GET https://registry.npmjs.org/fresh
npm http GET https://registry.npmjs.org/finalhandler
npm http GET https://registry.npmjs.org/media-typer
npm http GET https://registry.npmjs.org/path-to-regexp
npm http GET https://registry.npmjs.org/proxy-addr
npm http 304 https://registry.npmjs.org/on-finished
npm http 304 https://registry.npmjs.org/parseurl
npm http 304 https://registry.npmjs.org/send
npm http 304 https://registry.npmjs.org/methods
npm http 304 https://registry.npmjs.org/cookie
npm http 304 https://registry.npmjs.org/range-parser
npm http 304 https://registry.npmjs.org/vary
npm http 304 https://registry.npmjs.org/serve-static
npm http 304 https://registry.npmjs.org/merge-descriptors
npm http 304 https://registry.npmjs.org/utils-merge
npm http 304 https://registry.npmjs.org/type-is
npm http 304 https://registry.npmjs.org/accepts
npm http 304 https://registry.npmjs.org/cookie-signature
npm http 304 https://registry.npmjs.org/content-disposition
npm http 304 https://registry.npmjs.org/depd
npm http 304 https://registry.npmjs.org/escape-html
npm http 304 https://registry.npmjs.org/etag
npm http 304 https://registry.npmjs.org/fresh
npm http 304 https://registry.npmjs.org/finalhandler
npm http 304 https://registry.npmjs.org/media-typer
npm http 304 https://registry.npmjs.org/path-to-regexp
npm http 304 https://registry.npmjs.org/proxy-addr
npm http GET https://registry.npmjs.org/crc
npm http GET https://registry.npmjs.org/ee-first
npm http GET https://registry.npmjs.org/mime-types
npm http GET https://registry.npmjs.org/negotiator
npm http GET https://registry.npmjs.org/mime-types
npm http GET https://registry.npmjs.org/forwarded
npm http GET https://registry.npmjs.org/ipaddr.js
npm http 304 https://registry.npmjs.org/crc
npm http 304 https://registry.npmjs.org/forwarded
npm http 304 https://registry.npmjs.org/ee-first
npm http 304 https://registry.npmjs.org/ipaddr.js
npm http 304 https://registry.npmjs.org/mime-types
npm http 304 https://registry.npmjs.org/negotiator
npm http 304 https://registry.npmjs.org/mime-types
npm http GET https://registry.npmjs.org/destroy
npm http GET https://registry.npmjs.org/ms
npm http GET https://registry.npmjs.org/mime
npm http 304 https://registry.npmjs.org/ms
npm http 304 https://registry.npmjs.org/destroy
npm http 304 https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/mime-db
npm http 304 https://registry.npmjs.org/mime-db
npm http GET https://registry.npmjs.org/ee-first
npm http GET https://registry.npmjs.org/mime-types
npm http 304 https://registry.npmjs.org/ee-first
npm http 304 https://registry.npmjs.org/mime-types
cookie-parser@1.3.3 node_modules/cookie-parser
├── cookie@0.1.2
└── cookie-signature@1.0.5

debug@2.1.1 node_modules/debug
└── ms@0.6.2

morgan@1.5.1 node_modules/morgan
├── basic-auth@1.0.0
├── depd@1.0.0
└── on-finished@2.2.0 (ee-first@1.1.0)

serve-favicon@2.2.0 node_modules/serve-favicon
├── fresh@0.2.4
├── ms@0.7.0
├── parseurl@1.3.0
└── etag@1.5.1 (crc@3.2.1)

ejs@2.2.4 node_modules/ejs

express@4.11.2 node_modules/express
├── merge-descriptors@0.0.2
├── utils-merge@1.0.0
├── methods@1.1.1
├── cookie@0.1.2
├── fresh@0.2.4
├── escape-html@1.0.1
├── range-parser@1.0.2
├── cookie-signature@1.0.5
├── finalhandler@0.3.3
├── vary@1.0.0
├── media-typer@0.3.0
├── parseurl@1.3.0
├── serve-static@1.8.1
├── content-disposition@0.5.0
├── path-to-regexp@0.1.3
├── depd@1.0.0
├── on-finished@2.2.0 (ee-first@1.1.0)
├── qs@2.3.3
├── proxy-addr@1.0.6 (forwarded@0.1.0, ipaddr.js@0.1.8)
├── etag@1.5.1 (crc@3.2.1)
├── send@0.11.1 (destroy@1.0.3, ms@0.7.0, mime@1.2.11)
├── accepts@1.2.3 (negotiator@0.5.0, mime-types@2.0.9)
└── type-is@1.5.7 (mime-types@2.0.9)

body-parser@1.10.2 node_modules/body-parser
├── media-typer@0.3.0
├── bytes@1.0.0
├── raw-body@1.3.2
├── depd@1.0.0
├── on-finished@2.2.0 (ee-first@1.1.0)
├── qs@2.3.3
├── type-is@1.5.7 (mime-types@2.0.9)
└── iconv-lite@0.4.6
pi@raspberrypi ~/httpd/sample $
pi@raspberrypi ~/httpd/sample $ node app
依存モジュールを入れる

pi@raspberrypi ~/httpd/sample $ express -V
4.11.2
pi@raspberrypi ~/httpd/sample $ npm start

> sample@0.0.0 start /home/pi/httpd/sample
> node ./bin/www

無事動いた。パチパチ。
f:id:m-kei1:20150213123906p:plain

この後色々とやってみます。楽しみ。