ヘルニアクソ野郎エンジニアblog

~ヘルニアでHell near~

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

calendar

前回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にアクセスすれば確認できます。↓

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

この記事をシェアする

コメント

コメントはありません。

down コメントを残す