内容の正確さについては保障ができません。 参考にされる場合にはどうか自己責任で行ってください。 よろしくお願いします。
ネットワークにつながりWeb経由でプリント可能なプリンタです。 印刷データをHTTPのPOSTメソッドでプリンタに送るとその内容を印刷します。 この仕組によりネイティブコードで書かれたプラットフォーム依存のデバイスドライバ無しに印刷できます。 PC, iPhone, iPad等のブラウザが動作する様々なデバイスを用いて、ブラウザ内から印刷が簡単に出来るようになります。 プリンタハードウエアとしてはレシートプリンタを用い、ネットワークとの インタフェースにはLPCXpresso(LPC1768版)を用いました。
ネットワークにつながりWeb経由でプリント可能なプリンタです。 プリンタはHTTPのPOSTメソッドでデータを受け取るとその内容を印刷します。 この仕組によりネイティブコードで書かれたプラットフォーム依存のデバイスドライバ無しに印刷できます。 PC, iPhone, iPad等のブラウザが動作する様々なデバイスを用いて、ブラウザ内から印刷が簡単に出来るようになります。
プリンタハードウエアとしてはレシートプリンタを使いました。 最近では、携帯電話やタブレットなどの携帯端末が一番身近な計算機になりつつあります。 携帯端末を使用していても印刷したいという要求はあると思います(個人的にはある)。 現在のPC用のプリンタが携帯端末で使えればよいという考え方もありますが、 これらの端末からB5やA4の紙に印刷するというのは個人的にはイメージしにくいです。 ここで、レシート用紙は幅が携帯端末の横幅に近く、Webページのように縦の長さに制約が無く自由な場所で用紙をカットできます。 これらの点からレシート用紙が携帯端末用のプリンタ用紙に適しているように感じられたので、レシートプリンタを用いることにしました。
プリンタとして富士通コンポーネント社製のFTP-627USL410というユニットを使用しています。 この手のプリンタはメカの部分とインタフェース回路の部分が別売りもされていたりして分かりにくいにくいですが、 FTP-627USL410 はメカとインタフェース回路(FTP-627DSL601)がセットになっていて、ロールペーパを格納できるようなユニットになっています。 インタフェース回路はRS232-C準拠のインタフェースを持っていて、コマンドを送ると印刷したりペーパーカットできたりします。 日本語を印刷するのであれば漢字フォントのROMがついたインタフェース回路を選択したほうがよいです。 USBインタフェースもついていて、ドライバをインストールすることでWindowsで普通のモノクロプリンタのように使うこともできます。 RS-232CとUSBとの間でのインタフェースの切り替えはインタフェース回路上のDIPスイッチで行います(日本語のマニュアルには載っていなかった)。
画面左の基板上でWebサーバが動作しています。 Ethernet経由で来るHTTPのPOSTリクエストを受け取り、印刷のためのコマンドをRS-232Cインタフェースを通して プリンタに送ります。 安く手早く作るためにLPC1768版のLPCXpressoを使用しました。 Ethernet PHYチップまでLPCXpressoボードに載っているのでEthernetに繋げるのは簡単です。 ソフトの部分はFreeRTOSにTCP/IPプロトコルスタックuIPを組み合わせた構成になっています。 これは、FreeRTOS 7.0.1のデモ中に含まれているコード(Demo/CORTEX_LPC1768_GCC_RedSuite)をベースにしています。 開発環境はLPCXpressoの標準のCodeRed社のLPCXpresso3.6(紛らわしいですが、開発ソフトの名前もLPCXpressoです)を使用しました。
MCUであるLPC1768には64KBytesのSRAMが載っているのですが、メモリマップ上では32KBytesと32KBytesが分離していてフラットに使えないので いやらしいです(もちろん、分離しているのにはちゃんとした理由があるのですが...)。
FTP-627USL410は24V単一電源、LPCXpressoは3.3Vで動作するので、24VのACアダプタで電源供給しています。 データシートによるとプリンタユニットのメカ部分の消費電流は、プリントヘッドがピークで0.9A、モータが0.9A、カッターが1.1Aです。 カッターとプリントヘッドが同時に動作することは無いと仮定しても、ACアダプタの出力が最低2Aはないといけません。 ぎりぎりの性能ですが、マルツパーツ館で販売されていた24V 2.7AのACアダプタ(STD-2427PA)を使用しています。 LPCXpressoのための24Vから3.3Vへの変換は電圧差が大きく少し厄介なので出来合いのDC-DCコンバータのモジュールを使用しました。 お店にちょうど良いものが無かったので、所望のものに近いTDK-Lambda社のCC1R5-2405SF-Eを購入して使用しています。 このモジュールで24Vから5Vに落として、この5Vから3.3Vを生成しています。 今回使用したモジュールと同じシリーズにはCC1R5-2403SF-Eがあり、これを入手できれば24Vから直接3.3Vに変換できます。
Network Appliance3 から印刷出来るようにしてみました。 Network Appliance3の動くWebサーバと、今回製作したプリンタのWebサーバとが別なので、クロスドメインでHTTP POSTを投げる必要があります。 これをお行儀のあまり良くない方法で乗り越えないといけないのが難点です。
印刷後の用紙。プリンタのメカにペーパーカッターがついているので、ペーパーカットが出来ます。
メモをじゃんじゃん書いていって最後にカットとか、 twitterのつぶやきをリアルタイムに流し込むとか、 つぶやきを1つずつ印刷・カットするとかいろいろできるはずです。
ここでは印刷したいコンテンツをPOSTメソッドで送り込みますが、GETメソッドでコンテンツのURLなどのポインタを 送る方法でも良かったかもしれません。 このことと関係して、印刷のレンダリングをどこでやるかも検討の余地があります。 ブラウザ上でプリンタに流すコマンドを全て構成してからプリンタに送る方法もあると思います。
GETではなくPOSTで印刷内容を送るのは、 GETメソッドではパラメータをURLに埋め込むため、ブラウザで扱えるURLの最大長で印刷データの最大長が決まってしまうためです (参考: [IE] URL に使用可能な文字数は最大 2,083 文字)。
ここではレシートプリンタを使っていますが、 普通のA4用紙のプリンタを対象にするのであれば、LPRプロトコルに対応していて Postscriptプリンタのように制御方法が明らかになっているようなプリンタを用意して HTTPとLPRプロトコルの間でプロトコル変換するのが手っ取り早いのかもしれません。 ちゃんと検討していないのでできないかもしれませんが。
同様の機能を持つ製品が最近になって出ていました。
Web経由でプリント可能なプリンタを設計しました。 印刷データをHTTPのPOSTメソッドでプリンタに送るとその内容を印刷します。 この仕組によりネイティブコードで書かれたプラットフォーム依存のデバイスドライバ無しで、 ブラウザ内から印刷が簡単にできるようになりました。 プリンタ用紙として携帯端末からの利用に適していると思われるレシート用紙を使いました。 これまで開発してきているNetwork Appliance 3に印刷機能を追加し、 印刷ができることを確認しました。 簡単なメモを印刷したり、備忘録を印刷するなどの実用的な使い方から 実験的な使い方までさまざまな応用が可能です。
(2011/9/6 初版)
(2011/9/11 写真(ハードウエア構成、Network Appliance3からの印刷、プリンタと印刷後の用紙)と説明の追加)
(2011/10/18 誤字など訂正, 関連する作例等を記述)