micropython / micropython/micropython-lib
MQTT connection and client.check_msg() problem
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 2.9k
- Fork
- 1.1k
- Merge medio
- 7g 6h
- PR unite (30g)
- 3
Descrizione
I'm using Adafruit IO switches to turn my nodeMCU lights ON and OFF. The following code works but for a limited period of time. 5 minutes after the connection into Adafruit IO it seems the client tries to reconnect and if this happens I lose my switch funcionality at my adafruit dashboard. Either if I try to turn on or off the LED on my dashboard, the nodeMCU does not responds accordingly. Here is the code used (I'm using micropython, pycharm and a Lolin v3 nodemcu)
from machine import Pin
import sys
import os
import network
from umqtt.robust import MQTTClient
random_num = int.from_bytes(os.urandom(3), 'little')
mqtt_client_id = bytes('client_' + str(random_num), 'utf-8')
ADAFRUIT_LINK = b'io.adafruit.com'
ADAFRUIT_USERNAME = b'rodrigo1120'
ADAFRUIT_KEY = b'AAAAAAAAAAAAAAAAAAAAAAAAAAAA'
ADAFRUIT_FEEDNAME1 = b'gpio16'
ADAFRUIT_FEEDNAME2 = b'gpio2'
ssid = "WIFIUSERNAME"
password = "WIFIPASSWORD"
client = MQTTClient(client_id= mqtt_client_id,
server= ADAFRUIT_LINK,
user=ADAFRUIT_USERNAME,
password=ADAFRUIT_KEY)
mqtt_feedname1 = bytes('{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, ADAFRUIT_FEEDNAME1), 'utf-8')
mqtt_feedname2 = bytes('{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, ADAFRUIT_FEEDNAME2), 'utf-8')
def connect_to_ap():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('Connecting to {}'.format(ssid))
wlan.connect(ssid, password)
while not wlan.isconnected():
pass
print('Credentials: ', wlan.ifconfig())
try:
client.connect()
except Exception as e:
print('Could not connect to MQTT Server {}{}'.format(type(e).__name__, e))
def callback_routine(feed, msg):
print('Received Data from: feed={}, msg={}'.format(feed, msg))
if ADAFRUIT_FEEDNAME1 in feed:
action = str(msg, 'utf-8')
if action == 'ON':
pin16.value(0)
else:
pin16.value(1)
print('Action: {}'.format(action))
if ADAFRUIT_FEEDNAME2 in feed:
action = str(msg, 'utf-8')
if action == 'ON':
pin2.value(0)
else:
pin2.value(1)
print('Action: {}'.format(action))
pin16 = Pin(16, Pin.OUT)
pin2 = Pin(2, Pin.OUT)
pin16.value(1)
pin2.value(1)
def main():
connect_to_ap()
while True:
client.set_callback(callback_routine)
client.subscribe(mqtt_feedname1)
client.subscribe(mqtt_feedname2)
try:
client.wait_msg()
except KeyboardInterrupt:
print('Ctrl+C pressed, exiting')
client.disconnect()
sys.exit()
if __name__ == '__main__':
main()
Here is a picture of my serial monitor with this problem: (I took this picture 15 minutes after I stopped using the adafruit IO switches)

Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
La issue fornisce una riproduzione in MicroPython che usa umqtt.robust.MQTTClient, connect_to_ap() e il ciclo wait_msg() di main(), ma non indica alcun file del repository né alcun test. Inizia riproducendo la riconnessione dopo diversi minuti e analizza il comportamento di riconnessione e wait_msg di MQTTClient; il lavoro è completato quando sono state identificate una causa confermata e una modifica concordata o un aggiornamento della documentazione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- embedded-iot, networking
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100