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

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

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

XBeeは、Digiインターナショナル社が提供するZigBee規格対応の通信モジュール。IoTプロトタイプの無線化などに用いられます。PCの専用ソフトウェアから全てのモジュールの設定ができるため、比較的簡単に使用することが可能です。

Python

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

Q&A

解決済

1回答

1602閲覧

XBeeの通信エラーを解決したい

YusukeAraki

総合スコア13

XBee

XBeeは、Digiインターナショナル社が提供するZigBee規格対応の通信モジュール。IoTプロトタイプの無線化などに用いられます。PCの専用ソフトウェアから全てのモジュールの設定ができるため、比較的簡単に使用することが可能です。

Python

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

0グッド

0クリップ

投稿2020/01/24 09:31

編集2020/01/24 09:37

下図のような構成でXBeeを使ったモータ制御をしようとしています。
通信を開始して数秒後にエラーが出て通信終了してしまします。
チェックサムのエラーらしいのですが原因がわかりませんでした。
コードとエラー時の出力は下記の通りです。何か解決方法思いあたる方、ご教授願います。
ちなみに、同様のエラーが出るのはPWMを出力したときのみで、プログラム中の

remote_device.set_pwm_duty_cycle(MOTOR_PWM, pwm_1)

をコメントアウトするとエラーは無くなります。

【条件】
モジュール:XBee ZB S2C(Product family:XB24C)
ファームウェア:DigiMesh 2.4 TH, バージョン9002
通信モード:API Mode Without Escapes


イメージ説明

from digi.xbee.devices import XBeeDevice from digi.xbee.devices import RemoteXBeeDevice from digi.xbee.devices import XBee64BitAddress from digi.xbee.io import IOLine, IOMode import time import threading # TODO: Replace with the serial port where your local module is connected to. PORT = "COM4" # TODO: Replace with the baud rate of your local module. BAUD_RATE = 9600 REMOTE_NODE_ID = "REMOTE" # ピン名定義 MOTOR_1 = IOLine.DIO12 MOTOR_2 = IOLine.DIO4_AD4 MOTOR_PWM = IOLine.DIO11_PWM1 SENSOR_1 = IOLine.DIO1_AD1 SENSOR_2 = IOLine.DIO2_AD2 # ローカルデバイス名を定義 local_device = XBeeDevice(PORT, BAUD_RATE) # リモートデバイス名を定義 remote_device = RemoteXBeeDevice(local_device, XBee64BitAddress.from_hex_string("0013A20041767079")) def main(): print(" +---------------------+") print(" | PWM Duty Cycle Test |") print(" +---------------------+\n") try: # ローカルデバイスと通信開始 local_device.open() # ピンモード設定 PWM remote_device.set_io_configuration(MOTOR_PWM, IOMode.PWM) #remote_device.set_io_configuration(MOTOR_1, IOMode.DIGITAL_OUT) #remote_device.set_io_configuration(MOTOR_2, IOMode.DIGITAL_OUT) remote_device.set_io_configuration(SENSOR_1, IOMode.ADC) remote_device.set_io_configuration(SENSOR_2, IOMode.ADC) '''****************************************** *************** 制御プログラム *************** ******************************************''' while True: pwm_1 = 30 # 出力を設定 remote_device.set_pwm_duty_cycle(MOTOR_PWM, pwm_1) remote_device.set_dio_value(MOTOR_1, IOMode.DIGITAL_OUT_HIGH) #CCW remote_device.set_dio_value(MOTOR_2, IOMode.DIGITAL_OUT_LOW) print(pwm_1) '''****************************************** *************** 制御プログラム END *********** ******************************************''' # 通信終了 finally: if local_device is not None and local_device.is_open(): local_device.close() if __name__ == "__main__": main()

イメージ説明

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

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

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

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

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

t_obara

2020/01/24 09:37

正しい動作をするメーカーから提供されているサンプルのようなものはないのでしょうか。正しい動作をするものと比較しながら実装できると進めやすいかと思いますが。
YusukeAraki

2020/01/24 09:57

ありがとうございます。 ローカル側のPWMを設定するサンプルコードを見つけたのでそれを参考に上記のコードを作成しました。 そうしたら今回のエラーが出たので、リモート側のサンプルコードを探していますが中々見つかりません。 リモート側のPWMは方法が違うのでしょうか...
dodox86

2020/01/24 10:19

軽くググった限りで、解決に至る回答ではないのでこちらにコメントさせていただきますが、XBeeのJava用ライブラリですと、同様のエラーが発生することは既知のことのようです。 https://www.digi.com/resources/documentation/digidocs/90001438/reference/r_xb_java_lib_pwm.htm?TocPath=User%20Guide%7CHandling%20analog%20and%20digital%20IO%20lines%7CConfigure%20the%20IO%20lines%7C_____3 > The setPWMDutyCycle() method may fail for the following reasons: > ACK of the command sent is not received in the configured timeout, throwing a TimeoutException. 設定時間以内にACKを受信できないのでタイムアウトし、関連してチェックサムエラーが発生、でしょうか。Python用でもJava用でもネイティブのライブラリが元にあるはずで、恐らく同様の原因(使い方の問題?)だと思われます。
YusukeAraki

2020/01/24 10:38

ありがとうございます、そういえばpython以外で調べていませんでした...
guest

回答1

0

ベストアンサー

まずは、モータを外して通信させてみましょう。

モータ外して通信が正常に行われるなら、モータのノイズでCPUが暴走してますね

投稿2020/01/24 10:30

y_waiwai

総合スコア87719

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

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

YusukeAraki

2020/01/24 10:40

多分解決しました、ありがとうございます! コンデンサ等で対策しようと思います。
y_waiwai

2020/01/24 10:43

モータは周りはじめのときには定格の十倍以上の電流が流れます CPUと同じ電源でモータを動かしてると、このときの電流で電圧が下がり、CPUがリセットしてしまいます。 モータの電源は、CPUの電源と別のものにしましょう
YusukeAraki

2020/01/24 10:49

なるほど、、、勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問