注目キーワード

【Arduino】Raspberry Pi Pico/W のPIOでUART送受信するぞ!(PIO : UART送受信)

すけろく
Raspberry Pi Pico/WのPIO機能を使ってUARTの送信には成功した。
しかし、まだ受信側ができていないのぉ。
げんろく
そうだな。
今度は受信側を試してみるか。
すけろく
どうせなら、パソコンから送った文字を返すような
やり取りができるといいな。
げんろく
よし。
UART送受信を実装してみよう。

この記事では、「Raspberry Pi  Pico/W」に実装されている「PIO(Programmable I/O」を使って、実際に使ってみます。

まずは第二弾として、「UART送受信」機能を「PIO(Programmable I/O」を使って実装します。

microPythonやC言語でのプログラム例はあるものの、Arduino IDEを使った例はあまりないので、ぜひチェックしてくださいね!

Raspberry Pi の中でも、省電力なCPUを搭載したマイコン開発ボードです。

他のRaspberry Pi 製品とは異なり、Linux OSを搭載していません。

しかし省スペース、省電力の専用CPU「RP2040」を搭載していて、Arduino IDEや、MicroPythonで開発可能です。

しかも、Wi-FiとBluetoothが使用できるモジュールも搭載されているので、スタンドアロンでの稼働のみならず、他のマイコンと無線通信することが可能です。

 

今回の目標
PIO(Programmable I/O」を使って「Raspberry Pi  Pico/W」にUARTで送信した文字をUARTで返すプログラムを実装します。
プログラムとしては、UARTの送信機能と受信機能の両方を実装します。
開発環境としては、Arduino IDEを使います。

Raspberry Pi  Pico/W」の特徴でもある「PIO(Programmable I/O」について身に着けるために、

UARTのような基本的な機能を実装することで理解を深めていくことが大切です。

ぜひ、皆さんも挑戦してみてくださいね!

この記事の前提となる「Raspberry Pi  Pico W」のはじめかたは、次の記事で紹介しています。

関連記事

すけろく ついに、国内でもRaspberry Pi Pico Wを手に入れたぞ! げんろく Wi-Fiモジュールがついているので、 国内の技適取得が必要だったからな。 すけろ[…]

あわせて読みたい!「Raspberry Pi  Pico W」関連の便利記事

関連記事

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico[…]

今回の記事の対象となるマイコンはこちら!

Raspberry Pi Pico

created by Rinker
Raspberry Pi
¥1,270 (2024/04/29 18:14:23時点 Amazon調べ-詳細)

Raspberry Pi Pico W

ピンヘッダ実装済み

created by Rinker
ノーブランド品
¥2,210 (2024/04/29 14:17:06時点 Amazon調べ-詳細)

ピンヘッダを自分ではんだ付けするもの

created by Rinker
Raspberrypi
¥1,635 (2024/04/29 06:55:05時点 Amazon調べ-詳細)

 

PIOとは Prgrammable I / O (Input / Output)の略で、端子の部分とマイコン中核部の仲介役をプログラマブルに行うことができるものです。

詳しい説明については、次の記事で紹介していますので、あわせて確認してくださいね!

 

PIOについては、次の記事でチェックしてね!

関連記事

すけろく Raspberry Pi Pico/Wには、PIOという機能があるらしいな。 げんろく そうだ。 UARTなどのインタフェース不足や、実装されていない機能を GPIOに対してプログラムでき[…]

 

PIOをArduino IDE で使う際の準備

PIOは、Raspberry Pi Pico SDKに含まれるpioasmを使ってC言語やPython用のプログラムをジェネレート(生成)します。

Arduino IDEも実際にはC言語での使い方に近い手順を取ります。

Raspberry Pi Pico SDKにあるpioasmは、ソースファイルのみ提供されています。

使うためにはコンパイルして実行形式ファイルに変換しなければなりません。

 

Arduino IDEでpioasmを使う方法は次の記事でチェックしてね!

関連記事

すけろく Raspberry Pi Pico/WのPIO機能については前回調べた。 今度は実際に使ってみたいの~ げんろく そうだな。 実際にプログラムする際の注意事項などを見ていこう。 […]

 

UARTとは?

UART(Universal Asynchronous Receiver/Transmitter:汎用非同期 受信/送信)は、Raspberry Pi Pico / W」とパソコン間など、異なるシステム間の通信で用いられます。

UARTは、「シリアル通信」で「非同期式」です。

 

UARTについては次の記事でチェックしてね!

関連記事

すけろく Raspberry Pi Pico/WのPIO機能については前回調べた。 今度は実際に使ってみたいの~ げんろく そうだな。 実際にプログラムする際の注意事項などを見ていこう。 […]

 

UART送信プログラムの作成

早速、UARTの送信機能と受信機能をつかえるようなプログラムを作成します。

UART通信のパラメータは次のものを使います。

パラメータ名 設定値
ボー・レート 115200
データ・ビット長 8ビット
パリティ even(偶数パリティ)
ストップビット長 1ビット
フロー制御 なし

 

今回は、送信機能と受信機能の動作を確認するため、別のマイコン(Picoprobe)からUARTで送信した文字を受信し、「Recieve:」という文字を追加して、送信元のマイコン(Picoprobe)に返信するようにプログラムします。

Picoprobeは、「Raspberry Pi Pico / W」上にプログラムのデバッグ機能を実装したものです。

今回UARTを実装する「Raspberry Pi Pico / W」とは別の「Raspberry Pi Pico / W」を一つ準備します。(全部で2つ使います)

 

Picoprobeの作り方については次の記事で紹介しています。

関連記事

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico[…]

 

GPIOは、本来「Raspberry Pi Pico / W」ではUART機能が実装されていないGPIOを使います。

送信(TX):GPIO2
受信(RX):GPIO3

 

PIOファイルを作成する

ノートパッドなどのテキストエディタを開いて、次のプログラムをコピーし、貼り付けます。

ソース内部にコメントを入れていますので、参考にしてください。

 

ファイルの拡張子を「.pio」にして保存します。

アセンブリ部分の記述方法については、次の記事を参照してください。

関連記事

すけろく Raspberry Pi Pico/Wには、PIOという機能があるらしいな。 げんろく そうだ。 UARTなどのインタフェース不足や、実装されていない機能を GPIOに対してプログラムでき[…]

 

ヘッダーファイルの生成

pioasmの使用方法で記載した手順を使って、ヘッダーファイルを生成します。

pioasmが保存されているフォルダに先ほど作成したPIOソースファイル(.pio)をコピーして行ってください。

 

生成されたヘッダーファイルは次のようになります。

 

 

Arduino IDEへのヘッダーファイルの取り込み

生成されたヘッダーファイルをArduino IDEに取り込みます。

そのためにArduino IDE上で新規のスケッチを作成します。

スケッチに次のようにコードを記載し、保存します。

 Arduino IDE スケッチ例

 

生成したヘッダーファイルを次の手順で、作成したスケッチに取り込みます。

  1. Arduino IDEのメニューから[スケッチ]-[ファイルを追加]を選択します。
  2. スケッチが保存されたフォルダが開くので、生成したヘッダーファイルをコピーして選択します。
  3. 追加する旨の確認メッセージが表示された場合は承認してください。
  4. 最後にスケッチの3つ目の「#include pio_uart.h」の部分を保存したヘッダーファイル名に変更します。

 

以上で、ヘッダーファイルの取り込みは完了です。

Raspberry Pi Pico Wへの書き込み 

  1.  Raspberry Pi PicoをパソコンにUSB接続します。
  2.  Arduino IDEで前述のプログラムを記載して、 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  3. 「ツール」メニューから「ボード」情報を確認し、次のものを選択します。
    「Raspberry Pi Pico/RP2040」-「Raspberry Pi Pico W」
  4. 「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。
  5. 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。(転送速度は「115200」です)
  6. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

※Raspberry Pi Pico の場合は、③の手順から適宜変更してください。

プログラム実行結果

書き込みが完了した「Raspberry Pi Pico / W」に対してUARTで文字を送信するために、Picoprobeを使います。

 

Picoprobeの作り方については次の記事で紹介しています。

関連記事

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico[…]

 

Picoprobeと、今回書き込みを行った、「Raspberry Pi Pico / W」を次のように配線します。

 

 

ブレッドボード左側にあるPicoprobe用の「Raspberry Pi Pico」には、GPIOをわかりやすくする「GPIO Master」を取り付けています。

気になる方は、こちらからどうぞ。

Boothショップで販売中!

この商品は、電子工作でRaspberry Pi Pico/Wを使う場合に便利なツールです。Raspberry Pi Pi…

 

接続ポート

Picoprobe側 PIO実装側
GPIO5(RX:受信) GPIO2(TX:送信)
GPIO4(TX:送信) GPIO3(RX:受信)
GND GND
VSYS VSYS

 

PicoprobeをUSBケーブルでパソコンにつなぎます。

デバイスマネージャを起動して、Picoprobeが認識されたCOMポートを確認します。

 

ターミナルソフト(Tera Term、Puttyなど)を起動してPicoprobeのCOMポートにシリアル接続します。

以下は、Tera Termの例です。


Tera Termを起動し、Picoprobeへシリアル接続します。
COMポートは先ほど確認したポートを選択します。

メニューから[Setup]-[Serial Port]を選択します。
左図のように設定して[New Setting]ボタンを押します。

メニューから[Setup]-[Terminal]を選択します。
左図のように設定して[OK]ボタンを押します。

以上で設定は完了です。

 

パソコン上のターミナルで、文字を1つ打つと次のように「Recieve:」をつけて返信されてくれば成功です。

 

 

編集後記

いかがだったでしょうか。

Raspberry Pi Pico / W」の「PIO(Programmable I/O」を使って「UART」の送受信機能を実装してみました。

今回は、受信側もプログラムしたので、パソコンとのやり取りができるようになりました。

Arduino IDE でも「PIO(Programmable I/O」を使ってUARTを実装する方法が確立できました。

今後も作例を充実させていければと思います。

 

記事の内容は以上です。

最後までご覧くださり、ありがとうございました。

次回もご期待ください。

今回の記事の対象となるマイコンはこちら!

Raspberry Pi Pico

created by Rinker
Raspberry Pi
¥1,270 (2024/04/29 18:14:23時点 Amazon調べ-詳細)

Raspberry Pi Pico W

ピンヘッダ実装済み

created by Rinker
ノーブランド品
¥2,210 (2024/04/29 14:17:06時点 Amazon調べ-詳細)

ピンヘッダを自分ではんだ付けするもの

created by Rinker
Raspberrypi
¥1,635 (2024/04/29 06:55:05時点 Amazon調べ-詳細)

 

Raspberry Pi Pico Wの他の記事はこちらからどうぞ!

すけろく うーむ。 どうしたものか。 げんろく どうした。 暗い顔をして。 すけろく カーモデルのウィンカー点滅を再現したくてな。 明滅回路を作ろうか悩んでおる。 げんろく ん!? そんなときは、メインプロセッサと切り離して 動作するPIOの出番ではないのか! この記事では、「Raspberry Pi  Pico/W」に実装されている「PIO(Programmable I/O」を実際に使ってみます […]

すけろく Raspberry Pi Pico/WのPIO機能を使ってUARTの送信には成功した。 しかし、まだ受信側ができていないのぉ。 げんろく そうだな。 今度は受信側を試してみるか。 すけろく どうせなら、パソコンから送った文字を返すような やり取りができるといいな。 げんろく よし。 UART送受信を実装してみよう。 この記事では、「Raspberry Pi  Pico/W」に実装されてい […]

すけろく Raspberry Pi Pico/WのPIO機能については前回調べた。 今度は実際に使ってみたいの~ げんろく そうだな。 実際にプログラムする際の注意事項などを見ていこう。 すけろく Arduino IDEでも使用できるのか? げんろく ああ。 使えるぞ! Arduino IDEで使う場合を例にやっていこう。 この記事では、「Raspberry Pi  Pico/W」に実装されている […]

すけろく Raspberry Pi Pico/Wには、PIOという機能があるらしいな。 げんろく そうだ。 UARTなどのインタフェース不足や、実装されていない機能を GPIOに対してプログラムできる機能だ。 すけろく Raspberry Pi Pico/Wをもっと知るために PIOを調べてみたい。 げんろく よし! PIOについて少し調べてみるか! この記事では、「Raspberry Pi  P […]

すけろく うーむ。 げんろく どうした浮かない顔して。 すけろく これまで、Raspberry Pi Pico / Wをいろいろ確認してきたが 外付けのボタンの認識ってやったかぇ? げんろく たしかに!まだ取り上げていない基本的なものがあるな よし、今回はボタン押下時の状態を Raspberry Pi Pico / Wで認識してみよう。 この記事では、「Raspberry Pi  Pico W」を […]

すけろく 宅内で使っているリモコンは、どういった仕組みで テレビなどをつけているのかな~? げんろく 赤外線を使って信号を送っているのだ。 すけろく しかし、たくさんある機器のリモコンが混信しないのは どういった仕組みなのかぇ? げんろく よし、今回は赤外線リモコンの通信を 調査してみるか! この記事では、「Raspberry Pi  Pico W」を使って、「赤外線リモコンの通信内容を分析する」 […]

すけろく うーむ。 対応付けが難しいな。 げんろく どうした? Raspberry Pi Picoで悩んでいるようだな。 すけろく Raspberry Pi PicoやPico Wの GPIOピンの情報がボード上にプリント されていないから資料との対応付けがやりづらくてな。 げんろく そうか。そういう課題があるのだな。 よし、解決するグッツを作って提供してみよう! 皆さんは、「Raspberry […]

すけろく うーむ。 モーターを毎回同じくらい回転させることはできんのかな。 げんろく DCモーターや、サーボモーターだと、 回転量を正確に制御することは難しいぞ。 すけろく では、何か解決策はあるのかぇ? げんろく ステッピングモーターというものがある。 モーターの回転をステップとして制御できる。 今回はこのあたりを動かしてみるか。 この記事では、「Raspberry Pi  Pico W」を使っ […]

すけろく 以前の記事で、Raspberry Pi Pico Wを Picoprobe経由でデバッグすることができた。 しかし、シリアルの入出力がArduino IDEで 読み込めないのだ。 げんろく そうだな。 Raspberry Pi PicoやRaspberry Pi Pico Wでは、 シリアル出力用の「Serial.println」では、 Picoprobe経由で取得できない。 すけろく […]

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico Wでもデバック機能が使えると いいのだが。。。 げんろく ちなみに、Arduino IDE 2.1.0 のデバッグ機能で Raspberry Pi Pico / Wのデバッグができるぞ! やっとできたプログラムを動かしてみると […]