メインコンテンツに移動

UART

VisualStudioでシリアル送受信

mbedでシリアル通信部分を作成し、Teratermで送受信するのはよくやることであるが、大量のデータあるいは、もっと高速にするとなると、teratermの画面表示がボトルネックで追いつかなくなる。たとえば、PCの清野にもよるだろうが、1ms間隔でデータを受け取るなど。。

そこで、pyserialを使ってpythonで受信する方法があるが、これはこれで遠くに課題はないのだが、唯一止めたいときに、consoleでCTRL-Cを押してブレークしないといけないところ。また人にこうやってというにはpythonの導入から始まりどうやって使うかを教えてあげないといけないという敷居がある。そこで、アプリにできないかな、と考えた。

SerialPort

VisualStudio2022のそのままだと、SerialPortのToolが出てこない。ググった結果、プロジェクトにあるNugetパッケージの管理で追加でパッケージを入れればよいようだ。

まずは、何か適当なプロジェクトを作って、Nugetパッケージ管理を選ぶ

mbedでLM61温度を知る

シリアルで読み込みができているみたいだから、mbedで取得してみた。

最近Pythonずっといじってたためか、配列の要素取り出すのに、スライスするというのが頭にこびりついていて、要素ごと取り出して計算させていたが、1日ぐらいでようやく、頭がすっきりしてきた。年取ると、頭の切り替えしにえらく時間がかかる。

PythonでLM61温度を知る。

温度が計算通りきちんと反映されるかを知りたくて、Teratermの表示を流れているをみていたが、よくわかならい。VitualBoxでデータを加工する方法ならPythonがいいが、それだったらMacでできないのかなって調べたらできそうだった。

PySerial

PySerialを使えばMacでも、PythonでUSB-UART変換で使えそうな感じだ。で、やってみた。

Anacondaの初期状態での”installed"には含まれていなかったのでPythonターミナルで

$ conda install pyserial

でインストールして使用する。

上のページでも書いたが、Macのterminalから接続デバイスをまず探しておく。そのときはVirtualBoxで使用しているポートを外しておいてやらないといけない。VirtualBoxで掴んでいると、ここには表示されないみたいだった。私の場合、下記コマンドで4つ表示された。

TWE-Lite

MONO WIRELESS(私が購入した時はTOCOSだった)の簡単無線モジュールです、

モード設定で親にも子にもなり、信号端子が同期するという、アプリがもともと入っています。クイックガイドの通りやれば、いとも簡単に無線通信ができてしまうのですが、親の方にmbedとかをつないでUARTでデータをとることを考えたとき、UARTのデータが仕様がはっきりわからなくて(当時)webにもなんか書いてあったけど、TIみたくまとまりなくていまいち頭に入ってこなかった。走行するうちに仕事が忙しくなり、そのままに放置していた。その数年後、不幸にもコロナ禍でようやく時間が取れるようになったので、もう一度トライしてみようということになった。

あいかわらず、簡単部分は分かりやすいが、webのページはあちこち飛ばされるせいで分かりづらい。みりゃわかるでしょみたいなものはたくさんあると思うが、確認しながらの結果を覚え書き(自分のための)として書いておく。

今回、ADに温度センサLM61をつけたかった。子機にLM61をつけて遠方に置き、親機は手元で液晶表示させるような使い方。最終的には、子機を数台設置して複数の場所を表示する。