2012年6月3日日曜日

パソコン側のプログラム作成:送信:Bluetooth SPP

Bluetooth でシリアル通信するためのでパソコン側のプログラムを作成しようと思う。
Javaで作るかVC++で作るか迷うところです。
Android アプリもjava で作るので今回はJavaを選択した。

java でシリアル通信プログラムを作るには、RXTX というライブラリが必要。
RXTX のダウンルードサイト
JavaDocs

ダウンロードしたファイル名:rxtx-2.1-7-bins-r2.zip
ダウンロードしたファイルを解凍する。
eclipseの設定
RXTXcomm.jar はライブラリに追加する。
解答したフォルダの中のWindowsフォルダの中のi368-mingw32フォルダの
rxtxParallel.dll rxtxSerial.dll の2つのファイルをプロジェクトのルートにフォルダにコピーしておく。

Tera Taram で通信が成功したので、シリアルポートの設定を確認しておく
シリアル通信(SPP)の接続確認:Android Bluetooth
ポート:COM3
ボー・レート:9600
データ:8bit
パリティー:none
ストップ:1 bit
フロー制御:none

送信遅延
0ミリ秒/字 0ミリ秒/行

アンドロイド端末にシリアル通信で文字を送るプログラムを書いてみる。
import java.io.*;

import gnu.io.*;

public class SerialTestClass {
 public static void main(String arg[]) {

  try {

   // 使用するCOMポートを取得
   CommPortIdentifier comID = CommPortIdentifier.getPortIdentifier("COM3");

   // COMポートを開きます
   CommPort commPort = comID.open("SerialTestClass", 2000);

   // シリアルポートのインスタンスを生成…
   SerialPort port = (SerialPort) commPort;

   // シリアルポートの設定
   // ボーレート、データビット数、ストップビット数、パリティを設定
   port.setSerialPortParams(9600, SerialPort.DATABITS_8,SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

   // フロー制御はしない
   port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);

   // ストリームを生成して、1文字ずつ送信していきます
   OutputStream out = port.getOutputStream();
   out.write('r');
   out.write('i');
   out.write('g');
   out.write('h');
   out.write('t');
   out.write('\r');
   out.write('\n');

   // ストリームとCOMポートを閉じる処理
   out.close();
   port.close();

  } catch (NoSuchPortException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  } catch (PortInUseException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  } catch (UnsupportedCommOperationException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  } catch (IOException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  }

 }
}

アンドロイド側で受信するためにBlutooyhSPPを起動させる。
受信するために一番上の
Real-time mode を選択する。


作成したプログラムを実行する。
うまく送られているようだ。


シリアル通信(SPP)の接続確認:Android Bluetooth

PC側の準備:
Tera Term VT をダウンロードして起動させる。


Android側の準備:
Google play からアプリダウンロードしてインストールする。
アプリ名:BlutooyhSPP(無料)

アプリを起動させる。
Connect ボタンを押す。

Command Line をクリックする。

char:(\r\n) をクリックする。


Android端末で、おはよう と入力する。

パソコンに文字が送られる。

参考:
なぜか、Bluetooth Chat では接続できなかった。

準備・接続確認:Android Bluetooth

使用Bluetoothアダプタ:BUFFALO BSHSBD04BK

ペアリングする。
アンドロイド端末から接続要求すると、PC側でも接続するか聞いてくるので接続する。


シリアルポートの設定をする。

ネットワークアダプタを設定する。(シリアル通信に必要かどうかよくわからないけと一応入れておく)
接続をクリックしたらドライバがインストールされる。




2012年4月13日金曜日

xmlファイルの読み込み-ファイル名を指定して読み込み

assetフォルダの中のファイルを指定して読み込む

package com.yamato.xml;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;

public class SimpleXmlPullAppActivity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  try {
   XmlPullParserFactory factory;
   factory = XmlPullParserFactory.newInstance();
   factory.setNamespaceAware(true);
   XmlPullParser xpp = factory.newPullParser();

   // assets情報の取得
   AssetManager asset = getResources().getAssets();
   // XMLファイルのストリーム情報を取得
   InputStream is = null;
   is = asset.open("test.xml");
   InputStreamReader isr = new InputStreamReader(is);
   xpp.setInput(isr);
   
   int eventType = xpp.getEventType();
   while (eventType != XmlPullParser.END_DOCUMENT) {
    if (eventType == XmlPullParser.START_DOCUMENT) {
     System.out.println("Start document");
    } else if (eventType == XmlPullParser.START_TAG) {
     System.out.println("Start tag " + xpp.getName());
    } else if (eventType == XmlPullParser.END_TAG) {
     System.out.println("End tag " + xpp.getName());
    } else if (eventType == XmlPullParser.TEXT) {
     System.out.println("Text " + xpp.getText());
    }
    eventType = xpp.next();
   }
  } catch (XmlPullParserException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  } catch (IOException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  }

  System.out.println("End document");
 }
}


xmlファイルの読み込み-アンドロイドデベロッパーのサンプルを試してみる。

XmlPullParser http://developer.android.com/intl/ja/reference/org/xmlpull/v1/XmlPullParser.html

アンドロイドデベロッパーのサンプルを試してみる。

package com.yamato.xml;

import java.io.IOException;
import java.io.StringReader;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.os.Bundle;

public class SimpleXmlPullAppActivity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  try {
   XmlPullParserFactory factory;
   factory = XmlPullParserFactory.newInstance();
   factory.setNamespaceAware(true);
   XmlPullParser xpp = factory.newPullParser();

   xpp.setInput(new StringReader("<foo>Hello World!</foo>"));
   int eventType = xpp.getEventType();
   while (eventType != XmlPullParser.END_DOCUMENT) {
    if (eventType == XmlPullParser.START_DOCUMENT) {
     System.out.println("Start document");
    } else if (eventType == XmlPullParser.START_TAG) {
     System.out.println("Start tag " + xpp.getName());
    } else if (eventType == XmlPullParser.END_TAG) {
     System.out.println("End tag " + xpp.getName());
    } else if (eventType == XmlPullParser.TEXT) {
     System.out.println("Text " + xpp.getText());
    }
    eventType = xpp.next();
   }
  } catch (XmlPullParserException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  } catch (IOException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  }

  System.out.println("End document");

 }
}