【初心者向け】Ubuntuでserial通信のデータを確認する方法
マイコンとPC間で通信するアプリでは、そもそも通信できているか確認したいことが良くあります。Ubuntuでシリアル通信を確認する場合、どのようにすれば良いのか忘れないようにするために、メモ書きとして残しています。
この記事では一例として、マイコンボードにRaspberry Pi Picoを使い、Picoから送信されるデータがUbuntu PCで受信できるか確認する方法を紹介しています。
目次
開発環境
送信側
- マイコンボード: Raspberry Pi Pico
- 開発IDE: Thonny
- 開発言語: MicroPython
受信側
- 検証OS: 64-bit(Debian Linux 11 / Ubuntu 20.04)
- 確認ツール: PuTTY SSH Client (WindowsのTeraTermに相当)
マイコンプログラミング
基板に搭載済の温度センサを使い、2秒間隔で温度データを送信するようにプログラムしました。
コードについては、MicroPython で Raspberry Pi PicoのRP2040内蔵温度センサーから温度を取得を参考にさせて頂きました。
Thonnyの使い方などは、以前の記事【Debian 11】初心者向けRaspberry Pi Picoの開発環境構築をご参照ください。
MicroPythonのコードサンプル
from machine import Pin, ADC
import time
led = Pin(25, Pin.OUT)
temp_data = ADC(4) # Connect to the internal temperature sensor
keisu = 3.3/65535
while True:
led.toggle()
read_data = temp_data.read_u16()*keisu
temprature = 27 -(read_data - 0.706)/0.001721
print(str(temprature))
time.sleep(2)
このコードに通信速度の設定がありませんが正常に動作しています。USBシリアル通信自体にはポートレートの指定が不要なことが多いようです。デフォルトのポートレートは115200bpsに設定されていますが、それ以外でも動作します。ここでは9600bpsと設定しています。
受信結果
LinuxにはWindowsで言うところのCOMポートがありません。その代わり「/dev/ttyUSB0」等で表記されます。
調べ方は、マイコンボードを挿入したら、Linuxのターミナルを開いて下記のコマンド(ls -al /dev/serial/by-id/)を打ちます。
確認のコマンド
$ ls -al /dev/serial/by-id/
lrwxrwxrwx ***省略**
usb-MicroPython_Board_in_FS_mode_e660a49317382b2c-if00
-> ../../ttyACM0
シンボリックが張られていて、実態は階層が2個上のttyACM0ということなので、この場合COMポートに当たるのは、「ttyACM0」と判断できます。
ターミナルのPuTTYで指定する時はこの「ttyACM0」を使います。
PuTTYの起動画面
Categoryの下側にある「Connection」-「SSH」-「Serial」を選択すると、serial通信の詳細があります。
確認してOKなら、「Open」ボタンをクリックすれば接続が開始できます。
受信結果
以上です。簡単でした。