[SOLVED] ESP8266 device offline on local Blynk server

I’ve seen similar problems on this forum, but there were no clear solutions posted or they did not help in my case.

My hardware is NodeMCU (I guess plain esp8266 would be same) with WiFi connection.
Blynk android app is 2.19.0 version.
Local Blynk server is 0.32.2 version.
Blynk library version is 0.5.1.


#define BLYNK_PRINT Serial
#define BLYNK_DEBUG

#include <U8g2lib.h>
#include <Wire.h>

#include <ESP8266WiFi.h>

#include <SoftwareSerial.h>
#include <BlynkSimpleEsp8266.h>

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display

unsigned int ppm = 0;
SoftwareSerial mh19zSerial(D5, D4); // D5 - к TX сенсора, D4 - к RX

byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; 
unsigned char response[9];
unsigned long co2MeasurementInterval = 30000;
BlynkTimer timer;

void setup() {
  Serial.begin(115200);
  Serial.println();

  WiFi.mode(WIFI_STA);
  WiFi.begin("ssid", "password");
  
  Serial.print("Connecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("successfuly!");

  Serial.println("Connecting to Blynk");
  Blynk.config("auth_token", IPAddress(192,168,1,7), 9443);
  bool result = Blynk.connect(180);  
  while (bool result = Blynk.connect(180)) {
    Serial.println("BLYNK Connection Fail");
    delay (1000);
    Serial.print(".");
  }
  Serial.println("BLYNK Connected");

  Serial.println("local ip:");
  Serial.println(WiFi.localIP());

  mh19zSerial.begin(9600);
  
  u8g2.begin();
  u8g2.setFlipMode(0);

  while (mh19zSerial.read()!=-1) {};  //clear Co2 buffer.

  timer.setInterval(co2MeasurementInterval, sendSensor);
  timer.setInterval(1000L, redrawScreen);
}

void sendSensor()
{
    Serial.println("CO2 - Sending data request to sensor.");
    ppm = get_co2();
    
    Blynk.virtualWrite(V10, ppm); // virtual pin
}

void redrawScreen(void)
{
    u8g2.clearBuffer();
    //-----------------------------
    uint8_t mdy = 0;
    u8g2.setFontMode(1);	// Transparent
    u8g2.setDrawColor(1);

    u8g2.setFontDirection(0);
    u8g2.setFont(u8g2_font_inb16_mr);
    u8g2.drawStr(20, 16, "CO");
    u8g2.setFont(u8g2_font_6x13B_mn);
    u8g2.drawStr(50, 16, "2");
    u8g2.setFont(u8g2_font_inb16_mr);
    u8g2.drawStr(70, 16, "PPM");
    
    u8g2.drawFrame(0, 17, 128, 47);

    char ppmStr[5];
    itoa(ppm, ppmStr, 10);
    
    u8g2.setFont(u8g2_font_logisoso42_tn);
    u8g2_uint_t width = u8g2.getStrWidth(ppmStr);
    u8g2.drawStr((127-width)/2, 63, ppmStr);
    //-----------------------------
    u8g2.sendBuffer();
}

int get_co2()
{
    while (mh19zSerial.read()!=-1) {};  //clear serial buffer
    
    mh19zSerial.write(cmd, 9);
    memset(response, 0, 9);
    mh19zSerial.readBytes(response, 9);
    int i;
    byte crc = 0;
    for (i = 1; i < 8; i++) crc+=response[i];
    crc = 255 - crc;
    crc++;
  
    if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
        Serial.println("CRC error: " + String(crc) + " / "+ String(response[8]));
    } else {
        unsigned int responseHigh = (unsigned int) response[2];
        unsigned int responseLow = (unsigned int) response[3];
        int currentPpm = (256*responseHigh) + responseLow;
        Serial.println(currentPpm);

        return currentPpm;
    }

    return 0;
}

void loop(void) {
    Blynk.run();
    timer.run();
}

I have OLED screen connecte via i2c on D1 and D2 (controlled with u8g2 lib) and a MH-19ZB CO2 sensor, connected via UART interface (using SoftwareSerial on pins D4 and D5).
CO2 sensor works fine, sketch successfully reads data and draws it on screen.
Android app connected to local server successfully and I was able to create account and add a project with device token. But no matter how long does NodeMCU work the app always shows that no device has ever been to the server.

COM port monitor shows:

..successfuly!
Connecting to Blynk
[1544] 
    ___  __          __
   / _ )/ /_ _____  / /__
  / _  / / // / _ \/  '_/
 /____/_/\_, /_//_/_/\_\
        /___/ v0.5.1 on NodeMCU

[1548] Connecting to 192.168.1.7
[1570] <[02|00|01|00] 417a62e11xxxxxxxxxx7258002566
BLYNK Connected
local ip
192.168.1.10
[6631] Connecting to 192.168.1.7
[6637] <[02|00|01|00] 417a62e11xxxxxxxxxx7258002566
[11638] Connecting to 192.168.1.7
[11644] <[02|00|01|00] 417a62e11xxxxxxxxxx7258002566

Blynk server worker.log:


01:12:52.057 - Starting saving user db.
01:12:52.057 - Saving user db finished. Modified 0 users.
01:13:23.454 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms
01:13:52.056 - Starting saving user db.
01:13:52.056 - Saving user db finished. Modified 0 users.
01:14:23.453 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms
01:14:52.056 - Starting saving user db.
01:14:52.056 - Saving user db finished. Modified 0 users.
01:15:23.453 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms
01:15:52.056 - Starting saving user db.
01:15:52.056 - Saving user db finished. Modified 0 users.
01:16:23.454 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms
01:16:52.055 - Starting saving user db.
01:16:52.060 - Saving user db finished. Modified 1 users.
01:17:23.453 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms
01:17:52.056 - Starting saving user db.
01:17:52.063 - Saving user db finished. Modified 1 users.
01:18:23.453 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms
01:18:52.055 - Starting saving user db.
01:18:52.060 - Saving user db finished. Modified 1 users.
01:19:23.453 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms
01:19:52.057 - Starting saving user db.
01:19:52.063 - Saving user db finished. Modified 1 users.
01:20:23.453 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms
01:20:52.055 - Starting saving user db.
01:20:52.055 - Saving user db finished. Modified 0 users.
01:21:23.453 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms
01:21:52.057 - Starting saving user db.
01:21:52.057 - Saving user db finished. Modified 0 users.
01:22:22.819 - Timers : 0
01:23:01.003 - Starting saving user db.
01:23:01.003 - Saving user db finished. Modified 0 users.
01:23:24.400 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms
01:24:01.002 - Starting saving user db.
01:24:01.144 - Saving user db finished. Modified 1 users.
01:24:24.400 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms
01:25:01.002 - Starting saving user db.
01:25:01.019 - Saving user db finished. Modified 1 users.
01:25:24.401 - Ticked widgets for 1 minute : 0. Per second : 0, total time : 0 ms

What am I doing wrong?

Have you tried just a basic connection routine first?

char auth[] = "xxxxxxxxxx";
char ssid[] = "xxxxxxxxxx";
char pass[] = "xxxxxxxxxx";
char server[] = "xxx.xxx.xxx.xxx";  // IP for your Local Server
int port = 8080;


void setup() {
  Serial.begin(115200);  // BLYNK_PRINT data
  WiFi.begin(ssid, pass); 
  Blynk.config(auth, server, port);
  Blynk.connect();;

PS this port is for use in the APP not the sketch… use 8080 for the sketch

2 Likes

Thank you, @Gunner
The port change did the trick — so to sum it up, 9443 is application and for sketches on non-SSL hardware 8080 port is used.