テキストファイルのビットマップデータをLAN対応のepsonposプリンターTM-T88Vに印刷するためのプロトタイプを作成しようとしています。
テキストとテキストの書式設定の指示を送信するのに問題はありませんが、プリンターにアレシボメッセージのデータを印刷させるために何をしなければならないのか理解できません。
最初の数行:
00000010101010000000000
00101000001010000000100
10001000100010010110010
10101010101010100100100
00000000000000000000000
00000000000011000000000
00000000001101000000000
00000000001101000000000
00000000010101000000000
00000000011111000000000
00000000000000000000000
11000011100011000011000
10000000000000110010000
11010001100011000011010
11111011111011111011111
00000000000000000000000
00010000000000000000010
00000000000000000000000
00001000000000000000001
メッセージには73行23列があり、1679の画像要素になります。この各要素は、黒の場合は1、白の場合は0で定義され、8x8(または16x16)ドットの正方形として印刷する必要があります。結果は次のようになります
(出典:satsig.net)
プリンタの仕様から:
私が言ったように、プリンターへの接続と送信は問題ありませんが、この指示が私に伝えたいことを私は理解していません。アレシボメッセージの場合はどうなりますか
プリンターに送信する必要のある番号は何ですか?すべてのドットを送信する必要がありますか?どういうnL, nH specify the number of dots of the image data in the horizontal direction as (nL + nH × 256).
意味ですか?
これが私がプロトタイピングに使用する私の単純なPythonプログラムです:
# -*- coding: utf-8 -*-
import struct
import socket
def sendInstructions(mySocket,l):
for x in l:
mySocket.send(struct.pack('h', *[x]),1)
def emphasizeOn(mySocket):
sendInstructions(mySocket,[27,33,48])
def emphasizeOff(mySocket):
sendInstructions(mySocket,[27,33,0])
def lineFeed(mySocket,number):
for i in range(number):
sendInstructions(mySocket,[0x0a,])
def paperCut(mySocket):
sendInstructions(mySocket,[29,86,0])
def sendText(mySocket,string):
mySocket.send(string.encode('UTF-8'))
def main():
mySocket = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
mySocket.connect(('192.168.1.15',9100))
lines = ["Hello,","World!"]
emphasizeOff(mySocket)
lineFeed(mySocket,2)
for l in lines:
if lines.index(l) == 0:
emphasizeOn(mySocket)
else:
emphasizeOff(mySocket)
sendText(mySocket,l)
lineFeed(mySocket,2)
lineFeed(mySocket,4)
paperCut(mySocket)
mySocket.close()
if __name__=="__main__":
main()