Arduino PubSubClient无法连接到Mosquitto

时间:2017-07-23 13:33:14

标签: arduino mqtt

我正在尝试用Arduino,Raspberry,mqtt,MySql,Php完成我的酿造系统。

我想从通过串口发送数据切换到以太网+ MQTT。 当我尝试使用PubSubClient发布订阅时,一切顺利。但每当我尝试放置DallasTemperature begin()函数时,它就无法再与代理连接。 一旦我删除了sensors.begin();指令,它就会重新启动并完美运行。

你们中的任何一个人都知道为什么地狱就像这样?

这里是代码:

#include <OneWire.h>

#include <DallasTemperature.h>

#include <SPI.h>
#include <PubSubClient.h>
#include <Ethernet.h>

#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature Sensors(&oneWire);

// Pins
const int photocellPin = 1; // the cell and 10K pulldown are connected to a1
// Variables
String lightC;
unsigned long time;
char message_buffer[100];

// Network Settings
// MAC address of ethernet shield
// Look for it on a sticket at the bottom of the shield.
// Old Arduino Ethernet Shields or clones may not have a dedicated MAC   address. Set any hex values here.
byte MAC_ADDRESS[] = { 0xFE, 0xED, 0xDE, 0xAD, 0xBE, 0xED };

// IP address of MQTT server
byte MQTT_SERVER[] = { 192, 168, 2, 46 }; // 10, 192, 191, 77 { 192, 168, 1,   115 };
// Handles messages arrived on subscribed topic(s)
void callback(char* topic, byte* payload, unsigned int length)
{
    Serial.print("Messaggio ricevuto [");
    Serial.print(topic);
    Serial.print("]");
    for (int i = 0; i < length; i++) {
        char receivedChar = (char)payload[i];
        Serial.print(receivedChar);
    }
    Serial.println();
}
EthernetClient ethClient;
PubSubClient client(MQTT_SERVER, 1883, callback, ethClient);
IPAddress ip(192, 168, 2, 177);

void setup()
{
    // Initilize serial link for debugging
    Serial.begin(9600);

    Ethernet.begin(MAC_ADDRESS, ip);
    delay(2000);
    // initialize the digital pin's as an output.
    Serial.println("connected...");
    Sensors.begin();
    Serial.println("initialized..."); // Just for checking
}

void loop()
{
    if (!client.connected()) {
        reconnect();
    }

    lightC = dtostrf(analogRead(photocellPin), 5, 2, message_buffer); // TMP36 sensor calibration

    Serial.println(lightC);
    delay(2000);
    // Publish sensor reading every X milliseconds
    if (millis() > (time + 60000)) {
        time = millis();
        client.publish("fromarduino", (char*)lightC.c_str());
    }
    // MQTT client loop processing
    client.loop();
}

void reconnect()
{
    // Loop until we're reconnected
    while (!client.connected()) {
        Serial.print("Attempting MQTT connection...");
        // Attempt to connect
        if (client.connect("mb-arduino")) {
            Serial.println("MQTT connected");
            client.publish("fromarduino/alive", "I'm alive!");
            client.subscribe("toarduino");
        }
        else {
            Serial.print("failed, rc=");
            Serial.print(client.state());
            Serial.println(" try again in 5 seconds");
            // Wait 5 seconds before retrying
            delay(5000);
        }
    }
}

它总是返回错误rc=-2

0 个答案:

没有答案