Category Archives: RPi Network App

a Respberry Pi MQTT sample

MQTTのPublisher(リモコン)からのメッセージは、MQTTのbrokerを経由して、自宅Raspberry Pi にMQTTのSubscriber(受信機)受信し、液晶表示盤にテキスト表示、LEDバックライトのON/OFFするできた!

MQTTのbrokerはsango(時雨堂という会社が無償提供) MQTT サーバーを利用。

MQTTのPublisher(リモコン)は、MQTTLens利用。

MQTTのSubscriber(受信機)サンプルコード!

var fs = require('fs');
var mqtt = require("mqtt"),
    config = require("./config.json"),
    client = mqtt.createClient(config.port, config.host, config.options);
var exec = require('child_process').exec,
    child;

client.subscribe(config.topic + "/#");

client.on("message", function(topic, message) {
                console.log(topic, message.toString());

                switch (topic){
                case 'chen420@github/led':
                command = (message!='0'?1:0);

                fs.writeFileSync('/sys/class/gpio/export', 9);
                fs.writeFileSync('/sys/class/gpio/gpio9/direction', 'out');
                fs.writeFileSync('/sys/class/gpio/gpio9/value', command);
                fs.writeFileSync('/sys/class/gpio/unexport', 9);
                break;

                case 'chen420@github/lcd':
                child = exec('/usr/local/bin/lcdprint ' + message,
                        function (error, stdout, stderr) {
                        // console.log('stdout: ' + stdout);
                        // console.log('stderr: ' + stderr);
                        if (error !== null) {
                        console.log('exec error: ' + error);
                        }
                        });
                break;
                }
}
);

参考文献の設定ファイルを利用した。LEDバックライトは、gpio 9番に設定、テキスト表示は、PCD8544-utils のlcdprint コマンドを利用した。

Subscriber の実行:

$ node mqtt-led.js

MQTTブローカーのそれぞれTopicに メッセージが下記の動作が発生

  • chen420@github/led | 0 または1 | バックライトのON/OFF
  • chen420@github/lcd | ”表示メッセージ” | 表示

Subscriberの永続化(サービスとして動く)が次の課題に。

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

Raspberry PiでMQTT通して連携

この数週間Raspberry PiにによりHome Automationなどを再考して、Node.js、WebIOPiなど、サーバとして可能性を調べているが、なぜかMQTTに出会って、実装までして、全く違う方向へ進行した。

先週たまたま Ruby – Raspberry Pi で室内の温度を可視化するよー – Qiita 記事を見て、「Sango を介して(MQTT で)結果を Graphite に飛ばす」とはなにか、調べてみた。

MQTTは、M2MやIoT向けの軽量プロトコル。いろいろとメリットあるが、Raspberry PiでMQTT通して連携するメリット考えると

  1. ルータに穴を開ける必要がない
  2. サーバ公開する必要がない
  3. セッション維持する必要がない
  4. 重いHTTPサーバもつ必要がない

実は2年前も自宅に、Raspberry Pi wireless 温度計の制作 をしたが、サーバ公開してないので、外から見れない。もちらん公開する方法もあるが、自宅サーバ際クラウドへ移転などするので、Raspberry PiだけのためにDDNSメンテナンスする気がならない。MQTTならブローカーに繋がれば、いろいろ連携プレーが考えられる。

早速自宅温度データをSango にPubして、他所からSubで見れるようになった。

それからMQTTを通して、自宅Raspberry Piの液晶表示版にテキスト表示、LEDバックライトのON/OFFもできた!

これから、MQTTのメッセージをMongoDBに保存、Google spreadsheetsに保存、グラフ表示、plot.lyのグラフ表示など、やってみたいと思う。

そうそう、AppInventorから、MQTTを通して、Raspberry Piの状態表示、GPIOのコントロールもしてみたい。

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

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で無線ルーターを作る

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://linux.uc4.net//xoops/modules/xpwiki/)まとめる予定。

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

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

  • mjpg-streamer
  • motion
  • ffmpeg

があるらしい。ここはmotionを試す。 使った機材:

  • 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://linux.uc4.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