« 栗 | メイン | 駅長猫「たま」が写真集に。 »

Webサーバを作るの巻 [WWWpic2]

何ヶ月か前にDIGI-COMP 1なる紙製コンピュータが話題になりましたよね。
回帰ブームっぽいので、WWWpic2なる小型のWebサーバを制作してみました。組み立てただけですけどね(^-^;;

Webサーバといってもハードから作ります。SLIP(Serial IP; シリアル回線インターネットプロトコル)でネットワーク接続しますので、真似してみたい方はシリアルポート(COMポート)というレガシーなデバイスを備えたPCも必要です。新し目の小型PCには備えていなかったり、USBシリアルだと電圧が足りない場合があります。
PCとの接続には、インストール不要の1CD/DVD Linux「KNOPPIX」を使用してご紹介しています。

&bnsp;
○パーツを揃えよう
電子パーツについては、日本で手にいれやすい汎用的なものに置き換えました。デジタル回路ですので、抵抗値やコンデンサ容量など多少違くても大丈夫です。

パーツ型番数量価格目安備考
汎用基盤何でも2/5欠け@80×0.4=32円1枚80円
PICマイコンPIC 16F84A-201個300円秋月さん、千石さん、などで入手可
EEPROM 不要 現バージョンでは未使用
18pin ICソケット 1個20円PIC用
8pin ICソケット 不要 EEPROM用
セラロック10MHzのもの1個40円※クリスタルの場合は別途コンデンサも忘れずに
3端子レギュレータ78L05など5V用1個20円5個100円
NPN トランジスタ2SC1815-GR3個@5×2=10円20個100円
シリコンダイオード1S15883個@2×3=6円1S2076A / 1N4148など 50本100円
電解コンデンサ10uF程度2個@10×2=20円 
セラミックコンデンサ33pF程度2個 ※発振子をクリスタルにした場合
カーボン抵抗10KΩ程度2個@1.5×3=4.5円100本150円
カーボン抵抗4.7KΩ程度1個@1.5×1=3円100本150円
カーボン抵抗2.2KΩ程度2個@1.5×2=6円100本150円
Dサブ 9ピン メス 1個50円 
合計507円初回袋買いだと1,260円
※秋月さんで全て揃うと思います。価格はご参考程度に。
※公式サイトの注意書きに、「トランジスタはHFE>50」とあります。Oランクだとギリギリかもしれませんので、Yランク以上が良いと思います(未確認)。

 
○組み立てよう
回路図のとおりにハンダ付けします。WWWpic2はGPLとして公開されていますので、日本語訳付きで載せておきます。

 
○PICに書き込もう
とりあえず動かすには、HEXファイルをそのまま書き込んでください。公式サイトで配布されています。出力されるHTMLはコード中に埋め込まれていますので、適宜変更またはMPLABでリビルドしてください。
また、Port Bに繋いだペリフェラルの状態を、HTML経由で読み出せるようになっていますので、色々と遊べそうです。詳しい事は、ソースを眺めてみてください。

ちなみに、PICライターはお持ちでなくても、1,000円程度で作れます!
◆関連リンク
シリアルポート接続PICライターの製作 - ROCのホームぺージ
※シリアル接続、ノートやUSBシリアルなどでは電圧不足に注意
PIC Writer for Windows - Ishijima's World
※パラレル接続、対応OS注意

 
○PCに接続しよう
・WindowsPCで通信テスト(通電テスト)。もちろんMACでもおk
制作したWWWpic2を、PCのシリアルポートに接続します。Windows環境でも、回路チェックは可能です。TeraTermなどで19200bps・N81で接続して、何か文字を送れば、「OK」という文字を返してきます。

・LinuxPCに繋げてネットワーキング
良さそうでしたら、KNOPPIXから起動してください。COMポートがttyS0としてコマンド例を示します。

knoppix@Knoppix:~$ su
root@Knoppix:/home/knoppix# slattach -d -p slip -s 19200 ttyS0 &
[1] 3385
root@Knoppix:/home/knoppix# slattach: tty_open: looking for lock
slattach: tty_open: trying to open /dev/ttyS0
slattach: tty_open: /dev/ttyS0 (fd=3) slattach: tty_set_speed: 19200
slattach: tty_set_databits: 8
slattach: tty_set_stopbits: 1
slattach: tty_set_parity: N
slip started on ttyS0 interface sl0

root@Knoppix:/home/knoppix# ifconfig sl0 192.168.2.1
root@Knoppix:/home/knoppix# ifconfig sl0 dstaddr 192.168.2.2
root@Knoppix:/home/knoppix# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.2.2 0.0.0.0 255.255.255.255 UH 0 0 0 sl0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
root@Knoppix:/home/knoppix# telnet 192.168.2.2 80
Trying 192.168.2.2...
Connected to 192.168.2.2.
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.0 200

<a href=a>PortB control</a><hr><a href=http://kyllikki.fluff.org/hardware/>wwwpic2 homepConn
ection closed by foreign host.
root@Knoppix:/home/knoppix#
ね、簡単でしょ? (Bob Ross風に)
このマシンからは、ブラウザで http://192.168.2.2/ にアクセスできます。

※コマンド例中のIPアドレスや通信速度は、PIC側はIP:192.168.2.2、19200bps・パリティ無し・8bit・ストップ1bit と決め打ちになっているため固定です。これらの値を変更するには、ソース修正が必要です。

○ネットワークしよう
家庭内LANを組んでいる環境では、これでWWWpic2も立派なネットワークの一員になりました。他のマシンに適切にルート設定をしてあげれば、そのマシンからもアクセスできます。LinuxマシンのIPを192.168.1.5とすれば、ネットワーク構成はこんな感じでしょうか。

例えば、Windows2000/XP/Vistaで192.168.2.0/255.255.255.0のネットワークへの経路を追加するのであれば

route ADD 192.168.2.0 MASK 255.255.255.0  192.168.1.5 METRIC 3 IF 1
みたいにしてください。
ブロードバンドルータにルート追加と併せてIPマスカレードの設定もすれば、当然ですが世界中からアクセス可能です。

○商標など
WWWpic2は、Denis Petrov氏のWWWpicをベースに、Vincent Sanders氏が手を加えGPLとして公開されています。WindowsはMicrosoftの、PICはMicrochipの、セラロックは村田製作所の、その他商品名は一般に各社の商標または登録商標です。