2014年2月11日火曜日

久しぶりにAndroidプログラミングserial monitor(3)open()


FTDIのFT232RLが載ったマイコン基板をOTG接続にてNexus7に繋いで、FT232RLのopenが出来ました.ここで使ったマイコン基板は自作のものですが、Arduinoでもその他の製品でも、FT232RLを使っている基板なら同じように遊べるかと思います.
1) FTDIのAndroid用ライブラリのDL
他にもDL先があるのかもしれませんが、、、下記をDLして解凍します.libsフォルダの中にあるj2xx.jarを見つけておきます.どうしてD2xx.jarでないのかは深く考えないでおきましょう.
2) eclipseで新規アプリを作成
ファイル→新規→Androidプリケーションプロジェクト
名前はなんでもいいですがFT2とでもして、次へ
このようにチェックして、次へ.その後出てくるダイアログで次へかOKを押せばFT2プロジェクトの出来上がり.
3) j2xxライブラリをFT2プロジェクトに入れる
FT2フォルダを開けて、さきほどDLしたj2xx.jarをlibsにコピーする.(必須な操作ではないが)
FT2で右クリックして、ビルドパス→外部アーカイブの追加.そして上のj2xx.jarを指定する.
すると、FT2プロジェクトにこんな風にj2xx.jarが入ります.よしっ.
4) ソースコードを書く
MainActivity.javaを開いて、この記事の末尾のコードをコピペする.
5) 実行する
nexus7をPCに繋いで、FT2で右クリック→実行→Androidアプリ.
するとNexus7にFT2の画面が開いて「no device」というToastが表示されてひとまずおしまい.

次に、FT232RLを搭載したマイコン基板をnexus7に繋いで、FT2を起動すると「opened」というToastが表示され、FT232RLが繫がったことがわかります.この時、FT2を一度killしてからあらためて起動することが必要です.

以上でopenは確認できました.次回はマイコン基板が送信する文字を受信してみます.

その2へ


人気ブログランキングへ



------少しばかりのコードの解説------
package com.example.ft2;
ft2は任意のプロジェクト名と一致してないといけないと思います.たぶんですが.

import com.ftdi.j2xx.D2xxManager;
import com.ftdi.j2xx.FT_Device;
これらはライブラリを使うためのincludeみたいなもんです.

try { } catch
マイコンからの応答待ちでtabletがハングアップしてしまうと困るので、FT2を強制停止できるようにしておくために、例外を受け付けられるようにしておきます.

ftD2xx = D2xxManager.getInstance(this);
devCount = ftD2xx.createDeviceInfoList(this);
ライブラリを使うための準備らしいですが詳細はよく判りません.

d2xxDrvParameter.setBufferNumber(16);
d2xxDrvParameter.setMaxBufferSize(16384);
d2xxDrvParameter.setMaxTransferSize(16384);
d2xxDrvParameter.setReadTimeout(5000);
バッファサイズ関係を設定します.openするために必要なパラメータらしく、FT232RLのハードウエア仕様で決まるのだと思うが詳細は知らない.

ftDev = ftD2xx.openByIndex(this, 0, d2xxDrvParameter);
いよいよこれでopenします.

ftDev.setBitMode((byte)0 , D2xxManager.FT_BITMODE_RESET);
FT232RLをリセットします.

ftDev.setBaudRate(9600);
ボーレートを9600に設定.

ftDev.setDataCharacteristics(D2xxManager.FT_DATA_BITS_8, D2xxManager.FT_STOP_BITS_1, D2xxManager.FT_PARITY_NONE);
8bit、stop 1bit、パリティなし

ftDev.setFlowControl(D2xxManager.FT_FLOW_NONE, (byte) 0x0b, (byte) 0x0d);
フロー制御なし


----------コードここから末尾まで--------
package com.example.ft2;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;

import com.ftdi.j2xx.D2xxManager;
import com.ftdi.j2xx.FT_Device;

public class MainActivity extends Activity {
public static D2xxManager ftD2xx= null;
FT_Device ftDev = null;
int devCount = 0;
D2xxManager.DriverParameters d2xxDrvParameter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
// Get FT_Device and Open the port
ftD2xx = D2xxManager.getInstance(this);
devCount = ftD2xx.createDeviceInfoList(this);
if (devCount> 0) {
d2xxDrvParameter = new D2xxManager.DriverParameters();
d2xxDrvParameter.setBufferNumber(16);
d2xxDrvParameter.setMaxBufferSize(16384);
d2xxDrvParameter.setMaxTransferSize(16384);
d2xxDrvParameter.setReadTimeout(5000);
ftDev = ftD2xx.openByIndex(this, 0, d2xxDrvParameter);

// Configure the port to UART
if( ftDev.isOpen() == true ) {
// Reset FT Device
ftDev.setBitMode((byte)0 , D2xxManager.FT_BITMODE_RESET);
// Set Baud Rate
ftDev.setBaudRate(9600);
// Set Data Bit , Stop Bit , Parity Bit
ftDev.setDataCharacteristics(D2xxManager.FT_DATA_BITS_8, D2xxManager.FT_STOP_BITS_1, D2xxManager.FT_PARITY_NONE);
// Set Flow Control
ftDev.setFlowControl(D2xxManager.FT_FLOW_NONE, (byte) 0x0b, (byte) 0x0d);
Toast.makeText(this, "opened", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this, "open failed", Toast.LENGTH_LONG).show();
}
}
else {
Toast.makeText(this, "no device", Toast.LENGTH_LONG).show();
}
}
catch (D2xxManager.D2xxException ex) {
ex.printStackTrace();
ftDev.close();
}
}
}

5 件のコメント:

  1. ソニーOB:佐藤2014年2月12日 1:30

    IT Solutionって言葉をよく使うじゃないですか。そもそもIT Solutionって何だ?何をすればIT Solutionって呼べるんだ?と思ってしまいます。なんでもかんでもITで・・・というのは。
    スマホを介せばOKなのか。
    なんか「お仕事はなんですか?」との質問に「メディア関連です」と言って実は新聞配達っていうのと同じことは無いんだろうか?
    それと同様にイノベーションという言葉も安易に使われているような気がしてなりません。ただの勉強不足だけなのかもしれませんが、とても概念的で具体性を欠く言葉の様な気がします。詐欺師のコンサルタントが良く使いそうな言葉にも感じます。

    返信削除
    返信
    1. 近所の飲み屋で小一時間飲んで帰ってきました.

      わたしも経営コンサル=カタカナ=胡散臭いってなイメージを持っております.あと、集中と選択=胡散臭いというイメージも持っております.不謹慎にも未だに判ってないのは、残すビジネスが集中なのか選択なのか判ってないという、今時のビジネスマンとしては失格なわたしです.さくっと懺悔しておこう.(笑)

      飲み屋が面白いのは、その店のポジショニングがよく判るところでして、しかも個人経営ですから、あたかもひとり経営コンサル状態みたいなもんですから.

      削除
    2. ソニーOB:佐藤2014年2月12日 2:09

      出井さんは本気でグローバルで生き残ろうと思ったら全員を非正規社員にすべきであると言ったそうな。
      集中と選択ですか。選択と集中ならわかるような気がします。ただの語順ですが。
      良く言われることですが”どうしてラーメンの有名店のおやじってどいつも腕を組んで客に対して上から目線なの?”って笑えます。まあ店を選ぶのは客であるわけですから嫌なら行かなければいいわけですが。。。

      削除
    3. 出井さんの時期のソニーがすでに開発力の面で上から下まで劣化していたのが問題なのですがそれはさておくとして、、、非正規社員化は十分条件じゃなくて必要条件に過ぎません.なので、仮に2000年の時点で全員を非正規社員に転換できたとしても生き残れた保証はナッシングだったと思われます.

      ラーメン屋の腕組みの由来は、料理の鉄人で料理人は闘争心旺盛だと印象づけられたことにあるように思っとります.さすがにフレンチシェフは腕組みしませんが、ラーメン屋のイメージにはフィットしたとかなんとか.

      削除
  2. solution?問題解決?
    http://e-words.jp/w/E382BDE383AAE383A5E383BCE382B7E383A7E383B3.html
    IT solutionは、単なる方向性で活動の実態を良く見て行かないと分らないと思うのですが、上手く行くか、行かぬかは、活動が想定条件下で力を発揮出来るかと思います。
    競争激化の時代では、経済情勢、(海外、国内)分析、マ-ケッテング、推進力が作用
    する様に考えてしまいます。一面、ばくち的要素(当たる)も有る様な気もします。
    素人の私が、最初に言える事は、難しいの言葉しか出て来ません。

    返信削除