顧客ディスプレイ用に通貨記号をプログラムします

記事「 Automating a Store」または「How to Compete with Supermarkets」の著者であるSquierのように、フリーソフトウェアを使用してストアで自動化を行う人に、少しのガイダンスを提供します。 説明のための例として、顧客のディスプレイをRaspberry Piに接続して、販売中のその後の引き出しのために通貨記号をロードする方法を説明します。





接続


ドライバーが必要なWindowsとは異なり、Linuxではすべてがシンプルです.USBインターフェースを備えたディスプレイがある場合は、Raspberry Piに接続するだけで、新しいデバイスは/dev/ttyUSB0介して利用可能になります。 この場合、顧客のディスプレイはスレーブとして機能し、ディスプレイ自体のコントローラーにプログラムされた制御プロトコルを使用して、ディスプレイ画面上の情報を制御および表示します。 顧客のディスプレイを制御するための通信プロトコルはいくつかありますが、事実上、それらはすべてエプソンのESC / POSコマンド形式に基づいています。

開始するには、 ESC @コマンドでメモリとディスプレイ画面をクリアして、顧客のディスプレイを初期化します。
 $ echo -n -e \\x1B\\x40 > /dev/ttyUSB0 

そして標準チェック:
 $ echo -n -e Hello, world!\\n > /dev/ttyUSB0 

すべてが正しく行われると、行が表示されます。

ディスプレイ


通常20文字ずつの2行を含むVFDまたはLCDパネルは、顧客のディスプレイを示すために使用されます。 各文字は、表示モデルに応じて、5 * 7〜8 * 8ポイントのマトリックスで構成されます。 この例では、水平方向に5ドット、垂直方向に7ドットの文字サイズのディスプレイが使用されます。

文字はディスプレイのROMにエンコードされ、0x20〜0xFFバイトの範囲で出力に使用できます。 また、範囲が0x20から0x7Fの場合、これは標準のANSIコードページであり、0x80から0xFFの範囲は追加のコードページ、たとえばキリル文字に割り当てられます。 コードページを切り替えるには、 ESC tnコマンドを使用しますnはコードページ番号です。 例:
 $ echo -n -e \\x1B\\x74\\x07 > /dev/ttyUSB0 $ echo -n -e \\x87\\xA4\\xE0\\xA0\\xA2\\xE1\\xE2\\xA2\\xE3\\xA9\\x2C\\x20\\x95\\xA0\\xA1\\xE0\\x21\\n > /dev/ttyUSB0 



描画


すべてのキャラクターがすでにディスプレイにプログラムされているのは良いことですが、中国でディスプレイを購入した場合、ROMが完全に象形文字でいっぱいになり、キリル文字のアルファベットが残っていないという事実に対処する必要が非常に多くあります。 次に、特別なコマンドESC & snm [a (p1..pa)]*mnを使用して、RAMディスプレイに不足している文字をロードできます。 このコマンドは、通貨記号をメモリにロードして、販売時に表示するのにも適しています。 ESC &文字プログラミングコマンドには、2つの部分に分割できる引数が含まれています。最初の部分は定数で、2番目の部分は変数です。

定数部分は3つの引数sn 、およびmで構成されます。ここで、 sはマトリックス文字の行のバイト数です。この例では、値は1です。 nは、最初の文字をプログラミングするためのコードページのスペースのバイトです。 mは最後の文字をプログラムするためのスペースのバイトであり、1文字がプログラムされている場合、 n=mです。

変数部分はブロックa p1...paで構成され、ブロックの数はプログラム可能な文字の数に依存します。 各ブロックはaの値で始まり、これはシンボルマトリックス内の垂直列の数です。この例では1〜5の範囲になります。aの値の後、 p1p2p3p4p5シンボルのマトリックスの列。最上位ビットはダイオードの最上行、最下位ビットは最下部です。

今年、ロシアルーブルのシンボル(₽、コード20BD)がユニコードに正式に含まれましたが、5年前、1993年11月から私の母国であるカザフスタンテンゲのシンボル(₸、コード20B8)が採用されました。 それでプログラミングを始めましょう。 テンジシンボルを5 * 8ビット単位のマトリックスの形式で表す場合、下図に示すようになります。 一番上の行は上位8ビットで補完されますが、この例では表示されません。

その結果、ドル記号(ディスプレイの記号テーブルのコード0x26)を同じコードのテンゲ記号に置き換えるには、次の形式のESC / POSコマンドが必要です。
 $ echo -n -e \\x1b\\x26\\x01\\x24\\x24\\x05\\x50\\x50\\x5f\\x50\\x50 > /dev/ttyUSB0 

ESC % nコマンドを使用して、読み込まれた文字をオンにします。値n 、読み込まれた文字が含まれているかどうかに応じて1または0です。
 $ echo -n -e \\x1b\\x25\\x01 > /dev/ttyUSB0 

作業を確認します。
 $ echo -n -e 1500$ > /dev/ttyUSB0 

画面上の結果:


プログラミング


これで、接続時にキリル文字の初期化とテンジシンボルの読み込みを自動化することができます。 これを行うには、顧客のディスプレイをRaspberry Piに接続するときに、 udevのルールを設定して、 udevのbashスクリプトを自動的に実行する必要があります。 udevadmチームudevadm 、ディスプレイのベンダーコードとモデルを確認します。
 $ udevadm info -q all -n /dev/ttyUSB0 | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*' 

 E: ID_MODEL_ID=2303 E: ID_VENDOR_ID=067b 

90-init-vfd-display.rulesルールを作成します。
 $ sudo nano /etc/udev/rules.d/90-init-vfd-display.rules 

、次のコンテンツ:
 ACTION=="add", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", RUN+="/usr/local/bin/init-vfd-display.sh" 

およびスクリプト:
 $ sudo nano /usr/local/bin/init-vfd-display.sh 

 #!/bin/bash sleep 20 echo -n -e \\x1B\\x40 > /dev/ttyUSB0 echo -n -e \\x1B\\x74\\x07 > /dev/ttyUSB0 echo -n -e \\x1B\\x26\\x01\\x24\\x24\\x05\\x50\\x50\\x5F\\x50\\x50 > /dev/ttyUSB0 sleep 3 

bashスクリプトを実行可能にし、ルールをアクティブにします。
 $ sudo chmod +x /usr/local/bin/init-vfd-display.sh $ sudo udevadm control --reload-rules $ sudo udevadm trigger --action=add $ sudo service udev restart 

ドル記号とテンゲを1つずつ切り替えて同時に使用しようとします。
 $ echo -n -e 1$ =\\x1B\\x25\\x01 181,95$ \\x1B\\x25\\x00 > /dev/ttyUSB0 



おわりに


ここに示す例は、Raspberry Piを使用して実行する必要はありません。説明されているすべてのコマンドは、Linuxディストリビューションに関係なく使用できます。主なことは、顧客のディスプレイに文字をロードするスクリプトを自動的に実行するudevサービスの存在です 固定具として、図のマトリックスに従って、Unicodeテーブルからさらに2つの通貨、ロシアルーブルとウクライナグリブナのシンボルをプログラムすることを提案しますが、すでにユーロ記号を自分で作成することができます。

Source: https://habr.com/ru/post/J235105/


All Articles