【めも】Raspberry PiとArduinoでシリアル通信【Python】
あるプロジェクトに使う用にRaspberry PiとArduinoの通信をしなきゃいけなくて,動作確認程度ながら出来たのでメモ.
テストなので,Arduino側からはひたすら振動センサの値を送るプログラムを書き込んでおき,Raspberry Pi側ではそれを表示し続けるプログラムを実行する.
まずPythonのシリアルポートライブラリのインストール
sudo apt-get install python-serial
【Arduino側】
/* ピン配置がUNOとMegaで違うのに注意 UNO→A0から14 Mega→A0から54 */ #define __AVR_ATmega1280__ #define __AVR_ATmega2560__ enum{ VIB_PORT1, VIB_PORT2 }; int vib_1, vib_2;//振動センサの値 void setup(){ Serial.begin(9600); //デバッグランプ(引き込み) pinMode(A3, OUTPUT); pinMode(A4, OUTPUT); pinMode(A5, OUTPUT); } void loop(){ vib_1 = analogRead(VIB_PORT1); vib_2 = analogRead(VIB_PORT2); Serial.print(vib_1, DEC); Serial.print('\t'); Serial.print(vib_2, DEC); Serial.print('\n'); //デバッグランプ||< digitalWrite(A3, HIGH); digitalWrite(A4, LOW); digitalWrite(A5, HIGH); }
【Raspberry Pi側(Giga Hacks さまより引用)】
import serial ser=serial.Serial("/dev/ttyACM0",9600) while True: val=ser.readline() print(val)
【実行結果】
二軸の振動センサなので,2つの情報を並べている.
【めも】ArduinoMega
はじめてArduinoMegaを使ってみて,ピン配置でミスったのでめも.
基本的には基板に書いてあるピンの番号を指定してやればデジタル出入力は出来る.
ただ,アナログピン(A0から)は読み替えが必要.
UNOだと,リファレンスにある通り,A0から14で続いてく.
しかし,MegaではA0から54で続いていくため,注意.
せっかくUNOとMegaでシールドが共有できるのに,ソースレベルでいちいち書き換えめんどくさいなぁ,定義でなんとか出来なくはないけど...と思っていたら,既に対策されてたっぽい.
ス~の道具箱さまより,必要な部分だけかいつまむと,
#define __AVR_ATmega1280__
#define __AVR_ATmega2560__
と定義しておいて,デジタル入出力ではA0だとか記述しておけばすべてが入れ替わるというものが用意されていた.
【めも】USB232WによるAVRへの書き込み【書き込み】
【めも】USB232WによるAVRへの書き込み - #かとすんめもの続き
書込みできた!
付属のピンソケットで基板を挟むようにハンダ付け.
1~6番が書き込みピンに対応.
純正ライタと同じように使えました(上の基板は純正ライタ用に作っていた書き込み基板).
一応fuseも読み書きできる.
ただ,AVRStudioみたいに項目分けしてくれるわけじゃなくて,8bit*3のデータ.
AVR試用記さんの通りの感じ.
ただ、順番が違うので注意。
ATmega168Pの場合(hFuse,lFuse,eFuseの順)
1MHz → DF 62 01
8MHz → DF E2 01
Command line Optionは1Mでも8Mでも「-P ft0 -B 57600 -E reset」でいけた。
説明書には57600は書き込みスピードで、AVRのクロックやPC速度によっては調整とあった。
USB232Wがデキる子すぎて嬉しいw
【めも】USB232WによるAVRへの書き込み
純正のAVRライタは高い上に、大事に扱っても1年くらいでケーブルが断線してうまく書き込めなくなる(少なくとも自分の身の回りでは)。
コネクタ付け替えればいいんだけど、ストレス溜まるし、高いってのが新入生の最初の金銭的関門になってるっぽい。
大須で物色したら1,700円ちょいで書き込みもできて、シリアル変換の機能もついてるものがあったので試しに買ってみた。
買ったのがこれ↓
ツール工房さんのUSB232W
書き込みに使うマイコンとか手元にないので、実際に書き込むのは後日として、環境構築で行き詰まったところがあったので軽くメモ。
同梱の説明書の通りにやれば大体はおk
と言っても、もともとAVRの開発環境は作ってあったので、実際には書き込みに使う「avrdudu-Serjtag04n(04nを使うように指示)」と、これをGUI化する「avrdude-GUI」のDL、解凍を行った。
AVRStudioは4を使うとか言われてるけど、今使ってる5.1でもいいんじゃないかなぁ。
で、いざ立ち上げるとlibusb0.dllがないと言われる。
無視して進んでも書き込みデバイスを選ぶプルダウンが展開してくれないので、これをインストールする必要がある。
ぐぐったところ、Solvusoftさんによると公式に配布してる物以外は危ないとのこと。
で、avrdude-GUIに戻る。
なんとも初歩的な見落としというかなんというかって感じだけど、バッチリ入手先がREADME.txtに書いてあった。
libusb-win32
これで画面だけは説明書っぽくなった。