Titaniumのログをブラウザでリアルタイムに確認するライブラリ作った。

しかだよ。
Titaniumで作ったアプリの実機ログを有線で確認するのはめんどいので、ブラウザで見れるような仕組みを作ってみました。
アプリのログをリアルタイムに送信するライブラリ(client)と、ブラウザでログをリアルタイムに受信して確認するライブラリ(server)の2つセットです。
https://github.com/shikajiro/ti.console

install方法

README.mdを見てね。

使い方

これもREADME.md を見てね。一応以下で簡単に説明します。

クライアント側

requireでconsoleライブラリを利用可能にします。

app.js

var console = require('lib/console');
console.info('hogehoge');

サーバー側

コンソールからmongodbとnodejsを起動します。

mongod
node ti.console.js

Socket Server running at localhost:3000
Http Server running at http://localhost:8080/

http://localhost:8080/ にアクセスしてログが取得されるか確認しましょう。

仕組み

流れ

client側

  1. TitaniumとNode.jsでsocket通信する。
  2. ログをNode.jsにどんどん投げる。
  3. ログはmongodbにどんどん保存する。

server側

  1. ブラウザでNode.jsにアクセス
  2. Ajaxでログをどんどん取得
  3. ログをhtmlに展開。

なんかあったらコメントとかよろしくっす。

XBee wifi を繋いでみる。

XBee wifiも買ったので既存のwifiと繋いでみました。
つなぎ方はXBee Wi-Fi 接続の設定までやってみた Chick Labを参考にされてください。

無線LANに繋がらない

BUFFALOのWHR-G301Nに繋げようと頑張りましたが、Association Indication (AI)が0x41になるとこまで行って繋がりませんでした。

0x41 – Module joined a network and is waiting for IP configuration to complete,
which usually means it is waiting for a DHCP provided address

ftp1.digi.com/support/documentation/90002124_C.pdf
察するにDHCPからip割り振りされるのを待ってるみたいなんですがうんともすんとも・・・。

AirMac Express に繋がった

理由はわからない。でもAirMacExpressには繋がった。設定はこんな感じ。

+++OK
atid
AirMac Express
atee
2
atip
1

結果はこんな感じ。

atai
0
atmy
192.168.1.80

Arduinoで動かせない・・・

XBee wifiArduino用ライブラリがまだ無いみたいで、簡単に動かせる環境は見つかりませんでした。
心が折れたので一旦ここまで。。。
XBee-mbed library - XBee APIモードライブラリ | mbed
を使えばできるかもしれない。

Android ADKとArduino MEGA ADKを繋いでみた

Android Accessory Demo Shield のサンプルはいっぱいあれど、Arduino MEGA ADK で動かしたサンプルがなかなか見つからなかったので探しながら動かしてみました。

スイッチサイエンス/商品詳細 Arduino Mega ADK


結論

id:tomowatanabeさんがgithubしてくださってたので使いました。
tomovwgti/forMegaADK

ソースコード

Arduino

コピペ。

Android

Android3.3のICONIA A500を使いました。OSのターゲットを3.3にしてデプロイして動いたー。

Intentが発生しないときは、アプリを一旦落として、USBを抜き差しすればたぶん反応すると思います。

XBeeを繋いでみた。


ZigBeeに対応した製品であるXBeeでPCとArduinoを繋いでみました。色々とめんどかったのでまとめますね。
以下のサイトと書籍を参考に設定しました。


XBeeを設定する

XBeeにグループや接続先などの設定をする必要があります。
参考にしたサイトと僕の端末でファームウエアや製品の差異があるみたいで、一部そのままではできませんでした。

ドライバ設定

Virtual COM Port DriversMac OS X x64 (64-bit) の VCP Driverを落としてインストールします。

ポートの取得
ls /dev/tty.*

/dev/tty.Bluetooth-Modem	
/dev/tty.Bluetooth-PDA-Sync
/dev/tty.usbserial-A4013ABD

僕の環境だと /dev/tty.usbserial-A4013ABD が接続しているXBeeのポートです。移行、この名前を使いますが、自分の環境で置き換えてください。

picocomのインストール

XBEEを設定するターミナルをインストールします。ZTermとか色々あるみたいですが、Terminalから使えるpicocomをインストールしました。

brew install picocom

XBeeに接続するには以下を実行します。

picocom --echo --imap crcrlf /dev/tty.usbserial-A4013ABD

picocom v1.6

port is        : /dev/cu.usbserial-A4013ABD
flowcontrol    : none
baudrate is    : 9600
parity is      : none
databits are   : 8
escape is      : C-a
local echo is  : yes
noinit is      : no
noreset is     : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv
imap is        : crcrlf,
omap is        : 
emap is        : crcrlf,delbs,
ATコマンドで端末を設定
  • ATID ネットワークグループ
  • ATDH / ATDL 宛先

を設定すればいけます。
宛先を設定するためにXBee端末の裏にIDが入力されているので控えましょう。
※参考サイトではATMYに任意を値を設定してるけど、現在(?)はできません。読み込み専用です。

サンプル

ATID(ここが同じのXBee同士が繋がる)
ATDH
ATDL(この二つに指定された宛先を繋がる)

というわけで以下みたいな感じで設定しました。

XBee A

ATID2001
ATDH0013A200
ATDL4086B111

XBee B

ATID2001
ATDH0013A200
ATDL4086B126
ソースコード

建築発明工作ゼミ2008: Arduino+Xbee Shield/Processing+XBee Explorer USBを流用しました。以下引用です。

Arduino

int val;//受信データ用の変数を用意

void setup(){
  //シリアル通信開始
  Serial.begin(9600);
  //13ピンをデジタル出力に設定
  pinMode(13,OUTPUT);
}

void loop(){
  if(Serial.available()>0){ //データが来たら
    val=Serial.read();    //データを読み込み、valへ代入
  }
  if(val=='H'){           //valが「H」の場合
    digitalWrite(13,HIGH);//点灯
  }else{                  //valが「L」の場合
    digitalWrite(13,LOW); //消灯
  }
}

Processing側

//シリアル通信ライブラリを取り入れる
import processing.serial.*;
//ポートのインスタンス
Serial port;

void setup(){
  //「XBee Explorer USB」のシリアルポート設定
  port=new Serial(this,"/dev/tty.usbserial-A8003VXd",9600);
}
void draw(){
  //特になし  
}

void mousePressed(){//マウスボタンを押したら
  port.write('H');  //「H」を送信(点灯)
}

void mouseReleased(){//マウスボタンを放したら
  port.write('L');   //「L」を送信(消灯)
}

Arduinoにソースを書き込む時に以下に注意してください。
スイッチサイエンス/商品詳細 Arduino ワイヤレスプロトシールド

SELEIAL SELECTスイッチによってXBeeの有線接続先を切り替えられます。
スイッチをMICRO側にすると、ArduinoXBeeの接続になります。ただしArduinoからのデータは、USBシリアルによってPCにも送信されるのでご注意ください。
スイッチをUSB側にすると、PC(USBシリアル経由)⇔XBeeの接続になります。このモードを使う場合、Arduinoには事前に下記の「空スケッチ」を書き込んで下さい。

なので、書き込んだあとはMICRO側にしないとXBeeが動きません。注意しましょう。

クリックするとこんな感じで動くはず。きっと。

気温を定期的にツイートするArduino端末を作る



Arduinoを使って気温を定期的にツイートするハードウェアを構築してみました。

使ったもの

配線

こんな感じ。抵抗とかも無いから簡単。

ソースコード

Twitterのライブラリを利用しています。Tweet Library for ArduinoよりDLしてArduinoパッケージに組み込んでください。僕の環境では以下の場所でした。

/Applications/Arduino1.0.app/Contents/Resources/Java/libraries

ソースコードはサンプルを流用しています。

#include <SPI.h> // needed in Arduino 0019 or later
#include <Ethernet.h>
#include <Twitter.h>

// The includion of EthernetDNS is not needed in Arduino IDE 1.0 or later.
// Please uncomment below in Arduino IDE 0022 or earlier.
//#include <EthernetDNS.h>


// Ethernet Shield Settings
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

// If you don't specify the IP address, DHCP is used(only in Arduino 1.0 or later).
byte ip[] = { 192, 168, 2, 10 };//ipを指定してください。

// Your Token to Tweet (get it from http://arduino-tweet.appspot.com/)
Twitter twitter("ここにつぶやきたいユーザーのトークンを設定してください");

// Message to post
//char msg[] = "Hello, World! I'm Arduino!";

void setup(){
  Ethernet.begin(mac, ip);
  // or you can use DHCP for autoomatic IP address configuration.
  // Ethernet.begin(mac);
  Serial.begin(9600);
}

void loop(){
  delay(60000);//1分感覚で温度を調査してツイートします。
    
  float a0 = analogRead(A0);
  float xV = (5*a0)/1024;
  int intV = xV * 100;//整数部
  int decV = int(xV * 1000) % 10;//小数点部
  String strMsg = String("aratana lab is ");
  strMsg += intV;
  strMsg += ".";
  strMsg += decV;
  strMsg += " ℃";
  strMsg += " #shikarduino";
  Serial.println("tweet is \""+strMsg+"\"");
  char msg[255];
  strMsg.toCharArray(msg, 255);
  
  Serial.println("connecting ...");
  if (twitter.post(msg)) {
    // Specify &Serial to output received response to Serial.
    // If no output is required, you can just omit the argument, e.g.
    // int status = twitter.wait();
    int status = twitter.wait(&Serial);
    if (status == 200) {
      Serial.println("OK.");
    } else {
      Serial.print("failed : code ");
      Serial.println(status);
    }
  } else {
    Serial.println("connection failed.");
  }
}
温度計の使い方

温度計で取得した値の意味や使い方は以下のブログに丁寧に紹介されています。
Arduinoで温度計(LM35DZ) - 思い出はいつまでも

LM35DZは温度を測ることができるセンサーで、Voutから温度に応じた電圧を出力してくれます。これを換算することで温度を計測することができます。
LM35DZは0℃で0V、1℃当たり10mVの出力が得られます。25℃だと250mV、100℃だと1000mV(1V)の出力が得られます。LM35DZ自体の計測範囲が-55℃〜+150℃ですが、氷点下を計るためには負電源が必要であるため(これが理由で後にLM61CIZに変更します)、計測は0℃〜100℃までとします。

これで動くはずだよ!

Android Facebook SDKの認証サンプルが動かないので


Facebookの使い方を間違えて落ち込んでいるしかだよ。(´・ω・`)

AndroidFacebook SDKを使いたくてとりあえずAndroid Tutorial - Facebook Developersを動かそうとしたら、ずっとローディングのまま・・・。それを動かすまでの話です。
Jan 18, 2012のcommit: c58af0b64d85a853f1c79f2ee207c6d9992d31baの状態のsdkを利用しました。

ソースコード

fb.authorize(this, new Facebook.DialogListener() {...});

の部分を

String[] permissions = {};
fb.authorize(this, permissions, Facebook.FORCE_DIALOG_AUTH, new Facebook.DialogListener() {...});

って書くととりあえず動きます。

起動しているアプリの使用メモリ情報を見る

adb shell dumpsys meminfo [パッケージ名]
サンプル

shikajiro-MacBook-Air:~ shikajiro$ adb -s HT0B4RX02342 shell dumpsys meminfo jp.shikajiro.app
Applications Memory Usage (kB):
Uptime: 10275836 Realtime: 15606411

** MEMINFO in pid 7176 [jp.shikajiro.app] **
                    native   dalvik    other    total    limit   bitmap nativeBmp
            size:     6148     5823      N/A    11971    32768      N/A      N/A
       allocated:     6138     4121      N/A    10259      N/A        0     1912
            free:        9     1702      N/A     1711      N/A      N/A      N/A
           (Pss):      706      184     6501     7391      N/A      N/A      N/A
  (shared dirty):     2772     1984     5520    10276      N/A      N/A      N/A
    (priv dirty):      664      108     5464     6236      N/A      N/A      N/A
 
 Objects
           Views:        0        ViewRoots:        0
     AppContexts:        0       Activities:        0
          Assets:        3    AssetManagers:        3
   Local Binders:        5    Proxy Binders:       11
Death Recipients:        0
 OpenSSL Sockets:        0
 
 SQL
               heap:        0         MEMORY_USED:        0
 PAGECACHE_OVERFLOW:        0         MALLOC_SIZE:        0
 
Uptime: 10275873 Realtime now=15606448