Перейти к публикации
iT4iT.CLUB

Рекомендованные сообщения

 

1 час назад, IvAn сказал:

Самое главное - прописать порт сервера вместо 1883.

Да я не поменял порт! СПС все получилось!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А кто-нибудь пробовал подключаться к интернету через что-то типо GSM-модуля SIM800L или подобного?? И получиться ли это реализовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
04.01.2020 в 16:55, Sergey Mlynarchyk сказал:

А кто-нибудь пробовал подключаться к интернету через что-то типо GSM-модуля SIM800L или подобного?? И получиться ли это реализовать?

Я бы не тратил на это время. Намного надежнее и практичнее взять LTE+WIFI маршрутизатор, например, БУ по объявлениям. Это избавить от кучи подводных камней. А если Вы сами довольно много времени будите проводить в зоне действия будущей точке доступа, то лучше взять хороший маршрутизатор и возможность подключения LTE модема или со встроенным модемом. Это окупит себя многократно и сэкономит кучу бессонных ночей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Приветствую Вас, @Kitsum ! Для начала хочу поблагодарить Вас за данный проект, хорошая работа! Собственно решился собрать, тут-то и появились вопросы при попытке загрузить скетч в МК. Расписывать не буду, все видно на скрине. Что я делаю не так?

0010.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброе время суток.

18.01.2020 в 19:02, MaxOn сказал:

Что я делаю не так?

Вы все делаете правильно. В ходе одного из обновлений была допущена оплошность. Самый простой вариант решения проблемы, это не комментировать данную строчку.

Или можно исправить оплошность и в файле wifi.h найти строку

if (!MDNS.begin(hostname.c_str())) { console.println("Error setting up MDNS responder!"); }

и заменить её на

if (!MDNS.begin(hostname.c_str())) { 
  #ifdef console
    console.println("Error setting up MDNS responder!"); 
  #endif
}

Я загружу исправления в ближайшее время.

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброе время суток.

Немного об измерении скорости ветра. Была собрана следующая конструкция: ардуина нано - имитирует датчик скорости (формирует импульсы) , через преобразователь уровней на микросхеме передает на gpio_14 ESP8266 nodemcu (в скетче gpio_14 закомпелировано). Код измерения скорости ветра использовал из предыдущих постов. После прошивки и настройки ESP, она подключается нормально к моей сети, показания скорости появляются на WEB странице. А вот дальше начинаются непонятки - при попытке обновить страницу, ESP уходит в цикл перезагрузок по Watch dog-у, по Serial видно, что html постепенно подтягивает по 1-2 файла и через 1-2 минуты станица обновляется и до следующей попытки вручную обновить страницу работает нормально.  Вот ситуация в двух словах. Первое, что приходит в голову - не связано ли это как то с прерываниями, которые используются для подсчета входящих импульсов? Описанная выше сборка по шине I2C работает нормально.

Изменено пользователем see

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день. Имею в наличии ESP8266 NodeMcu V2 и V3, датчик СО2 "MH-Z19B" и датчик влажности и температуры АМ2301(2 шт.).

Есть задачи

1) контролировать уровень СО2 в помещении с автоматическим включением приточного вентилятора при заданных мин и макс параметрах

2) контроль температуры и влажности как внутри помещения так и снаружи

3) получать и управлять данными с датчиков через интернет (выставления мин и макс параметров)

 

Сам не разу не программер, помогаю дочке писать диплом, сам учусь).

Из всех сборок заработала "arduino-1.8.9-esp" портативная, уж не знаю как мы вместе с ней смогли залить на устройство и хотя бы убедиться в работоспособности оборудования (без датчиков).

Дальше в теории понимаю что надо скачать библиотеки для датчиков и в коде назначит пины для вывода информации. А вот что и как.....больше не могу понять, затупил совсем. Помогите разобраться пожалуйста!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
20.01.2020 в 03:21, Kitsum сказал:

Я загружу исправления в ближайшее время.

@Kitsum , приветствую Вас! Исправил по Вашей рекомендации, согласно второму пункту, все работает как надо! Моя благодарность!  🤗

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
24.01.2020 в 09:49, Олег сказал:

Добрый день. Имею в наличии ESP8266 NodeMcu V2 и V3, датчик СО2 "MH-Z19B" и датчик влажности и температуры АМ2301(2 шт.).

Есть задачи

1) контролировать уровень СО2 в помещении с автоматическим включением приточного вентилятора при заданных мин и макс параметрах

2) контроль температуры и влажности как внутри помещения так и снаружи

3) получать и управлять данными с датчиков через интернет (выставления мин и макс параметров)

 

Сам не разу не программер, помогаю дочке писать диплом, сам учусь).

Из всех сборок заработала "arduino-1.8.9-esp" портативная, уж не знаю как мы вместе с ней смогли залить на устройство и хотя бы убедиться в работоспособности оборудования (без датчиков).

Дальше в теории понимаю что надо скачать библиотеки для датчиков и в коде назначит пины для вывода информации. А вот что и как.....больше не могу понять, затупил совсем. Помогите разобраться пожалуйста!

Почитайте внимательно https://alexgyver.ru/arduino-first/

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброе время суток.

@see по поводу измерения скорости ветра. Да, в Arduino IDE есть баг, точно не проверял, но вроде на версиях выше 2.5.2 прерывания могут вызывать падения программы (любой). Проверил на чистом проекте, в котором были только прерывания и вывод в Serial. Не буду ходить вокруг да около, по итогу внес небольшие правки в код. Для эксперимента используйте архив с средой разработки опубликованный на Yandex диске, ссылка в загрузках. Используйте код опубликованный в исходниках, в файле users_wspeed.h

Первым делом определитесь с используемым портом, допустим это GPIO14 (D5). Укажите этот порт в users_wspeed.h

#define  windSpeed_Pin 14 // GPIO микроконтроллера к которому подключен чашечный анемометр

В основном файле закомментируйте подключения всех пользовательских файлов кроме users_wspeed.h

//#include "users_auto.h";      // Пользовательская конфигурация датчиков, именно тут описывается с какими датчиками работать
//#include "users_bme280_x2.h"; // Пример для двух датчиков BME280
//#include "users_ds18.h";      // Пример для датчиков DS18B20
#include "users_wspeed.h";      // пример для самодельного анемометра

В основном файле закомментируйте функцию в которой также задействован порт GPIO14

// gpio_14(); // Расхождение расчетной абсолютной влажности между показаниями с двух датчиков, например, BME280

Далее соберите проект и загрузите на микроконтроллер. Убедитесь в работоспособности кода, обновляйте страницу, делайте всяческие проверки. Только после этого вносите дополнительные правки, которые Вам нужны.

Я проверил код для датчика скорости ветра на живом контроллере, все работает.

image.png

24.01.2020 в 10:49, Олег сказал:

Помогите разобраться пожалуйста!

К сожалению, не совсем могу понять, Вы используете другой проект? Если это так, вы пробовали связываться с его автором, есть ссылка на проект? пробовали ли Вы просто работать с этими датчиками, не интегрируя их в чужой код?

25.01.2020 в 15:02, MaxOn сказал:

Исправил по Вашей рекомендации, согласно второму пункту, все работает как надо! Моя благодарность!

Рад, что у Вас все получилось. Исправления добавлены в код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Приветствую всех. На предыдущей прошивке погодная станция с одним детчиком BME-280 и платой esp8266 как у автора темы работала нормально через роутер TPlink WR 741, который подключен в режиме WDS (повторителя) к 4G WiFi роутеру MR-150, оператор Билайн. Без повторителя, если напрямую подключать станцию к 4G роутеру, станция в интернет выйти не могла. Прошил плату на последнюю прошивку. Прошивку брал из архива, в котором Arduino ide 1.8.10, архив скачивал по ссылке в этой теме из облака автора темы. Как точка доступа станция работает нормально. К 4g роутеру станция подключается, но в интернет не выходит и не пингуется. Все остальные устройства, подключенные к 4G роутеру, режим DHCP на 4g WiFi роутере включен (это 2 телефона на Android, медиаплеер на Android, ноутбук на Win10, все интернет видят и получают). Если станцию настроить для подключения к роутеру -повторителю, который подключен к 4G роутеру, то станция подключается к сети роутера- повторителя, пингуется один раз или вообще не пингуется и интернета не видит. Я не пойму, или провайдер поставил какие-то фильтры на траффик именно модуля esp-8266  как раз сразу в то время, как я обновил прошивку, или в прошивке ошибка? У всех на последней прошивке, которая в 2020г. обновлена, все нормально?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дополнение. Подключил погодную станцию к домашнему WiFi роутеру, в который заведен проводной интернет от Билайна. Станция отлично работает, отсылает данные и на Tingspeak и на Народный мониторинг. Попробовал подключить через 4G WiFi роутер станцию к 4g интернету Tele2, станция НЕ работает. И с Билайном не работает. 4G WiFi роутеры пробовал MR 150-2, две штуки, с разными прошивками, на другие устройства интернет с роутеров раздается, станция работать не хочет. Что делать, ума не приложу (((

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня через 4G от билайна работает.

На графиках перестали показываться отрицательные значения после последнего обновления. Где поискать?

g.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подключил я все таки станцию к 4g интернету Билайн. Пришлось перепрошить роутер TL-WR741ND на прошивку DD-WRT, затем подключить этот роутер по WiFi в режиме "Клиент" к 4g Wifi роутеру MR150-2. В роутере WR741nd создана подсеть WiFi, к этой сети подключена погодная станция. Все заработало !!! Может, кому нибудь этот "лайфхак" поможет решить похожую проблему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброе время суток

13.02.2020 в 14:44, Vladik сказал:

Попробовал подключить через 4G WiFi роутер станцию к 4g интернету Tele2, станция НЕ работает. И с Билайном не работает.

WiFi имеет много настроек и стандартов, начиная от стандартов заканчивая каналом (частотой). Я бы посоветовал проверить настройки маршрутизатора с которым получилось установить связь и продублировать их на маршрутизаторе с которым возникли проблемы.

14.02.2020 в 11:04, IvAn сказал:

На графиках перестали показываться отрицательные значения после последнего обновления. Где поискать?

Это весьма странно. Я взял тестовый программный сенсор и проверил на нем, воссоздать не получилось. Давайте разбираться.

Добавьте следующий датчик в Ваш код.

sensors.add(new knob_t(-100, 100, "1", "Test", "???"), "test",
  [&](){ return random(-100, 10); }
, true);

Дайте ему поработать, посмотрите, что будет за график. В моем случае все выглядело так.

image.png image.png

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тестовый программный сенсор нормально работает. Буду ждать минусовых температур. Посмотрю, повторится ли глюк, или это один раз так получилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
41 минуту назад, IvAn сказал:

Буду ждать минусовых температур

Положите его в морозилку, результат будет доступен быстрее

Изменено пользователем post125

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Снимать долго. Стоит в доме на чердаке. Проще градусов 10 вычесть, но чистота эксперимента пропадет. Тестовый то датчик правильно заработал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BME280, BME280I2C.h. Сам датчик показывает правильно. Если присмотреться на картинке с графиком на фоне видно отрицательное значение температуры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Странно, но не работает. Попробую тестовый датчик с диапазоном в -1 ... 1 

изображение_viber_2020-02-28_08-29-31.jpg

изображение_viber_2020-02-28_08-29-45.jpg

Изменено пользователем IvAn

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14.02.2020 в 11:04, IvAn сказал:

 

На графиках перестали показываться отрицательные значения после последнего обновления. Где поискать?

g.jpg

 

2020-02-29.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

приветствую

а не подскажете, хотя бы направление , какие шаги нужно выполнить, чтобы можно добавить в метеостанцию работу с nrf24?

как понял нужно добавить обработчик сюда

void loop() {
  /* Обработчики */
  wifi.handleEvents();
  http.handleClient();
  cron.handleEvents();
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Насколько я понял, проблема с диапазоном 1...-1 в графиках скорее всего из-за этого:

String sensors::clear(float value) {
  if ((int)value == 0) return "0";
  else if (value - (int)value == 0) return String((int)value);
  else return String(value);
}
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Kitsum добрый день. 

Нас с коллегой заинтересовал ваш проект и мы успешно реализовали несколько станций на платформе как esp, так и на ноде. 

В процессе эксплуатации у нас возник перечень вопросов и пожеланий, которые хотелось бы обсудить с вами. 

1. Почему при наличии свободного места на флеш, статистика датчиков:

- хранится всего 1 день.

- слетает после потери питания .

Хотелось бы реализовать запись в энергонезависимую память данных на длительный срок.

2. Наблюдается проблема такого плана. 

Esp корректно отрабатывает подключение к wifi сети при обрыве питания, но в случае перезагрузки роутера, плата отказывается повторно подключаться к сети. 

3. В связи с особенностью размещения некоторых датчиков встал вопрос их связи с платой посредством радиоканала. Хотелось бы предложить реализовать начинания в эту сторону. 

Спасибо.

Изменено пользователем 451-F

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пожалуйста, войдите для комментирования

Вы сможете оставить комментарий после входа



Войти сейчас

  • Похожие публикации

    • Автор: Kitsum
      Хотите помочь проекту или спонсировать новый?
      Yandex.Money PayPal.me Тема проекта
      Arduino IDE + Project + Libraries + tools: https://yadi.sk/d/jseefFB50NMhAg
    • Автор: Kitsum
      Просмотреть файл [esp8266] Библиотека CMD, реализует настройку микроконтроллера и управление вашей программой через терминал.
      Основная задача библиотеки, это прием пользовательских команд через UART интерфейс, их обработка и выполнение пользовательского кода, связанного с той или иной командой.
      Данная библиотека позволяет реализовать:
      Управление микроконтроллером Любую настройку, будь то WiFi, другие библиотеки или часть Вашей программы Вызывать Ваши задачи (функции) из терминала по команде и передавать им требуемые параметры Использовать контроллер в качестве шлюза между датчиками и программами на PC Внимание: любая команда, передаваемая в терминал обязана заканчиваться символом перевода строки "\n".
      Подключение библиотеки
      #include <cmd.h> Инициализация объекта, к которому мы будем обращаться для добавления команд. В качестве параметра объекту необходимо передать указатель на объект Serial или любой другой схожий по типу интерфейс.
      cmd command(&Serial); В функции Setup описываем какие команды требуется обрабатывать. Например, по команде "test" вызывать пользовательскую функцию с именем "myFunctionName". Имя пользовательской функции может быть абсолютно любым.
      void Setup() { Serial.begin(115200); command.add("test", myFunctionName); } Пользовательская функция будет вызываться каждый раз, когда по интерфейсу Serial поступит команда "test". Если команда будет передана с параметрами, то эти параметры будут переданы в качестве аргументов пользовательской функции.
      В функции loop должна находится команда вызова обработчика.
      void loop() { command.handleEvents(); } Пользовательская функция обязана соответствовать ряду требований:
      Не возвращать никакого результата (быть объявленной с типом void) Принимать в качестве первого аргумента переменную с типом byte в которой будет храниться число равное количеству переданных параметров Принимать в качестве второго параметра переменную с типом char** в которой будет храниться указатель на массив со всеми указателями (char*) на переданные параметры void myFunctionName(byte argc, char** argv) { /* ... */ } Функция всегда должна иметь такой вид, даже если не подразумевается, что ей будут передаваться какие-либо параметры.
      Чтобы перебрать все переданные параметры и вывести их в консоль, можно воспользоваться следующим примером
      void myFunctionName(byte argc, char** argv) { if (0 < argc) { for (uint8_t i = 0; i < argc; i++) { Serial.printf("%i. %s\n", i, argv[i]); } } } Пример вызова пользовательской функции без параметров и с ними
      # test No parameter was passed # test p1 p2 p3 p4 p5 0. p1 1. p2 2. p3 3. p4 4. p5 Помните, что параметры представлены в виде указателей и работать с ними нужно как с обычными переменными не получится т.к указатель содержит не значение переменной (переданный параметр), а указатель на ту область памяти микроконтроллера в которой это значение находится.
      Чтобы сравнить два значения, например, параметр под индексом 0 (идет первым в списке) с каким-либо значением в программе, воспользуйтесь функцией strcmp, которая возвращает целочисленное значение, указывающее на лексическое расхождение строк. Если строки равны, то возвращаемое значение равно 0.
      if (!strcmp(argv[0], "wifi")) { Serial.println(F("Первый аргумент WiFi")); } else { Serial.println(F("Первый аргумент НЕ WiFi!!!")); } Для копирования значения указателя в другую переменную с типом char можно воспользоваться функцией strcpy
      char myVar[20]; strcpy(myVar, argv[0]); if (myVar == "123456") { Serial.prinln(F("ok")); } Также можно обернуть указатель объектом String и получить весь функционал этого объекта, который будет содержать значение параметра
      String param1(argv[0]); // String param1 = argv[0]; Serial.printf("argv[0] length: %i\n", param1.length()); Serial.printf("argv[0] is integer?: %s\n", param1.toInt() ? "YES" : "NO"); if (param1 == "qwerty") { Serial.println(F("Hello QWERTY!")); } С библиотекой идут несколько примеров, в том числе и пример конфигурации WiFi в режиме STA.
      Автор Kitsum Добавлен 05.12.2018 Категория Библиотеки  
    • Автор: Kitsum
      Просмотреть файл [esp8266] Библиотека smartBlink, реализует умное управление штатным светодиодом, что позволяет добавить индикацию состояния вашей программы или микроконтроллера.
      Основная задача библиотеки, это добавление индикации состояния Вашей программы или микроконтроллера. Отображение состояния производится посредством светодиода. Что самое важное, работа библиотеки через прерывание, это позволяет ей поддерживать индикацию даже в то время, когда выполняется длительный код основной программы. Например, Вы можете использовать её для отображения в каком режиме сейчас работает WiFi микроконтроллера, STA или AP и т.д. Или ход выполнения какой-либо операции, например, передача данных на внешний сервер.
      Подключение библиотеки
      #include <smartBlink.h> Чтобы инициализировать управление светодиодом необходимо создать объект, через который мы буем задавать режимы работы индикации.
      smartBlink::smartBlink(byte gpio, bool on = LOW); Объекту необходимо передать два параметра, первый это номер порта, на котором находится светодиод, а второй это уровень логического сигнала, который заставит светодиод работать. Сигнал может быть низким (LOW) или высоким (HIGH), это зависит от схемотехники подключения светодиода.
      Например, штатный светодиод модуля ESP12, использующий GPIO2 (порт 2) можно объявить следующим образом.
      #define led2_pin 2 #define led2_on_signal LOW smartBlink led2(led2_pin, led2_on_signal); Теперь можно в основной программе использовать метод устанавливающий какой режим индикации использовать.
      smartBlink::setMode(mode_t mode); Например, зададим режим светодиода led2 в котором светодиод будет давать одну короткую вспышку раз в секунду.
      led2.setMode(smartBlink::mode_flash1); Режимов работы может быть несколько.
      led2.setMode(smartBlink::mode_off); led2.setMode(smartBlink::mode_flash1); led2.setMode(smartBlink::mode_flash2); led2.setMode(smartBlink::mode_flash3); led2.setMode(smartBlink::mode_flash4); led2.setMode(smartBlink::mode_burn); led2.setMode(smartBlink::mode_inhalf); Чтобы вернуть предыдущий режим индикации для ранее объявленного светодиода led2 используйте следующий метод
      led2.previous(); Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код.
      С библиотекой идут несколько примеров.
      Автор Kitsum Добавлен 10.12.2018 Категория Библиотеки  
    • Автор: Kitsum
      Основная задача библиотеки, это добавление индикации состояния Вашей программы или микроконтроллера. Отображение состояния производится посредством светодиода. Что самое важное, работа библиотеки через прерывание, это позволяет ей поддерживать индикацию даже в то время, когда выполняется длительный код основной программы. Например, Вы можете использовать её для отображения в каком режиме сейчас работает WiFi микроконтроллера, STA или AP и т.д. Или ход выполнения какой-либо операции, например, передача данных на внешний сервер.
      Подключение библиотеки
      #include <smartBlink.h> Чтобы инициализировать управление светодиодом необходимо создать объект, через который мы буем задавать режимы работы индикации.
      smartBlink::smartBlink(byte gpio, bool on = LOW); Объекту необходимо передать два параметра, первый это номер порта, на котором находится светодиод, а второй это уровень логического сигнала, который заставит светодиод работать. Сигнал может быть низким (LOW) или высоким (HIGH), это зависит от схемотехники подключения светодиода.
      Например, штатный светодиод модуля ESP12, использующий GPIO2 (порт 2) можно объявить следующим образом.
      #define led2_pin 2 #define led2_on_signal LOW smartBlink led2(led2_pin, led2_on_signal); Теперь можно в основной программе использовать метод устанавливающий какой режим индикации использовать.
      smartBlink::setMode(mode_t mode); Например, зададим режим светодиода led2 в котором светодиод будет давать одну короткую вспышку раз в секунду.
      led2.setMode(smartBlink::mode_flash1); Режимов работы может быть несколько.
      led2.setMode(smartBlink::mode_off); led2.setMode(smartBlink::mode_flash1); led2.setMode(smartBlink::mode_flash2); led2.setMode(smartBlink::mode_flash3); led2.setMode(smartBlink::mode_flash4); led2.setMode(smartBlink::mode_burn); led2.setMode(smartBlink::mode_inhalf); Чтобы вернуть предыдущий режим индикации для ранее объявленного светодиода led2 используйте следующий метод
      led2.previous(); Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код.
      С библиотекой идут несколько примеров.
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...