def on_receive(lora, payload): display = Display() item = [] lora.blink_led() now = config_lora.get_millis() try: payload = payload.decode() if(len(payload) != 0): sender_NODE_NAME, sender_msgCount, sent_millisecond = parse_message(payload) key = '{}_{}'.format(sender_NODE_NAME, sender_msgCount) item = messages.get(key) if item: # matched message, calculate elipse time, and remove item. item['pong'] = now item['elipse'] = item['pong'] - item['ping'] item['done'] = True message = "*** Pong after {} ms ***".format(item['elipse']) display.show_text_wrap("{0} : {1}".format(message, item)) del messages[key] else: # new message, send it back. #print("*** Received message ***\n{}".format(payload)) display.show_text_wrap("{0} : {1}".format(payload, lora.packetRssi())) message = gen_message(sender_NODE_NAME, sender_msgCount, config_lora.get_millis()) sendMessage(lora, message) except Exception as e: display.show_text_wrap("Error : {0}".format(e))
def do_loop(lora): global msgCount lastSendTime = 0 interval = 0 NODE_NAME = config_lora.get_nodename() while True: now = config_lora.get_millis() if now < lastSendTime: lastSendTime = now if (now - lastSendTime > interval): lastSendTime = now # timestamp the message interval = (lastSendTime % INTERVAL) + INTERVAL_BASE # 2-3 seconds message = gen_message(NODE_NAME, msgCount, now) sendMessage(lora, message) # send message key = '{}_{}'.format(NODE_NAME, msgCount) messages[key] = {'node': NODE_NAME, 'msgCount': msgCount, 'ping': now, 'pong': None, 'done': False, 'elipse': None} msgCount += 1 lora.receive() # go back into receive mode
def send_data(): global config_lora, lora, data, intervalUpdates, lastUpdateTimes now = config_lora.get_millis() if now < lastUpdateTimes[5]: lastUpdateTimes[5] = now if (now - lastUpdateTimes[5] > intervalUpdates[5]): lastUpdateTimes[5] = now # timestamp the message print('lora') try: save_time = ','.join([str(x) for x in data['time']]) save_gps = ','.join([str(x) for x in data['gps']]) save_imu = data['imu'][0].xyz + data['imu'][1].xyz + data['imu'][ 2].xyz save_imu = ','.join([str(x) for x in save_imu]) + ',' + str( data['imu'][3]) msg = save_time + ',' + save_gps + ',' + save_imu # lora message generation print(msg) message = gen_message(NODE_NAME, msg, now) lora.println(msg) # send message lora.receive() # go back into receive mode except: print('Error sending data') collect_garbage()
def update_display(): global config_lora, display, data, intervalUpdates, lastUpdateTimes now = config_lora.get_millis() if now < lastUpdateTimes[3]: lastUpdateTimes[3] = now if (now - lastUpdateTimes[3] > intervalUpdates[3]): lastUpdateTimes[3] = now print('display') try: gps = data['gps'] accel = data['imu'][0] # display information display.show_text('Lat.:{:04.2f}'.format(gps[0]), 0, 0, True) display.show_text('Long.:{:04.2f}'.format(gps[1]), 0, 10, False) display.show_text('Speed:{}'.format(data['speed']), 0, 20, False) display.show_text( 'A:({:03.1f},{:03.1f},{:03.1f})'.format( accel.x, accel.y, accel.z), 0, 30, False) display.show_text( 'WF:{0}|LoRa:{1}'.format(len(data['nodes']), lora.packetRssi()), 0, 40, False) display.show_text( 'Time:{:02d}:{:02d}:{:02.1f}'.format(data['time'][0], data['time'][1], data['time'][2]), 0, 50, False) collect_garbage() except: display.show_text('Waiting for data...', 0, 0, True)
def do_loop(lora): global msgCount lastSendTime = 0 interval = 0 while True: now = config_lora.get_millis() if (now - lastSendTime > interval): lastSendTime = now # timestamp the message interval = (lastSendTime % INTERVAL) + INTERVAL_BASE # 2-3 seconds message = "{} {}".format(config_lora.get_nodename(), msgCount) print(interval, 'interval') sendMessage(lora, message) # send message msgCount += 1 lora.receive() # go into receive mode
def update_data(): global config_lora, station, my_gps, sensor, data, intervalUpdates, lastUpdateTimes now = config_lora.get_millis() if now < lastUpdateTimes[0]: lastUpdateTimes[0] = now if (now - lastUpdateTimes[0] > intervalUpdates[0]): lastUpdateTimes[0] = now print('imu') data['imu'] = [ sensor.accel, sensor.gyro, sensor.mag, sensor.temperature ] collect_garbage() if (now - lastUpdateTimes[1] > intervalUpdates[1]): lastUpdateTimes[1] = now print('gps') stat = my_gps.updateall(uart.read(), True) data['satellites'] = my_gps.satellites_in_use data['gps'] = (my_gps.latitude_decimal(), my_gps.longitude_decimal(), my_gps.altitude) + my_gps.speed data['speed'] = my_gps.speed_string() data['time'] = my_gps.timestamp collect_garbage() if (now - lastUpdateTimes[2] > intervalUpdates[2]): lastUpdateTimes[2] = now print('wlan') # wlan if (not station.active()): station.active(True) networks = station.scan() wlan_nodes = [] for net in networks: wlan_node = netpretty(net) wlan_nodes.append(wlan_node) data['nodes'] = wlan_nodes collect_garbage()
save_imu = data['imu'][0].xyz + data['imu'][1].xyz + data['imu'][ 2].xyz save_imu = ','.join([str(x) for x in save_imu]) + ',' + str( data['imu'][3]) msg = save_time + ',' + save_gps + ',' + save_imu # lora message generation print(msg) message = gen_message(NODE_NAME, msg, now) lora.println(msg) # send message lora.receive() # go back into receive mode except: print('Error sending data') collect_garbage() while True: now = config_lora.get_millis() if (settings['status'] == _sleeping): station.active(False) #display.poweroff() elif (settings['status'] == _moving): update_display() update_data() save_data() send_data()