Using Mutiplexer in Nodemcu esp8266

Im using multiplexer for my project which is water monitoring system, i have 3 parameters temperature, ph level and turbidity. ph level and turbidity need a analog sensor but esp8266 only have one analog pin so i use muliplexer, the problem when i test the turbidity sensor, ph level output also change even i didnt put it to a water.

this is my code

#define BLYNK_PRINT Serial  /* Comment this out to disable prints and save space */
#define S0 D0                             /* Assign Multiplexer pin S0 connect to pin D0 of NodeMCU */
#define S1 D1                             /* Assign Multiplexer pin S1 connect to pin D1 of NodeMCU */
#define S2 D2                             /* Assign Multiplexer pin S2 connect to pin D2 of NodeMCU */
#define S3 D3                             /* Assign Multiplexer pin S3 connect to pin D3 of NodeMCU */
#define SIG A0                            /* Assign SIG pin as Analog output for all 16 channels of Multiplexer to pin A0 of NodeMCU */

/* Fill-in your Template ID (only if using Blynk.Cloud) */
#define BLYNK_TEMPLATE_ID "TMPL4Cvekawb"

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h> 

char auth[] = "V9bTsvdXRzmSSQ4BfYVhC_nEN3N4ZMAA";
char ssid[] = "Pro";
char pass[] = "123456789";

BlynkTimer timer;
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
const int sensorPin = A0;
float temp; 
float calibration_value = 21.34;
int phval = 0; 
unsigned long int avgval; 
int buffer_arr[10],tem;

int decimal = 1;                          // Decimal places of the sensor value outputs 
int sensorVal;                            /* Assign the name "sensor0" as analog output value from Channel C0 */
int sensor1;                            /* Assign the name "sensor1" as analog output value from Channel C1 */
void setup()
  // Debug console
    pinMode(S0,OUTPUT);                       /* Define digital signal pin as output to the Multiplexer pin SO */        
    pinMode(S1,OUTPUT);                       /* Define digital signal pin as output to the Multiplexer pin S1 */  
    pinMode(S2,OUTPUT);                       /* Define digital signal pin as output to the Multiplexer pin S2 */ 
    pinMode(S3,OUTPUT);                       /* Define digital signal pin as output to the Multiplexer pin S3 */  
    pinMode(SIG, INPUT);                      /* Define analog signal pin as input or receiver from the Multiplexer pin SIG */  
  Blynk.begin(auth, ssid, pass, "");
  timer.setInterval(5000L, getSendData);

void loop()

void getSendData()
  //float sensorValue = analogRead(sensorPin); 
  //float volt = sensorValue*(5.0/1024.0);
  temp = DS18B20.getTempCByIndex(0); // Celcius

    digitalWrite(S0,LOW); digitalWrite(S1,LOW); digitalWrite(S2,LOW); digitalWrite(S3,LOW);
        float sensorVal = analogRead(SIG); 
        float volt = sensorVal*(5.0/1024.0);
    // Channel 1 (C1 pin - binary output 1,0,0,0)
    digitalWrite(S0,HIGH); digitalWrite(S1,LOW); digitalWrite(S2,LOW); digitalWrite(S3,LOW);
    sensor1 = analogRead(SIG);
            for(int i=0;i<10;i++) 
        for(int i=0;i<9;i++)
        for(int j=i+1;j<10;j++)
        for(int i=2;i<8;i++)
        float ph =(float)avgval*5.0/1024/6;
        float ph_act = -5.70 * ph + calibration_value;
        Serial.print("Temperature: ");
        Serial.print(" \xC2\xB0"); // shows degree symbol
        Serial.print("C  |  ");

        int turbidity = map(sensorVal, 0, 750, 100, 0);
        if (turbidity < 20) {
        Serial.print(" CLEAR ");
        if ((turbidity > 20) && (turbidity < 50)) {
          Serial.print(" CLOUDY ");
        if (turbidity > 50) {
        Serial.print(" its DIRTY ");
        Serial.print("  |  ");
        Serial.print("PH LEVEL: ");

      Blynk.virtualWrite(V3, temp); //virtual pin V3 for Temperature Sesor
      Blynk.virtualWrite(0, volt); //virtual pin V0 for Turbidity Sensor
      Blynk.virtualWrite(1, ph_act); //virtual pin V0 for Turbidity Sensor


You’d be better using an ESP32.

How long are your wires? It’s easy to induce a voltage into the wiring.

You seem to be working on the principal that a voltage of 5v will create a reading of 1023 on the analog pin….

However, with the ESP8266 3.3v will produce a maximum 1023 output.

Also, this…

should be the very first line of your sketch. When you do that, you won’t need to include the server url in your Blynk.begin command.