PCとマイコンのシリアル通信方法

このQ&Aのポイント
  • PCとマイコンのシリアル通信について考えています。TeraTermを使用してバイナリ形式での通信を行いたいです。
  • 具体的な例として、マイコンボード上に実装されたトグルSWとLEDランプの状態をPCから操作する方法について教えてください。
  • TeraTermの記述方法やコマンドについても詳しく教えてください。
回答を見る
  • ベストアンサー

PCとマイコンとのシリアル通信

マイコンとパソコンでシリアル通信を考えています。 WEB検索すると「TeraTerm」というソフトにたどり着きました。 通信はバイナリです。(ASCII文字でのやり取りは行いません) 例えば、  マイコンボード上にトグルSWとLEDランプが実装されているとします。  ・PCからトグルSWコマンド「0Ah」をマイコンに送信。  ・マイコンはトグルSWの状態をONなら「00h」をOFFなら「01h」をPCに返信。  ・PCは返信データが「00h」なら、LED点灯コマンド「0Ch」をマイコンに送信。  ・PCは返信データが「01h」なら、LED消灯コマンド「0Dh」をマイコンに送信。 みたいなことを行いたいです。 TeraTermでどのように記述してよいかわからないです。 このへんを教えてくださいよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • lumiheart
  • ベストアンサー率47% (1098/2290)
回答No.7

回答6です >ラインモニタ機は単なるモニタ機ですか? モニタ機能(監視、解析)がメインであり送信機能は付録です 必ずしも送信できるとは限らない デバッグ、解析するための補助機能として送信可能と謂うだけです >受信したデータの内容に応じて次の送信データを送るようなアプリソフト Tera Termマクロ機能で実現可能ですが https://mag.osdn.jp/10/01/08/0825239 http://www.macrosh.com/tera-termmakuronitsuite/komando-yi-lan TeraTermマクロ機能を勉強してプログラムするヒマが有るなら VBやC#で出来てしまった < 私自身の経験 Visual Basic でシリアル ポートに文字列を送信する https://docs.microsoft.com/ja-jp/dotnet/visual-basic/developing-apps/programming/computer-resources/how-to-send-strings-to-serial-ports https://docs.microsoft.com/ja-jp/dotnet/visual-basic/developing-apps/programming/computer-resources/how-to-receive-strings-from-serial-ports SerialPort.Read メソッド https://docs.microsoft.com/ja-jp/dotnet/api/system.io.ports.serialport.read?view=dotnet-plat-ext-6.0 SerialPort.Write メソッド https://docs.microsoft.com/ja-jp/dotnet/api/system.io.ports.serialport.write?view=dotnet-plat-ext-6.0

EGA4545
質問者

お礼

ありがとうございます。 VBやるしかなさそうですね。 さて、今回の質問ですが、何故「HelloWord」に飛び火しのか 個人的に納得いかないですが。 いろいろご教授頂きありがとうございました。

その他の回答 (6)

  • lumiheart
  • ベストアンサー率47% (1098/2290)
回答No.6

回答2です >VisualBasicでこの辺のアプリを作るのが良いかもしれませんが、時間がかかるので 使えるヤツを使えば1時間も掛からん VB.NETシリアル通信 サンプルプログラム https://www.kana-soft.com/tech/sample_0008.htm C# シリアル通信 サンプルプログラム https://www.kana-soft.com/tech/sample_0007.htm サンプルとは言え前回に挙げたラインモニタの必要最低限機能はある ただ、バイナリではなくてテキストだけど でも表示がテキストなだけでバイナリ送受信可能なプログラムです テキスト<->Hex変換プログラムを追加するだけ ラインモニタの本当の使用目的は このような通信系プログラムのデバッグするのが目的です 通信系プログラムにバグが有って通信できないと どこにバグがあるのかを検出するは非常に困難 タイミングが合わなかったり、通信したデータが想定と違ってたり なので実際に送受信してる電文を外部のモニタ装置で監視する >やっぱり ハローワールドからだった 通信系プログラムのデバッグで一番最初にしなければならない事は "hello worldを送受信させる事から始まる https://ja.wikipedia.org/wiki/Hello_world

EGA4545
質問者

補足

話を整理します。  ①マイコンの通信プログラムの話(例:UART)  ②PCとマイコンとの通信を行うアプリ(ソフト)の話 私の質問は②です。 ①はできています。←①は正しくできているという意味。 なので「HelloWorld」のようなことは行う必要はありません。 紹介頂いた「VB.NETシリアル通信 サンプルプログラム」をのようなものを作りたい(もしくは探しています)です。 ここで質問です。 ラインモニタ機は単なるモニタ機ですか? ラインモニタ機とPC4を組み合わせれば、元の例のようなことができるのでしょうか? ただ単にモニタするだけではなく、最初の例で示したように受信したデータの内容に応じて次の送信データを送るようなアプリソフトが欲しいのです。(作りたいです) ラインモニタ上でちょっとしたプログラムが作れるのでしょうか?

  • hahaha8635
  • ベストアンサー率22% (800/3609)
回答No.5

ね やっぱり ハローワールドからだった UART 歯通信プロトコルです https://www.analog.com/jp/analog-dialogue/articles/uart-a-hardware-communication-protocol.html マイコン側が何かわからないが アルディノ? ラズパイ? https://www.renesas.com/jp/ja/support/engineer-school/mcu-programming-peripherals-03-serial-communication に書かれてる サンプルプリグラムが必要になります

回答No.4

eraTermは、テキストメッセージを主眼とした通信端末ソフトウェアです。ですので、バイナリ通信のみを行うには全く向いていません。 ある程度はCtrlキーとの同時押しで対処できるけど、凄く複雑になります。 開発停止して久しい古いソフトですが、Vectorにてskohno氏の公開する「シリアル通信解析ツール ComT」が、かなりバイナリ通信においては非常に使いやすいです。 https://www.vector.co.jp/soft/win95/hardware/se471464.html 同様に、VectorにてYARD 氏の公開するRs232cというソフトウェアも、かなり、使いやすいです。 先述のComTとは一長一短で、場合によって使い分けています。 https://www.vector.co.jp/soft/win95/hardware/se369900.html 両ソフト共にWindows10 21H2までは正常に動いています。 シンプルなソフトですので、使い方はソフト付属のドキュメントですぐにわかると思います。

  • hahaha8635
  • ベストアンサー率22% (800/3609)
回答No.3

それ以前の問題だと思うが マイコン側に通信ソフトいれましたか? まずは ハローワールドとLチカからのレベルからだと思うが

EGA4545
質問者

補足

>それ以前の問題だと思うが それ以前とはどう意味ですか? それ以前という回答が意味不明です。 >マイコン側に通信ソフトいれましたか? 通信ソフトとは何ですか?意味が通じません? マイコンにはuart通信の機能があります。それを使います。 マイコンをと言うのを知っていますか?

  • lumiheart
  • ベストアンサー率47% (1098/2290)
回答No.2

はっきり言ってTeraTermはバイナリ通信には不向きです 使えないわけではないがぁ、使いたくない 会社指定でTeraTerm限定で他のソフトは使用禁止とかなら別ですが なにもわざわざTeraTermを使う必要はないでしょう TeraTermはテキスト通信(Ascii)が主な用途、バイナリ通信は得意ではない ラインモニタ https://www.lineeye.co.jp/html/product_le1200.html https://www.fukufukudenshi.jp/v2/LineMonitor/ http://www.frientech.com/lw232c.html 上記は専用のハードウエアですが パソコンソフトのラインモニタ https://www.vector.co.jp/soft/win95/hardware/se423507.html https://www.vector.co.jp/soft/win95/hardware/se471464.html これらを使ってみれば? バイナリデータを受信してHEX表示してくれる 更に、バイナリデータの送信も可能だし

EGA4545
質問者

補足

貴重なご意見ありがとうございます。 TeraTerm以外でも全然構わないです。 補足します。 質問で述べた例はあくまでも例です。 要はPCからマイコンに「○○をON/OFFしなさい」と命令したり、「スイッチの状態を確認」したりしたいのです。 また、マイコンからの返事によって、次の命令を使い分けたりしたいのです。 VisualBasicでこの辺のアプリを作るのが良いかもしれませんが、時間がかかるので、代用できる既存のものがないか探していたのです。 ご紹介いただいたsoftを見てみます。

  • kaba__san
  • ベストアンサー率46% (27/58)
回答No.1

「TeraTerm」「バイナリ」で検索すればいくらでも説明が見つかります。 それよりもそのデータの仕様を「40h」だけシフトすればテストが劇的に簡単になり開発が早くなりますよ。  ・PCからトグルSWコマンド「4Ah」(「J」キー)をマイコンに送信。  ・マイコンはトグルSWの状態をONなら「40h」をOFFなら「41h」をPCに返信。(テキストモードで@かAが表示される)  ・PCは返信データが「40h(@)」なら、LED点灯コマンド「4Ch」(「K」キー)をマイコンに送信。  ・PCは返信データが「41h(A)」なら、LED消灯コマンド「4Dh」(「L」キー)をマイコンに送信。

EGA4545
質問者

補足

質問の例はあくまで例です。 PCからマイコンに「○○をON/OFFしなさい」と命令したり、「マイコンボードのスイッチの状態を確認」したりしたいのです。 また、マイコンからの返事によって、次の命令を使い分けたりしたいのです。 teratermのような通信ソフト上で「if文やswitch-case文を使って、マイコンからの返信データを解析して、それに応じた命令を送る」のようなことがしたいのです。 求めているのは単なるラインモニタではないです。

関連するQ&A

  • パソコンを使ってマイコンとシリアル通信

    マイコンでソフトを開発してる組み込み系の技術者です。 例えば、PCからマイコンへ  UART, 9600bps, StopBit=1, LSBファースト、バイナリ通信 で送受信したいです。 PCから送信してマイコンからデータが返信されるのを確認したいです。 単純に送信して受信してだけでなく、 例えば、0x00を受信したら、次の送信を行い、 0x00以外なら再び同じ送信を行うなどのようなことがしたいです。 また、受信してから所定時間後に次の送信を行うなどです。 要するに、受信条件で次の送信をきりわけたいです。 例えば、VB2010だとある特定の数字を受信すると、停止コマンドとみなし、 通信が終了してしまうと聞いたことがあります。 また、VBだともろにソフトを組むことになり、そのソフト作成が大変そうです。 できるだけ簡単な記述で実現させたいです。 説明がうまくできなくてすいません。 ご存知の方、教えてください。

  • マイコンのシリアル通信

    マイコンでシリアル通信を用いてセンサのデータを取得したいのですが、このセンサのシリアル通信の設定がストップビット2、奇数パリティとマイコンでシリアル通信をするのにやっかいな設定となっています。また取得したセンサデータをシリアル通信を用いてPCに送りたいと考えているのでマイコンのシリアルは2ch必要です。私もいろいろ探しているのですが、なかなか条件を満たすマイコン(ストップビット2対応、シリアル2ch、A/D2ch)が見つかりません。どなたか情報ありましたら教えてください。よろしくお願いします。できればDIPタイプのマイコンを探しています。

  • H8マイコンとPCをUSBでシリアル通信

    H8マイコンとPCをUSBでシリアル通信 マイコン( H8/2215 )をUSBでPCと繋ぎ、RAM上にあるデータを シリアル通信で送りたいと思っています。 現在、書籍のサンプルソースを参考に図1のような構成で プログラムを実行すれば H8/2215 から PC_1 へデータが送れる ことを確認しました。 しかし、図2の構成で実行するとデータが送れません。 また、PCとは繋がず RS232C のケーブルだけをマイコンにさせば なぜか問題なく動作します。 このような状態なので、プログラムを試行錯誤しながら調整 しているのですがなかなかうまく通信出来ません。 図2のような構成でシリアル通信したい場合、どこをどんな風に 調整すれば良いのでしょうか? 参考URLでも何でも構いませんのでアドバイスお願いします。 図1  PC_1 <--- USB ---> H8/2215 <--- RS232C ---> PC_2 図2  PC_1 <--- USB ---> H8/2215 <サンプルソースの書籍> 「USBターゲット機器開発のすべて」(CQ出版社)  サンプルソースはルネサスのH8S/2215用USB-シリアル  変換サンプル・プログラム

  • マイコンを用いたバイナリー形式での通信の方法

    以下のようなハード環境とプログラムで、マイコンの変数値をPCへ取り込む環境(データロガー)を実現しております。ただし、更にデータの取り込み速度を向上させたく考えておりますが、その手段として、”バイナリー形式”での通信が適用できると情報を得ておりますが、具体的な手法が不明です。よろしくご教授をお願いします。 <環境> ・H8マイコン ・RS-232CでPCと接続 ・PCでのデータ取得は、ハイパーターミナルを利用 <プログラム> (1)送信する部分 H8のSCI3を利用して、1文字ずつ送信 以下具体的に作成したプログラムです void sci3_tx(char data){ while (SCI3.SSR.BIT.TDRE==0); SCI3.TDR=data; } (2)実際の送信 "1234"(←千二百三十四)と"3456"(←三千四百五十六)というデータを連続して送信したい場合には、 sci3_tx(1+48); sci3_tx(2+48); sci3_tx(3+48); sci3_tx(4+48); sci3_tx('\r'); sci3_tx('\n'); sci3_tx(3+48); sci3_tx(4+48); sci3_tx(5+48); sci3_tx(6+48); sci3_tx('\r'); sci3_tx('\n'); と処理し、ハイパーターミナルでデータを保存して、"1234"と"3456"を取り出しています。 <ご質問の詳細> (1) 上記のように2つの数値をバイナリー形式で送信するためには、どのように実施したらよいのでしょうか? 例えば、バイナリーの場合2の8乗であるので、 1234を送信する場合、255+255+255+255+214で、11111111、11111111、11111111、11111111、 11010110と送信して、加算処理をすればよろしいでしょうか? (→255を11111111と送信するプログラムもいまいち不明ですが) (2)バイナリー形式で送信する際の送信始め/終わりの区切りはどのように考えたらよろしいでしょうか? (3)バイナリー形式を受信できるソフト(ハイパーターミナルに対応するもの)は、何になりますでしょうか? 以上、いくつかのご質問をさせていただきましたが、参考となる情報(Web、書籍)がありましたら、合せてご紹介をお願いいたします。

  • VCでマイコンからのログ取得

    PCとマイコンをUSBシリアルケーブルで接続し、指定したコマンドでマイコンからのログを取得 およびマイコンの操作を行いたいのですが、やり方が分かりません。 開発環境はWindows Visual Studio C++です。 Teratermのようにあるコマンドを入力すると ログが表示されるようなGUIを作成したいと思っています。 USBからデータを受信あるいは送信するにはどのようなコードを書けば良いのでしょうか。

  • C言語によってシリアル通信をおこないたいのですが

    PCとマイコンとでシリアル通信でデータの受け渡しを行いたいのですがよくわかりません。 PC←マイコン方向はハーイパーターミナルを使え値を確認できるのでよいのですが、PC→マイコンの方向でのプログラムがわかりません何か参考になるものはありませんか? PCはVC++を使用しています。 マイコンはH8/3664です。

  • シリアルポート通信

    VB6でシリアルポート通信を行っているものです。 22byteと26byteのデータをバイナリ受信したいのですが、異なるデータ長のデータをうまく取り込む方法がわかりません。 現状は、26byteのみで運用していたため InputLen=26 RThreshold=25 として運用していました。 22byteのときも26byteの時もスタートコード(02h)とエンドコード(0dh)が付きます。 この手のソフト制作が得意な方がいらっしゃいましたら、ご教示いただきたく。 InputLenとRThresholdの意味合いについてもご存じでしたら、教えてください。

  • Arduino互換機によるシリアル通信機機器制御

    Arduino互換、Japaninoでシリアル通信による蛍光表示管(VFD)モジュールの制御を行いたいのですが、どうすればいいでしょうか。 蛍光表示管(VFD)モジュールはFUTABA製のGP-1150Aという製品で、PCとはRS-232Cのシリアル通信にて制御できます。 例えば、 HyperTerminalで、あいうえおと入力すれば、VFDに「あいうえお」と表示され、 ESCを押して、[2J(消去コマンド)を入力すれば、モジュールがコマンドと認識して、画面が消去されます。 また、バイナリ形式で上記コマンドを16進に置き換えた、1B5B324Aというバイナリデータを送信しても画面を消すことが出来ます。 今、分かっていること ・VFDモジュールはPCとシリアル通信にて制御が出来る ・バイナリエディタで、コマンド+日本語データを作り、バイナリデータを送ればVFDモジュールを意のままに操作できる。 ・Japaninoと、VFDモジュールは、そのままでは通信が出来ない。 ・JapaninoとVFDモジュールの通信には、MAX232互換チップ等のレベル変換ICが必要 分からないこと ・どのようにJapaninoとMAX232を接続すればよいか ・スケッチをどのように書けば、バイナリデータを送ることが出来るのか。 ・Japanino上に設置されたボタン or 追加したボタンを押すことにより、データがVFD側に送られるようにする。 です。 アドバイス等、頂ければ幸いです。 どうぞよろしくお願いします。

  • シリアル通信バイナリー変換

    機器とのシリアル通信をテラタームで行っています。 この機器の入力送信モードに入るためには、テラターム上でCtrl+kを押す必要があります。 このとき、機器へはどのようなデータがおくられているのでしょうか? テラタームを使わずに送信しようとしています。そこで、キー「Ctrl」「k」をバイナリーで送信してみましたが、入力送信モードにはいることができませんでした。バイナリーでの送信は、単純に「Ctrl」「k」を順に送っているだけで、テラタームで「Ctrl+k」を押したとき送信される情報とは違っているのではと推測しています。ただそのバイナリー情報は何にあたるのかがわからないでいます。ご教授お願いします。

  • teratermではシリアル通信出来るのですが・・

    現在アームロボットをPCからシリアルで送って制御するプログラムを作りたいと思っております。 現在Teratermからコマンドを送ってアームロボットが動く事は確認出来ております。 ただ、そこからC#にてプログラムを作成して動かそうとするとどうしてもコマンドを受け付けてくれません。 Teratermの設定は  ボーレート9600bps  データ長8bit  パリティnone  ストップビット 1bit  フロー制御 non です。 これで接続して「NT」と打ってリターンを押すと ロボットが原点復帰動作をします。 一方C#では  SerialPort port = new System.IO.Ports.SerialPort("COM2",9600,Parity.None,8,StopBits.One);  port.Open();  port.Write("NT");  port.Close();  port.Dispose(); と記述して実行しますが動きません。 改行コードが怪しいと思い、teratermで改行コードを CRからCR+LFに変更してみましたが問題なく動きます。 teraterm以外にもシリアル通信チェッカーv4.1.0 を試しましたが動きませんでした。 teratermは何か特別な仕様なのでしょうか? 何か見落としている設定項目ありますでしょうか? どうぞアドバイスよろしくお願い致します。