Jump to content
iT4iT.CLUB

Recommended Posts

2 часа назад, EVG сказал:

Есть ли в наличии загрузочная флэшка или диск с гостевыми системами ?

Загрузиться с флэшки или диска с гостевой системой.
Войти с нее в сеть.
Проверить соединение со станцией.

 

Думаете достаточно будет запустить виртуальную машину из-под Windows? Просто мне кажется, что в виртуалке проблема сохранится и нужно пробовать вообще без участия винды.

 

Заметил также, что иконка все же как-то загрузилась. Вообще ума не приложу, как так, соединение есть, а страницу грузить не хочет.

Скрытый текст

icon.jpg.c9ea6f0109a8ee59208b39b625cc3a68.jpg

UPD:

Зашел в настройки сети Windows 10, нажал на "Сбросить сеть", перезагрузка,  и все заработало. Очень занимательно, учитывая, что этот компьютер новый и ничего, кроме общего доступа я на нем не настраивал.)

Спасибо за советы!

Edited by ololonly

Share this post


Link to post
Share on other sites
1 час назад, ololonly сказал:

Заметил также, что иконка все же как-то загрузилась. Вообще ума не приложу, как так, соединение есть, а страницу грузить не хочет.

Может, сохранить страницу как .html на компе, который открывает нормально. Перенести сохраненный файл и папку на проблемный комп и попробовать это открыть? Проблема то ведь не в соединении, а в каких-то параметрах винды (которые используют все установленные браузеры). Чего там может быть... джаву обновить?

Share this post


Link to post
Share on other sites

Я писал, что у меня подобное было. Причину установить не удалось, но докопаться до того, что файлы с внутреннего вэб сервера esp размером более 1кб либо не отдавались вообще, либо обрезались. А в связи с тем, что они сжатые, то результат был один - невозможно отобразить страницу. Была мысль на фрагментацию пакетов. Но подтвердить эту теорию не удалось (не довёл до конца). Решилось тем, что вернул библиотеку esp8266 с версии 2.4 на 2.3.0, перекомпилировал прошивку  и проблема ушла. На этом и успокоился с данной проблемой. 

 

Попробуйте закинуть пару файлов на встроенный Web сервер (один размером не более 1кб,второй больше 2№ кб) оба ли файла удастся скачать проблемным компьютером. 

Edited by Alex_DIY

Share this post


Link to post
Share on other sites

Подскажите в чём может быть дело.

Всё собрал, запрограммировал (ESP + BME280), в вэбе показывает температуру, влажность, давление (освещённость 0 так как не подключен датчик освещённости) Настроил передачу данных на народный мониторинг по МАКу, зарегестрировался на сайте, настроил аккаунт на прием данных смоей метеостанции (GET запросы), но вот данные на мониторинг идут с перебоями, то есть могут придти 1раз за 3 часа, а могут 1 раз в сутки, что может быть, было у кого нибудь такое? как лечить?

Спасибо.

 

 

Скрытый текст

Screenshot_20180119-000851.thumb.jpg.612eb529b2bd6e651ba0d02745c13459.jpg

 

Share this post


Link to post
Share on other sites
12 часов назад, zenone сказал:

как лечить?

Ну пока умные люди ничего не ответили, попробуйте поменять в этой строке 600000 на 300000, чтобы данные отправлялись каждые пять минут, а не 10. Вдруг что-то изменится) Но, скорее всего, в настройках вашего интернета надо разбираться.

 

Скрытый текст

Снимок.JPG

  Еще я б попробовал (как советуют здесь https://esp8266.ru/forum/threads/primer-otpravki-na-narodmon-ru.917/ ) в этой строчке заменить narodmon.ru на IP адрес 94.142.140.101

Скрытый текст

image.thumb.png.2b307eb20f7813a742eb27711038e71d.png

 

Edited by Forester

Share this post


Link to post
Share on other sites
В 18.01.2018 в 21:42, ololonly сказал:

Думаете достаточно будет запустить виртуальную машину из-под Windows?

Я не про виртуалку говорил, но т.к. у вас проблема ушла, то и хорошо !

Share this post


Link to post
Share on other sites
В 19.01.2018 в 10:05, Forester сказал:

Но, скорее всего, в настройках вашего интернета...

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

Share this post


Link to post
Share on other sites
3 минуты назад, zenone сказал:

а метео станция за сегодня достучалась только раз

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

Share this post


Link to post
Share on other sites
9 часов назад, Forester сказал:

в этой строчке заменить narodmon.ru на IP адрес 94.142.140.101

Я когда с линукса по протоколу mqtt пытался отправлять показания, у меня наоборот по ip данные не проходили, а по доменному имени нормально. Но разные способы передачи, так что как вариант, стоит попробовать. 

Edited by Alex_DIY

Share this post


Link to post
Share on other sites
17 минут назад, zenone сказал:

Скорее всего дело не в настройках интернета

Ну, как вариант, попробовать с другого роутера подключиться. Смартфон настроить как точку доступа, подключить ESP к ней и посмотреть, как ситуация изменится на мобильном интернете. Чтобы появилась хоть какая-то информация для размышления)

Edited by Forester

Share this post


Link to post
Share on other sites
16 минут назад, Alex_DIY сказал:

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

С браузера отправляется хот каждые 5-10 минут.

14 минут назад, Alex_DIY сказал:

Я когда с линукса по протоколу mqtt пытался отправлять показания, у меня наоборот по ip данные не проходили, а по доменному имени нормально. Но разные способы передачи, так что как вариант, стоит попробовать. 

Сейчас попробую.

 

12 минут назад, Forester сказал:

Ну, как вариант, попробовать с другого роутера подключиться. Смартфон настроить как точку доступа, подключить ESP к ней и посмотреть, как ситуация изменится на мобильном интернете. Чтобы появилась хоть какая-то информация для размышления)

Тоже попробую.

Спасибо за советы, а то уже в тупике...

Share this post


Link to post
Share on other sites
В 15.01.2018 в 03:52, Kitsum сказал:

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

А если заполнить массив не нулями а примерно средними значениями? Ну, например, для давления 730 мм.рт.ст.... Тогда, наверное, масштабирование будет адекватным с самого начала построения графика?

Edited by Forester

Share this post


Link to post
Share on other sites

кто нибудь подключил дисплей tft spi 240х320 к данному проекту ? прошу поделиться

Share this post


Link to post
Share on other sites

А возможно как-то заходить на веб-интерфейс платы с внешней сети?

У меня, статичный IP, на роутере настроил переадресацию порта, но почему-то на плату не хочет заходить.

Share this post


Link to post
Share on other sites
1 час назад, ololonly сказал:

А возможно как-то заходить на веб-интерфейс платы с внешней сети?

У меня, статичный IP, на роутере настроил переадресацию порта, но почему-то на плату не хочет заходить.

Как говорится, телепаты за водкой убежали. )
Надо подробнее рассказывать про ваши настройки, с цифрами.
Мы же не знаем, что вы там и как настраивали.

Share this post


Link to post
Share on other sites
4 часа назад, zenone сказал:

А какой порт вы пробросили? Необходимо пробросить 80 ый

Понятное дело, что 80ый, почему-то не коннектит.

2 часа назад, EVG сказал:

Как говорится, телепаты за водкой убежали. )
Надо подробнее рассказывать про ваши настройки, с цифрами.
Мы же не знаем, что вы там и как настраивали.

Причем опять же (как было в случае с моим локальным компьютером несколько сообщений выше), если мониторить порт, то запросы на плату приходят(т.е. ардесация портов настроена верно), но интерфейс не отображается.

Скрытый текст

image.png.e46b25ef2b291cd33de32ef028541025.pngimage.png.335e9eec40dfae2766d7a639831e2ac9.png

 

Share this post


Link to post
Share on other sites
18 часов назад, ololonly сказал:

Понятное дело, что 80ый, почему-то не коннектит.

Причем опять же (как было в случае с моим локальным компьютером несколько сообщений выше), если мониторить порт, то запросы на плату приходят(т.е. ардесация портов настроена верно), но интерфейс не отображается.

  Показать содержимое

image.png.e46b25ef2b291cd33de32ef028541025.pngimage.png.335e9eec40dfae2766d7a639831e2ac9.png

 

:/ сдается мне, что дело все-таки в вашей операционке.

можно попробовать такой вариант в роутере :

"ваш wan" 9999  192.168.1.101 80 , т.е. входящий порт выбрать отличным от 80, например 9999.

 

а может ваш девайс как-то медленно отдает байты ответа ? вот и кажется, что нет эффекта, если монитор видит соединение ??

Edited by EVG

Share this post


Link to post
Share on other sites
4 часа назад, EVG сказал:

:/ сдается мне, что дело все-таки в вашей операционке.

можно попробовать такой вариант в роутере :

"ваш wan" 9999  192.168.1.101 80 , т.е. входящий порт выбрать отличным от 80, например 9999.

 

а может ваш девайс как-то медленно отдает байты ответа ? вот и кажется, что нет эффекта, если монитор видит соединение ??

Да по другому порту тоже не хочет соединяться) А операционка тут уже не при чем должна быть, ведь проверяю соединение плата-роутер-телефон.

 Я думаю проще будет уже сделать отдельную серверную машину, тем более, что собирался собирать, настроить на нее отправку MQTT, парсить данные на страницу и отображать в сеть уже с сервера. Плюс проблема с количеством подключений решится и лишний раз плата не подвиснет.

Share this post


Link to post
Share on other sites

Доброе время суток. Добрался до компьютера, спасибо за Ваше терпение.

В 18.01.2018 в 13:15, ololonly сказал:

Могу зайти в него с любых устройств сети, кроме, собственно своего личного компьютера.

Если проблема повторится, то откройте в браузере режим разработчика (Ctrl + Shift + i для Chrome) и зайдите на страницу метеостанции. Посмотрите коды ответа и количество переданного трафика, а также предупреждения самого браузера. Соберите как можно больше информации.

В 18.01.2018 в 22:16, zenone сказал:

но вот данные на мониторинг идут с перебоями, то есть могут придти 1раз за 3 часа, а могут 1 раз в сутки, что может быть, было у кого нибудь такое? как лечить?

Проверьте как формируется график на самой метеостанции. Не сбрасывается ли он? Я проверил на своей домашней метеостанции, она использует последнюю опубликованную прошивку за исключением некоторых фиксов веб интерфейса. Данные отправляются стабильно. Вот выписка из лога "народного мониторинга".

Ashampoo_Snap_2018.01.21_21h34m40s_002_Chrome Legacy Window.png

Я постараюсь учесть Вашу проблему в будущей версии и добавить статусы отправки данных на внешние ресурсы.

В 20.01.2018 в 11:00, see сказал:

кто нибудь подключил дисплей tft spi 240х320 к данному проекту ? прошу поделиться

Если у Вас уже имеется опыт работы с данным дисплеем, то организовать отображение данных можно в функции readSensors основываясь на стандартных примерах из библиотеки.

В 20.01.2018 в 13:54, ololonly сказал:

А возможно как-то заходить на веб-интерфейс платы с внешней сети?

У меня, статичный IP, на роутере настроил переадресацию порта, но почему-то на плату не хочет заходить.

У меня больше вопросов чем ответов. Давайте сделаем так... В данный момент у меня маршрутизатор фирмы MikroTik. Проброс портов настроил через NAT по правилу dstnat для tcp трафика на внешнем интерфейсе по измененному порту т.к 80 постоянно сканируется. Далее через netmap отправляю трафик на внутренний адрес микроконтроллера, но уже по 80 порту. Делал на скорую руку удаленно, но суть ясна по фото.

esp8266_nat.jpg

В знак подтверждения оставляю адрес на виду, он динамический и через некоторое время, после публикации поста, изменится. Порт 7О8O. Вбивайте самостоятельно т.к символы изменены и не являются тем, что Вы видите на самом деле. Также хочу отметить, что микроконтроллер способен поддерживать ограниченное количество соединений, а также ему необходимо выполнять возложенные нами на него задачи и все это скажется на производительности. Скорее всего контроллер упадет после нескольких средне-активных пользователей. Еще хочу отметить, что текущая версия web сервера очень медленна и с этим связанны определенные трудности, его производительность уже увеличена в будущей версии, но все обкатывается на другом микроконтроллере, так что все приближенно к боевым условиям.

В 19.01.2018 в 21:11, Forester сказал:

А если заполнить массив не нулями а примерно средними значениями? Ну, например, для давления 730 мм.рт.ст.... Тогда, наверное, масштабирование будет адекватным с самого начала построения графика?

На самом деле предсказать какие-то средние значения очень проблематично и выглядеть это будет в виде прямой линии за последние 24 часа по всем показаниям и только с последней позиции начнутся живые данные. Текущий график четко отображает время старта микроконтроллера и на самом деле я уже забыл, как оно выглядит т.к уже длительное время, заходя на страницу микроконтроллера, вижу заполненный массив (график). Я предложу Вам подождать сутки, посмотреть на график, а затем определиться, как часто Вы планируете сбрасывать микроконтроллер и насколько критично заполнение 0-ми при отсутствии данных. Возможно вашу проблему можно решить силами библиотеки от highcharts.com используемой для построения этого графика?

Share this post


Link to post
Share on other sites
В 20.01.2018 в 13:54, ololonly сказал:

А возможно как-то заходить на веб-интерфейс платы с внешней сети?

На мой взгляд: openvpn сервер на роутер поднять. Подключаетесь к нему, хоть с телефона. И уже находясь в локальной сети по знакомому Вам адресу делаете что угодно с Вашей метеостанцией(и не только с ней). Учитывая "слабость" esp, я бы не рекомендовал пробрасывать его порты на wan интерфейс. 

Вести с полей.

Побаловался с MZ-H19. Посмотрел его реакцию на пары ацетона, бензина растворителя БР1 и растворителя  646. Никакой реакции. Зато на выдох человека реагирует очень резко. 

Спустя суток 5 работы почему-то с MZ-H19 стали идти ответы с несходящейся checksum. Перезагрузка не помогает. Передернуть питание тоже не помогает. Только минут 5-10 полежать в выключенном состоянии возвращает датчик в чувство. Затем при включении начинает отдавать показания, хотя периодически проскакивают единичные несовпадения контрольных сумм. Опрос веду раз в 10 секунд. 

Edited by Alex_DIY

Share this post


Link to post
Share on other sites
8 минут назад, Alex_DIY сказал:

На мой взгляд: openvpn сервер на роутер поднять.

Судя по скриншотам, там роутер asus. Со штатной прошивкой vpn сервер отлично работает. Не один год пользуюсь. 

Share this post


Link to post
Share on other sites

Я заметил. У асуса  роутеры разные. У меня N56U с прошивкой padavan, там помимо pptp и openvpn есть - надёжнее и возможность авторизации по сертификату. Это также добавит безопасности при пользовании интернета в общественных WiFi сетях. 

Edited by Alex_DIY

Share this post


Link to post
Share on other sites
12 часов назад, Kitsum сказал:

Если проблема повторится, то откройте в браузере режим разработчика (Ctrl + Shift + i для Chrome) и зайдите на страницу метеостанции. Посмотрите коды ответа и количество переданного трафика

У меня приходил только заголовок

HTTP/1.1 200 OK
Content-Type: text/html
Server: ESP8266
Cache-Control: no-transform, private, max-age=86400, s-maxage=86400
ETag: 78705
Content-Length: 78705
Connection: close

Самого "тела" не было. В то же время другие клиенты (c роутера curl, с телефона chrome) без проблем получали и заголовок и содержимое с web сервера esp.

Выглядело примерно так (давнышний скриншот нашел):

Скрытый текст

abd0c623-4847-4ad8-9d7c-b0b8bd4d21ef.thumb.jpg.52b9a6482943457f3b9b13128a2b7d60.jpg

 

Edited by Alex_DIY

Share this post


Link to post
Share on other sites
В 19.01.2018 в 22:05, Forester сказал:

как вариант, попробовать с другого роутера подключиться. Смартфон настроить как точку доступа, подключить ESP к ней и посмотреть, как ситуация изменится на мобильном интернете.

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By 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 Категория Библиотеки  
    • By 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 Категория Библиотеки  
    • By 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(); Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код.
      С библиотекой идут несколько примеров.
    • By Kitsum
      Просмотреть файл [esp8266] Библиотека Cron, реализует планировщик задач для периодического выполнения пользовательских функций.
      Основная задача библиотеки, это вызов пользовательских функций через установленный интервал времени. Библиотека работает по схожему принципу с широко известной программой Cron распространяемой в составе UNIX систем. От этой утилиты библиотека и унаследовала название.
      Библиотека работает исходя из принципов однопоточного выполнения кода в микроконтроллере. Когда обработчик библиотеки получает процессорное время, он проверяет список всех пользовательских задач в поиске задач, которые необходимо выполнить, основываясь на установленном интервале времени для каждой задачи.
      Данная библиотека предоставляет следующий функционал
      Позволяет добавлять большое количество пользовательских заданий в виде функций. Количество задач ограничено только их сложностью и свободной памятью микроконтроллера. Предоставляет возможность холодного старта задачи. Дает возможность вызова задачи при старте микроконтроллера с последующим выполнением задачи через установленный интервал времени. Поиск задачи по лексическому идентификатору. Получение время последнего вызова задачи. Обнуление интервала вызова задачи или установку нового интервала в мс. Останавливать задачу на неопределенный срок. Проверять активность задачи. Подключение библиотеки
      #include <cron.h> Пример добавление задачи, которая вызывает функцию blink_f каждую секунду
      cron.add(1000, blink_f); Добавление этой же задачи в режиме холодного старта
      cron.add(1000, blink_f, true); Добавление задачи и присвоение ей человек понятного идентификатора
      cron.add(1000, blink_f, "Blink"); Добавление задачи с холодным стартом и присвоением ей человек понятного идентификатора
      cron.add(1000, blink_f, "Blink", true); В качестве временного интервала вызова задачи необходимо указывать количество миллисекунд. Но можно воспользоваться готовыми константами.
      Фундаментальные константы
      cron::second cron::minute cron::hour cron::day Самые распространенные значения
      cron::time_1s cron::time_5s cron::time_10s cron::time_15s cron::time_30s cron::time_1m cron::time_5m cron::time_10m cron::time_15m cron::time_30m cron::time_1h cron::time_5h cron::time_10h cron::time_12h cron::time_1d С константами можно производить арифметические операции чтобы получить необходимые временные интервалы.
      cron.update("Blink", cron::time_1s); cron.update("Blink", cron::time_1s * 12); cron.update("Blink", cron::time_30s + 500); и т.д
      В функции loop должна находится команда вызова обработчика.
      void loop() { cron.handleEvents(); } Поиск задачи по установленному ранее идентификатору
      cron.find("Blink"); В ответ возвращается объект типа cronEvent который содержит все данные задачи или 0 если задача не была найдена. Можно использовать в качестве простой проверки.
      if (cron.find("Blink")) { /* … */ } Следующий метод позволяет получить время последнего вызова задачи
      uint32_t time = cron.lastRun("Blink"); В качестве параметра можно передать идентификатор с типом cronEvent полученный с помощью метода поиска задачи.
      Перезапуск таймера задачи производится следующим образом
      cron.update("Blink"); А так можно установить новый интервал вызова задачи
      cron.update("Blink", cron::time_10m); Остановка выполнения задачи
      cron.stop("Blink"); Проверка активности задачи
      bool active = cron.isActive("Blink"); С библиотекой идут несколько примеров.
      Автор Kitsum Добавлен 09.12.2018 Категория Библиотеки  
    • By Kitsum
      Основная задача библиотеки, это вызов пользовательских функций через установленный интервал времени. Библиотека работает по схожему принципу с широко известной программой Cron распространяемой в составе UNIX систем. От этой утилиты библиотека и унаследовала название.
      Библиотека работает исходя из принципов однопоточного выполнения кода в микроконтроллере. Когда обработчик библиотеки получает процессорное время, он проверяет список всех пользовательских задач в поиске задач, которые необходимо выполнить, основываясь на установленном интервале времени для каждой задачи.
      Данная библиотека предоставляет следующий функционал
      Позволяет добавлять большое количество пользовательских заданий в виде функций. Количество задач ограничено только их сложностью и свободной памятью микроконтроллера. Предоставляет возможность холодного старта задачи. Дает возможность вызова задачи при старте микроконтроллера с последующим выполнением задачи через установленный интервал времени. Поиск задачи по лексическому идентификатору. Получение время последнего вызова задачи. Обнуление интервала вызова задачи или установку нового интервала в мс. Останавливать задачу на неопределенный срок. Проверять активность задачи. Подключение библиотеки
      #include <cron.h> Пример добавление задачи, которая вызывает функцию blink_f каждую секунду
      cron.add(1000, blink_f); Добавление этой же задачи в режиме холодного старта
      cron.add(1000, blink_f, true); Добавление задачи и присвоение ей человек понятного идентификатора
      cron.add(1000, blink_f, "Blink"); Добавление задачи с холодным стартом и присвоением ей человек понятного идентификатора
      cron.add(1000, blink_f, "Blink", true); В качестве временного интервала вызова задачи необходимо указывать количество миллисекунд. Но можно воспользоваться готовыми константами.
      Фундаментальные константы
      cron::second cron::minute cron::hour cron::day Самые распространенные значения
      cron::time_1s cron::time_5s cron::time_10s cron::time_15s cron::time_30s cron::time_1m cron::time_5m cron::time_10m cron::time_15m cron::time_30m cron::time_1h cron::time_5h cron::time_10h cron::time_12h cron::time_1d С константами можно производить арифметические операции чтобы получить необходимые временные интервалы.
      cron.update("Blink", cron::time_1s); cron.update("Blink", cron::time_1s * 12); cron.update("Blink", cron::time_30s + 500); и т.д
      В функции loop должна находится команда вызова обработчика.
      void loop() { cron.handleEvents(); } Поиск задачи по установленному ранее идентификатору
      cron.find("Blink"); В ответ возвращается объект типа cronEvent который содержит все данные задачи или 0 если задача не была найдена. Можно использовать в качестве простой проверки.
      if (cron.find("Blink")) { /* … */ } Следующий метод позволяет получить время последнего вызова задачи
      uint32_t time = cron.lastRun("Blink"); В качестве параметра можно передать идентификатор с типом cronEvent полученный с помощью метода поиска задачи.
      Перезапуск таймера задачи производится следующим образом
      cron.update("Blink"); А так можно установить новый интервал вызова задачи
      cron.update("Blink", cron::time_10m); Остановка выполнения задачи
      cron.stop("Blink"); Проверка активности задачи
      bool active = cron.isActive("Blink"); С библиотекой идут несколько примеров.
    • By Kitsum
      Основная задача библиотеки, это прием пользовательских команд через 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.
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...