AmazonDashButtonの最初の一歩ということでLED制御をしてみました
特にひねってはないですが作ったということで記事します(汗
プログラムコードを載せる前に完成形した動画
しょーもないけどAmazonダッシュボタンでLチカ pic.twitter.com/6mL6msfydp
— みやかわ (@momijinn_aka) 2017年8月22日
準備
私はNodeJsでコーディングしました
NodeJsの環境はある前提で書きます
またAmazonDashDashButtonはWifiに接続済みという前提で記述します
以下のものをインストール
sudo apt-get install libpcap-dev
npm install node-dash-button
AmazonDashButtonをMacアドレスを検索
$cd node_modules/node-dash-button/bin/
$sudo node findbutton
#AmazonDashButtonを押しそれっぽいMacアドレスをコピー(この場合は一番下のがそれっぽい)
Possible dash hardware address detected: 60:57:18:de:93:dd Manufacturer: Intel Corporate Protocol: arp
Possible dash hardware address detected: 60:57:18:de:93:dd Manufacturer: Intel Corporate Protocol: arp
Possible dash hardware address detected: b8:27:eb:c9:dd:8b Manufacturer: Raspberry Pi Foundation Protocol: arp
Possible dash hardware address detected: 40:b4:cd:9a:78:00 Manufacturer: unknown Protocol: udp
プログラム
GPIO17pinにLEDをつけてAmazonDashButtonが押される度にLEDがチカチカします
必ず管理者権限で実行してください(GPIOの操作のため)
思いつきでわーって書いたので汚いです。。
var fs = require('fs');
var dash_button = require('node-dash-button');
const execSync = require('child_process').execSync;
var pin = 17;
var dash_ip = '40:b4:cd:9a:78:00';
var val = 0;
//initialie led
try {
fs.writeFileSync('/sys/class/gpio/export', pin);
fs.writeFileSync('/sys/class/gpio/gpio' + String(pin) + '/direction', 'out');
fs.writeFileSync('/sys/class/gpio/gpio' + String(pin) + '/value', val);
} catch(e) {
fs.writeFileSync('/sys/class/gpio/unexport', pin);
console.log('catch: ' + e);
fs.writeFileSync('/sys/class/gpio/export', pin);
fs.writeFileSync('/sys/class/gpio/gpio' + String(pin) + '/direction', 'out');
fs.writeFileSync('/sys/class/gpio/gpio' + String(pin) + '/value', val);
}
// Dash_button
const dash = dash_button(dash_ip, null, null, 'all');
dash.on('detected', () => {
if (val == 1) {
val = 0
}else{
val = 1
}
try{
fs.writeFileSync('/sys/class/gpio/gpio' + String(pin) + '/value', val);
}catch(e) {
fs.writeFileSync('/sys/class/gpio/unexport', pin);
}
if (val == 1) {
console.log("LED ON");
}else{
console.log("LED OFF");
}
});