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

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

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

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

0回答

1873閲覧

Python XBee通信

raspypy

総合スコア247

XBee

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2020/02/19 01:42

編集2020/02/19 04:07

##やろうとしていること
XBeeの通信(APIモード)
Raspberry Pi : Cordinatorに設定
Arduino : Routerに設定

##試したこと~その1~
Arduino側から送信された信号を、XCTU (Windows PC)でデータ受信することを確認しました。

##試したこと~その2~
Raspberry Pi側でTx端子-Rx端子をショートさせて、シリアル通信を試しました。
Txから送られた信号をRxで受信できることを確認しました。

##困っていること
受信側をRaspberry Piに変更して試してみましたが、コンソール画面に何も表示されません。
Arduinoからデータが送信されていることは確認済ですので、なぜRaspberry Pi上で表示されないのかが分かりません。
何か確認する方法がありますでしょうか。
また、プログラムにおかしな点がありましたら、指摘いただけると助かります。

##プログラム

python

1import serial 2import time 3import datetime 4from xbee import XBee,ZigBee 5 6ser = serial.Serial( 7 port='/dev/ttyS0', 8 baudrate=9600, 9 timeout=1 10) 11 12xbee = ZigBee(ser) 13 14def main(): 15 try: 16 while True: 17 recv_data = xbee.wait_read_frame() 18 19 if not recv_data: 20 print ('not recv') 21 time.sleep(0.1) 22 continue 23 24 if recv_data.has_key('rf_data'): 25 thermo_hygro = recv_data['rf_data'] 26 date = datetime.datetime.today().strftime('%Y/%m/%d %H:%M:%S') 27 print (date, thermo_hygro) 28 time.sleep(0.1) 29 finally: 30 if xbee != None: 31 xbee.halt() 32 33 if ser != None: 34 ser.close() 35 36if __name__ == '__main__': 37 main()

##シリアル通信確認プログラム

python

1import serial 2import time 3import threading 4import Queue 5 6class SerCom: 7 def __init__(self, tty, baud='9600'): 8 self.ser = serial.Serial(tty, baud, timeout=0.1) 9 self.queue = Queue.Queue() 10 11 self.event = threading.Event() 12 self.thread_r = threading.Thread(target=self.recv_) 13 self.thread_r.start() 14 15 def recv_(self): 16 while not self.event.is_set(): 17 line = self.ser.readline() 18 if len(line) > 0: 19 print(line) 20 self.queue.put(line) 21 22 def send(self, data): 23 self.ser.write(data) 24 25 def stop(self): 26 self.event.set() 27 self.thread_r.join() 28 29ser = SerCom('/dev/ttyS0', '9600') 30#ser.send('test') 31time.sleep(2) 32ser.stop()

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

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

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

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

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

t_obara

2020/02/19 02:40

試したこと1、2でそれぞれ受信を確認していると記載しておりますが、どのような方法を使って確認したのかをご提示ください。 試すことで、何が明らかになり、どの点が明らかになっていないかを整理して明らかになっていない点を別の方法で潰していく必要があります。
raspypy

2020/02/19 03:57

試したこと~その1~ XCTUというソフトを使って、XCTUの画面上にArduinoから送信されてくる文字を確認しました。 試したこと~その2~ Raspiで"test"という文字を送信し、受信した文字をprint表示させるプログラムにて、 コンソール画面に"test"と表示されることを確認しました。
t_obara

2020/02/19 04:01

その2で確認したプログラムで試すとどうなるのでしょうか。
raspypy

2020/02/19 04:51 編集

回答ありがとうございます。 その2で確認したプログラムを質問に追加しました。 このプログラムにおいて、"test"と送信する部分をコメントアウトし、試した結果、 何も表示されずにプログラムが終了しました。 その2で確認したプログラムを使用して、次のことを試しました。 Arduino側 XBee ATモードに設定 (Router) Raspi側 XBee ATモードに設定(Coordinator) Arduinoから文字"t"を送信し、Rasppi側で受信したデータをコンソール画面に表示させたところ、 コンソール画面に"t"が表示されました。 透過(AT)モードは、通信できていそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問