【初心者向け】Ubuntuでserial通信のデータを確認する方法

マイコンとPC間で通信するアプリでは、そもそも通信できているか確認したいことが良くあります。Ubuntuでシリアル通信を確認する場合、どのようにすれば良いのか忘れないようにするために、メモ書きとして残しています。

この記事では一例として、マイコンボードにRaspberry Pi Picoを使い、Picoから送信されるデータがUbuntu PCで受信できるか確認する方法を紹介しています。

開発環境

送信側
  1. マイコンボード: Raspberry Pi Pico
  2. 開発IDE: Thonny
  3. 開発言語: MicroPython
受信側
  1. 検証OS: 64-bit(Debian Linux 11 / Ubuntu 20.04)
  2. 確認ツール: 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」ボタンをクリックすれば接続が開始できます。

受信結果

以上です。簡単でした。

Follow me!