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;
?>
できた!!
こちらで公開してますので是非覗いてみてください
関連記事
-
-
福だるま 購入しました
新入り金魚 メイン水槽をリセットしたのでヤフオクで金魚を購入しました 福だるまと …
-
-
エサやりボタンを撤去しました
寒い! 寒くなってきましね。 水温を10度を切り始めたので、プラ舟ページに配置し …
-
-
プラ舟に水中カメラ設置
水中カメラを設置したい プラ舟ページで配信しているカメラですが、 鳥やネコ避けの …
-
-
RaspberryPi2で動画配信しながら写真も撮りたい
金魚デカくなった? 金魚にエサやってると4月の初頭から飼い始めた琉金が1周り大き …
-
-
Raspberry Pi ZERO + L-03D + IIJmioを使ってネットに接続する
野外のソーラーパネル&ラズパイからネットに繋ぎたい ソーラーパネルで給 …
-
-
WordPressでモバイルの時はサイドウィジェットを非表示にしたい
私のブログ重すぎ・・・!? 外出先でモバイルから自分のブログ見るとサイドに置いて …
-
-
プラ船の金魚がネコに襲撃された
ガレージに出してるプラ船がネコにやられました・・・ これはひどい どうもカメラを …
-
-
ベランダ水槽の配信ページを追加しました
配信ページ追加 先日ベランダに引っ越した穂竜たちの配信ページを追加しました。 ベ …
-
-
ウチの金魚たち
ウチに置いてある水槽の紹介 仕事場水槽 金魚水槽のページで配信している60cm水 …
-
-
金魚が病気の為、隔離しました
配信中の金魚水槽ですが、金魚が病気で1匹死んでしまったので隔離しました メイン水 …

