Не могу загрузить IP из EEPROM

Тема в разделе "Arduino & Shields", создана пользователем sivix, 2 ноя 2015.

  1. sivix

    sivix Нерд

    День добрый! Делаю проект и столкнулся с проблемой. Сохроняю в EEPROM

    IPадрес . далее пытаюсь его прочитать и передать IPAddress server(EEPROM.read(7), EEPROM.read(8), EEPROM.read(9), EEPROM.read(10));

    Но увы клиент не конектится к серверу. Если прописать все руками то работает. Но мне нужен динамический адрес .
    Код (C++):
    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>
    #include "DHT.h"
    #define DHTPIN D2
    #define DHTTYPE DHT11   // DHT 11
    //#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
    //#define DHTTYPE DHT21   // DHT 21 (AM2301)
    DHT dht(DHTPIN, DHTTYPE,11);

    const char *ssid =    ".......";        // cannot be longer than 32 characters!
    const char *pass =    ".......";        //

    // Update these with values suitable for your network.
    IPAddress server(EEPROM.read(7), EEPROM.read(8), EEPROM.read(9), EEPROM.read(10));
    char* pubTopic = "home/data/#";
    char* dev_top = "home/data/device";
    char* statTopic = "home/data/status/";
    String mqtt_user = "test";
    String mqtt_pass = "test";
    String mqtt_client_id = "00001";
    String mqtt_client = "DHT_sensor";
    unsigned long lastMqtt = 0;
    WiFiClient wclient;
    PubSubClient client(wclient, server);

    void callback(const MQTT::Publish& sub) {
      Serial.print("Get data from subscribed topic ");
      Serial.print(sub.topic());
      Serial.print(" => ");
      Serial.println(sub.payload_string());


      client.publish(statTopic, "test");
      Serial.println(statTopic);

      // echo
      MQTT::Publish newpub(pubTopic, sub.payload(), sub.payload_len());
      client.publish(newpub);
    }



    void setup() {
      // Setup console
      Serial.begin(115200);
      delay(10);
      Serial.println();
      Serial.println();
      dht.begin();
      client.set_callback(callback);
    }

    void loop() {
      if (lastMqtt > millis()) lastMqtt = 0;
      if (WiFi.status() != WL_CONNECTED) {
        Serial.print("Connecting to ");
        Serial.print(ssid);
        Serial.println("...");
        WiFi.begin(ssid, pass);

        if (WiFi.waitForConnectResult() != WL_CONNECTED)
          return;
        Serial.println("WiFi connected");
      }

      if (WiFi.status() == WL_CONNECTED) {
        if (!client.connected()) {
          if (client.connect(mqtt_client)) {
            client.publish(dev_top, mqtt_client_id);
            float h = dht.readHumidity();
           float t = dht.readTemperature();
           char char_temp[10]; //Временная переменная для перевода Float в char
           char char_hum[10];
           dtostrf(h, 1, 0, char_temp);
           dtostrf(t, 1, 0, char_hum);
           client.publish("home/data/status/sensor/DHT_00001_t", char_temp);
           client.publish("home/data/status/sensor/DHT_00001_h", char_hum);
            client.subscribe("home/data/action/#");
          }
        }

        if (client.connected())
          client.loop();
      }
      if (millis() > (lastMqtt + 50000)) {
        if (!client.connected()) {
          if (client.connect("system_01V_eth")) client.subscribe("home/data/action/#");
        }
        if (client.connected()) {
           float h = dht.readHumidity();
           float t = dht.readTemperature();
           char char_temp[10]; //Временная переменная для перевода Float в char
           char char_hum[10];
           dtostrf(h, 1, 0, char_temp);
           dtostrf(t, 1, 0, char_hum);
           client.publish("home/data/status/sensor/DHT_00001_t", char_temp);
           client.publish("home/data/status/sensor/DHT_00001_h", char_hum);    
        }  
        lastMqtt = millis();
      }
    }
     
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Выведите прочитанный адрес в порт и посмотрите, верно ли он прочитался.
     
  3. sivix

    sivix Нерд

    Да, читается верно.
     
  4. sivix

    sivix Нерд

    Такое чувство что в этом месте не отрабатывается EEPROM.read(7)
     
  5. sivix

    sivix Нерд

    точнее EEPROM.read()