Please help! NodeMCU(ESP8266) can not connect to MQTT broker!

Hello friends, I’m using OH2 with raspberry pi 3 and I’ve successfully installed and tested mosquitto (MQTT broker) using “mosquitto_sub/pub” command on rasp’s terminal.
Then I follow this tutorial:

I uploaded his arduino sketch to my NodeMCU v1.0 module (Wifi ssid and password are matched with my home wifi). Here is the result:

It seems like the NodeMCU is able to connect to Wifi but can not form a connection with raspberry MQTT’s broker.
Here is the code:

//ItKindaWorks - Creative Commons 2016
//Requires PubSubClient found here:
//ESP8266 Simple MQTT light controller

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

void callback(char* topic, byte* payload, unsigned int length);
#define MQTT_SERVER ""
const char* ssid = "P820";
const char* password = "xxxxxxx";

//LED on ESP8266 GPIO2
const int lightPin = 2;

char* lightTopic = "staircase";

WiFiClient wifiClient;
PubSubClient client(MQTT_SERVER, 1883, callback, wifiClient);

void setup() {
  //initialize the light as an output and set to LOW (off)
  pinMode(lightPin, OUTPUT);
  digitalWrite(lightPin, LOW);

  //start the serial line for debugging

  //start wifi subsystem
  WiFi.begin(ssid, password);
  //attempt to connect to the WIFI network and then connect to the MQTT server

  //wait a bit before starting the main loop

void loop(){

  //reconnect if connection is lost
  if (!client.connected() && WiFi.status() == 3) {reconnect();}

  //maintain MQTT connection

  //MUST delay to allow ESP8266 WIFI functions to run

void callback(char* topic, byte* payload, unsigned int length) {

  //convert topic to string to make it easier to work with
  String topicStr = topic; 

  //Print out some debugging info
  Serial.println("Callback update.");
  Serial.print("Topic: ");

  //turn the light on if the payload is '1' and publish to the MQTT server a confirmation message
  if(payload[0] == '1'){
    digitalWrite(lightPin, HIGH);
    //client.publish("/test/confirm", "Light On");


  //turn the light off if the payload is '0' and publish to the MQTT server a confirmation message
  else if (payload[0] == '0'){
    digitalWrite(lightPin, LOW);
    //client.publish("/test/confirm", "Light Off");


void reconnect() {

  //attempt to connect to the wifi if connection is lost
  if(WiFi.status() != WL_CONNECTED){
    //debug printing
    Serial.print("Connecting to ");

    //loop while we wait for connection
    while (WiFi.status() != WL_CONNECTED) {

    //print out some more debug once connected
    Serial.println("WiFi connected");  
    Serial.println("IP address: ");

  //make sure we are connected to WIFI before attemping to reconnect to MQTT
  if(WiFi.status() == WL_CONNECTED){
  // Loop until we're reconnected to the MQTT server
    while (!client.connected()) {
      Serial.print("Attempting MQTT connection...");

      // Generate client name based on MAC address and last 8 bits of microsecond counter
      String clientName;
      clientName += "esp8266-";
      uint8_t mac[6];
      clientName += macToStr(mac);

      //if connected, subscribe to the topic(s) we want to be notified about
      if (client.connect((char*) clientName.c_str())) {
        Serial.print("\tMTQQ Connected");

      //otherwise print failed for debugging
      else{Serial.println("\tFailed."); abort();}

//generate unique name from MAC addr
String macToStr(const uint8_t* mac){

  String result;

  for (int i = 0; i < 6; ++i) {
    result += String(mac[i], 16);

    if (i < 5){
      result += ':';

  return result;

Can anybody help me?

esp ist on
and mqtt on

is your subnet mask ?

isn’t it the other way round?

what does your mqtt log says?
Did you try to connect using for example a win10 computer or something?

i have the same problem any solution ??

working code here