2017-09-07 7 views
-1

今日私はNodeMCUを手に入れました。 WiFiとMQTTサーバーに接続したいと思っていました。NodeMCUが奇妙なIPアドレスを取得

私はこれにPubSubの例を使用しました。

シリアルモニタでは、WiFiに正常に接続したというメッセージが表示されますが、IP 172.20.10.6が表示されます。しかし私たちは192.168 ...ネットワークを持っています。

MQTTサーバーに接続しようとすると、MQTTサーバーが見つかりません。 NodeMCUに静的IPを与えようとすると、正常に接続され、静的IPが表示されますが、MQTTサーバーに接続できません。

NodeMCUにpingを実行できず、スマートフォンアプリ "Fing"でNodeMCUが見つかりません。

#include <ESP8266WiFi.h> 
#include <PubSubClient.h> 

const char* ssid = "myssid"; 
const char* password = "mypw"; 
const char* mqtt_server = "192.168.42.131"; 

WiFiClient espClient; 
PubSubClient client(espClient); 
long lastMsg = 0; 
char msg[50]; 
int value = 0; 

void setup() { 
    pinMode(BUILTIN_LED, OUTPUT); 
    // Initialize the BUILTIN_LED pin as an output 
    Serial.begin(115200); 
    setup_wifi(); 
    client.setServer(mqtt_server, 1883); 
    client.setCallback(callback); 
} 

void setup_wifi() { 
    delay(10); 
    // We start by connecting to a WiFi network 
    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 callback(char* topic, byte* payload, unsigned int length) { 
    Serial.print("Message arrived ["); 
    Serial.print(topic); 
    Serial.print("] "); 
    for (int i = 0; i < length; i++) { 
    Serial.print((char)payload[i]); 
    } 
    Serial.println(); 
    // Switch on the LED if an 1 was received as first character 
    if ((char)payload[0] == '1') { 
    digitalWrite(BUILTIN_LED, LOW); 
    // Turn the LED on (Note that LOW is the voltage level 
    // but actually the LED is on; this is because 
    // it is active low on the ESP-01) 
    } else { 
    digitalWrite(BUILTIN_LED, HIGH); 
    // Turn the LED off by making the voltage HIGH 
    } 
} 

void reconnect() { 
    // Loop until we're reconnected 
    while (!client.connected()) { 
    Serial.print("Attempting MQTT connection..."); 
    // Attempt to connect 
    if (client.connect("ESP8266Client")) { 
     Serial.println("connected"); 
     // Once connected, publish an announcement... 
     //client.publish("outTopic", "hello world"); 
     // ... and resubscribe 
     client.subscribe("mathistest"); 
    } else { 
     Serial.print("failed, rc="); 
     Serial.print(client.state()); 
     Serial.println(" try again in 5 seconds"); 
     // Wait 5 seconds before retrying 
     delay(5000); 
    } 
    } 
} 
void loop() { 
    if (!client.connected()) { 
    reconnect(); 
    } 
    client.loop(); 
    long now = millis(); 
    if (now - lastMsg > 2000) { 
    lastMsg = now; 
    ++value; 
    snprintf (msg, 75, "hello world #%ld", value); 
    } 
} 
+0

質問を[arduino.se]に移動することを検討してください。私はあなたがそこで答えを得る可能性が高いと思う。 –

答えて

0

ほとんどの場合、DHCP障害が発生している可能性があります。

172.20.x.xのアドレスはルーティング不可能なIPアドレス(https://www.lifewire.com/what-is-a-private-ip-address-2625970参照)であり、アドレス割り当てが失敗したときにDHCPコードがそのアドレスを使用している可能性があります。

ステップバイステップでは、正しいSSIDとパスワードでWifiネットワークに接続できないため、DHCPが失敗する可能性があります。

関連する問題