Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    Unpack and Pack

    Scheduled Pinned Locked Moved Comments & Feedback
    lopygatewaynode
    4 Posts 2 Posters 1.3k Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M Offline
      MJ
      last edited by

      Hi there, i want to pack a float in the node and send it over to the gateway. May i know is the format valid?

      _LORA_PKG_FORMAT = "BBf" #1byte for device_id, 1 byte for package size, 1 for float

      Here is the information that i want it to be pack as a float at Node

      D = 10**((Measured_power-rssi)/(10*n)
      pkg = struct.pack(_LORA_PKG_FORMAT % len(msg), DEVICE_ID, len(msg), D) lora_sock.send(pkg)
      Here is the information that unpack at Gateway

      device_id, pkg_len, D = struct.unpack(_LORA_PKG_FORMAT % recv_pkg_len, recv_pkg)
      I tried this format but i have no received anythings from the node and i tried the example of the Lora Nano-gateway in documentation and it work so i guess is not the firmware problem since i have all lopy updated to the same version.
      Any help would be appreciate. Thank you.

      robert-hhR 1 Reply Last reply Reply Quote 0
      • robert-hhR Offline
        robert-hh @MJ
        last edited by robert-hh

        @mj said in Unpack and Pack:

        pkg = struct.pack(_LORA_PKG_FORMAT % len(msg), DEVICE_ID, len(msg), D) lora_sock.send(pkg)

        Since you have a fixed message length, you can simply use:
        struct.pack(FORMAT, DEVICE_ID, 6, D)
        and unpack with:
        device_id, pkg_len, D = struct.unpack(_LORA_PKG_FORMAT, recv_pkg)
        You can even omit sending the pkg_len and pack with:

        _LORA_PKG_FORMAT = "Bf" #1byte for device_id, 4 for float
        D = 10**((Measured_power-rssi)/(10*n)
        pkg = struct.pack(_LORA_PKG_FORMAT, DEVICE_ID,  D) lora_sock.send(pkg)
        

        and unpack with:

        device_id, D = struct.unpack(_LORA_PKG_FORMAT, recv_pkg)
        
        M 1 Reply Last reply Reply Quote 0
        • M Offline
          MJ @robert-hh
          last edited by

          @robert-hh
          I have tried but still showing no response once i uploaded the code.

          On my Node :

          _LORA_PKG_FORMAT = "Bf"
          DEVICE_ID = 0x01
          lora = LoRa(mode=LoRa.LORA, tx_iq=True, frequency = 915000000)
          lora_sock = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
          lora_sock.setblocking(False)
          Measured_power = -37
          n = 3 
          d = (10**((Measured_power-rssi)/(10*n)))/1000
          
          pkg = struct.pack(_LORA_PKG_FORMAT, DEVICE_ID, 6, D)
          lora_sock.send(pkg)
          

          For Gateway :

          _LORA_PKG_FORMAT = "Bf"
          lora = LoRa(mode=LoRa.LORA, rx_iq=True, frequency = 915000000)
          lora_sock = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
          
          device_id, D = struct.unpack(_LORA_PKG_FORMAT, recv_pkg)
          

          Is there any mistake? Thank you.

          robert-hhR 1 Reply Last reply Reply Quote 0
          • robert-hhR Offline
            robert-hh @MJ
            last edited by

            @mj SInce the for string for pack contains only two fields, it must be written as:

            _LORA_PKG_FORMAT = "Bf"
            pkg = struct.pack(_LORA_PKG_FORMAT, DEVICE_ID,  D) 
            

            But besides that, the receiver must contains a lora_sock.recv(64) call, in order to get something. Please have a look at the simple examples in the documentation on how the code structure has to be set up.

            1 Reply Last reply Reply Quote 0

            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

            With your input, this post could be even better 💗

            Register Login
            • 1 / 1
            • First post
              Last post

            Pycom on Twitter

            Pycom