Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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()
Ejemplo n.º 7
0
            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()