| HOME | 回路チェック | SWICHシリアル出力 | シリアル入力 | RESPONSE |WEB |
/*********************************************************/
/*     WEB (インターネットからPICを操作する)          */ 
/*********************************************************/      
実演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
掲示板


HOME