|
|
実演live
|
今度はハイパーターミナルに代えてPerlでシリアル通信をしてPICを操作します。
そうすればWEBからPICを操作できます。
インターネットのHPから、1文字入力すると、サーバーに接続されたPICが2進数でLEDを点灯させます。
Perlでシリアル通信をするにはWin32::API モジュールと Win32::SerialPort
モジュールが必要です。
これらのモジュールを取得するには、コマンドプロンプトで以下のように入力して実行します。
ppm install http://www.bribes.org/perl/ppm/Win32-API.ppd
ppm install http://www.bribes.org/perl/ppm/Win32-SerialPort.ppd
Win32::API と Win32::SerialPort,Win32API::CommPort が自動でインストールされます。
詳しくはPERL_技術研究サイトさんの「Perl でのシリアルポート(RS-232C)通信」を参照してください。
つぎにserialport_confという設定ファイルを作成します。
下のserialport_conf.pl というファイルを作成して、Perlで実行させると、serialport_confが作成できます。
serialport_conf.pl
# serialport_conf.pl
use Win32::SerialPort;
my $conf_file = 'serialport.conf';
my $port_name = 'COM1';
my $com1 = new Win32::SerialPort($port_name) or die;
# この部分は通信機器と合わせてください。
$com1->baudrate(2400);
$com1->parity('none');
$com1->databits(8);
$com1->stopbits(1);
# フロー制御の方法を選択します。rts(ハードウェア制御),
# xoff(ソフトウェア制御),dtr(rtsと同じことができるが,ピンが違う)
# があります。特に理由がない限りrtsにしてください。
$com1->handshake('rts');
# 読み込み,書き込みバッファです。
# バッファが小さすぎるとデータを途中までしか受け取れない場合があります。
# バイナリ転送などを行う場合は多めに設定してください。
$com1->buffers(
1024 * 20, # 読み込みバッファ
1024 * 4 # 書き込みバッファ
);
# 読み込み時の時間間隔の設定です。
# 小さすぎると計測機器の反応速度が
# パソコンに追いつけなくなります。
$com1->read_interval(800);
$com1->read_char_time(400);
$com1->error_msg(1);
$com1->user_msg(1);
$com1->write_settings;
$com1->save($conf_file);
|
CGIの作成です。
HTMLでフォームを作成して下のres.cgiを呼べば結果が返ってきます。
form.html
<HTML>
<HEAD>
<BODY>
<TABLE>
<TBODY>
<TR>
<TD></TD>
<TD>PIC cgi test</TD>
<TD></TD>
</TR>
<TR>
<TD valign="top">Enter one char </TD>
<TD>
<FORM method="POST" action="../res.cgi"><INPUT size="1" type="text" maxlength="1" name="text"><INPUT type="submit" name="enter" value="ENTER"><INPUT type="reset" name="reset" value="RESET"></FORM>
<BR>
</TD>
<TD></TD>
</TR>
<TR>
<TD></TD>
<TD>
<FORM></FORM>
</TD>
<TD></TD>
</TR>
<TR>
<TD></TD>
<TD></TD>
<TD></TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML> |
res.cgi
#!C:\Perl\bin\perl
# CGIで pic を操作します
use CGI;
use Win32::SerialPort;
$form = CGI->new();
$text = $form->param("text");
my $conf_file = "serialport.conf"; # あらかじめ作成した設定ファイルを使用します。
# シリアルポートを普通のファイルハンドルに見せかけます。
tie *PORT, 'Win32::SerialPort', $conf_file or die "Can't open serialport";
print PORT "$text"; # 測定装置に文字を送信します。
my $res = <PORT>; # 装置から送られてきた文字は通常の
# ファイルハンドルと同様に受け取ることができます。
close PORT or warn "Can't close serialport";
print "Content-type: text/html\n\n";
print"<HTML>";
print"<BODY>";
print "$res";
print"</BODY>";
print"</HTML>";
|
実際にインターネット上でPICを操作させるにはサーバーにシリアル通信でPICを接続しなければなりません。
一般のプロバイダーでは不可能でしょうが、気楽な自宅サーバーならできます。
また、ローカルネットでもできます。
私も自宅サーバーに設置してWebカメラで確認できるようにしてみました。
しかし、Webカメラは不定期の運用ですのでいつでも見れるとは限りません。
実演live
私のサイトがみなさんの参考になれば幸いです。ご意見ご希望なんでも掲示板にお寄せください。
mail ⇒ kato@1php.com
⇒掲示板
|
|