Raspberry PiにWebIOPiをインストール

Raspberry PiのGPIOをブラウザから操作したいので、WebIOPiをインストールした。

まずパッケージをダウンロードして、解凍、セットアップ

1)sudo wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz

2)tar xvzf WebIOPi-0.6.0.tar.gz

3)cd WebIOPi-0.6.0

4)sudo ./setup.sh

インストール終わったら、下記のメッセージが表示。Python のライブラリーがあり、細かい制御可能。またREST APIは下記にまとまっている。
RESTAPI – webiopi – Internet of Things framework – Google Project Hosting

REST APIなので、いつかApache/phpで制御する仕組みをやってみようと思う。

WebIOPi successfully installed
* To start WebIOPi foreground   : sudo webiopi [-h] [-c config] [-l log] [-s script] [-d] [port]
* To start WebIOPi background   : sudo /etc/init.d/webiopi start
* To start WebIOPi at boot      : sudo update-rc.d webiopi defaults
* Look in /home/chen/WebIOPi-0.6.0/examples for Python library usage examples

起動させる

5)sudo /etc/init.d/webiopi status

6)sudo /etc/init.d/webiopi start

ブラウザからアクセスする

7)http://raspbian-ip:8000/ for log in from other computer

8)http://localhost:8000/ for log in from Raspian itself

9)user name=webiopi and password=raspberry

image

ここで GPIO Header を開くと、実物順のRaspberry Pi GPIO表示され、適当に設定可能。

image

GPIO Listをクリックすると、Raspberry Pi GPIO番号順に表示され、適当に設定も可能。

image

サービスの停止

10)type sudo /etc/init.d/webiopi stop to stop webiopi service

Android アプリもある

11)from play store,download DrGPIO to Android phone to control the Pi

これがあると、GPIOの検証が楽だろう。

Raspberry Pi に液晶表示盤の回路図がないのため、基盤の結線を感で探すから、GPIO端子ON/OFFして見ると判断の手助けになる。

参考文献 -  肩に乗せてもらった巨人達:

Raspberry Piの通信対戦シューティングゲーム

付録のサイトを参考しながら進む。ExpressとSocket.IOを使用している。

$ git clone git://github.com/coppieee/node-shooting-demo.git
$ cd node-shooting-demo
$ npm install
$ node app

動かしてみるが、ShootingサンプルStart押して、白画面になり、反応がなく、304 Not Modified沢山でたので、どこが問題だ

chen@juno ~/node-shooting-demo $ node app
Express server listening on port 3000
GET / 200 173ms – 297
GET /stylesheets/style.css 200 162ms – 296
GET /javascripts/jquery-1.8.0.min.js 200 160ms – 90.39kb
GET / 200 28ms – 297
GET /stylesheets/style.css 304 23ms
GET /javascripts/jquery-1.8.0.min.js 304 25ms
GET /game 200 13ms – 442
GET /stylesheets/style.css 304 24ms
GET /javascripts/jquery-1.8.0.min.js 304 16ms
GET /javascripts/client.js 200 43ms – 3.54kb
GET /images/unit.png 200 42ms – 1.45kb
GET /images/bullet.png 200 40ms – 852
GET /game 200 18ms – 442
GET /stylesheets/style.css 304 61ms
GET /javascripts/jquery-1.8.0.min.js 304 49ms
GET /javascripts/client.js 304 25ms
GET /images/unit.png 304 30ms
GET /images/bullet.png 304 30ms

備考:

翌日気を取り直して、再テストしたら、上手くできた!

 

スクリーンショット 2015-04-17 21.05.40

参考文献 肩に乗せてもらった巨人達:

Raspberry Piのチャットサービス

Raspberry PiにNote.js、ExpressとSocket.IOを使用して簡単なチャットアプリを作ってみる。

chen@juno ~ $ npm install -g express
chen@juno ~ $ npm install socket.io

サンプルコードのダウンロードと実行、Socket.IOを使ったアプリではクライアントからメッセージを受け取り、処理した内容をクライアントに送信するといった処理になる。

chen@juno ~ $git clone git://github.com/coppieee/node-chat-demo.git
chen@juno ~ $cd node-chat-demo
chen@juno ~ $npm install
chen@juno ~ $node app

ブラウザからアクセスしてみる

image

複数ブラウザからチャットできると、確認した。コンソールからもログが出る

chen@juno ~/node-chat-demo $ node app
Express server listening on port 3000
GET / 200 222ms – 463
GET /stylesheets/style.css 200 233ms – 110
GET /javascripts/client.js 200 125ms – 568
GET /javascripts/jquery-1.8.0.js 200 230ms – 252.32kb
GET / 200 27ms – 463
GET /stylesheets/style.css 304 29ms
GET /javascripts/jquery-1.8.0.js 304 14ms
GET /javascripts/client.js 304 14ms

RaspberryPiにNode.js

Node.jsとは、JavaScriptの一種で、サーバーが構築できる言語。

「リアルタイムweb」とは、ほぼタイムラグなしにブラウザ上情報の更新を反映する、FacebookのメッセージやGoogleDocsなどの感じ。

Nodeには「ページに新しい情報が来たよ!」と教えてくれる機能があり、Socket.IOというパッケージにて実装できる。

間隔を開けてサーバにポーリングなどいらない分、サーバの負担が軽減てき、より多数のブラウザが接続できる。

環境構築

まず、Node.jsのバージョンを管理するためのマネージャをまずインストールする

chen@juno ~ $ 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:02 –:–:–     0
100 22630  100 22630    0     0   5045      0  0:00:04  0:00:04 –:–:– 14432
fetching nodebrew…
install nodebrew in $HOME/.nodebrew

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

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

chen@juno ~ $ vi .bashrc
chen@juno ~ $ source .bashrc

 

Node.jsのインストール

Node.jsをバイナリからインストール。参考サイトの言われたままに、Raspberry Pi向け(arm-pi)の最新版バイナリが用意されていないため、v0.10.28を使用。

chen@juno ~ $ 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%
Install successful
chen@juno ~ $ nodebrew use 0.10.28
use v0.10.28
chen@juno ~ $ node -v
v0.10.28
chen@juno ~ $ npm -v
1.4.9
chen@juno ~ $

Hello Worldの表示

以下のコードをapp.jsというファイル名で保存して、Node.jsで実行してみよう。

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Worldn');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://192.168.0.207:1337/');

実行して見る:

chen@juno ~ $ node app.js
Server running at http://192.168.0.207:1337/

ブラウザから確認:

image

Raspberry Pi にWordPressを動かすまで(Lighttpd編)

Raspberry PiのApacheから、軽いLighttpdに切り替えた記録。

Raspberry Pi は2台購入して、一台目はメモリ256Mのみ、2台目のメモリは512Mに増強した。そのため一台目最初からLighttpdで運用し、2台目余裕があると思って、最初はApacheで運用したが、いろいろ用途が増やすとやはりメモリ不足に落ち、Lighttpdに切り替えた。

# /etc/init.d/apache2 stop
# dpkg -l | grep apache

ii  apache2-mpm-prefork                   2.2.22-12                          armhf        Apache HTTP Server – traditional non-threaded model
ii  apache2-utils                         2.2.22-12                          armhf        utility programs for webservers
ii  apache2.2-bin                         2.2.22-12                          armhf        Apache HTTP Server common binary files
ii  apache2.2-common                      2.2.22-12                          armhf        Apache HTTP Server common files
ii  libapache2-mod-php5                   5.4.4-14+deb7u3                    armhf        server-side, HTML-embedded scripting language (Apache 2 module)

# apt-get –purge remove apache2.2
# apt-get –purge remove libapache2-mod-php5
# apt-get install lighttpd
# lighty-enable-mod fastcgi
# lighty-enable-mod fastcgi-php
# vi /etc/lighttpd/lighttpd.conf  // 設定を確認
# lighty-enable-mod ssl
# /etc/init.d/lighttpd force-reload
# lighty-enable-mod ssl

WordPressのリダイレクト設定は、Apacheと違うので結構ネットぐぐったけど、試行錯誤で下記の設定がOKでした。

url.rewrite-if-not-file = (
“^/{$rewrite_path}(wp-.+).*/?” => “$0”,
“^/{$rewrite_path}.*?(?.*)?$” => “/{$rewrite_path}index.php$1”
)

マルチドメインの場合、さらに複雑なり、下記の書き方がいいらしい。

url.rewrite-if-not-file = (
“^/(.*/)?files/$” => “/index.php”,
“^/(.*/)?files/(.*)” => “/wp-includes/ms-files.php?file=$2”,
“^(/wp-admin/.*)” => “$1”,
“^/({_0}+/)?(wp-.*)” => “/$2”,
“^/({_0}+/)?(.*.php)$” => “/$2”,
“^/(.*)/?$” => “/index.php/$1”
)

RASPBERRY PIで無線ルーターの復帰

いつの間にか、RASPBERRY PIで無線ルーターを作る,で作った無線ルータが信号がなくなった。試行錯誤で辛うじて復帰した記録。

インストール手順から見直しと、hostapd がおかしい。

root@juno:/etc/network# hostapd -d /etc/hostapd/hostapd.conf

random: Trying to read entropy from /dev/random
Configuration file: /etc/hostapd/hostapd.conf
Line 2: invalid/unknown driver ‘rtl871xdrv’
1 errors found in configuration file ‘/etc/hostapd/hostapd.conf’

まずUSBでWLAN Adapter認識されたかを確認する

chen@juno ~ $ sudo lsusb

[sudo] password for chen:
Bus 001 Device 002: ID 0424:9512 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 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter

WLAN Adapterが普通に認識された模様。すると、デバイス・ドライバーが正しくインストールされない?

いつか、aptitude upgradeで、正しくインストールしたデバイス・ドライバー壊れたかも。まずRaspberry Pi firmware updateする。

chen@juno /home/www/html $ sudo rpi-update

*** If no errors appeared, your firmware was successfully updated to a32baf52832725b3fe2ebda0f4acf398b04ef105
*** A reboot is needed to activate the new firmware
chen@juno /home/www/html $ sudo reboot

それでも直らない。いろいろ調べて分かったことは、Update hostapdドライバが8192cuの場合、apt-getでインストールされるhostapdはこのデバイスに対応してない。確かに、adafruitからダウンロードして、オリジナルのバイナリを置き換えた痕跡があった。

おそらく、aptitude upgradeする際、置き換えたhostapdまた最新版のオリジナルのバイナリに戻された。

再度http://www.adafruit.com/downloads/adafruit_hostapd.zip からバイナリをダウンロードし、それでオリジナルのバイナリを置き換えると、hostapd 動くようになった。

無線ルーターが無事復帰できた。

Raspberry Pi に液晶表示盤

AliExpress.comでRaspberry Pi 用液晶表示盤発見。送料無料8ドルで早速注文。約8日で東京自宅に届きました。

見た目右に3つ黒いピクセルがあるが、使用上支障がない模様。

Raspberry-Pi-LCD

Attached new LCD for Raspberry Pi

早速取り付けて、電源ONして、バックライト点灯したが、画面当然何も表示しない。

wiringPiのGitから取得とbuild

415  cd
416  git clone git://git.drogon.net/wiringPi
417  cd wiringPi/
418  ./build

RaspberryPiの/libraries/c/をGitから、pcd8544_test、pcd8544_test2、を実行。

419  cd
423  git clone https://github.com/binerry/RaspberryPi.git
425  cd RaspberryPi/libraries/c/PCD8544/
437  cp -p ../PCD8544.h ./
438  cc -o pcd8544_test pcd8544_test.c ../PCD8544.c  -L/usr/local/lib -lwiringPi
439  sudo ./pcd8544_test
440  cc -o pcd8544_test2 pcd8544_test2.c ../PCD8544.c  -L/usr/local/lib -lwiringPi
441  sudo ./pcd8544_test2

立ち上げ時間、CPU利用率と空きメモリの表示サンプル

442  cc -o pcd8544_rpi pcd8544_rpi.c ../PCD8544.c  -L/usr/local/lib -lwiringPi
443  sudo ./pcd8544_rpi
444  top
445  sudo ./pcd8544_rpi
446  sudo ./pcd8544_rpi &

バックグラウンド実行も可能。

Raspberry Piで無線ルーターを作る

Raspberry Piを買ってから、いろいろ試した。

Google+でたまたま、Setting up a Raspberry Pi as a WiFi access point記事を目にした。制作にかかった。家にはすでに常時2台無線ルーターが稼働しているので、ただの無線ルーターじゃ面白くないので、そのうえ同じサイトのOnion Pi の記事を参考しながらTor Proxyサーバを立てた。

Proxyサーバが匿名アクセスなどいろいろメリットがあるが、サーバのプロとしての用途もいろいろ、たとえば外から自宅サーバのアクセス性をテストするとか、自宅限定テストサイトが本当に限定されたかとか、自宅からのみアクセスを制限した管理ツールが本当に制限されたとか、自宅以外のIPからのアクセスのテストが時々必要になる。今までわざわざVNCで外にあるサーバの画面を開いてから覗くなり、スマートフォンのWiFiをOFFして、モバイルネットから覗くなりなど対応してた。

既にRaspbianのインストール、USB-WiFiの接続が済んたので、上記のページを参考に進めると、順調に無線ルーターとして機能し、Tor Proxyサーバも立てた。

試しに、iPhoneから立てたRaspberry Pi無線ルーターに接続すると、確かに自宅サーバ以外のIPでウェイブサイトにアクセスすることができた。

詳しい製作過程は、気が向いたらWIKIへ(http://digilib.net/xoops/modules/xpwiki/)まとめる予定。

Raspberry Pi ネットワークカメラを作る

Motivation

RaspberryPiに に Webカメラを接続して動画を配信してみる 定番のストリーミングアプリとして、

  • mjpg-streamer
  • motion
  • ffmpeg

があるらしい。ここはmotionを試す。

Parts List

  • RaspberryPi 本体
  • 内蔵マイクタイプ130万素Webカメラ:UCAM-C0113FBPN[ELECOM(エレコム)]
  • マイク内蔵/FullHD対応オートフォーカス搭載200万画素Webカメラ:UCAM-DLD200BASV[ELECOM(エレコム)]

Webカメラどちらも直結でmotionできた! UCAM-DLD200BASVの方が、内蔵マイクも認識されるので、そのうち音声ストリーミングも試す予定なので、こちらを使って実験を進める。 FireShot Screen Capture #006 - '(JPEG 画像, 320x240 px)' - 192_168_0_201_8081

詳しい製作過程は、WIKIへ(http://digilib.net/xoops/modules/xpwiki/)どうぞ。

My works

  • lsusb
Bus 001 Device 002: ID 0424:9512 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 0c45:7401 Microdia
Bus 001 Device 005: ID 056e:7009 Elecom Co., Ltd   <--- Elecom UVC Webカメラ
  • ls /dev/video0
  • apt-get install motion
  • vi /etc/motion/motion.conf
control_localhost off 
webcam_localhost off
  • motion -n

ブラウザで以下のアドレスにアクセスすると、配信されている画像を確認することができる。 (ご自分のRaspberry PiのIPアドレスに書き換えて)

Add info anchor.png