• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

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
 
что то не хочет отправлять, сначала коннектится, потом - соединение 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"
 

Вложения

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

vyacheslav

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

Вложения

Все работает. А температура с датчика это уже вторая проблема. Я не вижу вашу схему, но скорее всего датчик не вынесен от нее. Поэтому возникает проблема. Потому как 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" тоже говорит, что нет данных.
 
Какой проброс порта? Вы о чем? На роутере 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.
никто не сталкивался?
 
Ну connection failed это проблема подключения к хосту. Волшебного в esp нету. Роутер гляди.
 
Сверху Снизу