2017年12月28日木曜日

思いつきで買ったサーマルプリンタが結構使えた

先日行われた『ゆかり公式生放送を見る忘年会』にてこんなレシートを作ってみました。



割烹着ゆかりさんのお店...割烹ゆかり。そのままですね。
会場が和室だったので「それならやるしかないやん!」って思いつきでサーマルプリンタを買って使ってみたところ案外使えました。
買ったのはコレ↓
Aibecy POS-5805DD USBサーマルプリンタ

USB接続だけで良いならもう少し安いものがありますが、Bluetoothに対応していたこととバッテリ内蔵、あと見た目がこっちのほうが良いという点で選びました。
型番で調べてみると一応日本語も印刷できるっぽい、程度の認識で購入したので思い通りに印刷できるようになるまで苦労するorダメかもと思っていました。
ところがWindows用ドライバを使ってみるとInkscapeから直接印刷できて拍子抜けしてしまう程簡単でした。導入まで一癖あるのでメモを残しておきます。

USB接続の場合、サーマルプリンタの電源をONにして、PCに接続。デバイスマネージャーに"プリンターが接続されていません"と表示されることを確認します。

Bluetooth接続の場合、プリンタの電源を投入。まずはペアリングを行います。
BluetoothPrinterを選択。PINは1234


Bluetooth設定を開いて方向が発信のCOMポート番号を確認。この場合COM5。
amazon商品ページ説明欄からドライバをダウンロードして実行。
Portsに確認したCOMポート番号を選択して、OSはWindows10、Select PrinterはPOS-58を選択してBegin Setupをクリック。


そしてCOM(232C)接続...
電圧を確認したところTTLレベルではなく、±5.4Vが出ているので232Cレベル変換が必要です。
そしてピンアサインは下記の通り。マニュアルに載っておらず、調査したものです。
1:GND
2:TXD(プリンタからの出力)
3:RXD(プリンタへの入力)
4:???

1番にGNDがあることによって、USBとCOM両方を同じPCのUSBポートに接続すると+5VとGNDがショートするという恐ろしい仕様になっております。

通信仕様はボーレート115200bps,データ8bit,ストップ1bit,パリティなし
FRDM-K64Fボードと232Cレベル変換ICを介して接続してみたところうまく動きました。

使わせて頂いたソースはこれ。
https://os.mbed.com/users/aross34/code/Thermal_HelloWorld/

AdafruitThermal.cppの29行目のボーレートを115200に変更して動作しました。
ただし一部のコマンドが動いていないようで、真ん中あたりのLarge,Midium,smallはそれぞれ文字の大きさが変わるようですが、変わっていません。

Android端末からBluetoothで印刷する場合、ペアリングを行うところまでは普通のbluetoothデバイスと同じです。印刷はサーマルプリンタ用アプリを使用します。
画像を印刷するだけであれば iPrint が簡単かつ綺麗に印刷できました。


2017年12月27日水曜日

ルータをRT-AC68Uに更新してDDNS更新させるようにした

先日のamazonサイバーマンデーでASUSのルータ『RT-AC68U』がちょっとお安くなっていたのでポチっちゃいました。今まで使ってたNECのAtermWG1800HPが時々再起動しないといけなかったりしたので替え時でした。

11ac対応してりゃいいや、レビュー悪くなさそうだし、2系統WAN使えるユニークな機能もあるやんくらいの認識で、買ってから気づいたのですがこのルータ、SSHで中のLinux触れるようになってました。
それなら今までバッファローのNAS『LS410DX』のLinuxでやっていたDDNS更新をやらせたろ!ということでやってみました。アップデートあるたびにHDD抜いて中のLinuxに潜れるようにってやるの面倒だしね。
ASUSが提供するDDNS使いたかったけど、振られたIPをDDNS更新に使うが、au光のHGWからルータへはローカルIPが振られるため使えない環境です。
なので外部へグローバルIPを確認しに行き、そのIPでieserver.netのDDNSを更新するようにしました。

SSHを有効にする設定は”管理”のシステムタブから。ポートはLANオンリーでも一応変えておく。(そして時間経つと変えたことを忘れて入れねー!ってなりそう)


接続はいつものTeraTermで。ユーザー名とパスワードは管理画面に入るものと同じ。


こちらのブログ記事によると起動時に①USBマウント時に実行されるスクリプトを作成、設定して、②crontabに直接書き込んで定期的に実行する方法があるらしい。
 How to schedule cron jobs on an ASUS wireless router

ただcrontabへ書き込むところまではできるものの、実行されない...。

なのでUSBマウント時に実行されるスクリプトから直接watchコマンドで定時実行するようにした。
下記2つのシェルスクリプトを作って...

bootinit.sh
#!/bin/sh
/jffs/bootinit/watch.sh &
logger watch.sh_Start

watch.sh
#!/bin/sh
watch -n 1800 -t /jffs/bootinit/ieserver.sh

 USBマウント時のスクリプトに設定。
nvram set script_usbmount=/jffs/bootinit/bootinit.sh
nvram commit

ルータに手頃なUSBメモリつないで再起動。
ログ参照するとマウント後にスクリプトを実行しています。
Dec 27 23:24:54 disk monitor: be idle
Dec 27 14:24:56 usb: USB vfat fs at /dev/sda1 mounted on /tmp/mnt/sda1.
Dec 27 14:24:56 *****: watch.sh_Start
Dec 27 14:24:57 rc_service: hotplug 736:notify_rc restart_nasapps
Dec 27 23:24:57 iTunes: daemon is stoped
Dec 27 23:24:57 FTP Server: daemon is stoped
Dec 27 23:24:58 Samba Server: smb daemon is stoped
Dec 27 23:24:58 kernel: gro disabled
Dec 27 14:24:58 *****: DNS Update done
Dec 27 23:24:58 Timemachine: daemon is stoped
Dec 27 23:24:58 miniupnpd[725]: shutting down MiniUPnPd