Raspberry Piに接続したサーボをリモート(クライアントサーバモデル)で制御する
はじめに
ラズパイに接続したサーボをネットワーク経由でコントロールする実験をします。
クライアントサーバモデルを使用し、ラズパイをサーバ、PCをクライアントとします。PC側からラズパイに接続し、x,y=10,15というようなテキストコマンドを送信すると、サーバが角度として認識し、サーボをコントロールするようにします。
ラズパイでサーボをコントロールする方法はこちらに記述しています。
Raspberry Pi OpenCVで顔検出しサーボでトラッキング
この実験はPCでOpenCVを処理し、その結果でサーボを制御するための予備実験です。
プログラム
サーバ側
受信したテキスト文(xx,yyのフォーマット)を変数x,yに入力し、サーボコントロール用pmw信号として出力します。"q"を受信するとコネクションを開放し、次の接続を待ちます。
import Adafruit_PCA9685
import socket
from time import sleep
pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(60)
s = socket.socket()
port = 5000
s.bind(('', port))
while True:
print('listening')
s.listen(5)
c, addr = s.accept()
print('receiving')
while True:
try:
data = c.recv(1024)
if data == "q":
break;
print(data)
x,y = map(int, data.split(","))
pwm.set_pwm(0,0, 400+x)
pwm.set_pwm(1,0, 400+y)
except:
break
sleep(1)
c.close()
s.close()
クライアント側
xx,yyのフォーマットにてキーボードを入力、エンターで送信します。また、"q"で終了します。
import socket
from contextlib import closing
import sys
s = socket.socket()
host = sys.argv[1]
port = 5000
s.connect((host, port))
while True:
print "connected"
data = raw_input("x,y>")
s.send(data)
if data == "q":
s.close()
break
動作
ラズパイはPCからSSHで接続して実行しています。PC側はBash on Ubuntu on Windowsです。
サーバの起動
サーバ側はGPIOにアクセスする必要があるため、sudoでプログラムを実行する必要があります。
bash:server
pi@raspberrypi:~ $ sudo python server.py
クライアント側
普通に起動します(sudoは不要です)。引数にラズパイのIPアドレスを指定します。
bash:client
ikeda@PC:~ $ python server.py 192.168,1,116
操作
クライアント側にてx,y>と聞いてきます。
bash:client
ikeda@PC:~ $ x,y>
xに水平角度、yに垂直角度を指令します。x=180度y=90度とするには180,90と入力、エンターで送信します。
bash:client
ikeda@PC:~ $ x,y>180,90[ENTER}
サーバ側では受信したコマンドを表示し、サーボをコントロールします。
動作
映像
Youtubeにアップしましたので、興味のあるかたはどうぞ。
Special thanks!
ソケット通信について、@msrksさまの記事を参考にさせていただきました。
PythonでSocket通信
ありがとうございました。
2018/02/03 Ikeda
Author And Source
この問題について(Raspberry Piに接続したサーボをリモート(クライアントサーバモデル)で制御する), 我々は、より多くの情報をここで見つけました https://qiita.com/tlab/items/c6f8544d11e481885063著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .