前提・実現したいこと
Keigan Motorというモーターを回転させるプログラムをiOSアプリのPythonista上で実行したのですが、うまくいかなくて困っています。
該当のソースコード
Python
1# coding: utf-8 2# for iOS + Pythonista 3import cb 4import time 5 6KEIGAN_DEVICE_NAME = 'Keigan Motor名' 7KEIGAN_SERVICE_UUID = 'F140EA35-8936-4D35-A0ED-DFCD795BAA8C' 8KEIGAN_CHARACTERISTIC_UUID = 'F1400003-8936-4D35-A0ED-DFCD795BAA8C' 9 10class MyCentralManagerDelegate (object): 11 def __init__(self): 12 self.peripheral = None 13 self.toggle = False 14 15 def did_discover_peripheral(self, p): 16 print ('+++ Discovered peripheral: %s (%s)' % (p.name, p.uuid)) 17 if p.name and 'KEIGAN_DEVICE_NAME' in p.name and not self.peripheral: 18 self.peripheral = p 19 cb.connect_peripheral(self.peripheral) 20 21 def did_connect_peripheral(self, p): 22 print ('*** Connected: %s' % p.name) 23 print ('Discovering services...') 24 p.discover_services() 25 26 def did_fail_to_connect_peripheral(self, p, error): 27 print ('Failed to connect: %s' % (error,)) 28 29 def did_disconnect_peripheral(self, p, error): 30 print ('Disconnected, error: %s' % (error,)) 31 self.peripheral = None 32 33 def did_discover_services(self, p, error): 34 for s in p.services: 35 if KEIGAN_SERVICE_UUID in s.uuid: 36 print ('+++ Keigan Service found: %s' % (s.uuid,)) 37 p.discover_characteristics(s) 38 39 def did_discover_characteristics(self, s, error): 40 if KEIGAN_SERVICE_UUID in s.uuid: 41 for c in s.characteristics: 42 if KEIGAN_CHARACTERISTIC_UUID in c.uuid: 43 print ('+++ Keigan Characteristics found: %s' % (c.uuid,)) 44 self.peripheral.write_characteristic_value(c, chr(0x51), True)#モーター動作を許可 45 self.peripheral.write_characteristic_value(c, chr(0x58), True)#速度指定 46 self.peripheral.write_characteristic_value(c, chr(0x60), True)#モーターを正回転させる 47 48 49delegate = MyCentralManagerDelegate() 50print ('Scanning for peripherals...') 51cb.set_central_delegate(delegate) 52cb.scan_for_peripherals() 53 54try: 55 while True: pass 56except KeyboardInterrupt: 57 cb.reset()
試したこと
下記のコードではLEDを点滅させることはできました
Python
1# coding: utf-8 2# for iOS + Pythonista 3import cb 4import time 5 6KEIGAN_DEVICE_NAME = 'Keigan motor名' 7KEIGAN_SERVICE_UUID = 'F140EA35-8936-4D35-A0ED-DFCD795BAA8C' 8KEIGAN_CHARACTERISTIC_UUID = 'F1400003-8936-4D35-A0ED-DFCD795BAA8C' 9 10class MyCentralManagerDelegate (object): 11 def __init__(self): 12 self.peripheral = None 13 self.toggle = False 14 15 def did_discover_peripheral(self, p): 16 print ('+++ Discovered peripheral: %s (%s)' % (p.name, p.uuid)) 17 if p.name and 'KEIGAN_DEVICE_NAME' in p.name and not self.peripheral: 18 self.peripheral = p 19 cb.connect_peripheral(self.peripheral) 20 21 def did_connect_peripheral(self, p): 22 print ('*** Connected: %s' % p.name) 23 print ('Discovering services...') 24 p.discover_services() 25 26 def did_fail_to_connect_peripheral(self, p, error): 27 print ('Failed to connect: %s' % (error,)) 28 29 def did_disconnect_peripheral(self, p, error): 30 print ('Disconnected, error: %s' % (error,)) 31 self.peripheral = None 32 33 def did_discover_services(self, p, error): 34 for s in p.services: 35 if KEIGAN_SERVICE_UUID in s.uuid: 36 print ('+++ Keigan Service found: %s' % (s.uuid,)) 37 p.discover_characteristics(s) 38 39 def did_discover_characteristics(self, s, error): 40 if KEIGAN_SERVICE_UUID in s.uuid: 41 for c in s.characteristics: 42 if KEIGAN_CHARACTERISTIC_UUID in c.uuid: 43 print ('+++ Keigan Characteristics found: %s' % (c.uuid,)) 44 self.peripheral.write_characteristic_value(c, chr(2), True) 45 46 47 48delegate = MyCentralManagerDelegate() 49print ('Scanning for peripherals...') 50cb.set_central_delegate(delegate) 51cb.scan_for_peripherals() 52 53try: 54 while True: pass 55except KeyboardInterrupt: 56 cb.reset()
考えられること
Python
1self.peripheral.write_characteristic_value(c, chr(0x51), True)#モーター動作を許可 2self.peripheral.write_characteristic_value(c, chr(0x58), True)#速度指定 3self.peripheral.write_characteristic_value(c, chr(0x60), True)#モーターを正回転させる
モーターを動かすコードでは、モーターは初期状態だとモーター動作が不許可になっているため、上のコードのようにまずモーター動作を許可するコマンドを指定し、その後速度の大きさを指定した後、モーターを正回転させるプログラムになっています。おそらく速度指定をしていないことが原因だと考えられるのですがその指定するコードがわからず、つまづいています。どのようにすればモーターを動かせるようになるかご教授頂けると幸いです。
###環境
Pythonista3(iOSアプリ)
iPad 13.1.2
###Keigan Motor について
KeiganMotorはBLEで制御できるモーターです。KeiganMotorについては以下のサイトを参考にしました。
・https://keigan-motor.com
###Pythonistaについて
iOSデバイス上でPythonのプログラミングができるアプリです。今回のコードで使用しているcbというモジュールはPythonistaでのみ使われるモジュールです。下記のURLにcbについて記載しています
###参考URL
モーター動作(コマンド)
・https://docs.keigan-motor.com/software_dev/lowapis/motor_action
LED点滅
・https://docs.keigan-motor.com/software_dev/lowapis/led
Pythonistaのライブラリであるcbについて
・http://omz-software.com/pythonista/docs/ios/cb.html
あなたの回答
tips
プレビュー