前两天更新power-meter项目,打算使用PubSubClient 库实现接入 homeassistant

但在运行项目时发现 esp8266 mqtt推送极其不稳定

排查了 mqtt server 和接收消息的 client,都没有发现问题

用 esp8266 写了个循环推送,也很稳定,排除了板子本身的问题

for(int i = 1; i <= 100; i++){
    sprintf(message, "%d", i);
    client.publish(topic, message);
    yield();
    delay(500);
}

代码片段:

void loop(){
    while(1){
        light1 = analogRead(A0);
        if(light1 > powerledPin_average){
            // led on
            timeA = micros();

            delay(300);
            break;
        }
        yield();
        client.loop();
    }
    

    time_light = timeA - timeB;

    power = 1. / powerledPin_rate * 1000 * 3600 * 1000000 / time_light;

    Serial.println(power);
    sprintf(message, "%f", power);
    client.publish(topic, message);

    delay(100); // 加入延时
}

猜测最后一行 publish 的代码来不及处理就继续循环了,故在推送代码后加入延时,问题解决