PHP
Arduino
Pusher
RaspberryPi
SORACOM

Raspberry PiとSORACOM Airで動画と連携するハードウェアを作る

More than 1 year has passed since last update.

Maker Faire Tokyo 2017で①ヒートガンでポップコーンを作り、②キャンディーを砕いて溶かしてポップコーンに色付けするという展示をしました。写真と動画はこちら。

https://sweetelectronics.wordpress.com/2017/08/09/mft2017/

私が担当したパートは

  • srt.jsを使ってYouTubeの字幕としてハードウェアにコマンドを送信
  • Raspberry Piでコマンドを受信して、接続されたソレノイドを駆動してキャンディを砕く
  • 砕かれたキャンディを手作業で心を込めてフライパンで溶かす

というシステム構成で仕立てたのですが、多くの来場者から不思議がっていただきまして、特にRaspberry PiにSORACOMのSIMを挿してPusher(WebSocket)で待ち受けるという構成は様々なところで使えると思いますので、書いてみることにします。

事前にすること

お買い物

スイッチサイエンスさんで入手できます。

Raspberry Pi 3
https://www.switch-science.com/catalog/2800/

SORACOMスターターキット
https://www.switch-science.com/catalog/2767/

Pusherにお申込み

こちらを参考にしてください。
http://qiita.com/alingogo/items/a52dfccc2e4711c5f521

PHPでPusherへ送る

こういうのを置いて、push.php?text=1にアクセスしてPusherのデバッグ画面に文字列が届いてると成功です。

push.php
require_once('external/Pusher.php');

$pusher_ini = parse_ini_file("api.ini",true)["pusher"];
$text = $_GET["text"];

$pusher = new Pusher(
    $pusher_ini["key"],
    $pusher_ini["secret"],
    $pusher_ini["app_id"],
    ['encrypted'=>true]
);
$data['message'] = $text;
$pusher->trigger('test_channel', 'my_event', $data);

Raspberry PiとSORACOM SIMが届いたら

Rasberry Piをソラコムに認識させる

このあたりを参考に。
http://qiita.com/CLCL/items/95693f6a8daefc73ddaa

node.jsでPusherから受け取り、Arduinoへ送信

こういうのを置きました。

pusher.js
var Pusher = require('pusher-js/node');
var SerialPort = require('serialport');
var conf = require('config');
var fs = require('fs');

var sp = null;

// Arduinoが刺さっているポートを探索
var files = fs.readdirSync('/dev/');
files.forEach(function(file){
    if( file.match(/tty.usbmodem/) ){
        sp = new SerialPort('/dev/'+file, {
            baudRate: 115200
        });
    }
})

if( sp == null ){
    console.log("disconnected");
    return;
}else{
    var pusher = new Pusher(conf.app_id, {
        encrypted: true
    });
    var channel = pusher.subscribe('test_channel');
    channel.bind('my_event', function(data) {
        // 送られてきた文字が数字1桁のときだけArduinoに送信
        if( data.message.match(/^[0-9]$/) ){
            sp.write(data.message);
        }
    });
}

Raspberry Piにサービスとして登録

このあたりを参考に。
http://qiita.com/yosi-q/items/55d6d3d6834c778ae2ea

まとめ

Maker Faire Tokyoのようなイベントでネットワーク環境を構築するのも一苦労だし、構築してもWiFiもBluetoothも混線しがちで一苦労なところを、ソラコムの登場により一気に解決した気がします。