MachiKania

MachiKania type P ver 1.3 で、http サーバー

2023年9月29日

MachiKania type P の ver 1.3 では、Raspberry Pi Pico W を使って、WiFi 接続及びインターネット接続が出来るようになりました。この記事では、MachiKania を http サーバーとして利用する方法について述べます。

ver 1.3 では WiFi 機能の追加に伴って13種類の新たな命令・関数が追加されていますが、それらを使ってサーバーを構築するのは、骨の折れる作業です。そこで、需要の高い http サーバーを構築するためのクラス、HTTPD を作成しました。

この、HTTPD クラスを用いれば、簡単に http サーバー(www サーバー)を構築することができます。この記事では、HTTPD クラスの使い方について述べます。

サンプルプログラム

ver 1.3 の配布アーカイブには、HTTPDクラス用のサンプルプログラムが付いています。「HDEAMON.BAS」がそれで、以下の内容です。

useclass HTTPD
h=new(HTTPD,80,"/httproot")
print "server started as http://";ifconfig$(0);"/"
do
  h.START()
  system 201,val(h.GETPARAM$("led"))
  print h.LASTURI$()
loop


REM 次の内容を、"index.htm"のファイル名で保存し、
REM "httproot"ディレクトリーに配置する。
REM ただし、各行冒頭の「REM 」は、削除すること。

REM <html><head><title>Test</title>
REM <meta name="viewport" content="width=1, initial-scale=5"></head>
REM <body>
REM <h5 style="text-align:center"><a href="?led=1">ON</a></h5>
REM <h5 style="text-align:center"><a href="?led=0">OFF</a></h5>
REM </body></html>

11行目以下は、コメントです。このコメントの内容に従って、「index.htm」という名のファイルを用意し、「httproot」ディレクトリーを作成してそこにコピーしてください。「HDEAMON.BAS」を実行すると、下のような表示になるはずです。

2023-09-27-hdeamon.jpg

「192.168.137.109」の所は、環境によって異なります。多くの場合、「192.168」から始まる4つの数字になる筈で、http サーバーが走っているローカルLANのIPアドレスです。この場合、「http://192.168.137.109/」に、ブラウザーからアクセスしてみます。PCでもスマートフォンでも構いません。下は、スマートフォンから接続した時の表示です。

2023-09-27-smartphone.jpg

MachiKaniaの画面は、下のようになります。

2023-09-27-hdeamon2.jpg

ここで、スマートフォンの画面で「ON」「OFF」「ON」の順でゆっくり押すと、Raspberry Pi Pico W の LED が、ついたり消えたりするはずです。MachiKania の画面は、以下のようになります。

2023-09-27-hdeamon3.jpg

どうでしょうか。MachiKania 上に http サーバーが構築できて、PCやスマートフォンからアクセスする事で、MahiKaniaに信号を送ることができるのが、分かると思います。

ほぼ同じ操作を動画にしてtwitter.comに上げましたので、興味があればご覧ください。

2023-09-27-movie.png

より複雑な web ページも、構築可能

上で紹介したサーバーで表示されるのは、たった6行からなるシンプルな HTML ですが、より複雑なページや、画像を含むページを表示可能です。

試しに、役者の阿部寛さんのホームページをローカルな環境の MachiKania type P で構築した http サーバー上にコピーさせていただき(外部公開していません)、ブラウザーからアクセスしてみました。動画を、twitter.comに上げてあります。

2023-09-27-abe.png

ファイル一覧とPCへのファイルダウンロード

HTTPD クラスは、ディレクトリー中のファイル一覧表示機能を持っています。例えば、以下の BASIC プログラムを実行すると、MMC/SDカードの一覧が、Apache のファイル一覧に似た形式で表示されます。

useclass HTTPD
h=new(HTTPD,80,"/")
do
  h.START()
loop

ディレクトリー間の移動も可能です。下は、「/LIB/WGET/」ディレクトリーに移動した時の表示です。表示は左から順に、ファイル名・更新日時・バイトサイズ・属性フラグです。

2023-09-27-wgetdir.png

ファイル名をクリックすると、当該ファイルをダウンロードする事も可能です。この機能を使うと、MachiKania 上のファイルを簡単にPCに取り込むことができます。

HTTPD クラスでサーバーを構築する場合、逆に、ディレクトリー一覧を表示させたくないときもあると思います。そういった場合は、該当のディレクトリーに「index.htm」を作成してください。ファイル内容は、空でも「<html></html>」でも、何でも良いです。

他のタイプのサーバーも構築可能

http サーバー以外のサーバーも、理論的には構築可能です。下は、TELNETサーバーを構築した例です。アルファベットの大文字は小文字に、小文字は大文字に変換して表示される仕様です。

TCPSERVER 23,0
print "Server started at port 23"
do
  do
    delayms 10
    c=TCPACCEPT()
  loop until c
  print "Connected"
  TCPSEND("Hello TELNET server!\r\n",-1,c)
  do while TCPSTATUS(0,c)
    for i=1 to 1000
      delayms 1
      if 0=TCPRECEIVE(&b,1,c) then continue
      i=0
      break
    next
    if 0x40<b and b<0x5b then
      b=b+0x20
    elseif 0x60<b and b<0x7b then
      b=b-0x20
    endif
    if i then b=0
    TCPSEND &b,1,c
    if 0x0d=b then
      b=0x0a
      TCPSEND &b,1,c
    endif
  loop
  print "Closed"
loop

実行中の様子の動画は、twitter.comに上げました。

2023-09-27-telnet.png

コメント

コメントはありません

コメント送信