「weblog」カテゴリーアーカイブ

ODROID U3 and OpenNI2/Xtion Pro Live

here is how to use OpenNI2/Xtion Pro live on ODROID-U3. environment is here.

os : xubuntu-13.10-desktop-armhf_odroidu_20140107.img.xz
OpenNI2(build from https://github.com/OpenNI/OpenNI2)

# install library
apt-get update
apt-get upgrade
apt-get install g++ python libusb-1.0-0-dev libudev-dev openjdk-6-jdk freeglut3-dev doxygen graphviz

# build OpenNI2
mkdir work
cd work
git clone https://github.com/OpenNI/OpenNI2
cd OpenNI2

# default OpenNI repository build will fail, so I change following. here is diff.
diff --git a/Packaging/ReleaseVersion.py b/Packaging/ReleaseVersion.py
index e2fdf5f..710f590 100755
--- a/Packaging/ReleaseVersion.py
+++ b/Packaging/ReleaseVersion.py
@@ -163,11 +163,12 @@ elif platform.system() == 'Windows':
 elif platform.system() == 'Linux' or platform.system() == 'Darwin':
 
     devNull = open('/dev/null', 'w')
-    subprocess.check_call(['make', '-C', '../', '-j' + calc_jobs_number(), 'PLATFORM=' + plat, 'clean'], stdout=devNull, stderr=devNull)
+    # subprocess.check_call(['make', '-C', '../', '-j' + calc_jobs_number(), 'PLATFORM=' + plat, 'clean'], stdout=devNull, stderr=devNull)
+    subprocess.check_call(['make', '-C', '../', '-j1', 'PLATFORM=' + plat, 'clean'], stdout=devNull, stderr=devNull)
     devNull.close()
     
     buildLog = open(origDir + '/build.release.' + plat + '.log', 'w')
-    subprocess.check_call(['make', '-C', '../', '-j' + calc_jobs_number(), 'PLATFORM=' + plat, 'release'], stdout=buildLog, stderr=buildLog)
+    subprocess.check_call(['make', '-C', '../', '-j1', 'PLATFORM=' + plat, 'release'], stdout=buildLog, stderr=buildLog)
     buildLog.close()
     
     # everything OK, can remove build log
diff --git a/ThirdParty/PSCommon/BuildSystem/Platform.Arm b/ThirdParty/PSCommon/BuildSystem/Platform.Arm
index c4a112d..cd12569 100644
--- a/ThirdParty/PSCommon/BuildSystem/Platform.Arm
+++ b/ThirdParty/PSCommon/BuildSystem/Platform.Arm
@@ -1,7 +1,8 @@
 ifeq "$(CFG)" "Release"
 
     # Hardware specifying flags
-    CFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp #-mcpu=cortex-a8
+    # CFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp #-mcpu=cortex-a8
+    CFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=neon -Wno-unused-local-typedefs #-mcpu=cortex-a8
 
     # Optimization level, minus currently buggy optimizing methods (which break bit-exact)
     CFLAGS += -O3 -fno-tree-pre -fno-strict-aliasing


# build OpenNI
cd OpenNI2/Packaging
python ReleaseVersion.py  Arm

# maybe 1 hour needed, check build status "tail -f build.release.Arm.log" 

# install OpenNI
cd Final
tar -jxvf OpenNI-Linux-Arm-2.2.tar.bz2 
cd OpenNI-Linux-Arm-2.2
sh install.sh
source OpenNIDevEnvironment

# run sample application.
cd Samples/Bin
./SimpleRead

# use dual xtion depth stream sample
cd Samples/MultipleStreamRead/
vi main.cpp
#include <OpenNI.h>
#include <iostream>
#include <vector>
#include "OniSampleUtilities.h"

using namespace openni;
using namespace std;

class DepthSensor {
private:
    openni::Device device;
    openni::VideoStream depthStream;
    vector<openni::VideoStream*> streams;
 
public:
    DepthSensor() {}
 
    void open( const char* uri ) {
        Status ret = device.open( uri );
        depthStream.create( device, SENSOR_DEPTH );
        depthStream.start();
        streams.push_back( &depthStream );
    }
 
    void run() {
        int changedIndex;
        openni::OpenNI::waitForAnyStream( &streams[0], streams.size(), &changedIndex );
        if ( changedIndex == 0 ) {
            openni::VideoFrameRef depthFrame;
            depthStream.readFrame( &depthFrame );
            if ( depthFrame.isValid() ) {
            }
        }
    }
};
 
int main() {
    try {
        openni::OpenNI::initialize();
        openni::Array<openni::DeviceInfo> deviceInfoList;
        openni::OpenNI::enumerateDevices( &deviceInfoList );
 
        DepthSensor* sensor = new DepthSensor[deviceInfoList.getSize()];
        for ( int i = 0; i < deviceInfoList.getSize(); ++i )
            sensor[i].open( deviceInfoList[i].getUri() );
 
        while ( 1 ) {
            for ( int i = 0; i < deviceInfoList.getSize(); ++i ) {
                sensor[i].run();
            }
 
        }
        delete[] sensor;
    } catch ( exception& ) {
        cout << openni::OpenNI::getExtendedError() << endl;
    }
    return 0;
}
make
cd Bin/Arm-Release
./MultipleStreamRead

# like this.
10526187_10152494523408244_5594386780488695252_n

Android 3D Sensor

We(SIProp) developed many Android/ARM platform with 3D Sensor Application. Here is our deveop history about the Android/ARM with 3D sensor 😛

– Nexus7(Android 4.4.2), DepthSense DS325 ToF Camera, OpenNI2, Point Cloud(with openFrameworks), 2014

– ODROID U3(Android 4.4.2), DepthSense DS325, OpenNI2, Point Cloud(with openFrameworks), 2014

– Pandaboard(Android 4.2), Kinect, OpenNI2, 2013

– Raspberry PI, Xtion Pro Live, OpenNI2, 2013

– Pandaboard(Android 4.0.x), Xtion Pro Live, OpenNI, 2012

– Auto Chasing Turtle(beagleboard-xM, Ubuntu 10.10/Android 2.2), Kinect v1, OpenKinect, 2011

– ofxkinectxandroid(armadillo/beagleboard-xM, Android 2.2), Kinect v1, OpenKinect, 2011

Koshianを使ってみる

ようやくKoshianを通電して遊んでみたら、面白かったから備忘録で。koshianは何かと言うと…この写真でmpressionと書いてある端末です。

IMG_5912

Bluetoothがついている端末とか小さい端末との比較の写真で、Arduino Pro Mini, Intel Edison, Aplix iBeacon, Light Blue Bean, Koshian, 8pinoですね。Koshianと8pinoの小ささが際立っている感じ。

このKoshianが良い感じなのが、このサイズでBT,アンテナ, Cortex M3が入ったSiPモジュールでKonashi SDK、JavaScriptからサクっと動かせるというイケてる感じ。Firmwareも書き換えOKだし、まぢでこれはヤバい。

んで、とりあえずLチカ。

DSC_0033

このサイズ感はヤバい…かなりヤバい。あとで8pinoと一緒に遊んでみよう。BTの応答も凄く良い感じ。サクっとiPhone&JavaScriptでLチカの使い方は、

1) konashi.jsをAppStoreからダウンロードしてインストール

2) Koshianと電源(単三2本で3V使った)は上の写真みたいな感じで接続。ピンは”Getting Started”のpdfに書いてある通り。

3) iPhoneのkonashi.jsを起動したら、konashiで検索。「forked: koshianでまずはLチカ(LEDチカチカ)」をクリック(さっきforkした)。
IMG_5907

4) 実行の再生ボタンをクリック
IMG_5908

5) “まわりにあるkoshianを探す”をクリック。(iPhoneのBluetoothはオンにしておく)
IMG_5909

6) ペロっと見つかったらクリックするとLEDがぴーかー
IMG_5910

JavaScriptのコードは元のがPI02を使う感じだったので4にしているだけ。JSを見てもらうと分かると思うけど、むちゃ簡単に使える。ちょっと難しいかも…と思うのがブレッドボードに挿す場合、ピンヘッダをハンダしないといけないけど、ピンがちっちゃいから上手くやる必要がある。まぁ問題無いよね。

ということで…作る予定があったBLE物で使ってみようと思っているのもあるし、追加で2個ポチってしまった(w)。いやー、コスト(980円)とサイズ、スペックを考えると、お手頃感がたっぷり。

DMMからの挑戦

DMM Akibaを見てきて、強いて表現するならそんな感じ。

IMG_5547

近くにパーツ屋さんは大量にあるし、加工できる物はこれだけ揃えたし場所も提供するから作れない物は無いだろうと言われているような気がした。

自分は学校では機械工学でCNCとか旋盤をいじったり溶接とかをやったにも関わらず、Web・ネット系どっぷりでMakeとかに関わる中でまた昔のような事をやりはじめている。数年帰っていない実家は建具屋さんで(既に廃業w)、木工加工の機械かんな・ドリル・カットソーやら遊び放題の物が揃っていた。小さい頃、カットして余ったガラスを集めて熱で溶かしてドロドロにして遊んだり(かなり面白い)、余った木材を勝手に組み立てて遊びまくっていた。

そんな諸々が一気に揃っている。

IMG_5570

そして、PCBAの印刷・半田・リフローもばっちり揃っていて、ちょっと秋月周辺にお出かけして買ってきて適当に回路書いてすぐ出来る。

IMG_5571

印刷もUVで書けたり、まさに何でも作れるよね!!
他にも3Dのモデリングが出来るPCルーム、お馴染み3Dプリント、オシロが大量にある部屋やエアブラシルームだったり、よくこのビルの中に揃えましたね!!って感じ。

IMG_5551

そして最終製品にする前の、過酷環境(熱・耐水圧)とか振動・荷重の試験環境も。前にロシアの凄く寒い所だったり、砂漠の暑い所とかでもちゃんと動く物を作るために試験が必要なのよねーとかって言われていて、色んな環境でも動く物を試験する事が出来る。

IMG_5574

このスタジオスペースの壁はチョークで色々書いて消せるとの事で、ここに色んな人たちが作った物とか思いが書かれるようになるはず。想像するだけでも楽しそう。

総じて何でも揃っていて、「じゃあ何をすれば?」と思うんだけど、そこがDMMからの挑戦のような気がした。これだけ揃えたから、何か面白い物作って出して行ってよ!!と。楽しげな期待と緊張は共存しているような感じがする。オフィススペースも素敵で、窓から見える駅の夜景が綺麗だった。

案内されている時に教えて貰ったけど、既に事前登録が締め切られていた。あらまぁ…次の募集はいつかしらw

現代は、サーバは速攻借りてWeb(HP/API)・データ解析(Hadoop/Spark)・検索システム(ES/Solr)・ストレージだったり何でも大体の基盤は作れる。そして物を作る基盤はこの秋葉のビルにあるような設備で作れる。端末のプロトタイピングもArduino/mbed、出たてのEdison使ったりして作れる。

ただ、何でもプロトをサクッとすぐ作れるか?と言ったらそうでも無くて、ネット系ならPC上からサーバだったりAPをいじったり出来るけど、物はそうはいかない。
材料買いに行って手を動かして作って、やっぱりうまくいかなくて作り直しとか…時間がかかる。ハンズに行って、秋葉に行って、現物の材料を自分の目で確認したりWebで買って…といった何気に大変な所が、一つのエリアで集約できるというのは良い感じだと思われ。

(ちなみにプロトでって意味で、ネット系はPC1台で何でもか?と言うとそうでもなくて、開発・試験・デプロイ・本番環境、負荷試験、セキュリティ、24×365の運用監視とかサービス運用という点ではとっても大変。ネット系はPCだけで出来るから楽っすよねーとかって話が出たりすると、それは違うよーって思う。物を納めたらOK!!という所から、ネットサービスと組み合わさると、24×365で落とさない運用・超絶トラフィックとか、夜間メンテ…etcとか、また違った知見や側面が必要になるからね。どっちが楽とかじゃなくコラボとか共存関係かな。)

IoTってなーに?というのに、「物が無線でネットにつながる」「物のサービスという概念だよね」「センシングデータの分析・フィードバックがね」とか色々とあるけど、自分が思うのはそういう事は前提条件として全部ひっくるめて、物が持つ力って凄いと思っている。もうね…M2MとかIPv6のはしりの10年以上も前、オイラが社会人になりかけの頃からIPv6を全ての物に振るとか聞き飽きたよ(そういや、v6のスタックとか書いたのもう10年近く前か…)。センシングのフィードバックも分析・サービスも当然のごとく必要だと思う。

それより何より、使ってみて面白い物、生活を変えてくれるような物・サービスの持つ破壊的な力ってスゲーと思う。

「これこそIoTな物だ!!」とか理由なんかは後付で何とでもなるし、それよりも面白い物、見てみて「スゲー!!」「めっちゃ便利!!」と感じる物・サービスをスタートアップがじっくりと作れるという環境が出来るようになってきたのね、って感じ。

Intel Edison and Xtion & OpenNI2

IMG_5529


depth CPU Load Avg
edison-loadavg running about 30fps.

 

NiTE(User Tracking is running).
nite

めっちゃ簡単に動きます。と言うか…普通に動きます。方法は次の通り。

1. install libusb

opkg install libusb-1.0-0 libusb-1.0-dev

2. download OpenNI from here.

wget https://www.hirotakaster.com/download/OpenNI-Linux-x86-2.1.0.tar.bz2
unzip OpenNI-Linux-x86-2.1.0.tar.zip
tar -jxvf OpenNI-Linux-x86-2.1.0.tar.bz2
cd OpenNI-2.1.0
sh install.sh
source OpenNIDevEnvironment

3. reload udev rule and connect Xtion to Edison(use J16 Micro AB usb connector).

udevadm control --reload-rules

4. run SimpleRead

cd Samples/Bin
./SimpleRead

セフィロト

現在Ultra@青山スパイラルで展示中です。11/03まで展示しています。

pic1

左から、ドイツで大活躍中の加藤さん、自分、知念さんの作品です。お二人ともとってもカッコいい!!素敵な作品です。自分のはお花が2つに、空の籠のセットでタイトルはセフィトロとしています。いわゆる生命の樹のセフィロトという名前は、このお花に仕込んでいる光(LED)が自分の心拍をサンプリングした脈動に合わせて光っているという所から取っています。

 

自分のは構成的にはこんな感じです。

Untitled (2)

静電容量が何箇所かお花に付けられていて、2個あるのは一方が男性面・女性面で手で触れるお花(それぞれのお花に何箇所か仕掛けてある葉っぱの所とか)の拠って異なる反応で仕掛けられているLEDが光ります。そして籠はスピーカの役割を果たしていて、お花の方に触るとそこから男性・女性の声・サンプリングした音が鳴ったりLEDが光る仕掛けになっています。
そして、籠は上に向かって赤外線センサを仕込んでいて、籠の上に手をかざしたりすると、お花の方に仕掛けているLEDがふわぁっと光る感じですね。
あとお花の方は何もしなくても何箇所か仕掛けてある光(LED)が、サンプリングした自分の心拍の脈動に合わせて光らせています。そこからセフィロトって名前を付けた感じ。

他に展示してある中で、これは良いなーと思ったのを。

オランダのZEDZ氏の作品。ZEDD氏のHPもめっちゃカッコいい。
IMG_5359

野村さんの作品。太陽系の惑星間の中心点をプロジェクターで動的に作図していて、こんなにも見事になるものか!!と感動した。他にも素数や数列を使った作品とかの規則性が凄くカッコいい。
IMG_5356

Minimalist

Minimalistに捧ぐ自分の手持ちのデバイス達

IMG_5342

大きいもの順で並べてみた。これ全部展示とか何かで使ってねーべー?とか思うかも知れないけど、何気に展示とかで使ってるですね。他にも何個かあるけど、小さいサイズの物で。この子達はその都度、検証したりモノに取り入れたり。Edisonをゲットしてひとつ増えた事もあって、左から1つづつ紹介を…

RKM 802 IV
IMG_5343

KDDIさんがOpen Web Boardとかって発表していた物とメッチャ似てるというか、一緒じゃないかしら…というかRockchipで一緒ですよね。。。Androidを載せてXtionとOpenNI、openFrameworksを動かしてPoint Cloudの展示で使った。

ODROID-U3
IMG_5332

この子は名作だと思っている。$65で超ハイスペック!!(備品を色々買うと$100位になるけど)
ARMの評価ボードで最初っからヒートシンクが着いているという、「熱出しまくるぜ!!」と主張しているけど、実際にはそんなに熱くならない気がする。LinuxもAnroidもどっちも動く。どちらでもXtion, DepthSense、OpenNIとopenFrameworksを動かして展示で使った。

Arduino UNO
IMG_5333

言わずもがな…って感じもするけど、色々と使われてますよね。

Intel Edison
IMG_5334

ここから1段サイズが小さくなる。現在、評価中のEdison。スペックというか機能がモリモリ凄すぎ。実際はブレイクアウトボードと一緒に使う事になる。アンテナは手持ちの物を付けた。普通にLinuxを使っているのと変わらない感じ。このサイズで802.11 a/b/g/n, Bluetoothも使えてCPUはDual Core Quark 400MHzという凄さ。日本で買えるとなったと分かった時、スイッチさんとこで即予約したった。自分はMini Breakout Kitと一緒にゲット。

LightBlue Bean
IMG_5336

Bluetoothが使えてArduino IDEで開発が出来る端末。ボタン電池で結構長い間動く素敵な感じ。このサイズでデフォルトで加速度センサが付いていて温度も測定できる。元のサイズはもう少し大きいけど、照度センサとマイクモジュールを付けてリモートから使える環境センサにしてみた。

Arduino Pro Mini
IMG_5337

割と使う頻度が高い。このサイズで普通のArduinoとして使える。自分的にはUNOよりこっちの方が便利な感じ。よく展示向けのモノの裏方で使ったりする。

Spark Core
IMG_5338

WiFiにつなげてWeb上でソースをビルドすると端末に流し込める(IDEをインストールしなくても、Web上でOK)。802.11 n(b/g)が使える。面白いんだけど、何というかあと一歩…って感じがして遊びで使っているけど、何かで使ったことはまだ無い。ただ、Spark Core用のMQTTライブラリを作ったりした。宅内に設置しといて、外からプッシュとかで遊べるかなーって。

8pino
IMG_5339

サイズが驚異的に小さくなる。このサイズ…マヂでヤバイ。ピンヘッダは付けなくて使える。値段も$8というお手ごろ感がたっぷりで、Micro USBに挿して使えることからサクッとArduinoの入門としても良い感じ。Arduino IDEも使えるしかなり楽しめると思われ。

Wi-Fiのスキャン

ここ数日、色んな所でWi-Fiのスキャンを行ったりした内容を記載しておく。

■ 一般的なWiFiの仕様
あまりWiFiの仕様に詳しくなかったけど、ここ最近で色々と調べてなるほどね!!と分かってきたりして、簡単な説明ついでに。まず一般的なWiFiで利用できる電波帯域と仕様は次に別れている。

2.4GHz帯域
802.11 b/g/n

5GHz帯域
802.11 a/n/ac

よく無線ルータを買ってくると、802.11 a/b/g/n/ac対応とかって謎の文字が書いてあったりする。そんな仕様をアピールしても一般ユーザに何も響かない気もするけど、仕様は色々とある。ザックリ説明するとこんな感じ。

pic1

2.4GHz帯は昔からある仕様で、他に使っている物はおなじみのBluetoothやZigbee、そして電子レンジとか。他にもコードレス電話とか、2.4GHzを使っている物は沢山ある。このBluetoothや電子レンジがクセもので、知らずに2.4GHzでWiFiやBluetoothを使ったコントローラが影響を受けたという人もいるかも。(希有な方が、2.4G無線LAN電子レンジ影響調査という素敵な資料を作っていました。)

そして、5GHz帯はわりと最近からの仕様で、特にacはiPhone6に入ってきたことで「一部の層で」話題になったと思う。こちらは制限があるものの(チャネル数に)屋外でも使える。Bluetoothとか普及している他の影響をあまり受けないから、サクサク使えると思う。

あと、それぞれ、802.11 なんちゃらを使った場合の最大帯域は、こんな感じ。(アンテナの本数増やしたり、a/nとかの組み合わせは省いている)

802.11 b : 11Mbps
802.11 g : 54Mbps
802.11 n : 144Mbps

802.11 a : 54Mbps
802.11 n : 300Mbps
802.11 ac: 1300Mbps

 

■ WiFiがつながりにくいぜ!!
よくあるのが「WiFiがつながりにくいぜ!!」とか、つながっても「ネット使えねーよ!!」みたいな話で、特に人が密集している所ではよく発生する。
原因の一つでよく言われるのが、WiFi同士の電波干渉。イメージ的には、水面に一つだけ石を投げた時は綺麗に波が伝わるけど、いっぱい放り投げると波同士が合成(干渉)されて増幅・打ち消し合ったりして新しい波が出来る事が想像できると思う。お互いが影響しあって情報を送受信しあう電波が使えないぜ!!とった状態になる。

特に2.4GHz帯域は昔からあるから、多くのスマホや身の回りの環境(電子レンジ、コードレス電話、Bluetooth)で電波を発生する物があるから、干渉しまくりで使えないぜ!!という事が多々ある。今はみんなスマホ持ち歩いているから、WiFiとBluetoothで2.4GHzの影響が倍増(w)して、ちょっと人が集まるとろくに使えない状態になる。

逆に5GHzの方は割とサクサク使える。新しい仕様といっても、殆どのPCやスマートフォンの無線の機能としては入っているし、他の環境機器の影響を避けたいなら5GHzの方を使うのはオススメ。凄まじく人が居る状態でも経験した感じでは、あまり干渉を受けずに使えると思われ。

 

■ 色んな所でWiFiをスキャンしてみた結果
断っておくと、スキャンはWiFiオンにすれば行われるから良いにしたって、勝手に接続するのは絶対ダメです。

WiFiのスキャンはWiFi Explorerという物を使っています。結果はこんな感じで見れる。
pic AP名、BSSIDは消しています。あと、下のグラフにはAP名とチャネル、干渉状態を見る事が出来る素敵なアプリです。あと結果は場所によって変わってくるので。

 

■ みなとみらい
ここはタバコを吸う灰皿があって、ここでスキャンしてみた。駅を出て地上に出てすぐの所。

IMG_4242

何故か一瞬で110個ものAPが出てきた。屋外にはみ出ているAPも多数(w)
単位は個数で。

Total : 110
2.4GHz    : 65
5Ghz         : 45
Key無       : 12

2.4GHz
802.11b             :    4
802.11g             :    1
802.11b/g        : 14
802.11b/g/n   : 36
802.11 g/n       :    3
802.11 n            :    7

5GHz
802.11a             :    7
802.11n            :    2
802.11a/n       :  35
802.11ac          :    1

 

■ 中華街
ちょっと足を運んで中華街へ。休日なだけあって、人が凄まじい…
IMG_4264

特徴的な気がしたのはがキー無しAPの割合が多い。飲食店で「WiFiがすぐ使えますよー」といって提供している所が多いせいだとは思う。とはいっても、みなとみらいと大差ないけど。

Total : 60
2.4GHz    : 42
5Ghz         : 18
Key無       : 16

2.4GHz
802.11b             :    0
802.11g             :    0
802.11b/g        : 12
802.11b/g/n   : 25
802.11 g/n       :    0
802.11 n            :    5

5GHz
802.11a             :    1
802.11n            :    0
802.11a/n       :  17
802.11ac          :    0

 

■ 大桟橋
ちょっとあまりにも沢山のAPが出てきまくるので、桟橋の先端まで行ってみたら、WiFiを検知出来なくなったりするのかしら?という単純な理由で桟橋の先に行くことに。
IMG_4281

APの量は圧倒的に少なくなるけど電波って飛んでくるのね。あとショッキングな事が、テザリングをオンにして歩いている方がいらっしゃるのか、「にーさとのiPhone」みたいな感じで名前付きでAPが出てきた…

Total : 26
2.4GHz    : 19
5Ghz         : 7
Key無       : 11

2.4GHz
802.11b             :    0
802.11g             :    0
802.11b/g        :    7
802.11b/g/n   :    8
802.11 g/n       :    1
802.11 n            :    3

5GHz
802.11a             :    1
802.11n            :    0
802.11a/n       :     6
802.11ac          :    0

■ おまけ
某数万人は来ると言われる某イベントでスキャンした内容。IT寄り(?)のイベントで。2.4GHz帯なんか使い物にならないし、WiFiって何ぞや?と思える感じでもある環境ですね。Key無しのAPが激減しているのは、そうですよね…って感もするし、古めの仕様の率も低くなる。街中とかとは全然違う。

Total : 103
2.4GHz    : 47
5Ghz         : 56
Key無       : 2

2.4GHz
802.11b             :    2
802.11g             :    0
802.11b/g        :    8
802.11b/g/n   :  27
802.11 g/n       :    1
802.11 n            :    9

5GHz
802.11a             :    1
802.11n            :    0
802.11a/n       :   50
802.11ac          :     5

本当はこういう各ポイント毎で無線がどんだけ立ってるのー?とか可視化されたら良いと思うんだけど、宅内で立てても外にダダ漏れして街中じゃカオス状態になっていたりするし、難しいんだろうなぁ…とは思う。あと、最低限でもキーは付けた方が良いと思われ。ノーガードは無いっしょ。

iPhone6 802.11ac Test

iPhone6の新機能で注目な、802.11ac 5GHzのWiFi。今年になってIEEEで承認されたホットな仕様で自分の見通しだと、さすがにスマホに802.11acは乗ってこないと思いきや…乗ってきたので早速テスト。ルータにはPlanexのMZK-1200DHPを使った。上流は

こんな感じ。

DSC_0451

このPlanexのルータ、802.11acが搭載されていてAmazonで3,778円で買える爆安さに惹かれた。ただ、このルータを起動してみて何故か11acに設定してみても接続できない。そう、ファームが1.30だと11acが使えなかった…orz ファームアップして、1.35にするとバッチリ接続できる。この点だけ要注意。

んで、早速、2.4GHzと5GHzで接続テスト!!テストにはRBB SEEDを使った。

10644857_10152336684903244_2072672154594316890_n

次に、5GHz 11acで。

10676315_10152336684888244_4383236776952752559_n

もちろんだけど、11acの方が全然早い。

MQTT Library for Spark Core

MQTT is lightweight pub/sub messaging protocol for IoT/M2M. MQTT target is large scale pub/sub system, used on Facebook Messenger and others(not for the message queue like a RabbitMQ/AMQP…etc).  MQTT for Arduino is already developed as pubsubclient, but Arduino like open source system “Spark.io” don’t have MQTT library.  So I made MQTT for Spark.io based on pubsubclient. Thanks for knolleary.

MQTT for Spark.

#include "MQTT.h"

void callback(char* topic, byte* payload, unsigned int length);
MQTT client("server_name", 1883, callback);

// recieve message
void callback(char* topic, byte* payload, unsigned int length) {
    char p[length + 1];
    memcpy(p, payload, length);
    p[length] = NULL;
    String message(p);

    if (message.equals("RED"))    
        RGB.color(255, 0, 0);
    else if (message.equals("GREEN"))    
        RGB.color(0, 255, 0);
    else if (message.equals("BLUE"))    
        RGB.color(0, 0, 255);
    else    
        RGB.color(255, 255, 255);
    delay(1000);
}


void setup() {
    RGB.control(true);
    
    // connect to the MQTT server
    client.connect("sparkclient");

    // publish/subscribe
    if (client.isConnected()) {
        client.publish("outTopic","hello world");
        client.subscribe("inTopic");
    }
}

void loop() {
    if (client.isConnected())
        client.loop();
}