LoginSignup
2
1

More than 5 years have passed since last update.

ArduinoでGOOJPRTのコマンド使用例

Last updated at Posted at 2019-03-30

Arduino等マイコンから手軽にプリントアウトしたいときサーマルプリンタが便利ですね。
AliExpress等で売っているサーマルプリンタで、最も手頃なのがGOOJPRT だと思います。
https://ja.aliexpress.com/item/GOOJPRT-QR203-58-RS232-TTL-EML203/32835660462.html?
APS ELM203-CH のマニュアルが参考になりますが結構違うところもあり、試行錯誤したので
お役に立てばと上げておきます。

ちなみに、arduinoへの接続は右下のコネクタのGNDとRX(3pin黄色)だけでOKです。もちろんプリンタ側のRXはarduinoのTXと繋ぎます。通信速度の変更は試していませんが少なくともデフォルトは9600です。電源は図右下の黒をGND 赤を+5~9Vですね。
ピンアサイン.png

白黒反転やピーク電流制限、逆回転(紙を戻す)や濃度設定はAPSでは定義されていますが少なくとも同じコマンドではGOOJPRTでは機能しませんでした。hackできた方いらっしゃいましたら是非教えてください。
通常のバーコードは印字させることはできましたがよくわからない部分があり、使いこなせていません。
QRコードは機能を持っていない様に思います。 バーコードについてもhackできた方是非情報下さい。

サンプルコード
私はSoftware serialはあまり好きで無いので、arduinoのTXをプリンタに繋いでおり、プリンタの電源を切って書き込んだ後電源を入れてからarduinoをリセットする という方法を採っています。


void setup() {
  Serial.begin(9600);
  delay(200);

  //文字間ピッチ
  Serial.write(0x1B);
  Serial.write(0x20);
  Serial.write(16);
  Serial.println("abcDEF");

  //行間設定
  Serial.write(0x1B);
  Serial.write(0x33);
  Serial.write(50);//50dot 4mmくらい
  Serial.println("a");
  Serial.println("50");
  Serial.write(0x1B);
  Serial.write(0x33);
  Serial.write(0);//33がデフォの様だが0でもOK
  Serial.println("xxx");
  Serial.println("0");

  //左端余白設定 8dot/mm 約200dpi
  Serial.write(0x1D);
  Serial.write(0x4C);
  Serial.write(50);//第一引数は x1
  Serial.write(0);//第二引数はx256≒32mm
  Serial.println("abCDEF");

  Serial.write(0x1D);
  Serial.write(0x4C);
  Serial.write(0x00);
  Serial.write(0x01);//第二引数はx256≒32mm
  Serial.print("abCDEF");

  Serial.write(0x1D);
  Serial.write(0x4C);
  Serial.write(0x00);//後出しでも改行しなければ同じ行に描画される
  Serial.write(0x00);
  Serial.println("xxxx");

  //タブ設定とタブ移動
  Serial.write(0x1B);
  Serial.write(0x44);
  Serial.write(10);//8dot単位
  Serial.write(20);//8dot単位
  Serial.write(0);//設定終了
  Serial.print("asd");
  Serial.write(9);
  Serial.print("fgh");
  Serial.write(9);//Serial.wirte("\t")でも可 多分 print("\t")も、、
  Serial.println("xxx");

  //文字コード国別指定通貨マークが変わる程度
  Serial.write(0x1B);
  Serial.write(0x52);
  Serial.write(8);//8:日本 0:USA 他
  for ( int i = 0x20; i < 0x7F; i++) {
    Serial.write(i);
    if (i % 32 == 0) {
      Serial.println("");
    }
  }

  //カタカナ出せる
  Serial.write(0x1B);
  Serial.write(0x74);
  Serial.write(1);//1:カタカナ 26タイ
  for ( int i = 0x80; i < 0xFF; i++) {
    Serial.write(i);
    if (i % 32 == 0) {
      Serial.println("");
    }
  }

  //小さいフォント
  Serial.write(0x1B);
  Serial.write(0x21);
  Serial.write(1);
  Serial.println("abCDEF");
  Serial.write(0x1B);
  Serial.write(0x21);
  Serial.write(0);//戻す
  Serial.println("abCDEF");

  //n倍幅
  Serial.write(0x1D);
  Serial.write(0x21);
  Serial.write(0x20);//16進のMSD n 倍幅 7まで
  Serial.println("a");

  //n倍高さ
  Serial.write(0x1D);
  Serial.write(0x21);
  Serial.write(0x02);//16進のLSD n倍高さ 7まで
  Serial.println("a");

  //倍幅
  Serial.write(0x1D);
  Serial.write(0x21);
  Serial.write(0x10);//16進のMSD 1が倍幅
  Serial.println("a");

  //倍高
  Serial.write(0x1D);
  Serial.write(0x21);
  Serial.write(0x01);//16進のLSD 1が倍高さ
  Serial.println("a");

  //下線
  Serial.write(0x1B);
  Serial.write(0x2D);
  Serial.write("1");//連続
  Serial.print("abCDE");
  Serial.write(0x1B);
  Serial.write(0x2D);
  Serial.write("2");//1dot というが連続している
  Serial.print("abCDE");
  Serial.write(0x1B);
  Serial.write(0x2D);
  Serial.write("0");//戻す
  Serial.println("abCDE");

  //90°回転右回り
  Serial.write(0x1B);
  Serial.write(0x56);
  Serial.write("1");
  Serial.println("abCDE");
  //回転を元に戻す
  Serial.write(0x1B);
  Serial.write(0x56);
  Serial.write("0");
  Serial.println("abCDE");

  //180°回転
  Serial.write(0x1B);
  Serial.write(0x7B);
  Serial.write(1);
  Serial.println("abcdDEFGhijklmn");
  //戻す
  Serial.write(0x1B);
  Serial.write(0x7B);
  Serial.write(0);
  Serial.println("abcdDEFGhijklmn");

  //右寄せ
  Serial.write(0x1B);
  Serial.write(0x61);
  Serial.write("2");
  Serial.println("abCDE");
  //中寄せ
  Serial.write(0x1B);
  Serial.write(0x61);
  Serial.write("1");
  Serial.println("abCDE");
  //左寄せ
  Serial.write(0x1B);
  Serial.write(0x61);
  Serial.write("0");
  Serial.println("abCDE");
}
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1