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

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

на старой  прошивке норм было,  там так же utf-8. но в настройках шрифт нормальный!

странно но после очередной прошивки все пошло. добавил датчик bme280, а как сделать чтоб он был в помещении?

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

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


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

странно но после очередной прошивки все пошло

Проблема ушла? Каким браузером Вы пользуетесь? Что вы видите при обращении по адресу http://espws.local/api/sensors/structure ?

3 часа назад, pasha413 сказал:

добавил датчик bme280, а как сделать чтоб он был в помещении?

Посмотрите содержимое файла users_bme280_x2.h, он представляет из себя описание двух групп сенсоров для web интерфейса. Условно, первая группа расположена вне помещения, а вторая в самом помещение.

Для добавления сенсора используется метод add из объекта sensors

sensors.add(...);

Второй параметр представляет из себя описание расположения сенсора

  1. device::out - для внешних датчиков (используется по умолчанию)
  2. device::in - для внутренних датчиков

Используйте нужное Вам значение.

  • Thanks 1

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


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

после перепрошивки снова проблема со шрифтами...у меня bme280  с адресом 0x76 в коде он обозначен как out: 

settings_out(
  BME280::OSR_X1,
  BME280::OSR_X1,
  BME280::OSR_X1,
  BME280::Mode_Forced,
  BME280::StandbyTime_1000ms,
  BME280::Filter_Off,
  BME280::SpiEnable_False,
  BME280I2C::I2CAddr_0x76
),

и далее идет:

  sensors.add(T, device::out, 0x76, "out_temperature", out_temp, true);
  sensors.add(H, device::out, 0x76, "out_humidity",    out_hum,  true);
  sensors.add(P, device::out, 0x76, "out_pressure",    out_init, out_pres, true);

поменял in и out  на противоположные и теперь правильно показывает.

Еще важное замечание:

если идет объявление датчика 

sensors.add();

то он будет показан на странице. даже если он не подключен. это надо учитывать.

без проблем добавил ds18b20 как уличный датчик.

 

пользуюсь яндекс браузером, по адресу http://espws.local/api/sensors/structure страница недоступна ни в AP ни в STA

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

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


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

Установил сегодня v2.0 Beta,  решил настроить ThingSpeak, но так и не получилось. Насколько я понял, ввести нужно тоько Write API Key и настроить канал  через личний кабинет. У кого-то работает?

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


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, pasha413 сказал:

после перепрошивки снова проблема со шрифтами

На данный момент я предполагаю, что проблема проявляется при изменении кодировки в файлах проекта. Изначально все файлы, в том числе и web сервера, имеют кодировку utf-8. Данные между контроллером и web интерфейсом также передаются в этой кодировке. Arduino IDE также работает с utf-8. Возможно, где-то в этой цепочке произошла смена кодировки. Над этим стоит подумать.

6 часов назад, pasha413 сказал:

по адресу http://espws.local/api/sensors/structure страница недоступна

Это говорит о том, что у Вашего компьютера или иного устройства нет поддержки MDNS протокола, но не беда. Место espws.local наберите ip выданный контроллеру. На странице Вы должны увидеть json строку по данным с которой web интерфейс добавляет сенсоры. Вы можете скопировать текст в "кривой" кодировки и воспользоваться услугами любого онлайн анализатора кодировки. Надеюсь он подскажет в какую сторону копать.

6 часов назад, pasha413 сказал:

если идет объявление датчика то он будет показан на странице. даже если он не подключен. это надо учитывать.

Безусловно будут отображены все объявленные датчики т.к на данный момент данные о структуре списка устройств объекта sensors забираются у микроконтроллера всего один раз при открытии/обновлении страницы.

Я обновил архив, там есть небольшие изменения в web сервере, теперь он добавляет заголовок кодировки utf-8 при ответе клиенту через API. Проверьте как у Вас это будет работать.

3 часа назад, Gleb сказал:

Установил сегодня v2.0 Beta,  решил настроить ThingSpeak, но так и не получилось. Насколько я понял, ввести нужно тоько Write API Key и настроить канал  через личний кабинет. У кого-то работает?

Да, у меня работает, и Вы абсолютно правы. Вам необходимо создать канал в своем профиле, далее перейти в раздел API Keys и скопировать ключ Write API Key. этот ключ необходимо указать в соответствующем поле в web интерфейсе. Данные должны начать поступать в течении 5 минут. Какие данные будут отправляться зависит только от Вас. Пример используемый по умолчанию и описанный в файле services.h отправляет данные об освещенности, температуре, влажности и давлении на поля field1-4 соответственно. Статус отправки запроса отображается в консоли.

  • Like 2

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


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

Вот вывод api/sensors/structure:

Цитата

{"out_temperature":[{"list":1,"min":-40,"max":125,"step":".1","title":"�����������","unit":"°C"}],"in_pressure":[{"list":2,"min":-500,"max":9000,"step":".01","title":"��������","unit":"mm"}],"in_humidity":[{"list":2,"min":0,"max":100,"step":"1","title":"���������","unit":"%"}],"in_temperature":[{"list":2,"min":-40,"max":125,"step":".1","title":"�����������","unit":"°C"}]}

Еще вопрос, а можно как-то менять сортировку индикаторов.

И есть ли возможность объявлять выводы i2c и управляющие из вебинтерфейса и вывести индикацию управляющих пинов, сам пока не допетрил как это сделать)

Мажордомо сам добавил в вебинтерфейс.

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


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

Еще вопрос, а можно как-то менять сортировку индикаторов

На данный момент сортировка списка не предусмотрена, но могу сказать, что построение списка идет в обратную сторону от его объявления. Это значит, что последний добавленный датчик станет первым в списке при формировании json строки со структурой дерева сенсоров. Кстати, именно поэтому при описании таких датчиков как BME280, где несколько сенсоров в одном корпусе, у последнего сенсора в описании добавляется функция инициализации. Но я не буду забивать сейчас Вам голову этой ерундой, я все опишу позже или озвучу в видео. Вернемся к сортировке. Список, построенный в порядке обратном объявлению, будет передан в web интерфейс, там на основе его парсинга, будет построен объект с соответствующей структурой и одним циклом разобран на составляющие из которых и появятся индикаторы на страницах. В каком порядке java будет отдавать каждую из частей мне неизвестно, если честно, я даже не задавался этим вопросом. Но если такая необходимость выбора последовательности расположения индикаторов будет иметь место, то можно её добавить.

20 минут назад, pasha413 сказал:

И есть ли возможность объявлять выводы i2c и управляющие из вебинтерфейса

Да, такая возможность есть, по крайней меря, я не вижу серьезных проблем в её реализации кроме одной - количество свободных портов esp8266 очень ограничено, хоть внешне так и не скажешь, особенно смотря на плату Node MCU. Часть портов завязаны с flash, другая часть используется да старта микроконтроллера и выбора режима работы, один порт под умный светодиод (как не крути, а на большинстве модулей он уже распаян), три порта выделены под управление нагрузкой, два порта под i2c шину и один порт держим в уме под 1wire. А в итоге остается свободным один порт, может еще где-то найдется, пока не припомню.

30 минут назад, pasha413 сказал:

Мажордомо сам добавил в вебинтерфейс

К сожалению, с этой системой я не знаком. Если нужно добавить её, то над этим можно подумать.

  • Thanks 1

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


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

Спасибо. Просто, как мне, так удобнее использовать порты i2c d5 и d6, чтоб подключить датчик без переключений (на прямую) к node mcu.

С majordomo разберусь. в предыдущей версии сам добавил.

 

с обновлением файловой системы ясно, а как обновить прошивку (код программы) удаленно? 

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

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


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

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

Я использовал порты по умолчанию, но если это разовая операция, то их легко поменять, изменив номера портов указанные при инициализации i2c шины. Но стоит учесть, что эти порты пересекаются с управлением нагрузкой, придется внести соответствующие изменения в файле gpio.h

4 часа назад, pasha413 сказал:

с обновлением файловой системы ясно, а как обновить прошивку (код программы) удаленно?

В первую очередь, Вам нужно убедиться, что контроллер запустился при наличии перемычки между GPIO-0 (D3) и 3.3V. Об этом упоминалось тут. Теперь Вам необходимо получить скомпилированную прошивку, для этого в Arduino IDE воспользуйтесь пунктом меню "Скетч/Экспорт бинарного файла" или Ctrl + Shift + U, готовый бинарник появится в корне проекта. Остается только зайти на страницу конфигурации микроконтроллера и в разделе "Обновление прошивки" перетащить полученный файл в указанную область.

Что касаемо кодировки, то я предполагаю, что компилятор не смог переварить кириллицу. Почему так произошло мне пока неизвестно, возможно имеют место быть дополнительные факторы. Поэкспериментировал на разных машинах, но все они c одинаковой операционной системой и версиями IDE и ESP, все работает, и кириллица не теряется. Также все отлично выводится в Serial монитор, хотя в сети есть упоминания, что у людей проблемы с печатью кириллицей. Можете попробовать добавить в конце функции Setup вывод структуры сенсоров в терминал и посмотреть на результат.

console.println(sensors.list());

Пока что изменил все заголовки для плагина Knob на латинские аналоги. Кстати, при использовании латиницы, Вы можете регулировать порядок добавления индикаторов в web путем изменения последовательности их объявления. Добавление будет произведено в обратном порядке, как упоминалось ранее.

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


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

сейчас норм отображается. порты управления естественно переназначил

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


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

Что-то странно...

Захожу по ip, ввожу логин:admin пароль:admin захожу система, либо настройка домашней wifi выдает ошибки: либо одну либо другую, даже вашу пробовал beta2  тоже самое...со смарта и с компа таже ситуация, иногда прошью и норм работает...

IMG_20180302_142432_339.jpg IMG_20180302_144200_655.jpg

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


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

@pasha413 Очистите cookies для доменов 192.168.4.1 и espws.local

да, спасибо. помогло. ато я уже замучился.

Со шрифтами проблем пока нет.

 

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

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


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

Обновил на новую версию. Дописал свои датчики (MAX44009, MCP9808), поменял шкалы. Все работает, кроме отправки на narodmon.ru. Вбил свой id (mac адрес), а данные не отправляются. В чем может быть проблема?

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

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


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

@ewanpips доброе время суток.

Могу предположить, что после внесенных изменений в датчики Вы не модифицировали функцию описанную в service.h отвечающую за отправку данных на народный мониторинг

void sendDataToNarodmon() {
	/* код отправки данных на сервис "Народный мониторинг" */
}

Возможно Вы внесли изменения в имена идентифицирующие сенсоры. В приведенном примере производится отправка данных сенсоров со следующими идентификаторами:

  1. out_light
  2. out_temperature
  3. out_humidity
  4. out_pressure

Состояние отправки данных на внешние ресурсы отображается в консоли.

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


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

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

Не совсем понял, что нужно менять в функции отправки данных на народный мониторинг, ведь narodmon_id берется из web-интерфейса? Имена сенсоров остались те же:

sensors.add(L, device::out, 0x4a, "out_light", [&](){ MAX44009.begin(); }, [&](){ return MAX44009.get_lux(); }, true);

sensors.add(T, device::out, 0x18, "out_temperature", [&](){ MCP9808.begin(); }, [&](){ return MCP9808.readTempC(); }, true);

sensors.add(H, device::out, 0x76, "out_humidity",                           [&](){ return BME.hum(); }, true);

sensors.add(P, device::out, 0x76, "out_pressure",    [&](){ BME.begin(); }, [&](){ return BME.pres(BME280::PresUnit_torr); }, true);

Могу предположить, что поменялись уникальные id присваиваемые narodmon.ru и нужно заново создать новое устройство и подвязать по старым id историю?

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


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

@ewanpips В таком случае все должно работать, если конечно Вы используете верный (зарегистрированный) ID устройства. Проверьте верен ли используемый идентификатор и посмотрите на ответ сервера, он будет отображен в Serial мониторе.

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


Ссылка на сообщение
Поделиться на других сайтах
В 02.03.2018 в 00:06, Kitsum сказал:

На данный момент я предполагаю, что проблема проявляется при изменении кодировки в файлах проекта. Изначально все файлы, в том числе и web сервера, имеют кодировку utf-8. Данные между контроллером и web интерфейсом также передаются в этой кодировке. Arduino IDE также работает с utf-8. Возможно, где-то в этой цепочке произошла смена кодировки. Над этим стоит подумать.

Добавьте в response веб-сервера заголовок content-type: "text/html" - это, скорее всего, решит вашу проблему

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


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

@Prana_dk доброе время суток. На данный момент отправляется заголовок "application/json", а кодировка всех файлов проекта utf-8, этого должно быть достаточно для корректной передачи кириллицы. Также настораживает тот факт, что проблема не постоянная и уходит при повторной компиляции проекта, а в моем случае она и вовсе не проявлялась. Если Вас не затруднит, не могли бы Вы дать пояснения к причинам замены заголовка?

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


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

@Prana_dk доброе время суток. На данный момент отправляется заголовок "application/json", а кодировка всех файлов проекта utf-8, этого должно быть достаточно для корректной передачи кириллицы. Также настораживает тот факт, что проблема не постоянная и уходит при повторной компиляции проекта, а в моем случае она и вовсе не проявлялась. Если Вас не затруднит, не могли бы Вы дать пояснения к причинам замены заголовка?

Доброе утро! столкнулся сам с тем, что браузеры некорректно принимают кодировку, если не специфицирован в явном виде content-type. Для application/json в таком случае правильнее попробовать передавать contentType: 'application/json; charset=utf-8'
Сам я реализую совсем другой проект на ESP, просто случайно наткнулся на ваш, и решил подбросить идею, как решить проблему

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


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

@Kitsum доброе утро!

Переписал void restAPIsend(String host, uint16_t port, String query) {

  restAPI.begin(host, port, query);
  restAPI.setUserAgent("weather station (www.it4it.club) " + WiFi.hostname());
  restAPI.setTimeout(5000);
  restAPI.GET();
  restAPI.end();
}

в таком виде и отправка данных на народный мониторинг заработала.

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


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

@Prana_dk спасибо за подсказку, мы попробовали добавить явное указание кодировки сразу как проблема появилась, но на сколько я понял со слов @pasha413, проблема осталась. Также если запрос выполнять не силами ajax, а напрямую через браузер, получаем аналогичный результат. Я для тестов в основном использую браузер Google Chrome, а @pasha413 Yandex Browser и если я не ошибаюсь, то они основаны на одном движке и должны обрабатывать запросы одинаково, но опять же у меня проблема ни разу не проявилась. Возможно что-то на поверхности... Если у Вас будут еще мысли по этой проблеме, буду признателен если поделитесь с нами, постараемся все проверить.

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


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

@Kitsum получается это условие:

  #ifdef console
    console.printf("answer: %s\n", httpCodeStr(restAPI.GET()).c_str());
  #endif

сработает только когда раскомментирована строка #define console Serial, а в готовом устройстве она закомментирована.

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

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


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

@Prana_dk спасибо за подсказку, мы попробовали добавить явное указание кодировки сразу как проблема появилась, но на сколько я понял со слов @pasha413, проблема осталась. Также если запрос выполнять не силами ajax, а напрямую через браузер, получаем аналогичный результат. Я для тестов в основном использую браузер Google Chrome, а @pasha413 Yandex Browser и если я не ошибаюсь, то они основаны на одном движке и должны обрабатывать запросы одинаково, но опять же у меня проблема ни разу не проявилась. Возможно что-то на поверхности... Если у Вас будут еще мысли по этой проблеме, буду признателен если поделитесь с нами, постараемся все проверить.

движок один, но у меня похожая проблема была в проекте, пользователь пожаловался, я раскопал то, что Chrome начинает самостоятельно принимать решение о кодировке контента (возможно, на основе пользовательской локали в клиентской системе), игнорируя выставленную на странице. Проблема решилась заданием content-type, но у меня не json передавался, а была ajax-подгрузка целого куска страницы.

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


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

@ewanpips Спасибо, что указали на ошибку, директивы условной компиляции добавлялись в последнюю очередь и тут виной только моя невнимательность и спешка. Все будет поправлено уже сегодня вечером. Также будут добавлены примеры для датчиков SSC811 и MAX44009.

@Prana_dk Спасибо, что поделились Вашим опытом. Я постараюсь все перепроверить. Если Ваш проект открытый, то не могли бы Вы поделиться ссылкой на него?

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


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

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

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



Войти сейчас

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

    • Автор: 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 пользователей

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

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