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」がそれで、以下の内容です。
11行目以下は、コメントです。このコメントの内容に従って、「index.htm」という名のファイルを用意し、「httproot」ディレクトリーを作成してそこにコピーしてください。「HDEAMON.BAS」を実行すると、下のような表示になるはずです。
「192.168.137.109」の所は、環境によって異なります。多くの場合、「192.168」から始まる4つの数字になる筈で、http サーバーが走っているローカルLANのIPアドレスです。この場合、「http://192.168.137.109/」に、ブラウザーからアクセスしてみます。PCでもスマートフォンでも構いません。下は、スマートフォンから接続した時の表示です。
MachiKaniaの画面は、下のようになります。
ここで、スマートフォンの画面で「ON」「OFF」「ON」の順でゆっくり押すと、Raspberry Pi Pico W の LED が、ついたり消えたりするはずです。MachiKania の画面は、以下のようになります。
どうでしょうか。MachiKania 上に http サーバーが構築できて、PCやスマートフォンからアクセスする事で、MahiKaniaに信号を送ることができるのが、分かると思います。
ほぼ同じ操作を動画にしてtwitter.comに上げましたので、興味があればご覧ください。
より複雑な web ページも、構築可能
上で紹介したサーバーで表示されるのは、たった6行からなるシンプルな HTML ですが、より複雑なページや、画像を含むページを表示可能です。
試しに、役者の阿部寛さんのホームページをローカルな環境の MachiKania type P で構築した http サーバー上にコピーさせていただき(外部公開していません)、ブラウザーからアクセスしてみました。動画を、twitter.comに上げてあります。
ファイル一覧とPCへのファイルダウンロード
HTTPD クラスは、ディレクトリー中のファイル一覧表示機能を持っています。例えば、以下の BASIC プログラムを実行すると、MMC/SDカードの一覧が、Apache のファイル一覧に似た形式で表示されます。
ディレクトリー間の移動も可能です。下は、「/LIB/WGET/」ディレクトリーに移動した時の表示です。表示は左から順に、ファイル名・更新日時・バイトサイズ・属性フラグです。
ファイル名をクリックすると、当該ファイルをダウンロードする事も可能です。この機能を使うと、MachiKania 上のファイルを簡単にPCに取り込むことができます。
HTTPD クラスでサーバーを構築する場合、逆に、ディレクトリー一覧を表示させたくないときもあると思います。そういった場合は、該当のディレクトリーに「index.htm」を作成してください。ファイル内容は、空でも「<html></html>」でも、何でも良いです。
他のタイプのサーバーも構築可能
http サーバー以外のサーバーも、理論的には構築可能です。下は、TELNETサーバーを構築した例です。アルファベットの大文字は小文字に、小文字は大文字に変換して表示される仕様です。
実行中の様子の動画は、twitter.comに上げました。
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」を実行すると、下のような表示になるはずです。
「192.168.137.109」の所は、環境によって異なります。多くの場合、「192.168」から始まる4つの数字になる筈で、http サーバーが走っているローカルLANのIPアドレスです。この場合、「http://192.168.137.109/」に、ブラウザーからアクセスしてみます。PCでもスマートフォンでも構いません。下は、スマートフォンから接続した時の表示です。
MachiKaniaの画面は、下のようになります。
ここで、スマートフォンの画面で「ON」「OFF」「ON」の順でゆっくり押すと、Raspberry Pi Pico W の LED が、ついたり消えたりするはずです。MachiKania の画面は、以下のようになります。
どうでしょうか。MachiKania 上に http サーバーが構築できて、PCやスマートフォンからアクセスする事で、MahiKaniaに信号を送ることができるのが、分かると思います。
ほぼ同じ操作を動画にしてtwitter.comに上げましたので、興味があればご覧ください。
より複雑な web ページも、構築可能
上で紹介したサーバーで表示されるのは、たった6行からなるシンプルな HTML ですが、より複雑なページや、画像を含むページを表示可能です。
試しに、役者の阿部寛さんのホームページをローカルな環境の MachiKania type P で構築した http サーバー上にコピーさせていただき(外部公開していません)、ブラウザーからアクセスしてみました。動画を、twitter.comに上げてあります。
ファイル一覧とPCへのファイルダウンロード
HTTPD クラスは、ディレクトリー中のファイル一覧表示機能を持っています。例えば、以下の BASIC プログラムを実行すると、MMC/SDカードの一覧が、Apache のファイル一覧に似た形式で表示されます。
useclass HTTPD h=new(HTTPD,80,"/") do h.START() loop
ディレクトリー間の移動も可能です。下は、「/LIB/WGET/」ディレクトリーに移動した時の表示です。表示は左から順に、ファイル名・更新日時・バイトサイズ・属性フラグです。
ファイル名をクリックすると、当該ファイルをダウンロードする事も可能です。この機能を使うと、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に上げました。