M5StickC(ESP32)からBluetooth小型ポータブルレシートプリンタ「PAPERANG」を制御する

現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。

概要

前日紹介したプリンターをESP32から制御してみました。まずはコード値固定でボタンを押すと、フェードするだけの動作です。

スケッチ

#include "BluetoothSerial.h"
#include <M5StickC.h>
BluetoothSerial SerialBT;
uint8_t address[6]  = {0x00, 0x15, 0x83, 0x??, 0x??, 0x??};
bool connected;
void setup() {
  M5.begin();
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.printf("Paperang Test\n");
  // Init
  SerialBT.begin("ESP32test", true);
  // Connect
  connected = SerialBT.connect(address);
  if (connected) {
    Serial.println("Connected Succesfully!");
  } else {
    while (!SerialBT.connected(10000)) {
      Serial.println("Failed to connect. Make sure remote device is available and in range, then restart app.");
    }
  }
  // CRC32 Key
  uint8_t key[14];
  key[ 0] = 0x02;
  key[ 1] = 0x18;
  key[ 2] = 0x00;
  key[ 3] = 0x04;
  key[ 4] = 0x00;
  key[ 5] = 0x78;
  key[ 6] = 0x7A;
  key[ 7] = 0xCE;
  key[ 8] = 0x33;
  key[ 9] = 0x2C;
  key[10] = 0x89;
  key[11] = 0x80;
  key[12] = 0xF0;
  key[13] = 0x03;
  Serial.printf( "CRC32 Key write = %d\n", SerialBT.write(key, 14) );
  delay(100);
}
void loop() {
  M5.update();
  if ( M5.BtnA.wasPressed() ) {
    uint8_t msg[12];
    msg[ 0] = 0x02;
    msg[ 1] = 0x1a;
    msg[ 2] = 0x00;
    msg[ 3] = 0x02;
    msg[ 4] = 0x00;
    msg[ 5] = ',';
    msg[ 6] = 0x01;
    msg[ 7] = 0x8b;
    msg[ 8] = 'V';
    msg[ 9] = '#';
    msg[10] = 'T';
    msg[11] = 0x03;
    Serial.printf( "Feed write = %d\n", SerialBT.write(msg, 12) );
  }
  if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
  if (SerialBT.available()) {
    Serial.printf( "rx : %02X\n", SerialBT.read());
  }
  delay(20);
}

検証コードなので、制御コード直打ちです。

MACアドレスの他に名前で接続することもできますが、検索に時間がかかるのと接続が安定しないのでなるべくMACアドレスのほうが好ましいです。

ボタンを押すとプリンタがフィードして、白い紙を少し吐き出します。

解説

PAPERANGはBluetoothSerialで待ち受けており、そこに接続して制御コードを投げ込むことで制御します。

一般的にESP32が受け元になって、パソコンから接続する場合が多いですが、この場合にはPAPERANGがSlaveで、ESP32がMasterになります。

このMasterモードはESP32の1.0.4からでないと使えない接続モードです。

最初にCRC32でキーを送信し、その後にコマンドを送ることで制御が可能です。送るコマンドもCRC32でパリティをつけてあげないと受け取ってくれません。

ただし、キーは固定値なのでまずは接続ができるのかの検証のため、Pythonで送信しているデータをそのままESP32で投げてみて、動くかの確認をしました。

まとめ

いけそうです!

Pythonのライブラリはフォークされていて、Python3.7で動くものもありましたが、まったく構造から違うものになっていて、マニュアルは古いままって状態なので自分で作り直したほうがいい気がします。

ESP32から制御できそうなので、M5Stackの画面をそのまま印刷することもできそうです。ただこのプリンターって2年以上前の物で、P2って新しいモデルがすでに販売されていて、P2はまた違う制御っぽいのでどこまで追いかけるかはわかりません。

もし興味がある人がいれば、ライブラリ化まで行いたいと思います。。。

コメント