Raspberry Pi2で外部から水槽のLEDを点灯する その3
前回で自宅のラズパイ側の準備が整ったので今回はWeb上から電灯のON/OFFをする
点灯ボタンをつける
WordPressにBootstrapのボタンだけつけれないかと調べてみたらプラグインがあるらしいのでインストール ついでにjQueryとかも入れてもらった
その1で作った点灯用PHPをajaxで叩く
scriptタグがdivで囲われてるのはWordPress上の都合です
<button type="button" class="btn btn-primary" id="led"><span class="fa fa-bell-o" aria-hidden="true"></span> 点灯</button> <div> <script type="text/javascript"> $(function(){ $('#led').click( function(){ $.ajax({ type: 'post', data: { 'from': 'blog' }, url: '点灯用phpの場所', }); } ); }); </script>
パイ側の待ち受けを直す
# 接続します client.connect do |c| # Subscribeします TOPIC = "*******@github/led" c.get(TOPIC) do |topic, message| `sudo /usr/local/bin/led-20sec` #←20秒点灯後けす end end
sudoのパスワードを聞かないように修正
sudo visudo ユーザー名 ALL=(ALL) NOPASSWD: /usr/local/bin/led-20sec
ひとまずこれでブログ上のボタンをポチポチすればライトが点灯するようになった
でもこのままではボタン連打されたりするとSangoに1ヶ月で送れるメッセージ数をオーバーしてしまう
点灯用PHP側でストッパーをかけることにした
ボタン連打対策
色々考えたけど面倒なのでデータベースを使うことにする
やる気の感じられないテーブル作成
CREATE TABLE `switch_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `on_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) );
DB設定
<?php error_reporting(E_ALL & ~E_NOTICE); function getPDO() { try { // MySQLサーバへ接続 $pdo = new PDO("mysql:host=localhost; dbname=DB名", "ユーザー", "パスワード"); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); return $pdo; } catch(PDOException $e){ return null; } } ?>
点灯用PHP
<?php if (!$_POST['from']) { exit; } require_once('./phpMQTT.php'); require_once('./db_conf.php'); $pdo = getPDO(); // 過去10秒以内で誰かスイッチを押したか $cnt = $pdo->query('select count(*) as cnt from switch_log where on_at > (now() - interval 10 second)')->fetch(PDO::FETCH_ASSOC); // 誰も押してなければスイッチON if($cnt['cnt'] === 0) { $mqtt = new phpMQTT("tcp://lite.mqtt.shiguredo.jp", 1883, md5(time())); if ($mqtt->connect(null,null,'ユーザー名', 'パスワード')) { $mqtt->publish("ユーザー名/led",date("r"),0); $mqtt->close(); } } // ログ登録 $pdo->prepare('insert switch_log value()')->execute(); $pdo = null; ?>
できた!!
こちらで公開してますので是非覗いてみてください
関連記事
-
Raspberry Pi ZERO + L-03D + IIJmioを使ってネットに接続する
野外のソーラーパネル&ラズパイからネットに繋ぎたい ソーラーパネルで給 …
-
Raspberry Pi ZEROをソーラーパネルで動かす
ソーラーパネルでラズパイ! 以前からソーラーパネルを使って電源の要らないRasp …
-
プラ舟に外部フィルター追加
安かったのでつい・・・ ヤフオクで安い中古の外部フィルターが売っていたので衝動買 …
-
穂竜水槽を引っ越しました
穂竜さん入院 金魚水槽のページで配信していた45cm水槽の穂竜ですが、 どうやら …
-
プラ船の金魚がネコに襲撃された
ガレージに出してるプラ船がネコにやられました・・・ これはひどい どうもカメラを …
-
Raspberry Pi ZEROでGW-450D2(無線LANドングル)を使う
ZERO買っちゃった Pimoroniで入荷しているのを見たのでRaspberr …
-
ピンポンパール投入しました
久しぶりの更新です。 金魚水槽のページで配信している水槽ですが、大きめの琉金がお …
-
金魚が病気の為、隔離しました
配信中の金魚水槽ですが、金魚が病気で1匹死んでしまったので隔離しました メイン水 …
-
みんなのラズパイコンテストにて受賞しました
ラズパイマガジンと日経Linux、日経ソフトウエア様の みんなのラズパイコンテス …
-
穂竜はじめました
先日新しく45cm水槽を立ち上げてまして穂竜という金魚を飼いはじめました。 高頭 …