2017-07-06 15 views
0

2 esp8266に問題があります。両方とも1ワイヤでds18b28に配線され、MQTTでデータが送信されますが、両方をオンにするとデータの1つだけが送信されます。問題はありませんが、ここにコードがあります。両方とも同じコードを使用します。Mosquitto MQTTデバイスが遅くなります

#include <ESP8266WiFi.h> 

#include <PubSubClient.h> 

#include <OneWire.h> 

#include <DallasTemperature.h> 
#define ONE_WIRE_BUS 5 
OneWire oneWire(ONE_WIRE_BUS); 

DallasTemperature sensors(&oneWire); 


const char* ssid = "PIREV-PC_NETWORK"; 
const char* password = "********"; 
const char* mqtt_server = "192.168.0.4"; 

WiFiClient espClient; 
PubSubClient client(espClient); 
long lastMsg = 0; 
float temp = 0; 
int inPin = 5; 

void setup_wifi() { 
delay(10); 
Serial.println(); 
Serial.print("Connecting to "); 
Serial.println(ssid); 
WiFi.begin(ssid, password); 

while (WiFi.status() != WL_CONNECTED) 
{ 
delay(500); 
Serial.print("."); 
} 
Serial.println(""); 
Serial.println("WiFi connected"); 
Serial.println("IP address: "); 
Serial.println(WiFi.localIP()); 
} 

void reconnect() { 
while (!client.connected()) { 
Serial.print("Attempting MQTT connection..."); 
if (client.connect("arduinoClient_temperature_sensor")) { 
    Serial.println("connected"); 
} else { 
    Serial.print("failed, rc="); 
    Serial.print(client.state()); 
    Serial.println(" try again in 5 seconds"); 
    delay(5000); 
    } 
} 
} 

void setup() 
{ 
Serial.begin(115200); 
setup_wifi(); 
client.setServer(mqtt_server, 1883); 
pinMode(inPin, INPUT); 
sensors.begin(); 
} 

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

long now = millis(); 
if (now - lastMsg > 300) { 
lastMsg = now; 
sensors.setResolution(12); 
sensors.requestTemperatures(); 
temp = sensors.getTempCByIndex(0); 
Serial.println(temp); 
if((temp > -20) && (temp <60)) 
    { 
    client.publish("dev/test/temp2", String(temp).c_str(),TRUE); 
    } 
    } 
} 
+0

同じコードを使用していますか、各デバイスのトピックが異なりますか?また、両方のデバイスで同じクライアントIDを使用していますか? – hardillb

+0

ちょうど話題は違い、何もありません –

答えて

0

クライアントIDはすべてのクライアントごとに異なる必要があります。

この場合、両方のセンサーにarduinoClient_temperature_sensorが使用されているように見えますが、ブローカーは2番目のセンサーが接続されたときに常に最初のセンサーを切断するため、これは機能しません。

void reconnect() { 
    while (!client.connected()) { 
    Serial.print("Attempting MQTT connection..."); 
    // The value passed to client.connect needs to be unique 
    if (client.connect("arduinoClient_temperature_sensor")) { 
     Serial.println("connected"); 
    } else { 
     Serial.print("failed, rc="); 
     Serial.print(client.state()); 
     Serial.println(" try again in 5 seconds"); 
     delay(5000); 
    } 
    } 
} 
+0

私は間違いを認識しました、ありがとう! –

関連する問題