SSブログ

EdisonでUSB Audioを使ってみる [edison]

Intel Edisonから音を出すために,USB Audioアダプタをつないでみる.
使ったのは,PLANEXのPL-US35APだ.

PLANEX USB→3.5mmヘッドホン/マイク端子 USBオーディオ変換アダプタ PL-US35AP

PLANEX USB→3.5mmヘッドホン/マイク端子 USBオーディオ変換アダプタ PL-US35AP

  • 出版社/メーカー: プラネックス
  • メディア: Personal Computers

また,Edisonと接続する際,Intel Edison Breakout Board側のUSB端子はMicroBタイプ,USB AudioアダプタはAタイプなので,BUFFALOのBSMPC11C01BKを使ってつないでやる.

iBUFFALO USB(microB to A)変換アダプター ブラック BSMPC11C01BK

iBUFFALO USB(microB to A)変換アダプター ブラック BSMPC11C01BK

  • 出版社/メーカー: バッファロー
  • メディア: エレクトロニクス


なお,EdisonにUSB機器をつなぐとUSBポートから電源供給できなくなるので,別途ACアダプタを使って電源供給してやる.
使ったのは,秋月の,
ブレッドボード用DCジャックDIP化キット
超小型スイッチングACアダプター12V1A 100V~240V GF12-US1210
で,ジャンパー線でEdisonのJ21に接続してやる.

あとはスピーカーだが,今回は100均のSeriaで売っていた,ZY-76というのを買ってみた.
ZY-76.jpg

そしたら,あとは接続するだけだ.

以前はEdisonでUSB Audioを使うにはカーネルのビルドが必要だったが,最新のYoctoイメージでは必要なくなった.最新のYocto complete imageは,ここからダウンロードできる.現時点では,edison-image-ww05-15.zipが最新のようだ.

では,動作テスト.
以下のサイトを参考にしながら適当なwavファイルを再生してみる.
Intel Edisonを動かす(4) サウンド編 | IoT

すると,あっさりと動作した.
が,1点問題が...

ちょっとネットで調べれば分かるが,今回使った100均スピーカをアンプなしで使うと,音量がかなり小さい.USB Audioの出力を100%にしてなんとか聞こえる程度だ.
もう少し音量が得られるといいのだが...
とりあえず聞こえるので良しとしよう.

タグ:USB Audio
nice!(1)  トラックバック(0) 
共通テーマ:日記・雑感

EdisonでIoT Analyticsを使ってみる [edison]

前回,Intel XDK IoT Editionで温湿度センサAM2321を使ってみた.
今回は,その温湿度センサの値をIoT Analyticsへ飛ばしてみる.

IoT Analyticsがどんなものであるかとか,必要な設定は下記サイトが詳しい.
21: Intel Edison実践編 (1) 〜 センサーデータを受け取るSaaS「IoT Analytics」
22: Intel Edison実践編 (2) 〜 EdisonからIoT Analyticsにデータを送る
23: Intel Edison実践編 (3) 〜 XDKで開発したプログラムからiotkit-agentにデータを送る

というわけで,上記サイトを参考に,ほぼそのままやってみる.ただ,今回は温度と湿度をIoT Analyticsに送りたいので,以下のようにコマンドを入力してやる.
iotkit-admin register temperature temperature.v1.0
iotkit-admin register humidity humidity.v1.0


あとはコードだが,前回同様,適当なProjectを作って,package.jsonとmain.jsを以下のようにしてやる.

まず,package.json
{
  "name": "iot_analytics_test",
  "description": "",
  "version": "0.0.0",
  "main": "main.js",
  "engines": {
    "node": ">=0.10.0"
  },
  "dependencies": {
      "sleep": "*"
  }
}

次に,main.js
var dgram = require('dgram');
var client = dgram.createSocket('udp4');
var udpOptions = {
    host : '127.0.0.1',
    port : 41234
};
 
function sendObservation(name, value, on){
    var msg = JSON.stringify({
        n: name,
        v: value,
        on: on
    });
 
    var sentMsg = new Buffer(msg);
    console.log("Sending observation: " + sentMsg);
    client.send(sentMsg, 0, sentMsg.length, udpOptions.port, udpOptions.host);
}

var mraa = require('mraa');
console.log('MRAA Version: ' + mraa.getVersion());

var sleep = require('sleep');

function crc16(buf, length)
{
    var crc = 0xFFFF;
    for (var j = 0; j < length; j++) {
        crc ^= buf[j];
        for (var i = 0; i < 8; i++) {
            if (crc & 0x01) {
                crc >>= 1;
                crc ^= 0xA001;
            }
            else {
                crc >>= 1;
            }
        }
    }
    return crc;
}

function Am2321(bus, address, bufsize) {
    this.x = new mraa.I2c(bus);
    this.x.address(address);
    this.buff = new Buffer(bufsize);
    
    this.wakeupSensor = function() {
        this.x.writeReg(0, 0);
    }
    
    this.sendCommand = function() {
        get_command = new Buffer([0x03, 0x00, 0x04]);
        this.x.write(get_command);
        sleep.usleep(1500);
    }
    
    this.receiveData = function() {
        this.buff = this.x.read(8);
    }
    
    this.checkCrc = function() {
        var crc = this.buff[6] + this.buff[7] * 256;
        return crc == crc16(this.buff, 6);
    }
    
    this.checkRecieveData = function() {
        return (this.buff[0] == 0x03) && (this.buff[1] == 0x04);
    }

    this.getHumidity = function() {
        var high = this.buff[2];
        var low  = this.buff[3];
        return (high * 256 + low) / 10;
    }

    this.getTemperature = function() {
        var temperature = 0;
        var high = this.buff[4];
        var low  = this.buff[5];

        if (high & 0x80) {
            temperature = -1 * (high & 0x7F) * 256 + low;
        }
        else {
            temperature = high * 256 + low;
        }
        return temperature / 10;
    }
}

var sensor = new Am2321(6, 0x5C, 8);
periodicActivity();

function periodicActivity()
{
    sensor.wakeupSensor();
    sensor.sendCommand();
    sensor.receiveData(); 

    if (sensor.checkCrc() == true) {
        if (sensor.checkRecieveData() == true) {
            var humidity = sensor.getHumidity();
            var temperature = sensor.getTemperature();
            console.log("%d %%, %d C", humidity, temperature);
            
            var date = new Date();
            sendObservation('humidity',    humidity,    date.getTime());
            sendObservation('temperature', temperature, date.getTime());
        }
    }

    setTimeout(periodicActivity,10000);
}


これをビルドして実行すると,IoT Analyticsに10秒おきに温度と湿度を送信するようになる.

で,しばらく動かしてみたときの結果は,こんな感じ.
IoT Analytics Graph.png
送信したデータをグラフにしてくれる.あと,csvのエクスポートも可能だ.

非常にお手軽に温湿度を送ることができる.
お試しあれ.

nice!(0)  トラックバック(0) 
共通テーマ:日記・雑感

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。