大阪近郊で活動するフリーランスエンジニアのブログです 技術情報とか趣味など

*

Raspberry Pi2で外部から水槽のLEDを点灯する

      2015/04/16

外部からネット越しに金魚水槽のLEDを点灯させたい
WebIOPiというライブラリがあるみたいだけど、
家のルーターにあんまり穴を開けたくない&Raspberry Pi2では動かない(動いたという声も)みたいなので別の方法を考える
要はcronで叩いてる点灯シェルが外部から叩ければいい

MQTTブローカーのSangoというサービスを使ってキュー発信と待ち受けな感じで作ってみる

まずはSubscribe(待受)側 ※自宅のRaspberry Pi2
参考サイトから丸コピ

sango_subscribe.rb

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'rubygems'
require 'mqtt'

MQTTHOST = "lite.mqtt.shiguredo.jp"
USERNAME = "*****@github"
PASSWORD = "*******"


# MQTTに接続するためのクライアントを作成します
client = MQTT::Client.new(
  MQTTHOST,
  :username => USERNAME,
  :password => PASSWORD
)

# 接続します
client.connect do |c|
  # Subscribeします
  TOPIC = "*****@github/led"
  c.get(TOPIC) do |topic, message|
    puts("!!!!!!!!!!!!!!!!!!!!!!")
#    `/usr/local/bin/led-on`
  end
end

権限を与えて実行しておく

chmod +x sango_subscribe.rb
ruby ./sango_subscribe.rb

この時点でSangoのダッシュボードを見るとコネクションが増えてる筈

無題

続いてpublish(送信)側 ※さくらVPS
ウチのさくらVPSはRuby入れてないのでGitHubで公開されていたPHPライブラリで実装してみる

git clone https://github.com/bluerhinos/phpMQTT
cd phpMQTT/
vi publish_sango.php

中に入ってたexamplesから丸コピ

<?php
require("./phpMQTT.php");

$mqtt = new phpMQTT("tcp://lite.mqtt.shiguredo.jp", 1883, "テキトーなクライアントID"); //Change client name to something unique
if ($mqtt->connect(null,null,'ユーザー名', 'パスワード')) {
        $mqtt->publish("*****@github/led","Hello World! at ".date("r"),0);
        $mqtt->close();
}
?>

権限を与えて実行してみる

chmod +x publish_sango.php
php ./publish_sango.php

さくらVPSのターミナルからpublish_sango.phpを叩いた後、自宅のRaspberry Pi2のターミナルを覗いてみると

ruby ./sango_subscribe.rb 
!!!!!!!!!!!!! ←叩く度に表示される
!!!!!!!!!!!!!

後は点灯用のシェルを叩けばOK!
sango_subscribe.rbのコメントアウトを外し、再度さくらVPSからpublish

Traceback (most recent call last):
  File "/usr/local/bin/led-on", line 7, in <module>
    GPIO.setup(23, GPIO.OUT)
RuntimeError: No access to /dev/mem.  Try running as root!

あ・・・w
GPIOのON/OFFでroot権限がいるんだった
点灯シェルをsudoで実行するように修正し、点灯シェル実行時はsudoのパスワードを求めない設定にする

# 接続します
client.connect do |c|
  # Subscribeします
  TOPIC = "*****@github/led"
  c.get(TOPIC) do |topic, message|
    `sudo /usr/local/bin/led-on`
  end
end
sudo visudo
ユーザー名 ALL=(ALL) NOPASSWD: /usr/local/bin/led-on

で、再度自宅のラズパイでsango_subscribe.rbを実行した後、さくらVPSのpublish_sango.phpを実行すると・・・

tu

ついたー!!

まだまだ煮詰めなきゃいけない部分は沢山あるけど今日はここまで
この時点でPython Ruby PHPの超ごった煮システムになってるけど気にしないでおくw

 - Raspberry Pi, 金魚 , , , , , ,

  • このエントリーをはてなブックマークに追加
  • にほんブログ村 観賞魚ブログ 金魚へ

Comment

  1. […] Raspberry Pi2で外部から水槽のLEDを点灯する Raspberry Pi2で外部から水槽のLEDを点灯する その3 […]

ラズベリーパイ2でアクアポニックスに自動餌やり器をつけてみた | エンジニア「くがとしお」のレベル上げ へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  関連記事

金魚水槽の照明をパワーアップさせたい

金魚水槽のページでON/OFFできるようにしている照明ですが、 やっぱ1Wパワー …

Raspberry Pi2でリモコンを使って水槽の照明をつける

リモコン操作で照明をつける Web上からRaspberry Pi2で水槽の照明を …

金魚が病気の為、隔離しました

配信中の金魚水槽ですが、金魚が病気で1匹死んでしまったので隔離しました メイン水 …

Raspberry Pi ZERO + L-03D + IIJmioを使ってネットに接続する

野外のソーラーパネル&ラズパイからネットに繋ぎたい ソーラーパネルで給 …

Raspberry Pi2で外部から水槽のLEDを点灯する その2

前回でひとまずさくらVPS上のPHPから自宅水槽のLED照明をONにできるように …

Raspberry Pi2でプラ船のカメラを動かす

カメラの首振り プラ舟内に設置しているカメラにサーボを取り付けて遠隔からカメラの …

プラ舟はじめました

プラ船買っちゃった 金魚にだだハマりなGW ついにプラ船買ってガレージに設置して …

プラ舟に水中カメラ設置

水中カメラを設置したい プラ舟ページで配信しているカメラですが、 鳥やネコ避けの …

45cm水槽を撤去しました

水槽を1個撤去 金魚水槽のページで配信していた45cm水槽を撤去しました。 仕事 …

Sangoのメッセージ数について聞いてみた

メッセージ数が足りない! 金魚水槽のページやトップページからライトを点灯するのに …