ともさんのHP >ものつくり >電子工作 >パソコンで電源スイッチを操作する方法その2

パソコンで電源スイッチを操作する方法その2

2002/10/3作成

CJAVAで動かす

 インターネットブラウザで動かすことは簡単にできますが、それでは物足りません。「スイッチを押す」動作が「マウスのボタンを押す」に変わっただけです。プログラムを組み立てて、思いどうりに操作したいものです。 JAVA 楽天 でPICNICと通信してみましょう。

ステップ1 Url.java

 まず、特定のURLと通信するclassを作りました。DOS窓から java url http://192.168.0.200/ と実行すると、PICNICからの返事が帰ってきます。

 引数をhttp://192.168.0.200/modify.cgi?RB7=H にするとRB7端子がHighになり、LEDが点灯します。この端子にスイッチがついていればスイッチONになります。

 http://192.168.0.200/modify.cgi?RB7=L とすると...消灯です。

 ちなみにhttp://yahoo.co.jp/ なんてすると、ヤフーからの返事が返ってきます。(意味ないけど)。

package tomolib.net;

import java.net.*;

import java.util.*;

import java.io.*;

import tomolib.util.*;

/**

* 虎ス名:Url <BR>

* 処理概要:w定したURLからDATAを受け取るく<BR>

* 履歴: <BR>

* 2002/10/1製作<BR>

*/

public class Url {

/**このクラスの動作詞ア*/

public static void main( String argv[] ) {

String url = argv[0];

Url u = new Url();

String stmp = u.get( url);

System.out.println( stmp );

TextFile t = new TextFile();

t.OutOpen( "url.txt" );

t.Write( stmp );

t.OutClose();

}

public Url(){

//System.out.println("初期化");

}

/**

* 區・゙:public String get( String surl)<BR>

* 引数:surl dataを受け取るURL http://***.com/ 等<BR>

* 機能:urlからdataを受け取る<BR>

* 返り値:け取ったdataの文字列<BR>

*/

public String get( String surl) {

String line = null;

String stmp = null;

try {

URL url = new URL( surl );

Object content = url.getContent();

if( content instanceof InputStream ) {

BufferedReader reader= new BufferedReader(new InputStreamReader( (InputStream)content ) );

while( ( stmp = reader.readLine() ) != null )

{

line = line + "\r\n"+ stmp;

}

reader.close();

}else{ System.out.println( "Content is " + content.toString() ); }

} catch( ArrayIndexOutOfBoundsException e ){

System.err.println( "Usage: java URLContent urlname" );

} catch( IOException e ){

System.err.println( "IO Error" );

return "IO ERR";

}

return line;

}

}

ステップ2 Picnic.java

 Url.javaは汎用性がありすぎるので、PICNIC専門に通信するにはちょっと使いづらいです。そこで、Url.Javaを土台にしてPICNIC通信用のClassを作ってみましょう。一部文字化けしているけど、気にしないでね。

 このCLASS中のgetOndoメソッドを使うと、PICNICから気温情報を受け取ることができます。setOutPortメソッドを使えば任意の出力端子を操作できるようになります。

package tomolib.picnic;

import tomolib.net.*;

/**

* 虎ス名:Picnic <BR>

* 処理概要:Picnicと通信するclass<BR>

* 2002/10/1製作<BR>

*/

public class Picnic {

Url url = new Url();

/**このクラスの動作詞ア*/

public static void main( String argv[] )

{

Picnic p = new Picnic();

System.out.println( "気温: " + p.getOndo("http://192.168.0.200/") + " 度" );

int I = p.setOutPort("http://192.168.0.200/", "RB6", "H");

if( I==0 ){System.out.println( "成功");}else{System.out.println( "ク敗");}

I = p.setOutPort("http://192.168.0.200/", "RB6", "L");

if( I==0 ){System.out.println( "成功");}else{System.out.println( "ク敗");}

}

/**

* 區・゙:public int getOndo( String surl)<BR>

* 引数:surl dataを受け取るURL http://***.com/ 等<BR>

* 機能:Picnicから温度DATAを受け取る<BR>

* 返り値:温度<BR>

*/

public int getOndo( String surl)

{

int ondo = 0;

String stmp = url.get( surl );

if( stmp == null ){ return -100; }

int itmp = stmp.indexOf( "Celsius" );

if( itmp < 3){return -100;}

//System.out.println( stmp.substring( itmp-3 , itmp-1 ) + "'" );

ondo = Integer.parseInt( stmp.substring( itmp-3 , itmp-1 ) );

return ondo;

}

/**

* 區・゙:public int setOutPort( String surl, String port , String lh)<BR>

* 引数:surl dataを受け取るURL http://***.com/ 等<BR>

* 引数:RB4〜RB7<BR>

* 引数:lh LまたはH<BR>

* 機能:PicnicのOUTPORTのLHを設定する<BR>

* 返り値:0:設定成功 -1:設定失敗<BR>

*/

public int setOutPort( String surl, String port , String lh) {

//http://192.168.0.200/modify.cgi?RB1=H

String stmp = surl + "modify.cgi?" + port + "=" + lh ;

String stmp2 = url.get( stmp );

String stmp3 = null;

if( lh.equals("H") ){

stmp3 = "<INPUT TYPE=\"submit\" NAME=\"" + port + "\" VALUE=\"H\"> High";

}else{

stmp3 = "<INPUT TYPE=\"submit\" NAME=\"" + port + "\" VALUE=\"H\"> Low";

}

if( stmp2.indexOf( stmp3 ) < 0){ return -1; }

return 0;

}

public Picnic(){

//System.out.println("初期化");

}

}

ステップ3 PicnicFrame.java

 ここまでのプログラムは窓が開かないので、人間が操作するには大変です。そこで作ったのがPicnicFrame.java。これを実行すると下のような窓が開きます。ボタン楽天 を押すことで先に作ったPicnicのメソッドを実行することができるようになります。

/*

* PicnicFrame.java

*

* Created on 2002/10/01, 20:35

*/

package tomolib.picnic;

/**

*

* @author Administrator

*/

public class PicnicFrame extends javax.swing.Jframe {

tomolib.picnic.Picnic picnic = new tomolib.picnic.Picnic();

/** Creates new form PicnicFrame */

public PicnicFrame() {

initComponents();

setSize(200,200);

}

/** This method is called from within the constructor to

* initialize the form.

* WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor.

*/

private void initComponents() {//GEN-BEGIN:initComponents

jTextField1 = new javax.swing.JTextField();

jPanel1 = new javax.swing.Jpanel();

jLabel1 = new javax.swing.Jlabel();

jButton1 = new javax.swing.Jbutton();

jLabel2 = new javax.swing.Jlabel();

jButton2 = new javax.swing.Jbutton();

jLabel3 = new javax.swing.Jlabel();

jButton3 = new javax.swing.Jbutton();

jLabel4 = new javax.swing.Jlabel();

jButton4 = new javax.swing.Jbutton();

addWindowListener(new java.awt.event.WindowAdapter() {

public void windowClosing(java.awt.event.WindowEvent evt) {

exitForm(evt);

}

});

jTextField1.setText("http://192.168.0.200/");

getContentPane().add(jTextField1, java.awt.BorderLayout.NORTH);

jPanel1.setLayout(new java.awt.GridLayout(4, 2));

jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

jLabel1.setText("RB4");

jPanel1.add(jLabel1);

jButton1.setText("L");

jButton1.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseReleased(java.awt.event.MouseEvent evt) {

jButton1MouseReleased(evt);

}

});

jPanel1.add(jButton1);

jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

jLabel2.setText("RB5");

jPanel1.add(jLabel2);

jButton2.setText("L");

jButton2.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseReleased(java.awt.event.MouseEvent evt) {

jButton2MouseReleased(evt);

}

});

jPanel1.add(jButton2);

jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

jLabel3.setText("RB6");

jPanel1.add(jLabel3);

jButton3.setText("L");

jButton3.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseReleased(java.awt.event.MouseEvent evt) {

jButton3MouseReleased(evt);

}

});

jPanel1.add(jButton3);

jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

jLabel4.setText("RB7");

jPanel1.add(jLabel4);

jButton4.setText("L");

jButton4.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseReleased(java.awt.event.MouseEvent evt) {

jButton4MouseReleased(evt);

}

});

jPanel1.add(jButton4);

getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

pack();

}//GEN-END:initComponents

private void jButton4MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton4MouseReleased

// 処理コードをここに追加します:

if( jButton4.getLabel().equals("L")){

picnic.setOutPort(jTextField1.getText(), "RB7", "H");

jButton4.setLabel("H");

}else{

picnic.setOutPort(jTextField1.getText(), "RB7", "L");

jButton4.setLabel("L");

}

}//GEN-LAST:event_jButton4MouseReleased

private void jButton3MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton3MouseReleased

// 処理コードをここに追加します:

if( jButton3.getLabel().equals("L")){

picnic.setOutPort(jTextField1.getText(), "RB6", "H");

jButton3.setLabel("H");

}else{

picnic.setOutPort(jTextField1.getText(), "RB6", "L");

jButton3.setLabel("L");

}

}//GEN-LAST:event_jButton3MouseReleased

private void jButton2MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton2MouseReleased

// 処理コードをここに追加します:

if( jButton2.getLabel().equals("L")){

picnic.setOutPort(jTextField1.getText(), "RB5", "H");

jButton2.setLabel("H");

}else{

picnic.setOutPort(jTextField1.getText(), "RB5", "L");

jButton2.setLabel("L");

}

}//GEN-LAST:event_jButton2MouseReleased

private void jButton1MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton1MouseReleased

// 処理コードをここに追加します:

if( jButton1.getLabel().equals("L")){

picnic.setOutPort(jTextField1.getText(), "RB4", "H");

jButton1.setLabel("H");

}else{

picnic.setOutPort(jTextField1.getText(), "RB4", "L");

jButton1.setLabel("L");

}

}//GEN-LAST:event_jButton1MouseReleased

/** Exit the Application */

private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm

System.exit(0);

}//GEN-LAST:event_exitForm

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

new PicnicFrame().show();

}

// 変数宣言 - 編集不可//GEN-BEGIN:variables

private javax.swing.Jlabel jLabel4;

private javax.swing.Jbutton jButton2;

private javax.swing.Jlabel jLabel1;

private javax.swing.Jlabel jLabel3;

private javax.swing.Jlabel jLabel2;

private javax.swing.Jbutton jButton1;

private javax.swing.Jbutton jButton3;

private javax.swing.Jpanel jPanel1;

private javax.swing.Jbutton jButton4;

private javax.swing.JTextField jTextField1;

// 変数宣言の終わり//GEN-END:variables

}

ステップ4 PicnicTimer.java

 先に作ったPicnicFrame、結局ブラウザを使うのとかわりがありませんね。今度は設定時刻になったらON/OFFするClassを作りましょう。これはウィンドウが開かないので、DOS窓から実行します。実行は↓

 c:\j2sdk1.4.0_02\bin\java.exe tomolib.picnic.PicnicTimer http://192.168.0.200/ 20:22:00 RB7 H 20:22:05 RB7 L

というようにDOS窓にインプットします。

package tomolib.picnic;

import tomolib.picnic.*;

import tomolib.util.*;

/**

* 虎ス名:PicnicTimer <BR>

* 処理概要:設定時刻にPicnicのポートへの出力を変える<BR>

* 2002/10/1製作<BR>

*/

public class PicnicTimer implements Runnable

{

Thread timer;

Picnic picnic = new Picnic();

Util util = new Util();

//21:12:56

String url;

String jikoku[] ;

String port[] ;

String conf[] ;

boolean flug[] ;

int nos=0;

/**このクラスの動作詞ア*/

public static void main( String argv[] )

{

PicnicTimer p = new PicnicTimer();

int itmp = 0;

int itmp2 = 1;

//System.out.println( "" + argv.length + " " + (int)(argv.length/3));

p.url = argv[0];

p.jikoku = new String[ (int)(argv.length/3) ];

p.conf = new String[ (int)(argv.length/3) ];

p.port = new String[ (int)(argv.length/3) ];

p.flug = new boolean[ (int)(argv.length/3) ];

while( itmp2 < argv.length )

{

p.jikoku[itmp] = argv[ itmp2 ]; itmp2++;

p.port[itmp] = argv[ itmp2 ]; itmp2++;

p.conf[itmp] = argv[ itmp2 ]; itmp2++;

p.flug[itmp] = false;

p.nos ++ ;

itmp++;

}

p.timer.start();

}

public void doSet(int I)

{

System.out.print( util.stringNow3() +" "+ jikoku[I] +" "+ url +" "+ port[I] +" "+ conf[I] );

int ii = picnic.setOutPort(url, port[I], conf[I]);

if( ii==0 ){System.out.println( " : 成功");}else{System.out.println( " : ク敗");}

}

//一定時間ごとの処理

public void run()

{

while(true){try{ timer.sleep(300);}catch(InterruptedException e){}

String now = util.stringNow3();

//System.out.println( now +" "+ nos );

for( int I=0; I<nos; I++)

{

//System.out.print( jikoku[I]);

if( now.indexOf( jikoku[I] ) > 0 ){

if( flug[I] == false ){

doSet( I );

flug[I] = true;

}

}else{ flug[I] = false; }

}

//if( I==0 ){System.out.println( "成功");}else{System.out.println( "ク敗");}

}

}

public PicnicTimer()

{

timer = new Thread(this);

//timer.start();

}

}

 おわりに...

 このシステムは自作の天体カメラの電源を自動でON/OFFするために作りました。平日は家にいないの場合が多いので、こういうのがあると助かります。家には別に自動水やり器があるのですが、将来は水やりもこのシステムに載せかえようと思っています。プログラムを作ればインターネットやメールを使って家の機器を操作することもできるようになります。これを使って、いろいろ遊べそうです。

*ご注意

  このページに載せたプログラムは私のパソコンの設定になっているので、部分的に修正しないと動かないと思います。ご注意ください。また、ここに記載していない自作Classが必要な個所があります。

おわり

最終更新日: 2002-10-03 00:00:00

ともさんのHP >ものつくり >電子工作 >パソコンで電源スイッチを操作する方法その2

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

グラジオラスの栽培、手入れ、増やしかた  
カタクリの栽培、手入れ、増やしかた  
ズボンの持ち出しの作りかた  
オオイヌノフグリ  
ものつくり  
アロエの株分け  
屋根から作り始めて最後に基礎を作る建物  
メッシュアニメーション  
JavaFX アニメーション  
バードフィーダーの自作  
平坦なTriangleMesh作成Class  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます