1. 概要
2. 構成
3.動作概要
|
![]() |
![]() |
![]() |
1.若松通商から購入したLANTRONIX Cセット。 基板3枚セットです。製作にはハンダ付けが必要です。 |
2.これがXPort本体です。この中にネットワーク機能満載です。 |
3.ATmega88を搭載したマイコン側とXPortを10芯リボンケーブルで接続。XPortにはイーサネットケーブルを挿します。 |
![]() |
![]() |
![]() |
4.こちらは日新システムズから販売されているキットです。9800円ですが、6300円相当のセミナークーポンが付いてきます。ただしセミナー会場は東京・京都に限られます。 |
5.シリアル転送された電圧値をWeb上に表示した画像です。 |
6.マイコン側の電圧を変化させてみました。 |
回路図です。
今回は実験なので、非常に簡単にしています。
シリアル通信用にマイコン側のTxD-XPortのRxD、マイコン側のRxD-XPort側のTxDを接続します。
マイコン側は1秒毎にA/D変換を行い、その結果をシリアル通信で送出するとともに、LED0の出力を反転します。
(すなわちLED0は2秒周期の点滅となります)LED1とLED2はデバッグ用ですが、将来I/O制御の実験を行う際のO(出力)制御に使用します。
XPortのリセット用にSW0を実装します。
■ マイコン側
特に難しい設定はしていないので、プログラムを見れば容易に理解できると思います。
注意点としては、シリアル通信プロトコルをXPort側の初期設定値である9600bps、8データビット、1ストップビット、ノンパリティに設定します。
■ XPort側
Volt.htmlに、インターネットでXportにアクセスした際に表示させるWebコンテンツを記述します。
そのWebコンテンツ上で動作させるjavaアプレットとして、Volt.javaを記述します。
XPort上で動作させるために、Volt.htmlおよび、Volt.javaをコンパイルした結果であるVolt.classをweb2cob.exeを用いてcobファイルにまとめます。
それを、XPortのデバイスインストーラを用いてXPortのパーティション#1に書込みます。
<Java アプレットについて>
Java アプレットとは、Webプラウザ内のアプレット記述から呼び出される、クライアント(閲覧者)に動的な表示を行うためのアプリケーションです。
本プログラムにおいては、Volt.javaという名前とし、Volt.htmlというWebプラウザから呼び出すようにしています。
ただし実行の実体は、javacコマンドによりコンパイルされたVolt.classと、Volt.htmlをひとつにまとめたvolt.cobというファイルになります。
下記はvolt.htmlのプログラムです。
<APPLET CODE="Volt.class" WIDTH="150" HEIGHT="150"></APPLET>でアプレットプログラムを読み込みます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=shift_jis">
<TYTLE>Xport電圧計</TITLE>
</HEAD>
<BODY><P STYLE="text-align: center; font-size: xx-large;">
Xport電圧計
</P><HR>
<APPLET CODE="Volt.class" WIDTH="150" HEIGHT="150"></APPLET>
<UL>
<LI>約1秒毎にAVRマイコンで電圧を計測します。</LI>
<LI>測定値をXport経由でパソコンに転送しています。</LI>
<LI>AVRマイコン~Xport間は9600bpsシリアル接続です。</LI>
</UL><HR>
</BODY>
</HTML>
下記はvolt.javaのプログラムの解説です。
<Volt.java>
文中、エラー処理(catch)についての説明は省略します。
Runnableインタフェースを利用したマルチスレッドで作成します。
必要となるクラスライブラリとして下記をインポートします。
java.applet.*
java.awt.*
java.net.*
java.io.*
java.text.*java.appletは、アプレットの作成、およびアプレットとアプレットコンテキストとの通信に使用するクラスの作成に必要なクラスを提供します。
java.awtは、ユーザインタフェースの作成およびグラフィックスとイメージのペイント用の全てのクラスを含みます。
java.netは、ネットワークアプリケーションを実装するためのクラスを提供します。
java.ioは、データストリーム、システム入出力用に提供します。
java.textは、テキスト、日付、数値、メッセージを処理するためのクラスとインタフェースを提供します。
Runnableインタフェースを用いて、AppletクラスをVoltにオーバーライドさせます。
public class Volt extends Applet implements Runnable
Threadクラスのインスタンスとしてtimerを生成します。
Thread timer;
処理用の変数として下記を定義します。
xport_ip InetAddressクラス 初期値=null
port int型 初期値=10001
xport_socket Socketクラス
socketin BufferedReaderクラス
buff String型初期処理としてinit()の定義を行います。
InetAddressクラスのインスタンスを作成するために、静的メソッドのInetAddress.getByName()メソッドを使用します。
xport_ip = InetAddress.getByName(getCodeBase().getHost());
xport_socketという名称の、Socketクラスのストリームソケットインスタンスを生成し、前述のxport_ipアドレスの、指定されたport番号(10001)に接続します。
xport_socket = new Socket(xport_ip,port);
Runnableインタフェースのstart()メソッドを呼び出します。これにより後述するrun()メソッドが並行して動作を始めます。
public void start()
{
timer = new Thread(this);
timer.start();
}stop()メソッドは、プラウザ(アプレットビューア)によって呼び出され、アプレットの実行停止を通知します。
具体的には、入力ストリームを閉じ、そのストリームに関連する全てのシステムリソースを開放します。public void stop()
{
try
{
socketin.close();
xport_socket.close();run()メソッドを記述します。
実行スレッドとして、meという名前のインスタンスを生成します。
スレッドtimer と me が等しい間ループします。
public void run()
{
Thread me = Thread.currentThread();
while(timer == me)100ミリ秒の待ち時間を入れます。
try
{
Thread.currentThread().sleep(100);1バイトのデータを読み込みます。
try
{
buff = socketin.readLine();repaint()メソッドを呼び出し、強制的に再描画を実行します。
具体的には、update()メソッドが実行された後、後述するpaint()メソッドが実行されます。repaint();
paint()メソッドを定義します。
public void paint(Graphics g)
getSize()により、アプレットの描画領域の大きさを取得します。この大きさはアプレットを呼びだしたHTMLファイルで記述されています。
Dimension d = getSize();
String t = buff + "V";マイコンから送られる文字のスタイルを設定します。
Font CurrentFont = g.getFont();
font font = new Font("MS明朝" , Font.BOLD , 36);
g.setFont(font);
FontMetrics metrics = getFontMetrics(font);アプレット描画領域を赤で塗りつぶします。
g.setColor(Color.red);
g.clearRect(0, 0, d.width, d.height);電圧表示文字を黒色に、表示位置の座標を設定します。
g.setColor(Color.black);
g.drawString(t,
(d.width-metrics.stringWidth(t)/2,
(d.height+metrics.getHeight())/2);g.setFont(CurrentFont);
}updateメソッドを定義します。
public void update(Graphics g)
{
paint(g);
}
この製作に入ったそもそもの動機は、ネットワークを使用したセンサ制御を試してみたかったことです。
今回Javaアプレットを初めて使ってみましたが、Javaアプレットを使用したネットワークプログラムについて書かれた書籍というのがなかなかなく、必要なほとんどの情報はインターネットで入手しました。
ネットで調べたところ、同様な製作を行っている方達が多くいて、いまさら私が説明するまでもないと思います。
プログラムについても多くの部分で流用させていただきましたが、その内容について理解するのが大変でした。(いまだに理解できていない部分が多くありますが (汗))
今回はシリアルデータを一方向で送りましたが、今後は逆方向(クライアント→マイコン)に送る方法や、XPortが持つ3点のI/Oについて制御できるようにしていきたいと思います。
またXPortはメール送信機能も持っており、XPortの監視下にあるセンサが発生させたイベントによって指定あて先にメールを送ることも可能なので、そちらも試してみたいと思います。