ESP8266 umqtt OSError -1

问题描述 投票:0回答:1

我有一个 ESP8266。在此板上,我运行最新版本的 MicroPython 固件 (1Mib)。

我有一个带有 2 个按钮的 Java Vaadin Web 应用程序。一个按钮用于发布,LED 应关闭,一个按钮用于打开 LED。

ESP 上的 MicroPython 程序运行良好,直到我从 Vaadin 应用程序发布。我得到 OSError -1,没有其他参数。

一些信息: 代理:dockerhub localhost 中的 hivemq 闪烁程序:Thonny

这是我的MicroPython代码:(为了数据保护我删除了ssid和密码->客户端成功连接wifi)

import machine
from umqtt.simple import MQTTClient
import network
import time

ssid = "ssid"
password = "password"
wlan = network.WLAN(network.STA_IF)

wlan.active(True)
wlan.connect(ssid, password)

while not wlan.isconnected():
    pass

print("hallo")

MQTT_TOPIC = "led/control"

LEDstatus = "off"

ClientID = "Alabama"

LED_PIN = machine.Pin(2, machine.Pin.OUT)
LED_PIN.value(1)

def mqtt_callback(topic, msg):
    if msg.decode() == "on":
        LEDstatus = "on"
        LED_PIN.value(0)
    elif msg.decode() == "off":
        LEDstatus = "off"
        LED_PIN.value(1)

client = MQTTClient(b"Alabama", b"192.168.2.125", 1883)
client.set_callback(mqtt_callback)

client.connect()
client.subscribe(MQTT_TOPIC)

while True:
    try:
        client.check_msg()
        time.sleep(10)
    except OSError as e:
        print("Fehler beim Empfangen der Nachricht:")
        print(e.args)
        client.disconnect()
        break

这是我在 Java Vaadin 中的订阅发布方法:

public void publishToDashboard(String topic, String message, String clientID)
            throws ExecutionException, InterruptedException, JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, String> payload = new HashMap<>();
        payload.put("clientID", clientID);
        payload.put("message", message);

        String strPayload = objectMapper.writeValueAsString(payload);

        Mqtt5Publish mqttMessage = Mqtt5Publish.builder()
                .topic(topic)
                .payload(strPayload.getBytes())
                .contentType("json")
                .qos(MqttQos.AT_LEAST_ONCE)
                .build();

        this.client.publish(mqttMessage).get();
        System.out.println("published");
    }

对于 Java MQTT 客户端,我正在使用 hivemq 中的这个客户端。

这是我在单击按钮时调用的方法:

private void publishLED(ClickEvent<Button> event, String msg, String clientID) {
        CompletableFuture.runAsync(() -> {
            try {
                client.publishToDashboard("led/control", msg, clientID);
            } catch (ExecutionException | InterruptedException | JsonProcessingException ex) {
                throw new RuntimeException(ex);
            }
        });
    }

这是我第一个使用 ESP8266 和 MQTT 的项目,我确实搜索了 5 个小时来查找此异常,但我没有找到任何东西。

如果缺少任何信息,请告诉我。

感谢您尝试帮助我。 :)

祝你好运

尝试:使用按钮从 Web 应用程序发布消息 预期:ESP8266 通过订阅捕获消息并打开或关闭 LED 发生了什么:OSError -1

vaadin mqtt esp8266 micropython hivemq
1个回答
0
投票

找到了解决方案。

问题出在客户名称上。不要在 JavaMQTTClient 和 Python 程序中使用客户端名称。

对于 JavaMQTTClient,您可以使用 UUID 作为示例。

© www.soinside.com 2019 - 2024. All rights reserved.