MTTQ Threaded receive



  • Hi, not sure if this is related to micropython or is a problem with my code.

    I am using a thread to listen for messages, while in the main code I am looping every second and sending data.

    The purpose is to continually send data but also be able to not miss and quickly respond to a request.

    def recv_msg_callback(topic, msg):
      BUSY = True
      print(topic +"="+ msg)
      
    def listen(arg):
      while True:
        try:
          BUSY = False
          client.wait_msg()
        except NameError:
          pass
    
    client.set_callback(recv_msg_callback)
    client.subscribe('/lights')
    
    _thread.start_new_thread(listen,(None,))
    
    while True:
      if(not BUSY):
        print("Sending ON")
        client.publish("/slights", "ON")
        time.sleep(1)
        print("Sending OFF")
        client.publish("/slights", "OFF")
      time.sleep(1)
    
    

    But the problem is, the main loop is not executing independently of the thread and only fires after a message is received.

    The received data (lights=xxxxx) is being transmitted every 5 seconds (just for dev/testing) so what I am expecting is for the main look to send on and off 4 times for every receive but it is not.

    Sending OFF
    b'/lights=4639.61'
    Sending ON
    b'/lights=4644.02'
    Sending OFF
    b'/lights=4648.55'
    Sending ON
    b'/lights=4653.74'
    

    What am I doing wrong ??


Log in to reply
 

Pycom on Twitter