目次
過去の日記†
12月6日(木)†
結局久々の更新
XBeeとの通信による画面切り替え†
がやっと実装できた。詰まってた問題点幾つか()
intentで受け渡せるデータの限界†
- まず、XBeeからの接続要求を受け取り、要求先のIDに合わせた画面(Activity)を起動するサービスクラスを作成
- serversocketにXBeeからの接続要求→新たなsocketを用意して接続→通信可能→そのままリモコン画面となるActivityを立ち上げたかったが、
- intentの仕様上、socketまるごと渡せなかったので、IPだけ渡してActivityの方で改めて接続という回りくどい仕様に
- そのため、サービスとアクティビティ間のやり取りが必要になるので、ブロードキャストレシーバを実装
呼び出し場所†
- 画面切り替え時にActivityの破棄も行いたいので、startActivityForResult()を使うことに
- どうやらActivityクラスの中でしか使えないらしく、MainActivityクラスの中にintentを渡せばstartActivityForResult()でActivityの起動と破棄を行なってくれるクラスを作成
- それをブロードキャストレシーバ内で呼び出して使おうと思ったが、呼び出し元のレシーバが別ファイルであったためか、動作させられず
- C的間隔でホイホイ呼びだそうとしてもダメってことは多々…気をつけよう
- contextなどの辺を気にしながら調整してみたが、結局内クラスにするのが一番わかりやすくて良いので
- ブロードキャストレシーバもMainActivity内のクラスとして実装。
- ここまでで
- Service
- XBeeからの接続要求&機器ID送信
- 仮接続
- socketからIP抜き出し&機器ID抜き出し
- ブロードキャストレシーバにIPとIDを送信
- ブロードキャストレシーバ(MainActvity内)
- IDから開くべきActivity(画面)を選択
- startActivityForResult()で起動。intentを用いてIP情報受け渡し(前に開いているActivityは破棄)
- Activity(リモコン画面)
- IPと決め打ちのポートを使ってXBeeと接続。通信。
まで来ていて、ボタンを押したらリモコン信号を送信というところで
「android.os.NetworkOnMainThreadException」というエラーが
なんやらほいとグーグル先生に聞いてみたところ、Android4.0以降ではネットワーク通信のソースが書いてあるとエラーが出るとか…
- 対策は簡単で、Androidマニフェストファイルの
android:targetSdkVersion="15"を変えてやればいいと(sdk15は4.0)
今回は最低sdkを2.2(sdk8)にしているのでそれに合わせて8に変更したところ、エラーは消え問題なく通信が出来た。
やっとここまで
今後はUI、データベースの利用、リモコン信号学習など…あとしゅーかつ。
10月17日(水)†
リモコン†
PSoCで受信したデータを元にプロジェクターをリモコン操作出来るか実験した
- 相変わらずONには出来るが、OFFには出来ない
- プロジェクターが起動していると外乱をまき散らしているのか、OFF判定は厳しいのか・・・
- Arduinoのシールドを使うことに
が、一旦回路は置いといて(ある程度並行はしたいが)、先にAndroidアプリの基本形を固めてしまいたい。
- Android側をサーバにして、XBeeから通信するテストの第一段階は成功
10月12日(金)†
学習リモコン機能†
前にちょっと試したときは、あまりいい結果が得られなかったので後回しにしていた学習機能。
- 他のとこでも詰まる原因になっていたUARTの送信タイミングを変えることで、なかなかいい結果が得られることが判明。
- いつもC言語とかの感覚で適当なところに挟んでしまうので、今後は十分気をつけたい
- しかし、arduinoのリモコンシールドが届いたタイミングで気づくという…
- これで試してみてPSoCで行けそうなら、もったいないがPSoCのままで。
今後の課題を整理
- PSoCで学習機能(リモコン信号を取得、Androidに転送)が出来るか
- AndroidとXBee間の通信方法の変更
- AndroidアプリのUI関係整備
- Androidで操作履歴の保存
- Androidアプリで操作履歴をUIに反映
上2つを取組中。
学習機能が出来るとして、データベースに保存などを実装する必要があるので、さっさとAndroidに集中できるように。
10月1日(月)†
ifDLになってから初めて更新する…^^;
必要なことはノートと頭にメモってたのであまり使わなかった罠…
後期はメモ程度でも少しずつ・・・
通信テスト†
ものづくりの裏ですこしずつ進めていたプログラムの改良。
- PCとマイコンで通信がうまく行ってなかった原因はボーレートを下げることで解消された。
- そのままAndroidとマイコンの間でもbyte型での通信は成功
次の改良点は、リモコン信号のデータとしてbyte型(8bit)では足りない数値を送りたいので、マイコン側の受信プログラムの改良。
1データ2byteで送りつけて受信側でまとめてintに入れるとか。
4月9日(月)†