今回はRaspberry PiとWio TerminalをUARTで接続してみました。接続そのものは3ピンつなぐだけなので簡単ですが、素のままで接続してしまうとWio Terminalの背中に信号端子を刺す必要があり、折角のLCD画面が見づらくなります。そこで、ちょっとした配線治具を作って解決。
※「IoT何をいまさら」投稿順Indexはこちら
SeeedStudio社のLCD搭載マイコン端末、Wio Terminalの背面には、Raspberry Piの40ピン拡張コネクタと互換配列のピンソケットがあります。どこかのWebサイトでRaspberry Pi上のピンヘッダにWio Terminalを差し込んだ写真をみた、と以前に書きました。でもちょっと見考えると、双方自立した電源の装置なので、電源端子とか「ぶつかっちまう」ではないかなどと心配になります。当然、Wio Terminal側には細工があり、Raspberry Pi互換配列の電源端子にはスイッチ的な回路が入っていて、切り離せるようになっていました。ただしその切り離しはCPUの制御でやっているように見えるのでどうやっているのかは確認が必要です。しかし、ここにきて重ねると機能しない端子に気付きました。
UARTのRXDとTXD
であります。上下でUART通信できたらできる、というのが2台結合の自然な流れじゃないかと思うのです。しかし、端子配列は同じなのでラズパイもWioも同じところにTXDとRXDが出ています。重ねてしまうとTXD同士、RXD同士が接続されることになり機能しません。これは外で小細工しない限り、
UART使う場合は直接重ねるのは無し
じゃないかと思いました。そんなとき、楽しみに視聴させていただいているSeeedStudio社のYouTubeチャンネルの以下の動画でいつものヒゲのお兄さまがRaspberry PiとWio TerminalをUART接続させる、というのをやっているのを拝聴いたしました。
Wio Terminal Classroom #7 | Communication Protocols
PC上のターミナルエミュレータとWio TerminalをUSBシリアルで繋ぎ、Wioの裏面のUARTポートをRaspberry PiのUARTポートに接続して、PCからWio経由でラズパイにログインするみたいなサンプルです。動画の最後の3分の1くらいの分量で結構駆け足でやっていました。勿論、Wioは裏返されてジャンパ線をずぶずぶ差し込まれています。
だいたいRaspbian OSのデフォルトではRaspberry Piの拡張コネクタのUARTは生きていないので、ラズパイ側の設定も必要です。短い動画なので面倒な脇道の説明をしたくなかったのかもしれません。ラズパイのmicroSDを引き抜いて設定ファイルをPCで変更してしまうという、荒業感があるやりかたをしていました。
通常ラズパイ上であれば、以下の設定ユーティリティ(キャラクタ端末画面で使えるが、カーソルキーで選択できるUI)でその辺の設定ファイルをいじれます。当方は素直にラズパイ上で設定をいたしました。
$ sudo raspi-config
多分、バージョンによって多少変化があるみたいですが、Interface OptionsからSerial Portを選択後、シリアルポートをShellに接続するのか(シリアルポートに接続した外部端末からログインできる)、シリアルポートを有効化するのかを選択するようになっています。
上記の動画ではログインしていましたが、当方はプログラムでのデータのやりとりに使う予定なので、シリアルポートからshellには接続せず(disable)、プログラムで使用できるようにシリアルポートそのものは有効化(enable)ということで設定いたしました。
ハードウエア的には、ラズパイの拡張端子から3本信号を取り出すだけです。GND,TXD,RXDの順番で並んでいるのでそこから取り出しました。
3.3Vの「素の」信号なので、RS-232Cのように長く引っ張るのには憚りがあります。しかしラズパイを置いている場所と手元が多少離れている事情あり、1mのケーブルを使ってしまいました。とりあえず115200ボーで通信できているので、まあ良いか。。。
まずは、ラズパイ側の動作確認ということで、PC側に毎度活躍の秋月製USBシリアル変換器(FT232RL使用)を接続して、これとラズパイから引っ張ってきたケーブルを接続いたします。こんな感じ。
PC上では、これまたいつもの Teratermを上記ボードに対応する仮想COMポートに接続しておきます。ラズパイ上では以下のPythonモジュールを使って1行「Hello」を送るスリクプトを走らせます。
なお、上記のモジュールのドキュメントは以下にあり、分かり易いです。これつかえばRaspberry Piでシリアル使うのはOK、かな。
走らせたところがこちら。ラズパイ上のターミナルウインドウとPC上のTeratermウインドウを重ねてみました。
ま、これでラズパイ側の準備はできたので、今度はWio Terminal側です。いやだったのは、背面にジャンパ線を直接刺してしまうと、下の写真のように後ろ向きになってしまうこと。Wioの背中が汚いですが、GND、電源の目印に貼ってあるテープが汚れているだけであります。
そこに刺すために右の治具を作ってみました。拡張コネクタのうち、外側の20ピンと内側の1ピン(3v3)に刺して信号を取り出すもの。1列だと間違えて刺せてしまうので、1ピンとは言え2列にして誤った位置には刺せなくしたところがミソ。とりあえずUART端子と、デジタル/アナログのGroveインタフェース端子を1CH取り出せるようにしてみました。実際に接続したところはアイキャッチ画像に。これでLCD画面が見える状態で信号が取り出せませる。(ちょっと側面のボタンは押しずらくなりましたが、なんとか押せる)
これで結線できたので、今度はWio Terminalのテスト用のソフト。上記の動画では違うお名前でSerialクラスを呼び出してましたけれども、以下のページにありますとおり、
-
- Serial はUSBシリアル
- Serial1 は拡張ポートのUART端子
といたしました(多分、書いていない「別名」がある?)。下記のコードをビルドしてWio上で走らせれば、ダラダラと1秒毎に連番数字が垂れ流されてくる筈。
int loopCounter; void setup() { Serial1.begin(115200); while(!Serial1) {}; Serial1.println("Start Serial1:"); loopCounter = 0; } void loop() { Serial1.println(loopCounter++); delay(1000); }
受けるラズパイ側では以下のように cu コマンドを走らせておきました。今回はターミナルウインドウで確認したので cu だったです。多分screenコマンドでもいいのでしょう。あるいは、GUIならばPuTTYでしょうかね。
立ち上げたタイミングで既にWioは走っていたので、数字は4からになっています。ともかく、Wioから送信された数字がRaspberry Piに伝わっていることが確認できました。
でもな、UARTで接続が必要な適当なモジュールあたっけ?まあこれから。