chakokuのブログ(rev4)

テック・コミック・ごくまれにチャリ

サーマルプリンタ(EM5820)が届いたので接続してみる

やりたいこと:サーマルプリンタ(EM5820)をマイコンから制御して文字を印刷したい
結果:ハマりポイントがあったものの、、ESP32から制御してHello World!!と印刷できた

Amazonでサーマルプリンタを購入して先日届いたのでマイコンから制御してテストプリントしてみる。
プリンタと接続する経路は、USB,RS232C,TTLとあり、当初TTLで繋ぐ予定であった。届いてから気づいたのだが、、TTLとは5Vであり、ESP32は3,3Vなのでレベル変換が必要なのであった。最初はまじめにFXMA108で3.3V<->5V変換をやっていたが、どうもうまくいかず、結局ESP32(3.3V)からプリンタ(5V)への出力は直結、プリンタ(5V)からESP32(3.3V)への接続は2.2Kの抵抗を介して電圧を下げて接続させた。プリンタを制御するTTLとはどんな仕様なのか??、5VのSerial I/Fであった(9600bps)。制御コマンドは業界標準のESC/POSらしい。久しぶりにESP32を触って忘れている事も多かったけど、最終的にはHello World!!等簡単なASCII文字は打てるまでにはなった。

今回のハマりポイント

  • 感熱プリンタは熱で印刷という性質によるのか、2Aぐらい消費する。だから、、それ相応のACアダプタから供給する必要あり。ESP32の5V供給ではESP32自体が動かない*1。以前使っていた5V出力の定電圧電源でもテスト印刷時はかすれたり、紙送りがおかしくなった。オソロシイ。アマチュア無線用の32Aまで出せるのを使った。実際何A流れているのか計測したい。
  • レベル変換IC(FXMA108)がどうもうまく動かず、正しい信号の送受信ができなかった。レベル変換ICは使わず、プリンタ(5V) --> ESP32(3.3V)の経路は、抵抗で電圧を下げた。
  • 感熱プリンタのIFにRX,TXと書かかれていて、シリアル接続なので、普通の発想ならマイコン側のTX(送信)とプリンタ側のRX(受信)とクロスに接続すると思うのだが、、どうやら、プリンタ側のRXは受信という意味ではなくて、、マイコンのRXと繋ぐという意味のようだった(か、あるいは単純にプリントミスか)。最初、TX<--->RXで接続して、オシロで波形見たらどうも出力同士がぶつかっているような波形だったのでおかしいと思ったら、どうやら、TX<--->TX , RX<---->RXで繋ぐ想定のようであった。こんなの誰が分かるんですか??という感じ

想定外だったこと

  • 感熱プリンタは安くて手頃、静かなのはいいけど、でかい電源が必要。省電力で動くマイコンの感覚では動かせない。
  • "hello world"と印字したとして、印刷用の発熱部は本体の奥にあるので、印刷された場所も奥になっている。だから、、紙を何回か送らないと目にすることができない。長い文章やグラフィックを打つのなら気にならないが、短いログを一行印刷してすぐに確認したい場合、ログを印刷してから3行ぐらい紙を上げないといけないので、結構無駄になってしまう。
  • 箱型に見えたのでそのまま床や机に置けるかと思ったが、接続ケーブルが底から出ることになり、プリンタを収めるためのケースが必要

サーマルプリンタで、Hello World!!を印刷しているところ

今回購入したサーマルプリンタ、ハマりポイントはありますが、、ESP32から制御はできました

ご参考に、、MicroPythonのテストプログラムはこの程度です(動くまで試行錯誤したので初期化等抜けていたらまた加えますが)

from machine import UART
import time

uart1 = UART(1,baudrate=9600, tx=32,rx=33)
while True:
    uart1.write('Hello World!!\r\n')
    time.sleep(1)

■追記
m5-docs
ATOM Thermal Printerの結線情報より、、やはり、マイコン側のデータ送信(TX相当)とプリンタのTXを結線する発想らしい。うーん。。。

■参考資料等
AdafruitのThermal Printerページ、この製品にかなり近い
Tiny Thermal Receipt Printer - TTL Serial / USB : ID 2751 : $49.95 : Adafruit Industries, Unique & fun DIY electronics and kits
Manual: A2 Micro panel thermal printer (同一製品ではないですが近い)
https://cdn-shop.adafruit.com/datasheets/A2-user+manual.pdf
AdafruitのThermal Printer Python版ドライバ
GitHub - adafruit/Adafruit_CircuitPython_Thermal_Printer: CircuitPython module for interacting with serial thermal printers.
ATOM Thermal Printer Kit(プリンタユニットはこれと同じ)
ATOM Thermal Printer Kit | m5stack-store
ATOM Thermal Printerのコマンド仕様書(英語ではない)
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/atombase/atom_pritner/ATOM_PRINTER_CMD_v1.06.pdf
ATOM Thermal Printerのドライバ、C++で書かれているらしい。筋金入り!
GitHub - m5stack/ATOM-PRINTER: M5Stack ATOM PRINTER firmware and examples

レベル変換の解説記事(有限会社 ケプストラム様に感謝)
5V系・3.3V系信号レベル変換
FXMA108説明書
https://akizukidenshi.com/download/ds/akizuki/ae-llcnv8-doc.pdf

*1:USBの定格の最大電流値を超えているのだろう