HOME | Raspberry Pi | ビジネス書籍紹介 | 2026-01-04 (Sun) Today's Access : 179 Total : 1260877. Since 10 Sep. 2019

ナダ電子 AS-289R2プリンタシールド
2022.01.11

YouTube でも紹介しています。画像をクリックすると再生できます。

今回はナダ電子のサーマルプリンタシールド AS-289R2 を使って、ソースコードを印刷してみました。

幅58mmのロール紙に、1行384ドット、幅8ドットのANK文字を使用すれば、48文字印刷することができます。
外出先でのちょっとした空き時間でのデバック作業にいかがでしょうか?

■AS-289R2プリンタシールド


●印字方式:ラインサーマル方式
●入力電圧:5V±5%
●平均電流:約2A(印字率25% 2分割時)
●I/F:
・3.3V or 5Vレベル(JP5切替)
・9600 or 38400bps(JP6切替)
・Serial or Serial2(JP4切替)
・8Bit NonParity 1Stop
●ドット密度(ドット総数):8ドット/mm(384ドット/ライン)
●印字速度:約25mm/秒
●印字有効幅:48mm
●文字種類:
・UTF8
・ANK JIS160文字
・第一水準漢字2965文字(漢字 JIS C 6226-1983準拠)
・第二水準漢字3388文字(漢字 JIS C 6226-1983準拠)
・JIS非漢字524文字
・大文字0~9、A~Zの36文字
●文字のサイズ(H×W):
・8×16ドット:ANK
・12×24ドット:ANK(電源投入時ANK初期値)
・16x16ドット:ANK、第一水準漢字、第二水準漢字
・24×24ドット:ANK、第一水準漢字、第二水準漢字(電源投入時漢字初期値)
・48×96ドット:0-9、A-Z
●バーコード:QR、JAN(13,8)、2of5(ITF)、2of7(NW7)、3of9(CODE39)、UPC-A
●動作環境:
・温度0~50℃(但し印字保証は5~40℃)
・湿度35%~80%RH(非結露)
●信頼性:
・ヘッド寿命:50km
・MCBF:1500万行
●付属品:
・記録紙1巻 型番:NP-580(サーマルペーパー 幅:58mm 巻径:50mm 長さ:30m)
・電源ハーネス1本 型番:CB-1116(日本圧着端子製:VHR-2N 赤/黒 長さ:1m)
・記録紙ホルダ1対 型番:ND131-108
●RoHS:対応

■旧モデル(AS-289R)からの変更点

・旧モデルAS-289Rとは完全互換
・シリアルインターフェース(TTL)に、5Vの他に、3.3Vにも対応
・Arduino Serial2 入力を追加
・シリアル通信速度は9600bpsに加え、38400bpsを追加
・レベル変換せずに、mbedやRaspberry Pi、がじぇっとるねさす等でも使用可能

■内容物


・1 x 本体(型番:AS-289R2)
・1 x 電源ハーネス(型番:CB-1116)
・(日本圧着端子製:VHR-2N 赤/黒 長さ:1 m)
・1 x 記録紙(型番:NP-580)
(サーマルペーパー 幅:58 mm 巻径:50 mm 長さ:30 m)
・1 x 記録紙ホルダ(型番:ND131-108)

■電源

印刷時の消費電力が大きいため、USBからの給電では印刷できません。 5V3A以上のACアダプタをプリンタに接続します(※プリンタからArduinoに5Vを供給することも可能)。
共立プロダクツ WA-05400X-1 [ACアダプタ DC5V 4A]
●定格入力:AC100~240V(50/60Hz)
●定格出力:DC5V 4A
●プラグ形状:2.1径センタープラス
●ケーブル長:約1m
>
付属の電源ハーネスとACアダプタを接続するためのプラグを用意します。

2.1mm標準DCジャック⇔スクリュー端子台
スクリュー端子台の付いたのDCジャックです。 プラスの印字がされている側のスクリュー端子がジャックのセンターと導通します。
●内径:2.1mm
●外径:5.5mm



ハーネスのケーブルが長すぎるので、短く切って端子台を取り付けています。

■TTLレベル設定変更


ラズベリーパイで使用するので、TTLレベル(JP5)を3.3Vに変更します。

ジャンパースイッチは基板の上側に付いているので、3箇所のネジを外して行います。

JP5: [1-2 3] → [1 2-3]

通信速度を9600→38400bps(JP6切替)に変更します。

JP6にピンヘッダーをはんだ付けします。


逆さにして、プリンタシールドの底部からみると、こんな感じです。

ジャンパーピンでショートさせます。

■プリンターの台座取り付け


イベント販売などのときは、NADA電子の刻印の入った台座が付いてくることもあるようですが、通常購入時には台座は同封されていません。


そこで、DAISO コレクションボックス ミニ フラット台座を利用しました。
●外寸サイズ
幅16.9cm/奥行8.5cm/高さ10cm
●内寸サイズ
幅14.8cm/奥行6.5cm/高さ8.8cm


プラスチックケースの底板に直径3mmの穴をあけて、シールド本体とロール紙ホルダーをネジで固定しています。

■テスト印刷


レバーを下げ、プラテンを外して、記録紙(ロール紙)を取り付けます。


フィードスイッチ(SW1)を押したまま電源を投入するとテスト印字が行われ、そのままHEXダンプ印字モードに移行します。


ロール紙に現在の通信設定が印刷されます。
Serial Interface
Baud rate : 38400bps
Data bits : 8bit
Parity : None
Stop bits : 1
Handshaking : DTR
電源を再投入することでHEXダンプ印字モードが解除されます。

※HEXダンプ印字モード
シリアルで入力されたデータをHEX(16進)コードで印字するモードです。 この機能を使用する事により 入力データのチェックを行う事が出来ます。 1ライン分のデータを受信した時点において、HEXダンプの印字を行います。 1ライン分以下の場合は、FEEDスイッチを押す事により印字を行います。

■ラズベリーパイとの接続

ラズベリーパイとプリンタシールドをつなぎます。

つなぐのは、GNDとTxD-RxD間の通信線です。

信号線(TxD-RxD)とGND線用の接続ケーブルを作成します。
カラーICクリップ
後ろ側を指で押すと先端から金属のフックが出てきます。

クリップの反対の端にはメスピンヘッダーを取り付けています。


プリンタシールドの信号ピンに引っ掛けて、ラズベリーパイのピンと接続します。

■ラズベリーパイの設定

ラズベリーパイの設定は下記の過去記事を参考にしてください。


■ソースコード印刷プログラム

プログラム要件
●3桁の行番号を印字する
●タブは、半角スぺースに置き換える
●印字桁数は半角48文字までなので、それを超える場合は改行する
●48文字目がUTF-8全角文字のときは47文字で改行し、次の行に印字する
●テキストファイルを標準入力から読み込んだ場合は、コンソールに出力する

AS-289R2 初期設定値
Ref.制御コマンド表 [日本語] Rev.3

ソースコード
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <wiringSerial.h>

#define MAX_COLUMN 48
#define BAUD_RATE  38400

int outfd = 0;

int main(int argc, char *argv[]){

	FILE *infp, *outfp;
	int c;
	int row = 0;
	int col = 4;
	int numByte;
	int i;

	if (argc == 1) {
		infp  = stdin;
		outfp = stdout;
	} else {
		infp = fopen(argv[1], "r");
		if (infp == NULL) {
			printf("%s not found.\n",argv[1]);
			exit(1);
		}
		if ((outfd = serialOpen("/dev/ttyAMA0", BAUD_RATE)) < 0) {
			printf("can not open serialport.");
			exit(1);
		}
    }

	if (outfd) {
		// 初期化(印字バッファ内データ抹消))
		serialPutchar(outfd,0x1b);
		serialPutchar(outfd,0x40);

		// ANK文字フォント指定(8x16ドット)
		serialPutchar(outfd,0x1b);
		serialPutchar(outfd,0x68);
		serialPutchar(outfd,0x30);

		// 漢字フォント指定(16x16ドット)
		serialPutchar(outfd,0x12);
		serialPutchar(outfd,0x53);
		serialPutchar(outfd,0x31);

		// 文字コード指定(UTF-8)
		serialPutchar(outfd,0x1b);
		serialPutchar(outfd,0x24);
		serialPutchar(outfd,0x30);

		// 行間スペース量指定(0ドット)
		serialPutchar(outfd,0x1b);
		serialPutchar(outfd,0x41);
		serialPutchar(outfd,0x01);

		// 文字間スペース量指定(0ドット)
		serialPutchar(outfd,0x1b);
		serialPutchar(outfd,0x20);
		serialPutchar(outfd,0x00);
	}
	
	if (outfd) serialPrintf(outfd,"%03d ",++row); else fprintf(outfp,"%03d ",++row);
	while ((c = fgetc(infp)) != EOF) {
		switch(c) {
			case 0x09: // TAB
				if (outfd) serialPutchar(outfd,' '); else fputc(' ',outfp);
				++col;
				break;
			case 0x0d:
				--col;
				break;
			case 0x0a:
				// 49桁目に改行コードがきた場合は、自動改行されるので無視する
				if ( col % MAX_COLUMN ) {
					if (outfd) serialPutchar(outfd,0x0d); else fputc(c,outfp);
				}
				if (outfd) serialPrintf(outfd,"%03d ",++row); else fprintf(outfp,"%03d ",++row);
				col = 4;
				break;
			default:
				if ((c & 0x80) == 0x00) { // 1byte文字
					if (outfd) serialPutchar(outfd,c); else fputc(c,outfp);
					++col;
				} else {
					// 48桁目に2バイト文字がきた場合は、改行する
					if ( !((++col) % MAX_COLUMN)) {
						if (outfd) serialPutchar(outfd,0x0d); else fputc(0x0a,outfp);
						col = 2;
					} else {
						++col;
					}
					// UTF-8文字コードのバイト数判定
					if ((c & 0xE0) == 0xC0)        { numByte=2; // 2byte文字
					} else if ((c & 0xF0) == 0xE0) { numByte=3; // 3byte文字
					} else if ((c & 0xF8) == 0xF0) { numByte=4; // 4byte文字
					} else if ((c & 0xFC) == 0xF8) { numByte=5; // 5byte文字
					} else if ((c & 0xFE) == 0xFC) { numByte=6; // 6byte文字
					} else { numByte=0;
					}
					if (outfd) serialPutchar(outfd,c); else fputc(c,outfp);
					for(i=1;i<numByte;++i) {
						c = fgetc(infp);
						if (outfd) serialPutchar(outfd,c); else fputc(c,outfp);
					}
				}
				break;
		}
		if (!(col % MAX_COLUMN)) {
			// AS-289R2は自動改行される
			if (!outfd) fputc(0x0a,outfp);
		}
	}
	if (outfd) serialPutchar(outfd,0x0d); else fputc(0x0a,outfp);
	if (infp!=stdin) {
		fclose(infp);
		if (outfd) serialClose(outfd);
	}
	exit(0);
}

初期処理
// 初期化(印字バッファ内データ抹消))
serialPutchar(outfd,0x1b);
serialPutchar(outfd,0x40);

// ANK文字フォント指定(8x16ドット)
serialPutchar(outfd,0x1b);
serialPutchar(outfd,0x68);
serialPutchar(outfd,0x30);

// 漢字フォント指定(16x16ドット)
serialPutchar(outfd,0x12);
serialPutchar(outfd,0x53);
serialPutchar(outfd,0x31);

// 文字コード指定(UTF-8)
serialPutchar(outfd,0x1b);
serialPutchar(outfd,0x24);
serialPutchar(outfd,0x30);

// 行間スペース量指定(0ドット)
serialPutchar(outfd,0x1b);
serialPutchar(outfd,0x41);
serialPutchar(outfd,0x01);

// 文字間スペース量指定(0ドット)
serialPutchar(outfd,0x1b);
serialPutchar(outfd,0x20);
serialPutchar(outfd,0x00);
半角文字は8x16、全角は16x16ドットに変更、文字コードにはUTF-8を指定、文字間、行間を0ドットに変更しています。

編集処理
while ((c = fgetc(infp)) != EOF) {
	switch(c) {
		case 文字コード1:
			編集処理
		case 文字コード2:
			・・・・
}
while() ループでテキストファイルから1バイトずつ読込み、処理を行っています。
デバック中に気付いたことは以下の2点です
●LF(0x0a)の出力ではなにもおこらず、CR(0x0d)に変更して書き出す必要がある
●UTF-8のコードは全角1文字に2~6バイトを必要とするので、桁位置を補正する
●AS-289R2が1行の最大文字数を判断して、自動改行を行ってしまうので、二重に改行しないように制御する必要がある

$ gcc -Wall -o as289 as289.c -lwiringPi
$ ./as289 as289.c

ラズベリーパイのOSは、Raspbian GNU/Linux 10 (buster) を使用しています。


印字はストレスを感じない程度に早いです。

■補足:ステータスLED

ステータスLED(アンバー色)は以下の条件時に点滅します。
条件点滅周期解除
ペーパーエンド1秒記録紙(ロール紙)補充して下さい
ヘッドアップ1秒プラテンをロック(固定)して下さい
サーマルヘッドエラー0.1秒サーマルヘッド(印字ヘッド)の故障です

■参考文献
さぁ始めよう|AS-289R2
C言語で日本語文字列の文字数を数える(UTF-8)
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
2019.12.13 モバイルバッテリーによる瞬間停電対策
2020.01.01 1280x800 HDMI MONITOR
2020.01.12 micro:bitをコマンドラインで使う
2020.02.04 サーマルプリンタを使う
2020.04.10 電卓を制御して数字を表示する
2020.08.03 Seeeduino XIAO
2020.08.09 LGT8F328P - Arduino clone
2020.09.18 電流計測モジュール INA219
2021.02.16 癒しの電子回路
2021.03.06 疑似コンソール
2021.08.08 電子ペーパー
2021.09.04 AVRマイコン・ATTiny85
2021.09.25 pH測定
2021.11.13 NTP時刻取得と活用
2021.11.27 GPS情報取得
2021.12.11 GR-KURUMI
2021.12.25 ATMEGA328P 3.3V/8MHz
2022.01.11 AS-289R2 プリンタシールド
2022.01.25 TM1637 & ATtiny85
2022.02.22 Raspberry Pi Zero 小道具
2022.03.01 ATTinyCore
2022.03.18 Adafruit QT Py + XIAO Expansion board
2022.07.31 サーマルプリンター番外編:通信筒
2023.01.01 FTP Server & SPI Flash SD
2023.02.01 LPC810(ARM Cortex-M0+)
2023.02.15 IchigoJam互換機
2023.03.01 Telnet
2023.04.26 USBメモリをUART接続で利用する
2023.05.14 焦電型赤外線モーションセンサー
2023.07.01 文字化けしないキーボード
2023.08.01 Bluetoothサーマルプリンター
2023.08.12 LattePanda 2G/32GB
2023.09.04 SI-3012KS
2023.12.01 疑似コンソール(C言語編)
2023.12.16 昭和レトロ・温度湿度時刻計
2023.12.25 二酸化炭素濃度監視
2024.01.23 なんちゃってmicro:bit
2024.02.07 オリジナル micro:bit
2024.02.23 ESP32 OTA
2024.03.08 TELNETサーマルプリンター
2024.05.08 ESP32 PROGRAM SELECTOR
2024.05.23 統合開発環境とQwiic
2025.01.24 赤外線リモコン
2025.03.25 QRCode SCANNER
2025.04.08 Keyestudio 328 WiFi Plus
2025.08.23 NanoPi NEO3
2025.09.24 I2C接続microSDモジュール
2025.10.08 UNO 3.3V@8MHz

たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」 「一念発起して何かを始めても、いつも三日坊主で終わってしまう」 「色んなことを先延ばしにしたまま、時間だけが過ぎていく」 そこで本書では、そんな著者が独自に開発した、 まったく新しい目標達成メソッド「100日デザイン」について、 その知識と技術を、余すところなくご紹介します。

まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。 ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。

今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。

ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。 29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!

【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。 基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説! 500以上のサンプルを掲載。実行結果も確認。 全24章の包括的なチュートリアル。

ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS… 全WEB媒体で効果バツグン! カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術

小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。

Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード

電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)

Copyright © 2011-2027 Sarako Tsukiyono All rights reserved®.