#Ardipy
Arduinoには標準でfirmata arduinoが用意されています。
ただ、このfirmataは速度が遅い問題があることや、Pythonとのインターフェースが不十分な状況です。
また、firmataはいろいろな方式に対応しようとしているため、I2Cなどの通信などを行う場合に重く
使いづらいため、独自FWとPythonドライバを作ってみました。
Ardino+Pythonで Ardipy
I2C, SPIのUSB変換とPythonドライバはAardvarkという機器が標準でサポートしていますが
価格と入手性が悪いため、Arduinoを使った簡易検査装置として使う事が目的としています。
##Ardipyソースコード
Arduino Uno スケッチ(Arduinoで動作するFW)
https://github.com/Nomisugi/Ardipy/blob/master/Ardipy01.ino
Pythonインターフェース(Arduino FWをPCからコントロールするPython Driver)
https://github.com/Nomisugi/Ardipy/blob/master/Ardipy_Driver.py
firmataと違い、Ardipyは軽さを重視しているためArdino UNOで使うことを前提とし
それぞれのポートは最初から役割を決められています。画像が使える端子です。
注意点として PORT0,1 (TXD, RXD)ポートはUSB端子とUART通信で使用するため
使うと動作が停止します。Sample.py
ArdipyはPCとArduinoが常にUART通信を行う事が前提のため、このポートは使えません。
##Ardipy使い方
(1)Arduino UnoにArduino IDEを使いArdipy01.inoを書き込み
(2)Arduino UnoとPCを接続して、WindowsPCがUARTポート認識していること
(3)PythonにpySerialをインストール
(4)Pythonでサンプルコード実行
from Ardipy_Driver import Ardipy
ar = Ardipy()
#Search for Arduino Uno UART
ar.autoConnect()
#I2C Check
val = ar.i2cRead_word(0x40, 0x00)
print(val)
#AD Check
val = ar.adRead(0x00)
print(val)
#Port Check
light = True
ar.portOut_bit(2, 0)
i = ar.portIn_bit(3)
print(i)
for j in range(10):
light = not light
if( light ):
ar.portOut_bit(2, 1)
else:
ar.portOut_bit(2, 0)
time.sleep(1)
実際に動作しているかは、Arudino UnoのTX RXのLEDを確認してみてください。
またはArdinoのポート2にテスタを当てて確認してください。
今後はArdipyを使ったセンサー制御や各種GUIを作っていきます。
簡単なセンサー制御や簡単に制御機器をテストすることに使えると思います。