Делюсь опытом По многочисленным просьбам - narodmon ОЧЕНЬ ПРОСТО.

Алекс

New member
В связи с кучей вопросов и порой очень глупых выдаю упрощенный скетч для отправки данных на народный мониторинг.

Схема подключения.



Собственно сам скетч. Вам надо поменять параметры WIFI на свои. И все. Отправка показаний с 1 датчика DS18B20.

Код:
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Ticker.h>

ESP8266WiFiMulti WiFiMulti;
Ticker sender;
bool sendtonm;
OneWire oneWire(2); // DS18B20 подключен по схеме https://goo.gl/HJ9TB9 Зеленый проводок подключен к GPIO2
DallasTemperature sensors(&oneWire);

void setup() {
    WiFi.mode(WIFI_STA); // Режим станции
// Здесь настройки ВАШЕГО WIFI  
    WiFiMulti.addAP("SSID", "PASSWORD"); // Данные вашего WiFi <<<<< ---------------  ОБРАТИТЕ ВНИМАНИЕ.
// Здесь настройки ВАШЕГО WIFI  
    sender.attach(305, STM); // Создаем событие отправки данных каждые 305 сек (5 мин + 5 сек, чтобы народный мониторинг не ругался если мы на секунду раньше отправили)
    sensors.begin(); //Запуск DS18B20
}

void STM() {sendtonm = true;} // Отправка данных разрешена

void loop() {
    if((WiFiMulti.run() == WL_CONNECTED)) {
     if (sendtonm) { // Если прошло 5 минут, и можно отправлять - работаем.
      sendtonm = false; // отключаем флаг отправки данных
      sensors.requestTemperatures(); // Команда на замер температуры.
      delay(1000); // Задержка для того чтобы датчик успел провести замер.
      DeviceAddress tempDeviceAddress; // Переменная для получения адреса датчика
      String buf; // Буфер для отправки на NarodMon
      buf="#ESP" + WiFi.macAddress()+ "\r\n";buf.replace(":", ""); //формируем заголовок
      sensors.getAddress(tempDeviceAddress, 0); // Получаем уникальный адрес датчика
      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(0))+ "\r\n"; //и температура
      buf = buf + "##\r\n"; // закрываем пакет
      WiFiClient client;
      client.connect("narodmon.ru", 8283); //Подключаемся
      client.print(buf); // И отправляем данные
      }
    }
}
PS. Код комментирован чуть ли не до запятых. Читаем, разбираемся самостоятельно.
 
Последнее редактирование:

Ers

New member
по даташиту при 12-битном разрешении время измерения до 750 мс.
в библиотеке DallasTemperature есть примеры асинхронного измерения температуры без использования delay
 

Алекс

New member
Скетч писался ПРОСТОЙ. Поэтому кому надо больше - пусть дописывает. Строчку, которая вас насторожила - поправил. Так пойдет ? Успеет замерить ?
 

Bozhuk

New member
Прошу прощение. С одним датчиком температуры все понятно, а как реализовать 2 датчика ?
 

Sergey12345

New member
не мог бы кто нибудь скинуть ссылки на упомянутые в скетче библиотеки ? Никак не могу найти...
 
Сверху Снизу