【初心者向け】Tera Termの使い方とマクロの作り方

ソフト設計



この記事でわかること

・Tera Termのインストール方法
・Tera Termの使い方
・Tera Termマクロの作り方

Tera Tarm(テラ・ターム)はPCと外部機器間でシリアル通信するためのソフトで、
30年の歴史があり、フリーのターミナルソフト(※1)として有名です。
名前の由来は開発者名(寺西)から来ています。

※1:PC(端末)間の通信ソフトのことで、
  外部から他の端末を遠隔操作できることから、ターミナルエミュレータとも呼びます。

本記事では、外部機器がPICマイコン学習キットである場合を例にして、
Tera Termの使い方を解説します。

PICマイコン学習キットについては下記記事で解説しています。

Tera Termを利用するシリアル通信環境

本記事で解説する通信環境は、以下の構成となっています。

このPICマイコンには、モニタプログラムと言われるソフトが書き込まれており、
PCから送信されたコマンドにより、LEDの点灯や、ブザーを鳴らしたりでき、
簡単なプログラムを組んで動作させることもできます。
(インタプリタ言語のPython(パイソン)に似た専用のコードでプログラミングします)

このキットにはUSBインターフェースがないため、
USBシリアル変換モジュールを経由してPCと接続します。 

Tera Termは、PCからコマンドやプログラムを送信したり、
PICマイコンからのデータを受信するのに必要となります。

Tera Termのインストール方法

窓の杜(ソフト紹介サイト)からダウンロードできます。

ダウンロードできるソフトが複数ありますが、
ここでは、最新のTera Term 5 をインストールします。

このTera Term 5 は、2023年10月にリリースされたもので、
18年ぶりの大型バージョンアップとなっています。

従来のTera Term 4 との違いは、 Unicode(ユニコード(※2))対応を強化している点です。

これまでは、例えば日本語を表示する設定にしていると、中国語は表示できませんでしたが、
多言語の同時表示が可能になったことで、ロケール(言語)の設定が不要になりました。

※2:文字コードの国際的な標準規格
  世界中の様々な言語の文字に通し番号を割り当て、同じコード体系のもとで使用できるようにしたもの。

1.窓の杜から「Tera Term(v5系統)」のインストールファイルをダウンロードする
 (ソフトをインストールする場所は後で指定できるので、ダウンロード先はどこでも良い)

2.ダウンロードしたexeファイルをダブルクリックして、ファイルを実行させる

3.セットアップに使用する言語を選択する(デフォルトの日本語でOK)

4.使用契約承諾書に同意する

5.インストール先を指定する(デフォルトのままでOK)

6.コンポーネントを選択する(デフォルトのままでOK)

7.Tera Term画面で表示する言語を選択する(デフォルトの日本語でOK)

8.Tera Termのショートカットを作成する場所を指定する(デフォルトのままでOK)

9.追加タスクを選択する(デフォルトのままでOK)
  マクロを使用する場合は、3番目(赤枠部分)も選択しておくと良いです。
  (ここで選択してなくても、後で設定可能)

10.インストール準備完了が表示される
   「インストール」をクリックすると、インストールが開始されます。

11.インストール完了
   「完了」をクリックすると、インストールが終わり、
   デスクトップ画面上にTera Termのショートカットができます。



Tera Termの設定

以下の手順で外部機器との接続設定を行います。

1.外部機器からのUSBケーブルをPCに接続する
 本記事では、新居浜高専PICマイコン学習キットVer.3を
 USBシリアル変換モジュールを経由してPCと接続します。 

2.USB接続した機器をPCが認識しているか確認する
 接続した外部機器のポート番号を確認します。
 このポート番号をTera Term設定時に指定します。

 確認する方法は、Windowsのデバイスマネージャーを使用します。
 Windows11の場合、画面右下のスタートメニューにある検索入力に、
 「デバイスマネージャー」と入力すると表示されるので、これを開きます。

デバイスマネージャー画面にある「ポート(COMとLPT)」に
USBシリアルポートが表示されています。
この例ではポート番号はCOM3になります。

USB機器を複数接続している場合、どのポート番号かわかりにくいですが、
今回接続対象となる機器が未接続の状態でデバイスマネージャーを開いておくと、
接続後にポート番号が追加されるので判別できます。

USB接続されていない、又は接続していてもPCが認識できていないと
ポート番号は表示されず、Tera Termと接続できません。

接続されているポートのプロパティを開くと、
外部機器の詳細や通信設定を確認することができます。
(ここで表示される内容は接続する外部機器によって異なる)

この通信設定と、この後行うTera Termでの設定を一致させる必要があります。

本例の外部機器(USBシリアル変換モジュール)は以下の設定となっていました。
 ビット/秒(※3):9600
 データビット:8 
 パリティ:なし
 ストップビット:1
 フロー制御:なし

 ※3:通信速度(ボーレート) Tera Termの設定画面ではスピードと表記

3.Tera Termを起動させる
 Tera Termのアイコンをダブルクリックして、Tera Termを起動させると、
 「新しい接続画面」が表示されるので、先程確認したボート番号を選択します。

この時、USB端子に外部機器が接続されていないと、
「シリアル」を選択することができません。

その場合は、一旦「キャンセル」を選択してウィンドウ画面を閉じてから、
外部機器を接続した上で、再度、画面上の「ファイル」「新しい接続」を選択し、
「新しい接続」画面を開くと、「シリアル」が選択可能になります。

4.シリアルポート設定を行う
 画面上の「設定」「シリアルポート」を選択すると、
 通信速度などの設定画面が表示されるので、
 デバイスマネージャーで確認した通信設定と合わせるようにします。

本キットの場合は、デフォルト値のままでOKです。

送信遅延は、Tera Term から文字を送信する場合の遅延時間で、
キーボード入力で送信している限りは設定の必要はありませんが、
マクロを使って、ファイルデータを一度に送信する場合、
外部機器側の処理速度によっては、遅延時間を設ける必要があります。

本キットでは、マクロを使ってプログラムをロードする際に
10ミリ秒/字、100ミリ秒/行 に設定します。
(この後のマクロの作り方の所で解説します)

5.端末の設定を行う
 画面上のメニュー「設定」「端末」を選択し、
 改行コードと文字コード(コーディング)の設定をします。

改行コードの設定は、送信/受信ごとに以下から選択します。

 CR:改行コードの変換なし
  データがそのまま送受信されます。

 CR+LF :CRにLFを追加する
  改行コードCRを、CR+LFに変換して送受信します。 
   例) “CR LF” が受信された場合、”CR LF LF” に変換

 LF:受信時はLFにCRを追加、送信時はCRをLFに変換する
  改行コードLFを、CR+LFに変換して受信します。
  改行コードCRを、LFに変換して送信します。
   例) “CR LF” が受信された場合、”CR CR LF” に変換

 AUTO :CR+LFを自動追加(受信のみ)
  改行コードCR、又はLFを、CR+LFに変換して受信します。
  ”CR LF” が受信された場合は変換しません。
    例) “CR” が受信された場合、”CR LF” に変換
      “LF” が受信された場合、”CR LF” に変換

この設定は簡単に言うと、
送信時は、エンターキーを打った時に送信されるコードを指定し、
受信時は、Tera Term画面上に表示されるコードの改行の仕方を指定するものです。

この改行コードの扱いはOSによって異なり、WindowsではCR+LFですが、
外部機器からの送受信する改行コードがCR+LFに対応していれば変換する必要はないため、
(CR)の設定のままで良いです。

本キットについても、デフォルト値(CR)のままでOKです。

改行コードの選択肢にあるCR、LFの意味は以下になります。

CR(キャリッジ リターン):復帰
  カーソルを左端の位置に戻します。
  ASCIIコードは0x0D(10進数で13)

LF(ライン フィード):改行
  カーソルを新しい行に移動します。
  ASCIIコードは0x0A(10進数で10)

CR+LF:CRとLFを足したもの
  カーソルを左端の位置に戻して、新しい行に移動します。

文字コードについては、
4種類の漢字コード (SJIS, EUC, JIS, UTF-8 )から選択します。

こちらも外部機器の仕様によって決まり、
正しい設定でないと、外部機器から受信した文字を正しく表示できず、文字化けが発生します。

本キットは、デフォルト値(UTF-8)でOKです。



Tera Termの動作について

Tera Term画面には受信データが表示され、
送信データ(キーボードで入力した文字)は表示されません。
(端末設定画面でローカルエコーを有効にした場合を除く)

入力(送信)した文字が画面表示されている様に見える場合、
それは、外部機器が受信した文字をそのままPCに返信したものが表示されています。

この動作を外部機器が学習キットの場合で説明します。

まず、接続すると、キーボードからの入力を促す
コマンドプロンプト “>” が表示(受信)されます。

キーボード入力(送信)すると、1文字毎に
キットから折り返し返信した同じ文字が表示(受信)されます。

Tera Termでは、1文字つづキーボード入力する毎に、
エンターキーを押さなくても送信
されており、
“P1” と入力した時点で、キットには既に”P1” が受信されています。

このキットでは、 “P1” を入力すると、
画面上にサンプルプログラムP1のリストを表示する処理を行います。

しかし、キットはエンターキー(改行コード)を受信しない限り、
コマンドを実行しないようにしているため、何もしません。

最後に、エンターキーを押すと、画面上では改行してから、
プログラムリストが表示され、最後にコマンドプロンプトを表示しますが、
画面上での改行は、エンターキーを押したからではなく、
キット側からの改行コードを受信したために改行しているのです。

ちなみに、端末の設定でローカルエコーを有効にした場合、
先程と同じ操作をすると、同じ文字が2個連続で表示されます。



Tera Termマクロの作り方

マクロを利用することで、PC内に保存してあるファイルの内容を送信したり、
受信したデータを指定したファイル名で保存することができます。

マクロで、どのような処理を行うかは、
Tera Term独自の命令語でプログラムを記述したマクロファイル(拡張子.ttl)で指定します。

ここでは Windowsの「メモ帳」を使って、マクロファイルを作成&編集しました。

マクロを起動させる方法は2つあります。
①Tera Term メニューの「コントール」「マクロ」からマクロファイルを指定する

②マクロファイルを直接開く
 マクロファイル(拡張子.ttl)をダブルクリックすることで、
 Tera Term が起動して、マクロファイルを実行します。

 この場合、ttlファイルをマクロの実行プログラム (ttpmacro.exe) に関連づける必要があります。
 (インストール時の設定で、事前に関連づけておけば不要)

ちなみに、マクロの実行プログラム (ttpmacro.exe) は、
Tera Term 本体 のプログラム(ttermpro.exe
とは別になるので、関連つける際に注意します。

マクロファイルはPC内の任意の場所に保存できます。

マクロファイル例1:テキストファイルを読み出して送信する

PC内のファイルの内容を送信するマクロです。
ここでは、マクロファイル名を “プログラムのロード.ttl” とつけました。

このPICマイコン学習キットには、モニタプログラムと呼ばれる機能があり、
Tera Term画面上で、プログラムを1行づつキーボード入力することで、
マイコンにプログラムをロードさせることができます。

しかし、キットの電源を切ると作成したプログラムは消えてしまうため、
プログラムをあらかじめ、テキストファイル(program.txt)に保存させておき、
マクロを使って、自動で送信できるようにしました。

マクロ内の各コマンドについて説明します。

コマンドの一覧と説明は、Tera Term 画面上の「ヘルプ」「目次」でヘルプ画面が表示されるので、
その中の「MACROヘルプ」にある「TTL コマンドリファレンス」で見る事ができます。

①connect <パラメータ>
 Tera Termを接続します。

 後に続くパラメータは接続設定で、
 Tera Term画面上のメニューから設定する内容と同じことができます。

 但し、Tera Term が外部機器と既に接続されていると、
 このコマンドは無視されるため、設定が反映されません。

 なので、接続を遮断してからマクロを実行させるか、
 Tera Term が起動していない状態で、マクロファイルを直接開く必要があります。

 パラメータは初期設定値から変更したい項目だけ記述すれば良いため、
 ここで記述した以外にも存在します。
 (パラメータの種類については、ヘルプ画面の「コマンドライン」にある「Tera Term Pro コマンドライン」を参照)

 ここでは、キーボード入力時にはゼロだった送信遅延を以下の値に設定しています。 
  送信遅延時間(1文字あたり10ms、1行あたり100ms)

 送信遅延を設定する理由ですが、マクロでまとめて送信すると、
 キット側の処理が追いつかなくなり、正しく通信できないためです。

②sendln <データ1> <データ2> …
 データと、最後に改行コード(エンターキー入力に相当)を送信します。
 データのみ送信したい場合はsendになります。

 ここでは、文字 “E” を送信しています。
 これは “E” をキーボード入力してから、エンターキーを押した場合と同じであり、
 このキットでは、現在ロードされているプログラムを消去する処理を行います。

 送信データの指定方法ですが、文字を ” ‘ ” で囲むことで、その文字そのものが送信されますが、
 ” ‘ ” で囲まない場合は、数字だとASCIIコード、文字だと変数として扱われます。

 例)
   send 65 66 67
     ”ABC” が送信される(“A” の ASCII コードは10進数表記で65)

   send $41 $42 $43
     ”ABC” が送信される(“A” の ASCII コードは16進数表記で41)

   value = $31
   send value
      ”1″が送信される(”1″ の ASCII コードは16進数表記で31)

   myname=’Tera Term’
   send ‘My name is ‘ myname ‘.’
      ”‘My name is Tera Term.” が送信される

③fileopen <ファイルハンドル> <ファイル名> < 0 >
 指定したファイルを開きます。

 ファイルの場所はパスで指定できますが、ここでは指定しないので、
 program.txtはマクロファイルと同じフォルダに入れておく必要があります。

 (ファイルはcsvファイルでもOK)

 ファイルが存在しない場合は、空のファイルが作成されて開きますが、
 中身が無いので、この後の送信コマンドでは何も送信されません。

 ファイルハンドルとは、どのファイルを処理するか指定するためにつける名前です。

 ここでは、ファイルハンドルをfhとすることで、
 以降の処理において、program.txtを指定する際はfhを使用します。

 最後に “0” をつけると、
 ファイルポインタ(読み書きの現在位置)をファイルの初めにセットします。

④filereadln <ファイルハンドル> <変数>
 ファイルから1行読み出して変数に格納します。

 ここでは、ファイルハンドルfh(つまり、program.txt)から
 1行分のデータを変数bufにセットします。

 読込後、ファイルポインタは、次回のため、次の行に自動的に移動します。

 読み出し時にファイルポインタがファイルの最終行である場合、
 変数resultに1がセットされ、最後ではない場合は0がセットされます。

 この変数resultを利用し、ファイルを読み終わるまで繰返し行う処理を
 ifとgotoコマンドを使って行います。

  if result = 1 goto breakloop

 読み終わるまでは(result = 0)、この命令は無視されて、次の行の命令を行いますが、
 読み終わったら(result = 1) 、ラベル名がbreakloopの所にジャンプします。

<ラベルについて>
 :breakloopなど、 “:” が先頭にあるものは、ラベルと呼ばれるもので、
 gotoコマンドにおいて、行き先を指定します。

⑤mpause ミリ秒数
 指定したミリ秒だけ休止させます。
 秒で指定したい場合はpauseを使います。

 ここで500ms休止している理由は、コードの文字数が多い場合、
 キット側の受信処理が終わらないうちに次の送信をすると、その行が受信できず、
 その行だけ抜てしまうため、ここで間を空けて送信しています。

⑥wait <データ1> <データ2> …
 データを受信するのを待ちます。

 データは10個まで指定でき、データ1が受信されたら変数resultに1がセットされ、
 データ2なら2をセット、という様に変数resultに値(1から10)がセットされます。
 これを利用して、受信したデータによって行う処理を切り替えることができます。

 ここではデータを、” #10′>’ “としてますが、
 10(10進数表記)はASCIIコードでLF(行の先頭に移動)を意味しているので、

 行先頭の “>” を待つことで、キットからの返信を待ってから、次の行を送信します。

 wait コマンドは、指定したデータが来るまで待ちますが、
 timeoutを設定することで、指定した待機時間が経過してもデータが来なかったら、
 変数resultに0がセットされます。

 timeoutはwaitよりも前に設定し、ここでは、timeout = 5 にすることで、
 5秒間返信がなければ、時間切れを画面に通知して、処理を終了させています。

⑦messagebox <メッセージ> <タイトル>
 タイトル画面のウィンドウが開き、メッセージを表示します。

 ここでは、メッセージをbufにすることで、送信したデータを表示させ、
 ウィンドウ画面のタイトルを「時間切れ」にしてます。

⑧dispstr <文字列1> <文字列2> …
 文字列をTera Term画面に表示させます。
 この文字列は表示するだけで、送信しません。

 ここでは、ASCIIコードの13(CR)と10(LF)で、カーソルを改行して行の先頭に移動させ、
 そこから、文字 「**** “G”キーでプログラム実行 ****」を画面表示してから、
 再び、13と10で改行&先頭に移動してから、コマンドプロンプト “>” を表示させています。

⑨fileclose <ファイルハンドル>
 指定したファイルハンドルのファイルを閉じるコマンドです。
 これにより、ファイルハンドルの指定が解除されます。

 このマクロを動作させた時の画面は以下になります。



マクロファイル例2:受信データをテキストファイルに保存する

受信したデータをPC内のファイルに保存するマクロです。
ここでは、マクロファイル名を “プログラムの保存.ttl” とつけました。

キットには、ロードされているプログラムを画面表示させる機能があるので、
それを利用して、マイコン内のプログラムをファイルに保存できるようにしました。

ここでは例1で説明した内容以外について解説します。

①fileopen <ファイルハンドル> <ファイル名> < 0(又は0以外) >
 このコマンドは例1でも使用しましたが、
 今回は、パスで場所を指定(C:¥Users¥user1¥Documents)しています。
 この場所にoutput.txtが無ければ自動的に生成し、あれば、そのファイルに書込みます。

 既にファイル内にデータが記載されていた場合、
 末尾が”0″だと、ファイルの先頭から上書きしますが、
 “0” 以外にすると、上書きせずに、最後の行から追加で書込みます。

②recvln
 一行分の文字を受信し、システム変数 inputstr に格納します。

 timeoutを設定することで、指定した待機時間が経過してもデータが来なかったら、
 変数resultに0がセットされます。(受信すると1がセット)

 このresultを利用し、while文により、
 受信データが来なくなるまでファイルに繰り返し書込む処理を行っています。

③filewriteln <ファイルハンドル> <変数>
 変数の内容を改行(CR+LF)付きで、ファイルハンドル で指定されたファイルに書込みます。

 ここでは、変数inputstr に入っている1行分のデータを
 ファイルハンドルfhで指定されたファイルoutput.txtに保存します。
 書込み後、ファイルポインタは、次回のため、次の行に自動的に移動します。

 このマクロを動作させた時の画面は以下になります。

ファイルoutput.txtに保存されたプログラムコードは、
各行の先頭にある空白スペースと、最後のプロンプト “>” を削除すれば、
例1のマクロでプログラムをロードすることができます。

★PICマイコン用プログラム開発ソフト(MPLAB)の使い方について解説しています。