Пример отправки на narodmon.ru

Алекс

New member
UPD: https://esp8266.ru/forum/threads/po-mnogochislennym-prosbam-narodmon-ochen-prosto.3060/

Код:
// Простой пример снятия температуры с ds18b20 и отправка его на сайт народного мониторинга. http://narodmon.ru

#include <ESP8266WiFi.h>        
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>          //https://github.com/tzapu/WiFiManager
#include <OneWire.h>
#include <DallasTemperature.h>


#define debug true // вывод отладочных сообщений
#define ONE_WIRE_BUS 2 // GPIO к которому подключен DS18B20
#define TEMPERATURE_PRECISION 12 // точность бит. Если глючит или врет, уменьшить до 9
#define postingInterval  300000 // интервал между отправками данных в миллисекундах (5 минут)

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
unsigned long lastConnectionTime = 0;           // время последней передачи данных
int NumberOfDevices; //сколько датчиков найдем.
String Hostname; //имя железки - выглядит как ESPAABBCCDDEEFF т.е. ESP+mac адрес.

void wifimanstart() { // Волшебная процедура начального подключения к Wifi.
                      // Если не знает к чему подцепить - создает точку доступа ESP8266 и настроечную таблицу http://192.168.4.1
                      // Подробнее: https://github.com/tzapu/WiFiManager
  WiFiManager wifiManager;
  wifiManager.setDebugOutput(debug);
  wifiManager.setMinimumSignalQuality();
  if (!wifiManager.autoConnect("ESP8266")) {
  if (debug) Serial.println("failed to connect and hit timeout");
    delay(3000);
    //reset and try again, or maybe put it to deep sleep
    ESP.reset();
    delay(5000); }
if (debug) Serial.println("connected...");
}

void setup() {
  DeviceAddress tempDeviceAddress;
  Hostname = "ESP"+WiFi.macAddress();
  Hostname.replace(":","");
  Serial.begin(115200);
  sensors.begin(); //ds18b20
  NumberOfDevices = sensors.getDeviceCount(); //поищем.
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.print(" devices. ");
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON"); else Serial.println("OFF");
  for (int i = 0; i < NumberOfDevices; i++) { if (sensors.getAddress(tempDeviceAddress, i)) sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION); }//настроим.
  WiFi.hostname(Hostname);
  wifimanstart();
  Serial.println(WiFi.localIP()); Serial.println(WiFi.macAddress()); Serial.print("Narodmon ID: "); Serial.println(Hostname);
  lastConnectionTime = millis() - postingInterval + 15000; //первая передача на народный мониторинг через 15 сек.
}

  bool SendToNarodmon() { // Собственно формирование пакета и отправка.
    WiFiClient client;
    DeviceAddress tempDeviceAddress;
    String buf;
    buf = "#" + Hostname + "\r\n"; // заголовок
    NumberOfDevices = sensors.getDeviceCount(); //количество датчиков ?
    sensors.requestTemperatures(); //Начали измерение
    delay(20);
    for (int i = 0; i < NumberOfDevices; i++)  { //перечисляем датчики и их показания
      sensors.getAddress(tempDeviceAddress, i);
        buf = buf + "#";
        for (uint8_t i = 0; i < 8; i++) { if (tempDeviceAddress[i] < 16) buf = buf + "0"; buf = buf + String(tempDeviceAddress[i], HEX); } // адрес датчика
        buf = buf + "#" + String(sensors.getTempCByIndex(i)) + "\r\n"; //и температура
       }
    buf = buf + "##\r\n"; // закрываем пакет

    if (!client.connect("narodmon.ru", 8283)) { // попытка подключения
      Serial.println("connection failed");
      return false; // не удалось;
    } else
    {
      client.print(buf); // и отправляем данные
      if (debug) Serial.print(buf);
      while (client.available()) {
        String line = client.readStringUntil('\r'); // если что-то в ответ будет - все в Serial
        Serial.print(line);      }
    }
      return true; //ушло
  }

  void loop() {
    if (millis() - lastConnectionTime > postingInterval) { // ждем 5 минут и отправляем
      if (WiFi.status() == WL_CONNECTED) { // ну конечно если подключены
      if (SendToNarodmon()) {
      lastConnectionTime = millis();
      }else{  lastConnectionTime = millis() - postingInterval + 15000; }//следующая попытка через 15 сек    
      }else{  lastConnectionTime = millis() - postingInterval + 15000; Serial.println("Not connected to WiFi");}//следующая попытка через 15 сек
    }  yield(); // что за команда - фиг знает, но ESP работает с ней стабильно и не глючит.
  }
 
Последнее редактирование:

vyacheslav

New member
что то не хочет отправлять, сначала коннектится, потом - соединение failed
 

Алекс

New member
что то не хочет отправлять, сначала коннектится, потом - соединение failed
Данных маловато для анализа ошибки, так что давайте гадать.
1. Подключились к своему WiFi через менеджер ?
2. IP, GW, DNS через DHCP в сети хорошо отдается ?
3. narodnon.ru Открывается ? Что видно на narodmon.ru/ip.php ?
4. Что в выводе в консоль от ESP8266 написано ? При debug=true.

Просто у меня таких поделок уже много, и все работают. Некоторые не один год.
 

vyacheslav

New member
здравствуйте, вот что в терминале - через полминуты после успешного коннекта "connection failed", и каждые полминуты это сообщение повторяется, т.е. он пытается соединиться ?
Да, извините, забыл сказать самое главное : у меня уже работает метеостанция на UNO R3 и W5100 с отсылкой данных как раз на narodmon.ru ; может из за этого второй девайс не может пробиться ? :)
Хотя сейчас временно отключил метеостанцию - та же картина - "connection failed"
 

Вложения

Последнее редактирование:

Алекс

New member
Ни одного датчика не подключено, данных не будет.
Похоже проблемы либо со шлюзом, либо с DNS.
попробуйте вместо (!client.connect("narodmon.ru", 8283)) поставить (!client.connect("92.39.235.156", 8283))
Если проблема в DNS, то это ее решит. Если проблема в шлюзе, то нет. Настраивайте DHCP на роутере.
И вот 192.168.1.3 - адрес из вашей сети ?
 

vyacheslav

New member
заработало, но температура завышена, пробовал в скетче и 9 и 12 бит, результат тот же
 

Вложения

Алекс

New member
Все работает. А температура с датчика это уже вторая проблема. Я не вижу вашу схему, но скорее всего датчик не вынесен от нее. Поэтому возникает проблема. Потому как 1117 греется, ESP греется, блок питания греется. И возможно (что очень редко) вы подпалили DS18B20 и при подаче питания греется он. Не переполюсовывали ?
 

vyacheslav

New member
было дело :)
вот фото, вроде датчик не вплотную к плате
 

Вложения

Последнее редактирование:

mikhail09p

New member
Здравствуйте.
Я только учусь.
Помогите скомпилировать Ваш Пример отправки на narodmon.ru.
Ардуино пишет ошибку:
Arduino: 1.6.10 Hourly Build 2016/05/18 07:34 (Windows 7), Плата:"Generic ESP8266 Module, 80 MHz, 40MHz, DIO, 115200, 512K (64K SPIFFS), ck, Disabled, None"

libraries\WiFiManager-master\WiFiManager.cpp.o: In function `WiFiManager::handleWifi(unsigned char)':

c:\users\миха_р\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2/functional:2455: multiple definition of `WiFiManager::handleInfo()'

sketch\WiFiManager-master\WiFiManager.cpp.o:sketch\WiFiManager-master/WiFiManager.cpp:590: first defined here

libraries\WiFiManager-master\WiFiManager.cpp.o: In function `WiFiManager::handleReset()':

c:\users\миха_р\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2/functional:2455: multiple definition of `WiFiManager::handleReset()'

sketch\WiFiManager-master\WiFiManager.cpp.o:sketch\WiFiManager-master/WiFiManager.cpp:630: first defined here

libraries\WiFiManager-master\WiFiManager.cpp.o: In function `WiFiManager::handleWifiSave()':

c:\users\миха_р\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2/functional:2455: multiple definition of `WiFiManager::handleWifiSave()'

sketch\WiFiManager-master\WiFiManager.cpp.o:sketch\WiFiManager-master/WiFiManager.cpp:532: first defined here

libraries\WiFiManager-master\WiFiManager.cpp.o: In function `WiFiManagerParameter::WiFiManagerParameter(char const*)':

c:\users\миха_р\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2/functional:2455: multiple definition of `WiFiManagerParameter::WiFiManagerParameter(char const*)'

sketch\WiFiManager-master\WiFiManager.cpp.o:sketch\WiFiManager-master/WiFiManager.cpp:16: first defined here

libraries\WiFiManager-master\WiFiManager.cpp.o: In function `WiFiManagerParameter::WiFiManagerParameter(char const*)':

c:\users\миха_р\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2/functional:2455: multiple definition of `WiFiManagerParameter::WiFiManagerParameter(char const*)'

sketch\WiFiManager-master\WiFiManager.cpp.o:sketch\WiFiManager-master/WiFiManager.cpp:16: first defined here

libraries\WiFiManager-master\WiFiManager.cpp.o: In function `WiFiManagerParameter::init(char const*, char const*, char const*, int, char const*)':

c:\users\миха_р\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2/functional:2455: multiple definition of `WiFiManagerParameter::init(char const*, char const*, char const*, int, char const*)'

...................

collect2.exe: error: ld returned 1 exit status

exit status 1
Ошибка компиляции для платы Generic ESP8266 Module.
Библиотека взята тут GitHub - tzapu/WiFiManager: ESP8266 WiFi Connection manager with web captive portal. Находится в папке C:\Users\Миха_р\Documents\Arduino\libraries

С уважением, Михаил.
 

ovmiev

New member
Здравствуйте! В narodmon добавил esp8266 с датчиком температуры, смотрю отправляемые данные по ip, есть имя устройства и температура, но список датчиков пуст.
 
Тоже проблема. Датчики не видно, esp отвечает "connection failed". С компа в той же сети с esp народный мониторинг пингуется, с компа esp пингуется. Проброс порта до IP esp настроен, Провайдер проверил - правильно. Куда копать?
Посмотреть вложение 4222

..."narodmon.ru / ip" тоже говорит, что нет данных.
 

Алекс

New member
Какой проброс порта? Вы о чем? На роутере dhcp+dns+nat и всё
Connection failed - не получилось подцепиться к серверу. Попробуйте ip сервера вместо имени воткнуть.
 
Какой проброс порта? Вы о чем? На роутере dhcp+dns+nat и всё
Connection failed - не получилось подцепиться к серверу. Попробуйте ip сервера вместо имени воткнуть.
Первую фразу не понял, а ip цифрами прописывал - не помогло.
Dhcp, допустим. Что значит +dns? Dns прописаны автоматом провайдером. Иначе интернета не было бы. А про + nat подробней можно. Я по этим настройками с техподдержкой говорил.
 
На другом интернете работает, в другом месте. Терзают меня сомнения, что мой домашний роутер не даёт esp адресов днс. А IP цифрами я не тот подставлял.
 
Продолжу. Сейчас 10 часов отработала в интересном режиме. 2-5 успешных передач, потом 27 раз "connection failed" около 14 минут по времени, потом опять 2-5 успешных и снова по кругу. Сначала даже написал условие 30 неудач или 30 минут без связи - перезагрузка, ан нет. Всё стабильно. Смущает постоянное число 27.
 
Продолжу. Сейчас 10 часов отработала в интересном режиме. 2-5 успешных передач, потом 27 раз "connection failed" около 14 минут по времени, потом опять 2-5 успешных и снова по кругу. Сначала даже написал условие 30 неудач или 30 минут без связи - перезагрузка, ан нет. Всё стабильно. Смущает постоянное число 27.
никто не сталкивался?
 

Алекс

New member
Ну connection failed это проблема подключения к хосту. Волшебного в esp нету. Роутер гляди.
 
Сверху Снизу