質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1175閲覧

pythonistaでモーターを制御

_eito_

総合スコア15

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/12/16 03:30

編集2019/12/16 04:05

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wind

2019/12/18 07:15 編集

ざっと見た感じですと速度指定は9Byteで送る必要がありますが、先頭の1Byteしか送って無いからでしょうか?
_eito_

2019/12/18 05:19

どのようにして送ればいいのでしょうか?最近Pythonを使用し始めたばかりなためコードがわからず困っています…
_eito_

2019/12/18 08:35

そのサンプルは自分も見たのですが、pythonistaでは使用できないモジュールがあったため実行はできませんでした。他にコードを送る方法はありますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問