2021/12/15 よりサイトリニューアルしました

unitv2でuart通信「unitv2とraspberrypi zero間でとりあえず文字列を渡してみる」

unitv2 uart

前回unitv2でWEBページを作成し、そこにカメラ画像を埋め込むといった内容をまとめました。↓

 

一応私がやろうとしている事の目的が「unitv2でサーボモーターを動かしたい」になっていまして、頭の中では

unitv2(webサーバー)→js→python(cgi)→i2cでサーボモータードライバ制御

を考えていたのですが、いきなり頓挫する事になりました。もうみなさんご承知の通り、unitv2のgrove端子はi2cが使えません。。

なんでも「uart」と呼ばれるシリアル通信しか使えないようです。(uartって有名みたいですが私は初耳でございました。。)で、色々調べた結果、uartでサーボ制御は出来ない事はないけども少々厄介そうでしたので、一旦ラズパイを挟み、そこからi2cでサーボモーターを制御する事にしました。。

unitv2(webサーバー)→js→python(cgi)→uart→ラズパイ→i2cでサーボモータードライバ制御

はっきり言って意味ないですけどね(-_-;)ならunitv2いらないだろという話ですから。。

しかし、無駄な事でもunitv2から始まり最終的にサーボモーターを動かすことに意義があるのです!そう思わんとやってられんのです!uartのお勉強にもなるしね!

ということで、今回は一先ず「unitv2~ラズパイゼロまでのuart通信」についてまとめてみようかと思います。

まあここまではなにかしらで用途はあるかとも思いますので、少しでも参考になればうれしいです。

 

初めに

unitv2のuartの罠

私はたまたまTwitterにて確認できていたので良かったですが、どうやらunitv2のuartのtxとrxの表記がテレコになっているみたいですね(;^ω^)

普通は送信ー送信、受信ー受信に繋げないですよね、これは結構大きな罠ですよね。

ですので、unitv2の場合uartのtxとrxは同じ端子同士で繋げる必要があります。とても重要なポイントですね。

tx — rx

rx — tx

gnd — gnd

uartは上のような感じでGND1つに送信と受信専用の回線を持った通信になります。一見全二重通信に見えますが、これで半二重通信をしているようです。

それでは、unitv2とラズパイゼロの電源を入れて、お互いをgroveケーブル(5Vは繋げない)で接続しておきます。

続いて、プログラムを記述していきます。

 

javascript

main.js

index.htmlと同じ階層に作成します。CGIでpythonを動かしたいので、Ajaxを使います。

htmlのボタンをクリックすれば、押したボタンを判別する為に適当に割り振った文字列をCGI(recieve.py)にpostしています。

続いてpythonスクリプト。

 

python

recieve.py

index.htmlと同じ階層にcgi-binディレクトリを作成し、その配下にrecieve.pyを作成します。

先頭にCGIで起動するようにシェバンを記述しています。

postされてきた文字列を受け取り、ttyS1(unitv2のシリアルポート)へボーレート115200で送信(write)しています。

今回記述していませんが、ラズパイからのデータを受信したい場合はreadを使います。

続いて、ラズパイ側のプログラムを記述します。

ラズパイ側のプログラム

python

適当な場所にpythonファイルを作成します。

ttys0がラズパイのシリアルポートになります。

ここからwhileのループに入りますが、これはunitv2からのデータをいつでも受け取れる状態にするためです。つまり、ラズパイ側でこのpythonプログラムを走らせておけば、unitv2からのuart通信をいつでも受信できる状態になります。

readlineで、unitv2からuartで送られてきたデータを受け取っています。

while文の中では、指定した文字列を受信した場合にprintで表示を出すようにしています。つまり、これで文字が表示されれば、unitv2からラズパイまでのuart通信が問題なく出来ているという事になります。

それでは、この時点で動作をチェックしてみます。

 

動作チェック

unitv2のindex.htmlがある階層に移動し、そこでpython http.serverを立ち上げます。

python -m http.server 8000 –cgi

ラズパイのpythonプログラムを起動させておきます。

python3 pythonファイル名

あとは、unitv2のローカルIP:8000にアクセスすれば確認できます。↓

https://twitter.com/ketunorobio/status/1441404777544355843

次回は、サーボモーターを動かす前にLチカしてみようかと思います。

4 COMMENTS

学生

動作チェックの項目において、

“ラズパイのpythonプログラムを起動させておきます。
python3 pythonファイル名”

のところで、やり方がちょっと分かりませんから、説明させていただけないですか?

よろしくお願いいたします。

返信する
ketunorobio

ラズパイでターミナルを起動し、作成したプログラムファイルを下記のように指定してやればプログラムが走ります。

python3 pythonファイル名

返信する
ketunorobio

管理人です

picoはosが入ってませんのでターミナル操作が出来ません。
当記事と同じ事は出来ませんね。

返信する

コメントを残す

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