Hatena::ブログ(Diary)

hrdakinoriのいろいろ RSSフィード Twitter

2014-05-04

BLEモジュールBL600を試してみた

今回使用したボードはこれです

FRISKケースに入るBL600基板 REBL600FR - ランニングエレクトロニクス

http://www.runele.com/ca1/24/p-r-s/


UART-USB変換ケーブルを使いました

UARTのピンをつけてもFRISKケースに入る

f:id:hrdakinori:20140505132719j:image


UwTerminalを使えばsmartBASICをコンパイルして転送とかできます

あとATコマンドを使って大体のことはできるみたい


ファームウェアバージョンを表示するときは、こんな感じ

ATI 3
10 3 1.2.54.0
00

内部のファイルシステムのファイル一覧を出すとき

ATI+DIR

06 test1
00

・新しめのファームウェアがLaird TechnologyのサイトにあってUARTで更新できそうだけど

 1.5以上のファームウェアからしか更新できないのかな

 (もとから書いてあるファーム1.2.54.0からやってみたがファイルシステムが変なことになる^^;)

・UwTerminalは最新ファームウェアのサンプルフォルダにあるものが最新らしい

・サンプルソースがライブラリを呼んで終わり、みたいなのが多くて

 変更しようとしたときどこから手を付けてよいのかわからない


BLEおいといて、とりあえずI2Cで遊んでみる

2014-03-21

Intel Galileoで集めたセンサーデータをFluentd + GrowthForecastでグラフ化する

Android Bazaar and Conference 2014 Spring http://www.android-group.jp/conference/abc2014s/に参加してきました

Androidに関係のないGalileoを使った物を展示してました(^^;)


まずセンサーデータはXBeeのメッシュネットワークを使用してGalileoに送ります。

・温度センサー(LM60BIZ)は、XBeeのA/D変換を使って周期的に計測

・温度,湿度センサー(AM2321)、気圧センサー(LPS331)は、LPC812にI2Cで接続して周期的に計測

 LPC812のところをLPC810で出来ると良いなぁ


f:id:hrdakinori:20140321225119p:image


GalileoではXBeeからのデータをまとめて、JSONにしてサーバー(ConoHa VPS)に送る。

データの処理にはFluentdを使います。

1. GalileoからFluentdのhttp Input PluginにPOSTします。

2. FluentdのOutput PluginでGrowthForecastとMongoDBに送ります。


Fluentd: Open Source Log Management http://fluentd.org/

GrowthForecast - Lightning fast Graphing / Visualization http://kazeburo.github.io/GrowthForecast/


あとはGrowthForecastがいい感じにグラフにしてくれます。


f:id:hrdakinori:20140321225120p:image

2014-03-16

Intel GalileoでEthernet Libraryを使うとエラーがでる

Ethernet Libraryを使ってHTTPでサーバに接続するプログラムを作ったのだけど

EthernetClientのstop関数を呼ぶとログに** B0100000063f694が出て動作が停止する


ググルとこんなのあるけど同じことしても解消しなかった

Ethernet Library: sketch crashes when remote cl... | Intel Communities


このファイルの\arduino-1.5.3\hardware\arduino\x86\libraries\Ethernet\EthernetClient.cpp

stop関数のソース見てたら_inactive_counterにアクセスしているあたりで

エラーが出ている。

void EthernetClient::stop()
{
	if (_sock < 0)
		return;

	connect_true = false;
	if (_inactive_counter != NULL)
		*_inactive_counter = 0;
	if(_sock != -1){
		close(_sock);
		_sock = -1;

		// Sketches do a Ethernet client = server.available() - which means a copy constructor is used
		// Hence any server which populated a pclients[idx] - won't actually see the socket closed - since
		// his client was copied - not given a pointer to.... pcleint[] in EthernetServer.cpp _sock != -1 at this point
		// make it so !
		if(_pCloseServer != NULL){
		    	_pCloseServer->closeNotify(this->id);
		}
	}
}

よく見ると_inactive_counterが初期されてないように見えるので、

とりあえずコンストラクタでNULLにしてみたらエラーが出なくなった


EthernetServer.cpp

		for(int sock = 0; sock < MAX_SOCK_NUM && success == 0; sock++){
			if (pclients[sock]._sock == -1){
				pclients[sock]._sock = ret;
				pclients[sock]._pCloseServer = this;
				pclients[sock].connect_true = true;
				pclients[sock]._inactive_counter = &_pcli_inactivity_counter[sock];
				success = 1;
			}
		}

EthernetServerから使われるときはポインタに値が入るみたいだ

これでいいのかな...

2014-02-16

BitbucketのprivateリポジトリをwerckerでさくらのVPSにデプロイ

サイトをいままでWinSCPでぽちぽち更新していたのですが、やっぱりgitにpushしたら更新されると良いですよね

なんか今風のWebサービスがあったのでhttp://wercker.com/を設定してみた

  • 今のところは無料みたい
  • Boxって環境を切り替えて、ビルドやテストもできるみたい
  • Androidアプリもビルドできる??
  • 設定を共有できる??
  • dockerがつかえる??

画面

f:id:hrdakinori:20140216233257p:image


今回の流れ

git push -> Bitbucket - git -> wercker - capistrano -> さくらのVPS(反映と再起動)



werckerの設定

boxはruby

buildでテストとか実行するらしいが今回は無しで

SSHの接続のためのkeyを作っています

box: wercker/ruby
services:
  - wercker/mysql
build:
  steps:
    - bundle-install
    - bundle-package
deploy:
  steps:
    - script:
        name: make .ssh directory
        code: mkdir -p "$HOME/.ssh"
    - create-file:
        name: write ssh key
        filename: $HOME/.ssh/id_rsa
        overwrite: true
        hide-from-log: true
        content: $WERCKER_CAP_PRIVATE_KEY_PRIVATE
    - script:
        name: set permissions for ssh key
        code: chmod 0400 $HOME/.ssh/id_rsa
    - bundle-install
    - cap

Key managementが変わったようでwebからkeyを作ることができるようになって、private keyが見れない感じに

f:id:hrdakinori:20140216233255p:image

f:id:hrdakinori:20140216233256p:image


Capistrano

Capistranoを一度も使ってなくて調べながらなんとかSSHで接続してファイルが反映されるところまではできた。

Capistrano2と3が違いすぎて辛い

rubyのサーバを再起動したいのだけど調べ中

2014-01-19

Intel Galileoを買ったので使ってみる

Intel Galileoは、Intelが発売したArduino互換なx86 CPUのボードかな

Arduino - IntelGalileo


こんな使い方したい

ネットワークが標準でついてるので複数のXBeeからのデータをサーバに送信するような使い方を考えた。

(RaspberryPiでやろうとしてたけど、浮気)

f:id:hrdakinori:20140119221929j:image


開発環境

Arduino IDEでプログラムできる。

ネットにあるArduinoのライブラリとか使えるはずなので試してみた


xbee-arduino

XBeeを複数つないで通信したいのでAPIモード用のこのライブラリを使う。

UART1を使いたいのでこのようにしてそのまま使えた。

XBee xbee = XBee();
...
  Serial.begin(9600);
  Serial1.begin(9600);
  xbee.begin(Serial1);
...

XBeeの設定をして、End PointのADCとポート状態を定期的に受信できた


xbee-arduino - Arduino library for communicating with XBees in API mode

<http://code.google.com/p/xbee-arduino/>


Ethernet

特に修正することなく

WebClientのサンプルは動いた。

EthernetClient client;
Ethernet.begin(mac)
...

これを使ってサーバにPOSTすればよいのかな

amcewen/HttpClient

<https://github.com/amcewen/HttpClient>


きょうはここまで

部屋の温度とか外の温度とか見たいので

センサつないだり、サーバ用意したりしないとですね

2013-11-18

eVY1をAndroidのUSB HOSTに接続 その2

昨日の続き

eVY1をAndroidのUSB HOSTに接続 - hrdakinoriのいろいろ


動画撮影をやり直しました

D


ソースコードをgithubに置きました。

(かなり微妙な部分があるので、そのうち直します)


hrdakinori/eVY1Demo

https://github.com/hrdakinori/eVY1Demo

2013-11-17

eVY1をAndroidのUSB HOSTに接続

日本Androidの会 横浜支部で動いてるの見せてもらったのでマネしてみました。


eVY1をAndroidに接続するとこんな感じ

Device Info 
Device Path: /dev/bus/usb/002/002
Device Class: Use class information in the Interface Descriptors (0x0)
Vendor ID:  2938
Vendor Name:  
Product ID:  07d2
Product Name:  

Interfaces 
Interface #0 
Class: Audio Device (0x1)
	Endpoints: none
Interface #1 
Class: Audio Device (0x1)
	Endpoint: #0
Address        : 2 (000000010)
Number         : 2
Direction      : Outbound (0x0)
Type           : Bulk (0x2)
Poll Interval  : 0
Max Packet Size: 64
Attributes     : 000000010
	Endpoint: #1
Address        : 129 (10000001)
Number         : 1
Direction      : Inbound (0x80)
Type           : Bulk (0x2)
Poll Interval  : 0
Max Packet Size: 64
Attributes     : 000000010

USB MIDIの規格書はここにあった

Universal Serial Bus Device Class Definition for MIDI Devices

<http://www.usb.org/developers/devclass_docs/midi10.pdf>


USB HOSTの部分は作ろうと思ったのですがドライバーがあったので使わせてもらいました。

kshoji/USB-MIDI-Driver

<https://github.com/kshoji/USB-MIDI-Driver>


Galaxy Nexus(4.2.2)にUSB HOSTケーブルでeVY1を接続

アプリで認識されて音がでることは確認しました


sendMidiSystemExclusiveで歌詞を送ればよいみたい

このコードだと固定で「わ」って歌います

 byte systemExclusive[] = {(byte)0xf0, (byte)0x43, (byte)0x79, (byte)0x09,
 (byte)0x00, (byte)0x50, (byte)0x10, 'w', ' ', 'a', (byte)0x00, (byte)0xf7};
 midiOutputDevice.sendMidiSystemExclusive(0, systemExclusive);
 midiOutputDevice.sendMidiNoteOn(0, 0, note, 127);

アプリを作りました

f:id:hrdakinori:20131118000650j:image

ローマ字入力で歌詞をいれてボタンを押してくと歌う

追加モードも付けた

D