Welcome to telecotele.com » Projects

ESC/POSによるデバイスの操作

EPSON製レシートプリンタ、東芝テック製レシートプリンタ、EPSON製カスタマディスプレイをESC/POSで操作します。

UPDATE

tags: store escpos

ESC/POSによるデバイスの操作のカバー画像

この記事は下記で寄稿した記事を2024年に再構成したものです。

はじめに

レシートプリンタとカスタマディスプレイを操作してみます。 操作に利用したコードは下記に残しています。

SIGCOWW/saty
https://github.com/SIGCOWW/saty

レシートプリンタ「EPSON TM-T90」の操作

レシートプリンタを操作しましょう。

そもそもレシートプリンタとは?レシートを印刷する機器です。 印刷方式としてはインクジェット方式も存在するようですが、ほとんどは感熱紙を利用するサーマルプリンタです。 インターフェースは機種にもよりますが、プリンタらしくIEEE 1284(プリンタポート)に加え、RS-232CやUSB、Ethernetや無線LAN、場合によってはBluetoothも備えています。 またレシートの紙幅は、普段コンビニやスーパーで見かける58mm幅と、飲食店の伝票で見かける80mm幅があり1、プリンタも各紙幅に対するモデルが用意されています。 (紙幅を調整したい場合は用紙セットの際にスペーサをかますことで対応可能な場合もあるようです。)

今回は、次の図に示す「EPSON TM-T90」を操作してみます。

EPSON TM-T90 EPSON TM-T90

これはEthernetを備え58mm幅のレシート用紙に対応したプリンタです。 2015年夏、ヤフオクにて4000円ほどで入手しました。 TCP/IPプロトコルスタックが載っており、設定用のWeb UIも有しています。 レシートの印刷は決められたTCPポートへデータを送ることで行います。

このEPSON製プリンタでレシートを印刷する際は、次に示す5つの方法が利用できます。 (※2017年時点。「海外公式サイト」はepson-bizのことを指していましたが、久しぶりに確認すると2024年6月で終了予定とのこと…。)

  • EPSON Advanced Printer Driver
    • PCに導入する、いわゆる「プリンタのドライバ」です。インストール後は一般的なプリンタと同様に印刷できます。設定次第では、プリンタの内蔵フォントを利用することもできます。国内サイトではWindows向けのみの提供ですが、海外の公式サイトではMacやLinuxに対応したドライバも提供されているようです。
  • EPSON OPOS ADK
    • POSシステムの標準化を目指す「OPOS技術協議会」の仕様に従ったアプリケーション開発キットです。正直よくわかりません。
  • ePOS-Device XML / ePOS-Print XML
    • XMLで印刷データを送ります。残念ながらTM-T90は非対応(対応プリンタを親機にしそれ経由の操作可能)です。ePOS-Device XMLでは、Socket通信でXMLをやりとりします。またePOS-Print XMLでは、Socketの代わりにHTTPを用います。仕様は「EPSONの機器を用いて商用製品を開発する会員」でなければ入手できないはずですが、先ほどの海外公式サイトでは非会員でも入手できます。
  • ePOS SDK for JavaScript / iOS / Android / Windows
    • ePOS-Print XMLでは、HTTPでXMLをやりとりしていました。これはまさにXMLHttpRequestで、Level2を使えばサーバ側つまりプリンタの実装がどうであれ、リクエストは送りつけられる(ただしプログラム内からレスポンスは参照できない可能性はある)です。 これを使えばブラウザで完結するPOSシステムが実現できる、と考えていましたが、すでにJavaScriptによるSDKが提供されているそうです。他にも、iOSやAndroid、Windowsに対応したSDKが提供されています。ただ、これらを利用できるのは会員のみです。しかし、やはり海外公式サイトであれば非会員でも利用できます。
  • ESC/POS
    • バイナリで印刷データを送ります。ESC/POSはEPSONが開発した制御コードですが、レシートプリンタのデファクトスタンダードとなり、他社製の互換プリンタも多く存在します。ただ、案の定仕様は会員のみ公開で、海外公式サイトでも一部しか閲覧できません。しかし、互換プリンタの仕様は公開されていることも多く、これを利用してか「python-escpos」などライブラリも充実しています。

この他、JavaPOSという30億のデバイスで走りそうな規格に向けたSDKも海外では提供されていますが、国内では提供されていません。 これらの方法のうち、今回は扱いがシンプルなESC/POSを利用します。 次からは、レシートの印刷について述べます。

ESC/POSによる印字

前述のとおり、ESC/POSではライブラリが充実しており、これを用いればレシートの印刷を簡単に実現できます。 ただ、こうしたライブラリの多くは海外で作成されています。 日本語を印字する場合、プリンタ側の文字コードをJISやShift_JISに設定する必要がありますが、対応しているとは思えません2

そのため、次のような前処理を自前で実装する必要があります。

  1. 国際文字セットを「日本」へ (0x1B 0x52 0x08)
  2. 拡張ASCIIテーブルを「カタカナ」へ (0x1B 0x74 0x01)
  3. 文字コードを「Shift_JIS」へ (0x1C 0x43 0x01)

1.により、バックスラッシュが円マークとして印字されます。 また2.によって、ANK文字コード(ASCIIコードに半角カタカナを追加した、いわゆる「半角文字」)が利用できます。 こうした処理を行った後に、Shift_JISで符号化された文字列を送信することで日本語が印字されます。 なお、改行は<LF> (\n)の箇所で、1行に入り切らない場合は自動的に改行されます。

また、ライブラリによっては倍幅印字など拡大印字コマンドの発行に対応していることがあります。 拡大印字は、レシートの「合計」や「領収書」で目にしますが、このコマンドが「半角文字(ANK文字)向け」と「全角向け」で分かれています。 ライブラリでは全角文字向けの処理は実装されていないこともあり、その場合は自前で専用コマンドを送りましょう。 例として、倍幅で漢字を印字する場合は「0x1C 0x21 0x04」と送信し、印字後に「0x1C 0x21 0x00」で解除コマンドを送信する必要があります。 さらに、文字の左揃え「0x1B 0x61 0x00」・中央揃え「0x1B 0x61 0x01」・右揃え「0x1B 0x61 0x02」や、用紙カット「0x1D 0x56 0x00」はライブラリに任せられますが、これらでレシートっぽいレイアウトが構成できます。

画像出力

次に、画像について述べます。 画像も多くのライブラリでサポートされていますが、その関数やメソッドとして「ビットマップイメージ向け」と「ラスタイメージ向け」が用意されていることでしょう。 ベクタイメージとかそういう話では無い…?ようで紛らわしいのですが、機能的には前者が「予め画像を登録して印字コマンドで出力」する一方、後者は「そのまま出力」となります。 前者は、ロゴ画像など繰り返し利用する画像対して適用すると通信量を削減できそうですが、今回はシンプルなラスタイメージについてのみ述べます。

画像を印刷するには、以下のデータを順番に送ります。

  1. ヘッダとなる「0x1D 0x76 0x30 0x00
  2. 画像の横幅wと高さhを表す「wL wH hL hH
    • どちらも16bitで表現し、上位バイトHと下位バイトLに分けます
  3. 画素データ

画素データは次の図のように画像横軸を優先して構成します。

ラスタイメージ画素の送信順序 ラスタイメージ画素の送信順序

なお、このときの画像は2値で表現されており、階調の表現にはディザ法や誤差拡散法などに従った処理を行います。 さらに、2値であるがゆえに1bitで1画素を表現しているため、画像の横幅は8で割る必要があります。 こうしたデータを、w×hバイト送信することで、画像が印字されます。

印刷の様子

以上を踏まえて操作してみると、次の図のようなレシートが得られます。

EPSON TM-T90で印刷したレシートの例 EPSON TM-T90で印刷したレシートの例

この印刷に利用した実際のコードは下記のあたりです。 node-escposライブラリを利用しています。

https://github.com/SIGCOWW/saty/blob/master/lib/printer.js

レシートプリンタ「東芝テック B-EP2DL」の操作

はい、以上でレシートを印刷することが出来ましたね。 なので満足、おしマイケル…と思ったのですが、ここで各社プリンタで印刷したレシートを比べたくなりました。

比較結果は次の図のとおりですが、EPSONは「小」や「1」、円マークのフォントがちょっと違うような…TEC(東芝テック)や寺岡精工のフォント3が一番キレイだと思いませんか?

各社レシート比較 各社レシート比較(“EPSON”のみ自前、他はお店で貰ったもの)

ということで、東芝テックか寺岡精工のプリンタも扱ってみたくなりました。 ここでは、入手がしやすかった東芝テック製のモバイルプリンタ「B-EP2DL」(次図)を導入し操作を試します。

東芝テック B-EP2DL 東芝テック B-EP2DL

このプリンタにも制御コードにESC/POSを使うモードが備わっています。 しかし、完全準拠というわけではないらしく一部で利用できないコマンドがありました。 ここでは、利用可能なコマンドのみを使った場合での文字および画像出力について述べます。

初期設定

その前に設定が必要です。 まず「FEED」を押しながら電源を入れて、メンテナンスモードにアクセスしましょう。 この状態で操作するか、「ラベルプリンタ 設定ツール」で設定します。 その設定項目は次のとおりです。

  • 文字コード
    • ここでは「PC850」にします。PCではなくCP (Code Page) ではないのかと思いますが、そういうものなのでしょう。「UTF-8」という魅力的な設定値もありますが、これを選ぶと半角カタカナが印字できなくなります。どうやらこの文字コードは、1バイト文字のみが対象のようです。
  • 印刷コマンドモード
    • 「ESC/POS」にします。選択肢に「TPCL (Tec Printer Control Language)」も出るのですが仕様が分からないためどう仕様もありません。

印字

では文字を出しましょう。 とはいえ、既にEPSON製プリンタで述べた方法とあまり変わりません。 詳細はそちらを見てもらうとして、EPSONと同様にこの流れで印字の準備をします。

  1. 国際文字セットを「日本」へ (0x1B 0x52 0x08)
  2. 拡張ASCIIテーブルを「カタカナ」へ (0x1B 0x74 0x01)

このあとにマルチバイト文字をShift_JISで印字を…とするのですが、このプリンタではShift_JISを受け付けてくれません。 JISコードは通るようなので「0x1C 0x43 0x00」を送って文字コードをJISに設定してみますが、これはデフォルト値らしく別に設定してもいいし、しなくてもいいです。 なお、ここで述べる「JISコード」とは、ISO-2022-JPのことを指します。 よって、ISO-2022-JPで符号化された文字列を送りつければ印字できます。

ISO-2022-JPでは、一部がASCII領域と重なっているため専用のエスケープシーケンスが必要です。 ESC/POSでのエスケープシーケンスは、全角文字(漢字、ひらがな、カタカナ、記号、外字含む)の開始に「0x1C 0x26」を付け、終了に「0x1C 0x2E」を付けると決められています。 iconvなどの文字コード変換ツールを用いると親切にエスケープシーケンスを付けてくれることがありますが、これはESC/POSのエスケープシーケンスではないため、自前でエスケープシーケンスの処理を行う必要があります。 または、Shift_JISは、ISO-2022-JPも基とする文字集合を機械的にシフトしているため、一度Shift_JISに変換してアンシフト、自前でエスケープシーケンスを付けるのも一つの手です。

また、本来のISO-2022-JPには半角カタカナが含まれていないものの、このプリンタではShift_JISと同様の「JIS8」方式で印字できます。 このような処理を実装すると、次の図のような出力が得られます。

美しい「小」の印字結果 美しい「小」の印字結果

この印刷に利用した実際のコードは下記のあたりです。

https://github.com/SIGCOWW/saty/blob/master/lib/tecprinter.js

画像出力

次は画像の出力です。 これもEPSON製プリンタで述べた方法とだいたい同じです。 ただ、EPSON製プリンタで使えていた画像出力コマンドのすべてが使えるというわけではありません。

利用可能であると確認できたコマンドは「0x1B 0x2A d wL wH DATA」のみです。 このコマンドでは、密度d(1バイト)と、画像横幅w(2バイト・リトルエンディアン)、画素データを送ることで1行分4出力できます。 ラスタスキャンのように、出力と改行を縦軸分繰り返すことで画像全体が出力されます。

画像を出力する際は、改行しても空白が出ないようにすることが必要です。 たとえば、ESC/POSを扱うnode製ライブラリnode-escposでは、改行量を0にして処理しています。 しかし、このプリンタにおいてそうした設定は「何も出ない」ことを意味します。 そこで、手動で改行量のパラメータを変化させ、空白の出ない設定値を探しました。 その結果、「改行量を0x30×基準量 (0x1B 0x33 0x30)」とすると都合がよく、これを設定しています。 ただ、これがすべてのプリンタで最適かと言われると自信がなく、参考程度に留めてほしいと思います。 ともかく、これらの処理を実装すると、次の図のとおりとなりました。

画像の印字結果 画像の印字結果

(印字のところで示した再掲ですが)この印刷に利用した実際のコードは下記のあたりです。

https://github.com/SIGCOWW/saty/blob/master/lib/tecprinter.js

カスタマディスプレイ「EPSON DM-D500」の操作

他にも、レジ周りの機器を操作したくないですか? ということで、カスタマディスプレイも操作しましょう。

あまり馴染みのない名前かも知れませんが、レジで客向けに「お会計」などを示す表示器です。 東芝テックでは「客面表示器」、その他「ポールディスプレイ」や「ラインディスプレイ」とも呼ばれます。

今回利用するのは次図に示す「EPSON DM-D500」で、RS-232C5によって制御できます。

EPSON DM-D500 EPSON DM-D500

DM-D110のような下位モデルでは英数カタカナのみ表示のところ、このモデルでは漢字や画像も表示できます。

ただ、ヤフオクでも滅多に出品されません。 そこで、意を決し次図のようにDM-D500が含まれるジャンクのPOSレジ一式を1万5000円ほどで購入しました。

小さな部屋に、POSレジのようなものがみなぎる。 小さな部屋に、POSレジのようなものがみなぎる。

こうして入手したDM-D500ですが、到着したまさにその日から1500円で単体の出品が大量に行われたという悲しい話があります。 購入したPOSレジは関東の店舗で使われていたということは分かりましたが、活用法が思い浮かばないため放置しています。(※執筆当時。この筐体は引っ越しを機にアレされました)

このカスタマディスプレイの制御には、EPSONのレシートプリンタと同様「EPSON Advanced Printer Driver」や「EPSON OPOS ADK」が利用できます。 ESC/POSでの制御にも対応しているとのことですが、EPSON TM-T90と同じコマンドを送信しても上手くいきません。 DM-D500の仕様はEPSON会員のみ公開で、レシートプリンタの際に活躍したEPSONの海外公式サイトでも非公開です。

ところで、下位モデルのDM-D110互換モードを実装する他社製カスタマディスプレイ 「テクノベインズ VFD2002E」や「ビジコム BC-VF3100U」などのドキュメントでは、レシートプリンタのESC/POSには定義されていない「0x1F」から始まるコマンドだらけです。 また、このカスタマディスプレイには、VFD(蛍光表示管)が採用されています。 これに関連し、VFD製造大手「ノリタケ伊勢電子」が提供する表示モジュールのドキュメントを見ると、こちらも「0x1F」から始まるコマンドだらけです。 しかも、「GU256X64E-3xxxBモジュール」の表示領域とドットピッチがDM-D500の仕様と一致します。 これは何か関連がありそうな…? このモジュールの仕様を基に実装すればDM-D500の制御が実現できるのでは?と考えました。

なお、ノリタケ伊勢電子と同じくVFD製造の大手である「双葉電子」も調べてみました。 すると、応用例のページに東芝テック製と思われるPOSレジが見えます。 東芝テックの客面表示器における仕様は公開されていませんが、双葉電子のVFDモジュールは数年前まで秋月電子にて取り扱われていたらしく、一部の仕様を知ることができます。 何か手がかりになるかもしれません。

DM-D500の仕様

DM-D500の仕様をVFDモジュールを基にして確認します。 当初はモジュールのコマンドを流用すれば制御ができると考えていましたが、そんなうまくはいかずほとんどのコマンドが通りませんでした。

特に、日本語表示が行えず大変困りましたがDM-D500に関連すると思われる特許(その16、その27)を見つけました。 これらの特許では、発明であるカスタマディスプレイ側の受信処理についてはもちろん、「<LF>で改行」「0x20から0x7EでASCII印字」などコマンドも一部が例として示されています。 業としてこのコマンドを用いて制御しても発明の実施にあたらないと思いますが、受信処理を実装したDM-D500互換のカスタマディスプレイやエミュレータの製造・販売はどうなんでしょうか…。 これもあってか、2017年4月1日現在国内で製造・販売されているDM-D500互換カスタマディスプレイは見つけられませんでした。 しかし、海外では特許が取得されていないのか、また特許の解釈が違うのかPOSレジやキオスク端末、ATMといった機器を手がけるドイツのWincor Nixdorf社では、DM-D500と一部互換性を持つBA64という製品が用意されています。 現在は販売されていないようですが、ドキュメントにはDM-D500のコマンドも記載されていました。

しかし、このような情報を手がかりにしても、まだ日本語表示の方法がわかりません。 ただ、関連が強いと考えられる「文字装飾コマンド」は「0x1F 0x28 0x47」で構成される「ヘッダ」、後続のバイト長を2バイトで表現した「パラメータ長」、1バイトの「機能番号」、任意バイト長の「データ」で構成されることがわかりました。 機能番号とデータ、およびパラメータ長も不明ですが、データについてはレシートプリンタのESC/POSの仕様からShift_JISが有効となるよう「0x01」だと推察されます。 であれば、パラメータ長が確定し、機能番号もたった1バイト、つまり2^8 = 256通りしかありません。 そこで、次のようなPythonスクリプトで探索し挙動を確認しました。

import serial

s = serial.Serial('/dev/serial0', 9600)
s.write('\x1f\x03')

for i in range(256):
    s.write('\x0C')
    s.write('\x1f\x28\x47\x02\x00' + chr(i) + '\x01')
    s.write('{0:02x}'.format(i) + ' : \x82\xA0')
    raw_input()

DM-D500の制御

こうして得られたコマンドを次にまとめます。

  • 国際文字セットの指定
    • レシートプリンタのESC/POSコマンドと同じく「0x1B 0x52 0x08」で「日本」になります。
  • 拡張ASCIIテーブルの指定
    • こちらも同様に「0x1B 0x74 0x01」で「カタカタ」になります。
  • フォントの変更
    • 0x1F 0x28 0x47 0x02 0x00 0x40 n」でn=0ならば8x16ドット、n=1で5x7ドットになります。
  • 日本語の表示
    • 0x1F 0x28 0x47 0x02 0x00 0x61 0x01」でShift_JISが有効になります。苦労して見つけた割に普通でした。なお、機能番号を0x60にすると、JISコードの漢字モードに移行するようです。
  • スクロール設定
    • 0x1F 0x03」を設定すると行に文字があふれたとき、横スクロールが有効になります。0x1F 0x01で無効になります。ただ、「スクロール」というよりは文字が一瞬で流れていくため「押し出し」という表現が適切です。VFDモジュールでは速度の調整が可能ですが、DM-D500で同様のコマンドは見つけられませんでした。
  • 拡大表示
    • 0x1F 0x28 0x47 0x03 0x00 0x20 x y」で右にx倍、上にy倍して表示されます。
  • 強調表示
    • 0x1F 0x28 0x47 0x02 0x00 0x21 m」のn=1で文字が太字のようになります。 n=0で解除です。
  • 色反転
    • 0x1F 0x72 n」のn=1で、ドットの消灯と点滅が反転、つまり文字色と背景色が反転します。n=0で解除です。また、「0x1F 0x28 0x47 0x02 0x00 0x22 n」も同様です。違いはわかりませんでした。
  • 点滅時間の指定
    • 0x1F 0x45 n」により、n×50msecの間隔で画面が点滅します。n=0とすると、点滅無効で点灯となります。
  • カーソル位置の移動
    • 文字を表示するカーソル位置は、<LF>で1行真下へ、<CR>で行頭に移動します。
  • ウィンドウの利用
    • (x,y)から幅w、高さhのウィンドウと呼ばれる仮想的な表示領域を「0x1F 0x28 0x44 0x0D 0x00 0x01 n 0x41 0x01 0x02 xL xH yL yH wL wH hL hH」で定義できます。nはウィンドウ番号で1から4までです。ここで定義したウィンドウを「0x1F 0x28 0x44 0x03 0x00 0x04 n 0x01」により選択すると、以降の命令はこのウィンドウを基準に行われます。ウィンドウ番号0を選択すると、全体のウィンドウに戻ります。
  • 初期化 「0x0C」で画面を初期化できます。また、「0x1B 0x40」で画面と設定値を初期化します。

また、画像についても述べます。 カスタマディスプレイでもレシートプリンタの「ビットマップイメージ」「ラスタイメージ」と似たコマンドが用意されていますが、ここでは後者についてのみ述べます。

画像の表示には、以下のデータを順番に送ります。

  1. ヘッダとなる「0x1F 0x28 0x46
  2. 2バイトのパラメータ長p「pL pH
    • pは 3. からのバイト数を表します
  3. 機能番号「0x04
  4. 定数「0x30
  5. 表示位置(x,y)「x y
  6. 画像横幅wと高さh「wL wH hL hH
  7. 画素データ

画素データは、EPSON製レシートプリンタの場合と同様に画像横軸を優先して構成します。 ただ、画像横幅を8で割る必要はありません。

また、機能番号を「0x05」とすると、次の図のように画像縦軸を優先する方式に変わります。

縦軸優先の送信順序 縦軸優先の送信順序

これは、元々VFDモジュールに備わっている表示方法です。 ただ、VFDモジュール側の仕様では画像縦軸を8で割る必要があるとされますが、DM-D500の場合は不要という違いがあります。

表示の様子

以上を踏まえて操作してみると、次の図のような出力が得られます。

EPSON DM-D500の表示 EPSON DM-D500の表示

表示に利用した実際のコードは下記のあたりです。

https://github.com/SIGCOWW/saty/blob/master/lib/display.js
https://github.com/SIGCOWW/nichi/blob/master/lib/display.js

文字スクロール機能の実装

文字のスクロールもさせましょう。 単純に実装するとこうなります。

  1. カスタマディスプレイのモードを「水平スクロール」へ (0x1F 0x03)
    • 画面の幅に対して収まりきらない多くの文字を受け取ったとき、改行せずに左に押し出す挙動になる
  2. ある文字列の先頭1文字を送信する
  3. 一定時間待機する
  4. 文字列を循環させる(先頭だった文字を末尾にし、2文字目が新たな先頭文字となる)
  5. 2.に戻る

一定時間待機するのはカスタマディスプレイを操作する機器側です。 いや、それはちょっと…カスタマディスプレイでなんとかしてほしいと思いませんか?

ところで、DM-D500にはセルフテストの機能があり、全点灯や文字描画のデモ表示を確認できます。 その中で、文字がスクロール表示される場面があります。 このことから、実は機器側にスクロール機能があるのではないか、と考えました。 そこで今回は、いまより簡単なスクロール実現のため、これについて調べます。

EPSON OPOS ADK

まず、最初に調べたのは「EPSON OPOS ADK」です。 これを利用すると、OPOS技術協議会発行が策定したAPIでEPSON製POS周辺機器が制御できます。 APIの中には、MarqueeTypeMarqueeFormatというオプションを持つDisplayTextがありました。 これを見れば、機器側にどんなコマンドを送ればスクロールが実現できるのか判明しそうです。 そこで、「EPSON OPOS ADK for .NET」を海外公式サイトで入手し、実装を調べました。 しかし、残念ながらこれも先ほどの実装のように操作機器側でなんとかスクロールっぽく見せているようです。

マクロ機能

次に考えたのは「マクロ機能」の利用です。 この機能を用いると簡単な繰り返し処理を定義して実行できます。 sleepのような処理はできませんが、文字の描画においてその描画間隔を20ms単位で指定できます。 これを利用すればスクロール表示に必要な「一定時間待機」が簡単に実現できると考えました。

マクロの定義は1個以上の任意コマンドを「0x1F 0x3A」で囲うことで行なえます。 わざわざ述べるほどでもないと思いますが、具体的には次の流れで定義できます。

  1. 0x1F 0x3A を送る
  2. 1個以上の任意コマンドを送る
  3. 0x1F 0x3A を送る

もちろん任意コマンドは文字描画に関するコマンドでも構いません。 そして、定義したマクロを実行するには「0x1F 0x5E t1 t2」を送ります。 t1とt2は各1バイト、t1×20[ms]間隔で文字が描画され、t2×50[ms]間隔でマクロが繰り返し実行されます。 実行中に任意のコマンドを送ると、その実行が中断します。

マクロで文字描画コマンドを定義すれば、t1により一定時間待機が不要に、また文字列の循環も不要となり、簡単にスクロール処理が実現できます。

おわりに

レシートプリンタとカスタマディスプレイを操作できてよかったです。

Footnotes

  1. ほか38mm幅や114mm幅もあるようですが…あまり見かけた記憶がありません。

  2. 以前、python-escposに日本語印刷を追加したことがあります。しかし、PRを送ろうと思って放置した結果、もうmasterでは動かなくなってしまいました。

  3. というか、東芝テックと寺岡精工のフォントは同じような…?

  4. 「1行分==縦方向1ドット分」…というわけではなく縦のドットも複数まとめて送ります

  5. ただしコネクタはルータやスイッチのコンソールを彷彿とさせるRJ-45です。台座も買えばD-sub 25pinコネクタで接続できます。

  6. セイコーエプソン株式会社, “POS用カスタマディスプレイ装置及びその初期設定方法”, 特許第3978561号.

  7. セイコーエプソン株式会社, “カスタマディスプレイ装置”, 特許第3978562号.