Arduino Blender & Maya Serial通信テスト(Facebook内容転載)
Facebook記事を転載(2016年4月時点の情報です)
Arduino -> Serial -> Blender
========================
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
for Mac
for Mac
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
【Mac で pyserial】 ★★★
pyserialが動かんわ!!!!かれこれ1ヶ月近くになる
import serialはOKでも、その次serial.Serialが通らない。。
Arduinoにシリアル通信、、できない。
import serialはOKでも、その次serial.Serialが通らない。。
Arduinoにシリアル通信、、できない。
というわけで、win64では諦め、
とりあえずmacで。Blender + pyserialを確立したい
とりあえずmacで。Blender + pyserialを確立したい
とりあえずmacのpython+Blender環境を刷新。
Blender 2.77に。
python3.5インストール
python3.5インストール
①
macにはpython2.7が標準インストールされてるので
それ以外をアンインストール。
●アプリケーションから削除
●アプリケーションに表示のないpythonを削除
移動/フォルダへ移動 から以下のパスを
/Library/Frameworks/Python.framework/Versions/
例えば3.4のフォルダを削除して3.5を入れるとかするときなど
macにはpython2.7が標準インストールされてるので
それ以外をアンインストール。
●アプリケーションから削除
●アプリケーションに表示のないpythonを削除
移動/フォルダへ移動 から以下のパスを
/Library/Frameworks/Python.framework/Versions/
例えば3.4のフォルダを削除して3.5を入れるとかするときなど
②
pythonの最新版3.51を公式サイトからインストール
pythonの最新版3.51を公式サイトからインストール
③
pipのインストール
macのターミナルから
easy_install pip
pipのインストール
macのターミナルから
easy_install pip
sudo pip3 install pyserial
ここで結果pyserialのインストール先が表示されるので確認
pyserial in /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages
pyserial in /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages
④Blender起動
sys.version
sys.version
sys.prefix
sys.path.append("ここにserialのパスを入れる")
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
ようやく安定して使えるようになってきた(^^)
安定の使用手順
①Arduino電源再起動(USB抜き差し)
②Blender再起動
③Scriptで一度RunScriptする (シリアルポートの認識?)
ここでArduinoが反応してチカチカします
④Blender再生→OK
安定の使用手順
①Arduino電源再起動(USB抜き差し)
②Blender再起動
③Scriptで一度RunScriptする (シリアルポートの認識?)
ここでArduinoが反応してチカチカします
④Blender再生→OK
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
Blender でオブジェクトの位置を変数化、
それをpyserialでシリアル通信する。
→Blenderのオブジェクト位置からLEDの明るさ制御
ser.write(b"値.") の値に変数を入れるのに苦労。。。encodeで解決。理由はまだわかりません!!!わら
あと、若干LEDがチカチカするのが気になるけどまた今度
====以下=======================================
import bpy
import serial
import math
ser = serial.Serial("dev/cu.usbmodem1421",9600)
def my_handler(scene):
height = bpy.data.objects['Cube'].location.z
val = math.floor(height)
outPut = str(val)+"." #ArduinoSerialInput needs "." at last
ser.write(outPut.encode())
bpy.app.handlers.frame_change_post.append(my_handler) # Tells blender to load "my_handler" on every new frame
それをpyserialでシリアル通信する。
→Blenderのオブジェクト位置からLEDの明るさ制御
ser.write(b"値.") の値に変数を入れるのに苦労。。。encodeで解決。理由はまだわかりません!!!わら
あと、若干LEDがチカチカするのが気になるけどまた今度
====以下=======================================
import bpy
import serial
import math
ser = serial.Serial("dev/cu.usbmodem1421",9600)
def my_handler(scene):
height = bpy.data.objects['Cube'].location.z
val = math.floor(height)
outPut = str(val)+"." #ArduinoSerialInput needs "." at last
ser.write(outPut.encode())
bpy.app.handlers.frame_change_post.append(my_handler) # Tells blender to load "my_handler" on every new frame
<特に pyserial 関係のトラブルシューティング>
blender でpyserialが読み込まれない。。。
原因はBlenderコンソールという、
Blender専用のpythonエディタ上で作業していたから。Mayaも一緒かな?
というわけで、コンソールからフォルダを指定してModuleを読み込めば使えるのか?というわけでエラー時の対処法まとめ
pythonの保存場所は次のコマンドで
import sys
sys.prefix
import sys
sys.prefix
「Blender のpython」でpip及びpyserialをインストール(ファイルをコピペ?)しなきゃでした ><
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
for Windows
▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️▪️
【Win で pyserial】 ★★★
・・・pyserialがどーしても使えない(インストールできない)ので
思い切ってpythonのインストールをはじめから。
思い切ってpythonのインストールをはじめから。
①完全にアンインストール (最後にフォルダ残りかすも削除)
②新規インストール
ここまでで3分
②新規インストール
ここまでで3分
③pip install pyserial をcmdで実行。OK
しかしpipのアップグレードしてとのことで言われるままにアップデートを実行。が、その後再度pyserialインストールしようとするが更新されていない感じ。もしかしたら、さきにアップグレードするべき?
しかしpipのアップグレードしてとのことで言われるままにアップデートを実行。が、その後再度pyserialインストールしようとするが更新されていない感じ。もしかしたら、さきにアップグレードするべき?
=========================
てか、mayaでもpyserialつかえた!!キタコレーー!!!!
★★★★★★★★(´艸`*)★★★★★★★★★★
④site-packagesのsrialフォルダをコピー
⑤mayaのpythonフォルダのLib/site-packagesフォルダがあるので貼る
※ちなみにmayaでsys.prefixでpythonフォルダしらべる
⑥あとはArduinoをインストールして接続(ポート認識のため)
⑥あとはblenderのときとおなじ
import serial
serial.Serial("COM3",9600)
今までは余計なことたくさんしててファイルがおかしくなってたぽい。。クリーンインストールしたら何も問題なさそう(^o^)/
★★★★★★★★(´艸`*)★★★★★★★★★★
④site-packagesのsrialフォルダをコピー
⑤mayaのpythonフォルダのLib/site-packagesフォルダがあるので貼る
※ちなみにmayaでsys.prefixでpythonフォルダしらべる
⑥あとはArduinoをインストールして接続(ポート認識のため)
⑥あとはblenderのときとおなじ
import serial
serial.Serial("COM3",9600)
今までは余計なことたくさんしててファイルがおかしくなってたぽい。。クリーンインストールしたら何も問題なさそう(^o^)/
=============================
Windowsでpipのエラー出たとき、
cmdで
python -m pip install
これで一旦反応見る。
必要ならpipのアップグレード。
その後
python -m pip install pyserial
cmdで
python -m pip install
これで一旦反応見る。
必要ならpipのアップグレード。
その後
python -m pip install pyserial
==============================
Mayaでオブジェクトの位置からLEDのPWM制御は完成!
あとはpython APIで処理速度を高めるとこまでマスターしたい。
以下プログラム
◆Arduino
char input[4]; //受信した文字列の格納
int i = 0; //文字数のカウンタ
int val = 0; //受信した数値(変換後)
int ledVal = 0; //LEDにPWM出力する値
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(3,OUTPUT);
pinMode(13,OUTPUT);
}
// シリアル通信で受信したデータを数値に変換
int serialNumVal(){
// データ受信した場合の処理
if (Serial.available()) {
input[i] = Serial.read();
// 文字数が3以上 or 末尾文字がある場合の処理
if (i > 2 || input[i] == '.') {
input[i] = '\0'; // 末尾に終端文字の挿入
val = atoi(input); // 文字列を数値に変換
Serial.write(input); // 文字列を送信
Serial.write("\n");
i = 0; // カウンタの初期化
}
else { i++; }
}
return val;
}
void loop() {
ledVal = serialNumVal();
// A3Pinに通電
analogWrite(3,ledVal);
// 基盤のD13PinLEDを点灯
if(ledVal>100){digitalWrite(13,HIGH);}
else{digitalWrite(13,LOW);}
}
◆Python for maya
##========================================================
## maya で ballオブジェクトのYと連動してシリアル送信 フ
##========================================================
# まずはArduinoにポート接続
#import serial
#ser=serial.Serial('COM3', 9600)
#ser.close() #最後に閉じる
# 次にMayaからシリアル送信する
import maya.cmds as mc
def com():
pos = mc.getAttr("ball.translateY")
ledCheck = str(int(pos))+"."
ser.write(ledCheck.encode())
# HUDでイベント察知して更新
mc.headsUpDisplay( 'ArduinoRunning1', s=1, b=5,lw=100,dw=200, l='AraduinoRunninavga',ev="timeChanged",command="com()") #HUD作成
#mc.headsUpDisplay( 'ArduinoRunning1', s=1, b=5,lw=100,dw=200, l='AraduinoRunninavga',ev="timeChanged",command="com()",e=True) #HUD作成
#mc.headsUpDisplay( 'ArduinoRunning1',rem=True) # 最後に削除
あとはpython APIで処理速度を高めるとこまでマスターしたい。
以下プログラム
◆Arduino
char input[4]; //受信した文字列の格納
int i = 0; //文字数のカウンタ
int val = 0; //受信した数値(変換後)
int ledVal = 0; //LEDにPWM出力する値
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(3,OUTPUT);
pinMode(13,OUTPUT);
}
// シリアル通信で受信したデータを数値に変換
int serialNumVal(){
// データ受信した場合の処理
if (Serial.available()) {
input[i] = Serial.read();
// 文字数が3以上 or 末尾文字がある場合の処理
if (i > 2 || input[i] == '.') {
input[i] = '\0'; // 末尾に終端文字の挿入
val = atoi(input); // 文字列を数値に変換
Serial.write(input); // 文字列を送信
Serial.write("\n");
i = 0; // カウンタの初期化
}
else { i++; }
}
return val;
}
void loop() {
ledVal = serialNumVal();
// A3Pinに通電
analogWrite(3,ledVal);
// 基盤のD13PinLEDを点灯
if(ledVal>100){digitalWrite(13,HIGH);}
else{digitalWrite(13,LOW);}
}
◆Python for maya
##========================================================
## maya で ballオブジェクトのYと連動してシリアル送信 フ
##========================================================
# まずはArduinoにポート接続
#import serial
#ser=serial.Serial('COM3', 9600)
#ser.close() #最後に閉じる
# 次にMayaからシリアル送信する
import maya.cmds as mc
def com():
pos = mc.getAttr("ball.translateY")
ledCheck = str(int(pos))+"."
ser.write(ledCheck.encode())
# HUDでイベント察知して更新
mc.headsUpDisplay( 'ArduinoRunning1', s=1, b=5,lw=100,dw=200, l='AraduinoRunninavga',ev="timeChanged",command="com()") #HUD作成
#mc.headsUpDisplay( 'ArduinoRunning1', s=1, b=5,lw=100,dw=200, l='AraduinoRunninavga',ev="timeChanged",command="com()",e=True) #HUD作成
#mc.headsUpDisplay( 'ArduinoRunning1',rem=True) # 最後に削除
===================
pyserial格納場所
パソコン👉 Cドライブ/python27/Lib/site-packages/serialMAYA👉 C/program file/auto desk/maya2016/python/Lib/site-packages
コマンドラインでインストールしたあとmayaにフォルダをコピペすると良い?
パソコン👉 Cドライブ/python27/Lib/site-packages/serialMAYA👉 C/program file/auto desk/maya2016/python/Lib/site-packages
コマンドラインでインストールしたあとmayaにフォルダをコピペすると良い?
MacOSでBlender2.8用にpyserialを準備する手順
返信削除・Blender2.8の対応はpython3.7.0を確認
・MacにBlender3.7.0をインストール(手動でインストーラをDL&インストール)
・Macにpyseirlaをインストール前に
今回は綺麗にしたかったので3.7以外を全て削除する
移動/フォルダへ移動 sys.prefixで調べておいたpythonフォルダへ移動して手動削除
・Macにpyserialをインストール(上記記事内のpipから)
・あとは、Blender開いて import serialが通らないこと確認して、上記記事内の通り
用はMac内のpyserialフォルダを、Blenderにsys.path.appendで指定。