9. #!/usr/bin/env python3
import subprocess
import serial
import time
import os
TERM = 'rn'
def getLocation():
# LocateMeは WiFiが有効になっていないと動作しません。WiFi接続がある必要はありませんが。
data = subprocess.check_output('./LocateMe', stderr=subprocess.STDOUT, universal_newlines=True)
data = data.split()
return data[0][1:-1]
def readLoRALine(lora_serial):
bdata = b''
start_time = time.time()
ret = False
while True:
bdata += lora_serial.read()
if TERM in bdata.decode():
str = bdata.decode()
if 'ping' in str:
ret = True
break
if 'Ack Timeout' in str:
break
if '--' in str :
bdata = b''
if time.time() - start_time > 1:
break
return ret
def pingLoRA(lora_serial):
lora_serial.write(b'ping' + TERM.encode())
test = readLoRALine(lora_serial)
return test
if __name__ == '__main__':
ser = serial.Serial('/dev/cu.usbserial-A514GATO', baudrate=115200, timeout=1)
try:
while True:
g = getLocation()
res = pingLoRA(ser)
os.system('say {}'.format('OK' if res else 'だめです'))
print('{} {}'.format(g, '<green-dot>'if res else '<default-dot>'))
time.sleep(2)
finally:
ser.close()
14. 使用した設定
Node : EndDevice (Coordinator 側も同じ)
Band Width : 125kHz
Spreading Factor : 7
Effective Bitrate : 5469bps
Channel : 1
PAN ID : 2222
Own Node ID : 0002
Destination ID : 0001 (Coordinator は 0002)
Acknowledge : ON
Retry count : 3
Transfer Mode : Payload
Receive Node ID information : OFF
RSSI information : OFF
Config/Operation : Configuration
UART baudrate : 115200
Sleep Mode : No Sleep
Sleep Time : 50
Output Power : 13dBm