SETL
Hello, I find working code for decoding DS18B20 temp sensor for ESP8266. I don't know how to correctly update firmware for esp. Can you help me? thank you. Hire is the code: 
https://randomnerdtutorials.com/esp8266-ds18b20-temperature-sensor-web-server-with-arduino-ide/
Quote 0 0
SETL
I Find solutions with pointers: 
 
//-----------------------------------------------------------------------------
#include <ESP8266WiFi.h>

#include <OneWire.h>
#include <DallasTemperature.h>
// GPIO where the DS18B20 is connected to
const int oneWireBus = 4;     
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);
// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);


/*********NETWORK CONFIGURATION*********/
const char *ssid = "nenapojjTurbxoOO";
const char *password = "333666999";
/***************************************/

#define NODE_PIN_D0    16
#define NODE_PIN_D1    5
#define NODE_PIN_D2    4
#define NODE_PIN_D3    0
#define NODE_PIN_D4    2
#define NODE_PIN_D5    14
#define NODE_PIN_D6    12
#define NODE_PIN_D7    13
#define NODE_PIN_D8    15
uint8_t pinMask_DIN[] = { NODE_PIN_D4, NODE_PIN_D5, NODE_PIN_D6, NODE_PIN_D7 };
uint8_t pinMask_DOUT[] = { NODE_PIN_D0, NODE_PIN_D1, NODE_PIN_D2, NODE_PIN_D3 };
uint8_t pinMask_AIN[] = { A0 };
uint8_t pinMask_AOUT[] = { NODE_PIN_D8 };
unsigned char modbus_buffer[100];
int processModbusMessage(unsigned char *buffer, int bufferSize);
uint16_t temperatureC;           /////////////////////// hire is pointer declaration 
uint16_t *temperatureCC=&temperatureC;   ///////////////////////  pointer
#include "modbus.h"
extern bool mb_discrete_input[MAX_DISCRETE_INPUT];
extern bool mb_coils[MAX_COILS];
extern uint16_t mb_input_regs[MAX_INP_REGS];
extern uint16_t mb_holding_regs[MAX_HOLD_REGS];
//Create the modbus server instance
WiFiServer server(502);
void pinConfig()
{
    pinMode(NODE_PIN_D0, OUTPUT);
    pinMode(NODE_PIN_D1, OUTPUT);
    pinMode(NODE_PIN_D2, OUTPUT);
    pinMode(NODE_PIN_D3, OUTPUT);
    
    pinMode(NODE_PIN_D4, INPUT);
    pinMode(NODE_PIN_D5, INPUT);
    pinMode(NODE_PIN_D6, INPUT);
    pinMode(NODE_PIN_D7, INPUT);
    
    pinMode(NODE_PIN_D8, OUTPUT);
}
void setup()
{  Serial.begin(115200);
  // Start the DS18B20 sensor
  sensors.begin();
  
    Serial.begin(115200);
    delay(10);
    
    pinConfig();
    
    // Connect to WiFi network
    Serial.println();
    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");
    // Start the server
    server.begin();
    Serial.println("Server started");
    // Print the IP address
    Serial.print("My IP: ");
    Serial.println(WiFi.localIP());
    updateIO();
}
void PrintHex(uint8_t *data, uint8_t length) // prints 8-bit data in hex with leading zeroes
{
    for (int i=0; i<length; i++) 
    {
        if (data[i] < 0x10)
            Serial.print("0");
        Serial.print(data[i], HEX); Serial.print(" ");
    }
    Serial.println();
}
void updateIO()
{
  
    for (int i = 0; i < sizeof(pinMask_DIN); i++)
    {
        mb_discrete_input[i] = digitalRead(pinMask_DIN[i]);
    }
    
    for (int i = 0; i < sizeof(pinMask_DOUT); i++)
    {
        digitalWrite(pinMask_DOUT[i], mb_coils[i]);
    }
    
    for (int i = 0; i < sizeof(pinMask_AIN); i++)
    {
         mb_input_regs[i] = (temperatureC 😉;   ///////////////////////  hire pointer write to modbus register
        // mb_input_regs[i] = (analogRead(pinMask_AIN[i]) * 64);
    }
  Serial.print(analogRead(pinMask_AIN[0]) * 64);
  Serial.print(analogRead(*temperatureCC));
    for (int i = 0; i < sizeof(pinMask_AOUT); i++)
    {
        analogWrite(pinMask_AOUT[i], mb_holding_regs[i] / 64);
    }
}
void loop()
{
    WiFiClient client = server.available();
    if (!client)
        return;
    
    Serial.println("new client!");
    while(client.connected())
    {
       sensors.requestTemperatures();   ///////////////////////  read temperature and multiple *100
       float  temperatureCCC = sensors.getTempCByIndex(0);  
  temperatureC = temperatureCCC*100;
        // Wait until the client sends some data
        while(!client.available())
        {
            delay(1);
            if (!client.connected())
                return;
        }
        
        int i = 0;
        while(client.available())
        {
            modbus_buffer[i] = client.read();
            i++;
            if (i == 100)
                break;
        }
        //DEBUG
        /*
        Serial.print("Received MB frame: ");
        PrintHex(modbus_buffer, i);
        */
        
        updateIO();
        unsigned int return_length = processModbusMessage(modbus_buffer, i);
        client.write((const uint8_t *)modbus_buffer, return_length);
        updateIO();
        delay(1);
    }
    
    Serial.println("Client disonnected");
    delay(1);
}


It is possible to use all of DI ESP8266 to create measurement TEMP and read via Modbus to IW0, IW1, IW2 , so more than now is only one declared IW0 in firmare and OpenPLC runtime. Thank you. 
Quote 1 0