とある船上ハッカソンで、ナダ電子製AS-289R2プリンタシールドをArduino 101でBLE化したので、ちょいとまとめます。
#使用物
##AS-289R2プリンタシールド
ナダ電子株式会社から発売されている、感熱式プリンタのシールドで、レジについている、レシートを印刷するプリンタのような物です。
いわゆるANK文字、第二水準までの漢字やJIS非漢字に加えて、QRやバーコードも印字可能です。
メーカーサイト: http://www.nada.co.jp/as289r2/
##Arduino 101
2016年に発売された、Intel Curieモジュールを搭載したArduinoです。
BLEに加えて、6軸加速度センサー、ジャイロスコープ等を搭載した便利なボードでしたが、2017年7月にIntelがCurieの生産終了を発表、Arduino 101も販売終了、在庫限りとなってしまいました。
メーカーサイト: https://store.arduino.cc/usa/arduino-101
Arduino IDEで101を使う際には設定等必要になりますので、下記サイトを参考にして下さい。
https://www.arduino.cc/en/Guide/Arduino101
##電源など
AS-289R2は、Arduinoからの電源供給ではプリンタが動作しないため、5V、3.0A以上の外部電源必須です。
共立エレショップの商品ページでは、ACアダプタとDCジャック変換コネクタを勧めていますね。
http://eleshop.jp/shop/g/gG16311/
私は、これと同じものを共立シリコンハウス店頭で買って使用しました。
#接続
AS-289R2はシールドなので、Arduino 101にシールドとして刺せば良いのですが、その前に設定を変更します。
Arduino 101は動作電圧が3.3Vのため、AS-289R2のJP5を1-2から2-3に切り替えて、3.3Vにします。
参照: http://www.nada.co.jp/as289r2/support_arduino.html
JP5を変えるには、いったんネジを外してAS-289R2をバラす必要があります。
シールドからArduino 101に電源供給するようにしたい場合は、JP1をショートしておきます。
#スケッチ
BLEから1バイトずつ受け取ってプリンタに送るスケッチを置いておきます。
注意点としては、BLEからの受信をloop()内でやると取りこぼすことが有ります。
これでちょっとハマりました。 orz
データ受信はイベントハンドラで行いましょう。
#include <CurieBLE.h>
#define SERVICE_UUID "19B10010-E8F2-537E-4F6C-D104768A1214"
#define CHARACTERISTIC_UUID "19B10011-E8F2-537E-4F6C-D104768A1214"
BLEService blePrintService(SERVICE_UUID);
BLECharCharacteristic blePrintCharacteristic(CHARACTERISTIC_UUID, BLEWrite);
void setup() {
Serial1.begin(9600);
// begin initialization
BLE.begin();
// set the local name peripheral advertises
BLE.setLocalName("BlePrint");
// set the UUID for the service this peripheral advertises:
BLE.setAdvertisedService(blePrintService);
// add the characteristics to the service
blePrintService.addCharacteristic(blePrintCharacteristic);
// add the service
BLE.addService(blePrintService);
blePrintCharacteristic.setValue(0);
// start advertising
BLE.advertise();
blePrintCharacteristic.setEventHandler(BLEWritten, characteristicWritten);
}
void loop() {
// poll for BLE events
BLE.poll();
}
void characteristicWritten(BLECentral& central, BLECharacteristic& characteristic) {
while (blePrintCharacteristic.written()) {
int v = blePrintCharacteristic.value();
Serial1.write(v);
}
}
あとは、iPhoneアプリなどを適当に書いて繋ぎましょう。
では、良い印刷生活を!!