##やろうとしていること
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()
あなたの回答
tips
プレビュー