Back to tech

AmazonDashButtonでLED制御(Lチカ)

2 min read
Table of Contents

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");
    }
    
  });

参考