0

赤Nexus5 + OCN SIM + 050plusにした

端末と通信キャリアが密結合してて、片方の政治的な理由とかでOSアップデート来ないとか本当に嫌だったから、解消した。(詳しくは一番下に書いた)
たぶん密結合してる限り健全にはならないんだと思う。
月数千円程度の節約とかどうでもよくて、すき家で数時間働けばいいし、それよりもキャリアのキモいシステムが嫌だった。


色々とまわりの人に相談し、端末を赤Nexus5にして、SIMをOCNモバイルONEにした。データ専用SIMなので電話は050plus(いわゆるIP電話)にした。

電話番号が050-3705-7461になり、月のケータイ代がデータ・通話合わせて2000円弱になった(はず)

Nexus5良い。ツルツルしてて手から滑ってぶん投げてしまう事があるけど全体的に良い。
OCN SIMもLTEで速いし、月2GBまで帯域制限なしで通信できる。テザリングも問題ない。
050plus(IP電話)の音質も、2年ぐらい前に増井先生が使ってた頃は悪かったけど今は音質良くなってると思う。普通のau回線以上LINE未満ぐらい。ソフトウェアも安定しててWiFiとLTEが切り替わってもすぐ反応して待ち受けなおしてくれてる。

IP電話なので海外でも適当なデータSIMさすか、wifiにつなげば日本と同じ番号・値段で通話できるのも良い。



手順

端末とSIM買って、合体させて、SIM開通と同時に050plusも申し込んだ。すぐ使えるようになった。

端末 Nexus5赤を買う

Google playから買った。木曜夜に注文したら香港から発送され、日曜夕方に届いた。

OCN モバイル ONEのSIMを買う

SIMそのものをAmazon等で買う
3240円だったけどカートに入れたらなぜか600円ぐらい値引きされた。

端末とSIMが届くのを待つ

主にNexus5待ち。3日で届いた。

OCN SIMと050plusを開通させる

「利用申し込みはこちらから」から申し込む。

OCN モバイル ONE(SIMカードを月額972円から)| OCN プロバイダ(インターネット接続)

月2GB、150Mbpsで1500円ちょっとのプランにした。
夜中にやったのにすぐ使えるようになった。
同時に申し込むと050plusが半額になる。150円ぐらいになるだけだけど。
これで1700円ぐらい。

気をつけるのは、OCNのユーザー名&パスワードと別に050plusの番号&パスワードが発行される。それぞれ覚えておく。

SIMの設定

Galaxy S IIIの設定を見てAPNを追加した。
SIMカードタイプ GALAXY S III SC-06D|OCN設定サポート

APN: lte-d.ocn.ne.jp
user: OCNの認証ID、shokai@one.ocn.ne.jpみたいなやつ
pass: OCNのパスワード
認証タイプ: CHAP
これだけ設定した。
一応3Gも、
APN: 3g-d-2.ocn.ne.jp
を設定しておいた。

以上で設定おわり。


買い替えた経緯

端末と通信キャリアが密結合してると、片方がおかしくなったら全部おかしくなるので、分けたかった。

Jawbone Up24買ったらAndroid4.2以上対応だったのに、HTC One J butterflyがAndroid4.1.1だった。まさか去年の春に買った端末のOSのアップデートが全然来ていないとか無いだろ、と思って油断していた。

HTC One J自体を使ってて不満は無いけど、海外版にはアップデート来てるのにauに金が無くてau版だけアップデート見送ったみたいな話もあるし、
買って1年経ってないのにwebviewのaddJavascriptInterfaceの脆弱性とか塞がれていないバージョンのOSを2年縛りで使わされるとか気持ち悪すぎる。

端末買い換えようと思ったけどちょうど4月でMNPでのキャッシュバック終わってるし、
たぶんMNPのキャッシュバックとか政治的な事で製品作るサイクルがぶっ壊れてしまったんだと思う。

なおiPhoneは不自由で邪悪なのでなし。

0

Jawbone Up24のpubsub APIを受信する

Jawbone Up24を買った。Apple Storeで売ってた。
前のUpと比べてbluetoothで同期できるので楽というのもあるが、webhookによるサーバープッシュAPIの方が気になってて買った。

UP for Developers: Pub Sub


通知

oauthで認証してもらったユーザーが寝たり・起きたり・活動したりすると、約10秒後に自作のwebアプリにjsonでwebhookが通知される。
jawbone up—(bluetooth)—>スマホ—(HTTP)—>jawboneのサーバー—(HTTP webhook)—>自作webアプリ
と通知がリレーされていくわけです。

最近色々とまともなAPIのあるガジェットは増えてるけど、出力側ばっかりで、入力というかトリガー側(センサー)になるやつはあまり無い。


ソースコード

前に作ったJawbone UpのAPIで睡眠時間などを取得するを少し改造した。

https://github.com/shokai/jawbone-up-api-study


設定

アプリケーションの設定にpubsubのURLを書くだけで通知が来るようになる。


プログラム

post ‘/pubsub’を追加した。あとAPIのscopeを色々追加した。move_readが無いと運動した時に空の通知が来てしまっていたので。

https://github.com/shokai/jawbone-up-api-study/tree/master/auth
def app_root
"#{env['rack.url_scheme']}://#{env['HTTP_HOST']}#{env['SCRIPT_NAME']}"
end

def oauth_client
@client ||= OAuth2::Client.new(CLIENT_ID, APP_SECRET,
:site => 'https://jawbone.com',
:authorize_url => '/auth/oauth2/auth',
:token_url => '/auth/oauth2/token')
end

get '/' do
unless session[:oauth_token]
@mes = %Q{<p><a href="/login">login</a></p>}
else
@mes = %Q{<p><a href="/logout">logout</a></p>
<p>your token : #{session[:oauth_token]}</p>}
end
end

get '/login' do
scope = "basic_read extended_read mood_read move_read sleep_read generic_event_read"
redirect oauth_client.auth_code.authorize_url(:scope => scope,
:redirect_uri => "#{app_root}/auth")
end

get '/auth' do
code = params["code"]
halt 400, 'code missing' unless code
begin
session[:oauth_token] = oauth_client.auth_code.get_token(code).token
puts "TOKEN : "+session[:oauth_token]
rescue => e
STDERR.puts e.message
end
redirect "/"
end

get '/logout' do
session.delete :oauth_token
redirect "/"
end

post '/pubsub' do
request.body.rewind
puts request.body.read
"ok"
end


こういうのがpushされてくる
{"events": [{"action": "enter_sleep_mode", "timestamp": 1396797071, "user_xid": "gvT5W2FhlrHsB3r9Wq_unA"}], "notification_timestamp": 1396797074}
{"events": [{"action": "exit_sleep_mode", "timestamp": 1396797115, "user_xid": "gvT5W2FhlrHsB3r9Wq_unA"}], "notification_timestamp": 1396797117}
{"events": [{"action": "creation", "timestamp": 1396797240, "user_xid": "gvT5W2FhlrHsB3r9Wq_unA", "type": "move", "event_xid": "mD99tHyRBx4xNT7HoSCUmA"}], "notification_timestamp": 1396798341}

0

赤外線リモコンコンセントをIRKitで操作する

これ買った。ふつうにIRKitで操作できた。千石本店の入り口でも売ってる。

リモコンコンセントOCR-05 07-0155
オーム電機
売り上げランキング: 1,692

これはコンセントの間に入れる機器で、リモコンでONにしたりOFFにしたりできる。

扇風機とか、電気スタンドとか程度なら操作できる。炊飯器や洗濯機みたいな、コンセントいれた後にボタン押さなければいけない機器は操作できない。


複数使いたい

これを複数使うとしたらちゃんとリモコンを識別してくれるんだろうか?
うちのIRKitで取れた赤外線データを貼っておくので、だれか持ってる人おればコレでON/OFFできてしまうか試してみて欲しい

→ 同じ信号で動いちゃったとのこと(1,2

ON
{"format":"raw","freq":38,"data":[5049,5049,1622,1622,1622,1622,1622,3704,1622,3704,1622,3704,1622,3704,1622,1622,1622,1622,1622,65535,0,42612,5049,5049,1622,1622,1622,1622,1622,3704,1622,3704,1622,3704,1622,3704,1622,1622,1622,1622,1622,65535,0,42612,5049,5049,1622,1622,1622,1622,1622,3834,1622,3834,1622,3834,1622,3834,1622,1622,1622,1622,1622,65535,0,42612,5049,5049,1622,1622,1622,1622,1622,3834,1622,3834,1622,3834,1622,3834,1622,1622,1622,1622,1622,65535,0,42612,5049,5049,1567,1738,1567,1738,1567,3834,1622,3834,1622,3834,1622,3834,1622,1622,1622,1622,1622]}

OFF
{"format":"raw","freq":38,"data":[5049,5049,1622,1622,1622,3834,1622,1622,1622,1622,1622,3834,1622,1622,1622,3834,1622,3834,1622,65535,0,42612,5049,5049,1622,1622,1622,3834,1622,1622,1622,1622,1622,3834,1622,1622,1622,3834,1622,3834,1622,65535,0,42612,5049,5049,1567,1738,1567,3834,1622,1622,1622,1622,1622,3834,1622,1622,1622,3834,1622,3834,1622]}

0

IRKitのファームウェアを改造して温度センサーを追加した

前:IRKitのファームウェアを改造してセンサー読めるようにする

/tempeにHTTP-GETすると温度が返ってくるファームウェア


https://github.com/shokai/irkit-device/compare/master…tempe_sensor



センサーはLM35DZを使っている。電圧から摂氏温度に変換してjsonで返す。今23度だってわかる。

新しいrouteを追加するのに、GS_MAX_ROUTESの数を増やさねばならない事にしばらく気づかなかった。

LM35DZ+IRKit

analog 0〜4を全部読んで、jsonで返してくるファームウェア

/sensorsにHTTP-GETするとアナログピン全部読んで返す。
https://github.com/shokai/irkit-device/compare/master…sensors_json


なお現在のIRKitだと、この2つを同時に実装するとプログラムメモリの容量を超えてブートローダーを破壊してしまう。それぐらい容量カツカツなので、モールスWiFiセットアップを削ったのわかる。

関連:IRKitのブートローダーを破壊したので直した

0

IRKitのブートローダーを破壊したので直した

ファームウェアを改造していたら、ブートローダーを壊した。
その結果、新しいファームウェアを書き込めなくなり、文鎮と化した。
AVRライターかArduinoがあれば直せる。

壊した原因

プログラムが28672byteを超えたため、Arduino互換機であるIRKitのブートローダー領域を上書きした。Arduinoはブートローダーと実行プログラムが同じプログラムメモリ上に共存しているのだ。
普通のArduino IDEを使っていれば書き込み前にサイズチェックして、こういう事にはならないのだが、inoだと考慮てくれないらしい。

githubでissueを立てたら助けてもらえた。


28672 byte以上書き込むとbootloader領域破壊する

書き込む前に.hexのサイズをチェックする
% /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-size -B .build/irkit/firmware.hex | tail -n 1 | cut -b 11-15
Arduino IDEの中にあるavr-sizeを使う。


直し方


3手必要

  1. IRKitにArduinoのブートローダーを書き込む
  2. IRKitにEEPROMを初期化するツールを書き込む
  3. IRkitのファームウェアを書き込む

前提としてIRKitのファームウェアを改造してセンサー読めるようにするに書いた、inoのインストールやboards.txtへパッチを当てる、などの作業が必要。
また、IRKitの基板上のAVRマイコンに書き込む「AVRライター」も必要。

1. IRKitにArduinoのbootloaderを書き込む


Arduino IDEのバージョンは1.0.5(現在の最新版)

基盤を取り出す


ケース背面のネジを4つ外せば取り出せる。
AVRライターを接続するためのピンヘッダ(オス)を付けた。ケースの蓋を閉めるためにピンヘッダのハンダ付けした側を少し削った。

IRKit

AVRライターを作る


純正のライターが今家に無いので、Arduino UNOをAVR書き込み器にした。
純正のSTK500やAVR-ISP、あるいはusbaspを持ってるなら必要なし。

Arduino – ArduinoISPを参考にした。

  • [ファイル]→[スケッチの例]→[ArduinoISP]

を適当なArduinoに書き込むだけ。


これでSTK500と同等のISPライターになる。
In System Programmingライター、つまり回路からターゲットCPUを取り出さずにプログラムを書き込む事ができる。

うまく書き込めない場合がある

このままライターとして使ってもうまく動かなかった。
"avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14"
というエラーがでた。
Arduino UNOだからだろうか?他のArduinoだと大丈夫かもしれない。


のパッチをArdunoISPに当てる。empty_reply()を1回だけしか送らないようにする。
-
+int initSent=0;
int error=0;
int pmode=0;
// address for reading and writing, set by 'U' command
@@ -399,7 +399,8 @@
uint8_t ch = getch();
switch (ch) {
case '0': // signon
- empty_reply();
+ if(! initSent) empty_reply();
+ initSent = 1;
break;
case '1':
if (getch() == CRC_EOP) {
これをライター用Arduinoに書き込み直した。


IRKitとAVRライターを接続


IRKitの回路図を見ると、基板上のICPSコネクタにMISO/MOSI/SCK/RESET/5V/GNDの6ピンがある。これは上から見た図。

ICSPコネクタ
Arduino – ArduinoISPを参考に、オス-メスのジャンパワイヤ

  • Arduinoのピン13 → IRKitのSCK
  • ピン12 → MISO
  • ピン11 → MOSI
  • ピン10 → RESET
  • GND → GND
  • VCC → 5V
と接続する。

IRKit


ブートローダーを書き込む

  • [ツール]→[マイコンボード]→[IRKit]
  • [ツール]→[書込装置]→[Arduino as ISP]
  • [ツール]→[ブートローダを書き込む]

で「ブートローダの書き込みが完了しました。」と出ればok。
書き込み中はArduinoのRXとTXのLEDが点滅する。



2. IRKitにEEPROMを初期化するツールを書き込む

このままファームウェアを書き込んでも、IRKitがWiFiに接続できない。
ブートローダの書き込みにより、EEPROMが初期化されてしまっている為。(これはArduinoISPの設定でなんとかできるかもしれない)

EEPROMにはiOSアプリで設定した接続先のWiFiアクセスポイントの情報だけでなく、IRKit本体の設定用アドホックWiFiアクセスポイントの情報や、赤外線データの解析用のデータ構造も含まれている。

EEPROM初期化ツールをビルドしてIRKitに書き込む

前提としてIRKitのファームウェアを改造してセンサー読めるようにするに書いたinoのインストールやboards.txtへパッチを当てる、などの作業が必要。

IRKitのリポジトリからファームウェアやEEPROM初期化ツールのソースコードを持ってくる

% git clone git@github.com:irkit/device.git
% cd device/firmware/t/initialize-eeprom
% ino build -m irkit
% ino upload -m irkit

電源入れてすぐuploadすると書き込める。

設定用のアドホックWiFi APのパスワードはfirmware/t/initialize-eeprom/src/initialize.inoのsaveLimitedAPPassword関数で指定されている。

フルカラーLEDが赤→青に変わるとEEPROMの設定は終了。


3. IRKitにファームウェアを書き込む

IRKitのリポジトリからファームウェアをビルドする

% cd device/firmware
% ino build -m irkit
% ino upload -m irkit

なおmasterブランチが動かなければ
% git tag
% git checkout v1.3.5
などして安定版のファームウェアを書き込むと良い。


これで出荷時状態に戻る(パスワードはsaveLimitedAPPassword関数で指定したものだが)
iOSアプリで自宅のWiFiに接続する設定をして完了。