Pico PR

【直結】RaspberryPi Pico MicroPythonでUARTを使う方法 【RaspberryPi2に接続編】

記事内に商品プロモーションを含む場合があります

はじめに

RaspberryPi PicoでUARTを使う方法を解説します。言語はMicroPython、接続先にはRaspberryPi(ラズパイ)のUARTピンを使います。

UARTより「RS232Cのシリアル通信」と呼んでいる方も多いかもしれません。通常のPCとつなぐこともできますが、USB-シリアル変換ケーブルなどが必要になるため、今回はRaspberryPiと接続して解説します。

RaspberryPiで、UARTを使う際の参考にもなると思うので、Pico / RaspberryPi でシリアル通信を使いたい方はぜひご覧ください。

環境

この記事は以下の環境で作成しています。

環境 バージョンなど 備考
RaspberryPi 2 Model B
OS RaspberryPi OS (bullseye) 32bit版です
RaspberryPi Pico
開発環境 Thonny Ver.3.3.13

RaspberryPi Picoとの接続

PicoとRaspberryPiの「TxD」「RxD」「GND」を以下のように接続します。

PicoとRaspberryPiの接続方法を説明する画像

RaspberryPi Pico RaspberryPi 2
ピン番号  内容  ピン番号  内容
1 UART0 TxD 10 RxD
2 UART0 RxD 8 TxD
3 GND 6 GND

TxDは「口」に相当する「送信専用」のピンで、RxDは「耳」に相当する「受信専用」のピンです。そのため、お互いのTxD(口)とRxD(耳)がつながるように配線してください。

Picoピンアサイン(Pin-Out)

RaspberryPi Picoのピンアサイン(pinout)の画像

Pico公式サイトより引用

RaspberryPi ピンアサイン(Pin-Out)

RaspberryPiのピンアサインを説明する図

RaspberryPi 公式のGitHubより引用

使用する部品 

今回使用する部品は以下の通りです。

RaspberryPi 4 (8GBモデル)

解説はRaspberryPi 「2」 ですが、今買うなら、性能が大幅アップした「4」がおすすめです。 後継機なのでピンアサインは同一で、解説と同じように使えます。

\楽天ポイント4倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

ジャンプワイヤ (オス-メス タイプ)

RaspberryPiで使う場合は、以下のオスーメスタイプがおすすめです。

\楽天ポイント4倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

エネループ

使い捨ての乾電池もいいですが、エネループなら4本充電時の電気代が約1円。モーター・ポンプなどの電池が消耗しやすい実験・工作におすすめです。

※ はじめて使う方は充電器とのセットがおすすめです

電池ボックス

電源に使用する乾電池用のボックスとスナップです。記事では単4を使っていますが、容量の大きい単3タイプをお勧めします。単3でも単4でも電圧は変わりません。

プログラム概要

今回のプログラムの概要は以下の通りです。RaspberryPi側はプログラムではなく、端末上のコマンドでデータを入出力します。

  • UARTを初期設定する
  • Picoから送信する
  • Picoで受信する

実行結果

後述するプログラムの実行結果です。Pico – RaspberryPi間でUARTの通信を行うとことができます。

Picoからの送信

送信時の実行結果です。Picoから送信されたデータ「12345」がRaspberryPiの端末上に表示されています。(Pico側には送信成功時のエコーバックが表示されています)

Picoから送信したデータを説明する画像
Picoからデータ送信・エコーバックの受信
RaspsberryPiで受信したデータを説明する画像
RaspberryPiの端末で受信データを表示

Picoでの受信

受信時の実行結果です。RaspberryPiの端末から入力されたデータが「ABCDE」がThonny上に表示されています。

RaspberryPiが送信するデータを説見えする画像
RaspberryPiの端末からデータを送信
Picoでデータを受信

RaspberryPiのUART(シリアル)設定

RaspberryPiでは、デフォルトでUARTの機能が無効化されています。初めてUARTの機能を使う場合は、こちらの記事を参考に「シリアル通信の有効化」を行ってください。

全体コード

全体コードは以下の通りです。詳細な内容は後述する「コードのポイント」で解説します。

from machine import Pin, I2C, UART
import time

# UARTの初期化です。
# UARTの番号とボーレートを指定します。
uart = UART(0, 9600)
#uart = UART(0, 115200)

# init関数はエラーになるので使用できません。
#uart.init(115200,bits=8, parity=None, stop=1 )

#
# データの送信処理です
# 注意:末尾に「\r」をつけないと、データが送信されません。
#
uart.write("12345\r")
print("write done")

#
# データの受信処理です
# 1byteずつ読み込んで表示しています。
#
print("read start")

for i in range(1000):
    buf = uart.read(1)
    print(buf)
    
    time.sleep_ms(1000)
    

コードのポイント

UARTを初期設定する

UARTのコンストラクタで、「UARTの番号」「ボーレート」を設定します。

「UARTの番号」にはピンアサイン(PinOut)の記載に従って、使用しているピンのUARTの番号(UART0 or 1)を指定します。

「ボーレート」には、通信相手と同じ数値を設定します。今回はRasberryPi側の初期設定に合わせて「9600」に設定しています。「115200」などよく使われる値も使用できます。

# UARTの初期化です。
# UARTの番号とボーレートを指定します。
uart = UART(0, 9600)
#uart = UART(0, 115200)

# init関数はエラーになるので使用できません。
#uart.init(115200,bits=8, parity=None, stop=1 )

init関数は構文エラーになるので、Picoでは使えないようです。

公式リファレンスのPico(RP2040)の項目にも、コンストラクタでピンを指定する方法しか記載がありませんでした。

Picoから送信する

RaspberryPiに「12345」の文字列を送ります。Write関数では、「\r」をつけないとデータが送信されないので注意してください。

#
# データの送信処理です
# 注意:末尾に「\r」をつけないと、データが送信されません。
#
uart.write("12345\r")
print("write done")

RaspberryPi側では、以下のコマンドで受信データを表示してください。

cat /dev/ttyAMA0

Picoで受信する

RaspberryPiから受信したデータを1byteずつ表示します。RaspberryPiの端末から、以下のコマンドでデータをPicoに送信してください。

echo "ABCDE" > /dev/ttyAMA0

#
# データの受信処理です
# 1byteずつ読み込んで表示しています。
#
print("read start")

for i in range(1000):
    buf = uart.read(1)
    print(buf)
    
    time.sleep_ms(1000)
    

まとめ

RaspberryPi Pico / RaspberryPi でUART(RS232Cのシリアル通信)を使う方法について解説しました。

PicoとRaspberryPiをつなぐ方法は、意外とネットに情報が少ない印象だったので記事にまとめてみました。参考になればうれしいです。

お知らせ

今月号のInterfaceは『RaspberryPi 5』特集

3月25日発売のInterfaceは「RaspberryPi 5」特集!

実験などを通じた性能測定や特徴・変更点の解説。新規に追加されたI/Oボード「RP1」の特徴と謎。Pi5のはじめかたやLinuxコマンド入門などが特集されています。

CQ出版
¥1,430 (2024/03/24 17:23時点 | Amazon調べ)
\楽天ポイント4倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

Pico/Pico W関連のおすすめ本

RaspberryPi Pico / Pico W関連のおすすめ本を独断と偏見で3つ選んでみました。Picoやるならとりあえずこれ買っとけ的な本や、電子工作全般で使える本などを厳選しています。

見た目のいい工具をお探しの方へ

よく使うツールは『見た目』が重要。モチベもあがりますし、仲間との話のネタにもなります。以下のサイトは、デザイン性の高い工具が集めたサイトなので、興味がある方はぜひご覧ください。

質問・要望 大歓迎です

「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。

使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

【Python】Raspberry pi Pico でシリアル通信 – DiNOV株式会社 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Index