В предыдущей статье я рассказал об сборке нового контроллера управления влажностью. Теперь расскажу об особенностях программы, алгоритмах управления и настройках этого контроллера.
ESP8266, в отличие от Atmegи328, на которой была реализована предыдущая версия, имеет очень привлекательные характеристики:
Atmega328 | ESP8266 | |
Тактовая частота контроллера(памяти), МГц | 16 | 80(40) |
ОЗУ, Кбайт | 2 | 80 |
ПЗУ (для программы), Кбайт | 32 | 512 |
EEPROM, Кбайт | 1 | 4 |
Это все вкупе со встроенным WiFi позволяет реализовать функции встроенного WEB-сервера, не экономя память для текстовых строк.
А вот с GPIO у ESP8266 довольно плоховато, поэтому, такая роскошь, как управления семисегментным индикатором напрямую ему не доступна. Поэтому и выбран индикатор на микросхеме TM1637, требующий для подключения всего два вывода.
Среда разработки
Так как я освоил разработку управляющей программы для ESP8266 под Arduino IDE, то много старого кода, обеспечивающего основную логику работы контроллера управления вентилятором сохранилось с предыдущей версии.
В основном интересно было перенести хорошо зарекомендовавший себя алгоритм, реализующий конечный детерменированный автомат состояний, описанный в таблице переходов состояний:
Подошли без проблем и ардуиновские библиотеки DHT для работы с датчиками влажности/температуры от Adafruit и библиотеку работы с индикатором на TM1637 DigitalTube.
Здесь можно посмотреть подробное описание использования Arduino IDE для программирования ESP8266
Реализация новых функций
Очень неудобно делать WiFi контроллеры, в которых зашиваются параметры подключения к сети. Представляете, во что выльется смена имени точки доступа или пароля при наличии десятка таких контроллеров дома?
Поэтому в данном программе реализованы функции сохранения параметров подключения в энергонезависимую память EEPROM и настройка их по сети. Структура для сохранения параметров, а также чтение и запись ее реализованы в файлах WC_EEPROM.h и WC_EEPROM.cpp моего проекта. Верификация чтения и записи производится при помощи вычисления контрольной суммы конфигурации и сравнения ее с записанной в EEPROM.
Кроме конфигурации сети в память сохраняются также все таймауты и прочие параметры алгоритма управления вентилятора, что позволяет оптимизировать и настраивать данный контроллер прямо «по воздуху».
Отображение режимов работы, настройка конфигураций контроллера, а также непосредственное управление вентилятором реализовано при помощи встроенного WEB-сервера (фалы WC_HTTP.h и WC_НTTP.cpp)
Алгоритм настройки точки доступа следующий:
- Если ESP-шка не смогла подключиться к прописанной в конфигурации EEPROM точке доступа, то она поднимает свою точку доступа и по адресу 192.168.4.1, позволяет сконфигурировать.
- Ну а если подключилась, то работает в штатном режиме.
Главная страница WEB-сервера показывает основные параметры контроллера и позволяет вручную включить/выключить контроллер (аналог нажатия кнопки ручного управления)
Здесь же можно перейти на страницу сетевых настроек
И страницу настроек алгоритма работы контроллера
С этих двух страничек можно выполнить перезагрузку контроллера и сброс всех настроек «по умолчанию».
«Наводить красоту» на интерфейс я еще планирую в будущем, когда концепция умного дома на WiFi более менее устаканится у меня в голове.
Еще одна функция, реализованная в этой программе — часы реального времени, синхронизирующиеся по NTP протоколу в интернете. (Файлы WC_NTP.h и WC_NTP.cpp)
Описание основного алгоритма описывать не буду, логика осталось прежней и почитать про нее можно в этой статье. Основные изменения коснулись дисплея. Хочу обратить внимания на одну «фичу» — функцию DisplaySpecialChar(), которая позволяет по битовой маске вывести любой символ, который можно придумать для отображения на семисегментном индикаторе. Я придумал вот такой символ «процентов» в отображении влажности
И символ «градусов» при отображении температуры
Биты в битовой маске соответствуют сегментам индикатора.
Ну и последняя из новых функций — сохранение параметров на сервер в интернете для отображения и последующего анализа. Сохраняются значения влажности, температуры, аналогового порта с фоторезистором для подстройки порога срабатывания освещения, время работы вентилятора, время горения света и UPTIME-время работы контроллера от последней перезагрузки.
Запись на сервер происходит в двух режимах. С большей периодичностью записываются параметры, когда в ванной «что-то происходит», в это время либо горит свет, либо работает вентилятор. Все тайминги настраиваются через WEB-интерфейс.
Сохраняются данные на мой сервер в интернете. Адрес сервера можно настроить, а вот формат записи пока зашит в программу. Опять до лучших времен устаканивании концепции ))). Сейчас параметры сохраняются простейших PHP-скриптом в таблицу с простейшей структурой.
Довольно просто перенастроить сохранения параметров на тот же «народный мониторинг». Лично меня это сервер не устраивает ограничениями в периодичности сохранения данных и глубине архива.
Оптимизация настроек контроллера
После «опытной эксплуатации» можно определить, правильно ли установлены пороги срабатывания освещения и влажности, а также таймауты различных событий. В прошлой реализации я установил время срабатывания 20 минут, сидя в ванной с секундомером. Понаблюдав за графиком параметров во время нескольких принятий душа я увидел следующее:
- Влажность в зимнее время меняется на 35-40%
- Время нормализации влажности при естественной вентиляции 20-25 минут
- Время нормализации влажности с работающим вентилятором 10-12 мин
- Вентилятор повышает эффективность проветривания вдвое
Исходя из этого можно смело снизить время работы вентилятора до 12 мин, тем самым продлив время его службы и чуточку сэкономив электроэнергию. Подобный анализ можно провести для других времен года, когда влажность в квартире совсем другая.
Теперь, после проведения анализа можно увеличить период записи параметров на сервер.
Выводы
- Контроллер работает стабильно, функции свои выполняет.
- Функциональность его расширилась, теперь им легко управлять и он нормально интегрируется в систему Умного дома/
- Некоторые вещи требуют доработки, например, WEB-интерфейс, авторизация доступа, серверная часть и некоторые неточности в расчете времени работы вентилятора и света. Может быть выявятся и другие хотелки по улучшению.
- Пилотный проект по Умному дому на WiFi можно признать успешным 😉
Скетч можно скачать здесь. Буду очень признателен, если сообщите о найденных ошибках.
Скетч контроллера вентилятора на WiFiА мы с Тимофеем отдохнем от трудов праведных 😉
При компиляции выдает ошибки
D:\WiFi_SmartHome_cooler1\WiFi_SmartHome_cooler1.ino: In function ‘void loop()’:
WiFi_SmartHome_cooler1:182: error: ‘DisplaySpecialChar’ was not declared in this scope
DisplaySpecialChar(3,0×24);
^
WiFi_SmartHome_cooler1:217: error: ‘SetStatusFSM’ was not declared in this scope
SetStatusFSM();
^
exit status 1
‘DisplaySpecialChar’ was not declared in this scope
Какая версия IDE? Я собираю на 1.6.5?
ESP8266 core стабильная установлена?
Тип контроллера какой выбран?
Попробуйте функции DisplaySpecialChar() и SetStatusFSM() перенести перед setup()
я использовал 1.6.7,сейчас поставил 1.6.5 стало все нормально,спасибо!
Обновите скетч с сайта
Исправил одну ошибочку и добавил значок «градуса» при отображении температуры
Алексей, добрый день!
А как ведут себя компоненты в такой влажной среде? Или герметичности корпуса хватает?
На первом фото состояние старого контроллера после 2-х лет эксплуатации. Не так уж там и влажно.
70-80% на короткое время не более 15 минут после принятия душа. А потом влажность восстанавливается до среднеквартирной 32-40%
Поэтому в корпусе контроллера обычные отверстия под провода, не обеспечивающие никакой влаглзащиты
Дайте ссылку на библиотеку: #include
На гидхабе много всего, но нет того что подходит
Там в статье ссылки
Библиотека DigitalTube и
Библиотека DHT
#include TM1637.h
Ещё вопрос насчёт базы данных. Непонятно куда пишутся данные и как.
Если можно поясните как настроить передачу данных в базу
Я пишу примерно так.
// Соединяемся, выбираем базу данных
$link = mysql_connect($server, $user, $password) or die('Не удалось соединиться: ' . mysql_error());
// Формируем запрос
$query = 'INSERT INTO sav_bathroom_c03(dt,t,h,a,tm_vent,tm_light,uptime) VALUES(now(),\''.
$_GET['t'].'\',\''.$_GET['h'].'\',\''.$_GET['a'].'\',\''.$_GET['tm1'].'\',\''.$cnt02.'\',\''.$_GET['tm2'].'\')';
$result = mysql_query($query) or die('Сохранение в БД не удалось: ' . mysql_error());
// Закрываем базу
mysql_close($link);
Наверно я непонятно выразился. Этот код, как я понимаю, принимает данные на ПК с вебсервером и заносит в базу.
Мне непонятно как идёт отправка этих данных с контроллера.
Я смотрел код, но там так наворочено что мне не разобраться.
Мне нужно просто данные с датчика отправить на сервер и записать их СУБД.
Прошу помощи.
Обращением к вашей странице в формате GET запроса:
http://адрес/страница?t=20&h=33 и и т.д.
Легким движением руки можно все это перенастроить на тот же «народный мониторинг»
Не нужен мне народный мониторинг. У меня свой локальный сервер с базой данных. Не могу прикрутить ваш проект к своей базе, это печаль.
Мучаюсь уже неделю с гет отправкой. Что делать?
Для начала взять пример из ESP core и попробовать в нем добиться отправки с ESP
Иногда не хватает переносов строк в GET запросе, иного файервол режет
Спасибо, буду пробовать!
Спасибо разобрался!
String url = «/add.php/»;
url += «?t=»;
url += t;
url += «&h=»;
url += h;
// This will send the request to the server
client.print(String(«GET «) + url + » HTTP/1.1\r\n» +
«Host: » + host + «\r\n» +
«Connection: close\r\n\r\n»);
На странице контроллера прописал в настройках URL servera http://192.168.83.80/site1.ru/www/
В прошивке контролера нечего не менял. Установил, создал базу и таблицу с такими же именами. Добавил скрипт в index.php
Выдаёт ошибку:
Notice: Undefined index: t in C:\webserver\www\site1.ru\www\index.php on line 52 Notice: Undefined index: h in C:\webserver\www\site1.ru\www\index.php on line 52 Сохранение в БД не удалось: No database selected
// Соединяемся, выбираем базу данных
$link = mysql_connect(‘localhost’, ‘root’, ‘root’) or die(‘Не удалось соединиться: ‘ . mysql_error());
// Формируем запрос
$query = ‘INSERT INTO sav_bathroom_c03(t,h) VALUES(now(),\».
$_GET[‘t’].’\’,\».$_GET[‘h’].’\’)’;
$result = mysql_query($query) or die(‘Сохранение в БД не удалось: ‘ . mysql_error());
// Закрываем базу
mysql_close($link);
В чём может быть проблема?
Что может быть
Алексей, не могу запустить проект. Пока прошивку не загрузил web интерфейс работает и в сети видится, после прошивки все пропадает и ничего не работает. Что посмотреть?
После правильной прошивки в эфире должна появится новая точка доступа
Все отладочные сообщения выводятся в консоль. Хорошо бы посмотреть, что там на коносоли. Возможно, не опознается какая нибудь периферия и ESP уходит в циклическую перезагрузку по WDT
Нет дисплея. Можно как нибудь с вами связаться для консультации?
admin@samopal.pro
В консоль что-то выводит? В ESP-link тоже должна выводить
Точка появляется До прошивки, после перепрошивки на ESP-link.
Есть вопрос по поводу метео станции, которою я пытаюсь запустить. Это проект был выложен в группе в вк.
Можно спросить?
Вы спрашивайте, чего время тянуть. Не захо…
Не сможет — не ответит. 🙂
Вгружаю скетч и ничего не происходит…
плата правда не такая как тут а бутерброд
А скетч загружается?
загружается…
у меня 3 одинаковых «бутерброда».пробовал на всех 3х.
но ни на одном не завелась и даже точка доступа не появилась.
До этого стояла прошка с https://wifi-iot.com/.
может подскажете )
Там отладка в консоль выдается. Что пишет?
пишет все ок) я сейчас не дома..проверить не могу.
дайте почту я вам скину.
А у вас дисплей подключен на TM1637 ?
Похоже подвисает на его инициализации, после чего систему ресетит злобный WDT от ESP, который не любит, когда пользовательские программы долго что-то делают. Закомментарьте строчку с инициализацией этого дисплея
Soft WDT reset
ctx: cont
sp: 3fff2b60 end: 3fff2d90 offset: 01b0
>>>stack>>>
3fff2d10: 3fff2d50 3fff2d20 00000008 000039f5
3fff2d20: 6000001c 0000002b 60000000 3fff1d5c
3fff2d30: 00000000 00000000 3fff1bd0 40208a2e
3fff2d40: 3fffdad0 3fff1bd0 3fff1bd0 40208a91
3fff2d50: 3fffdad0 3fff10c8 3fff2dd4 40208ac4
3fff2d60: 3fffdad0 00000000 3fff2dd4 402038c4
3fff2d70: feefeffe 00000000 3fff1d54 4020905c
3fff2d80: feefeffe feefeffe 3fff1d70 40100718
<<<stack<<<
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 1264, room 16
tail 0
chksum 0x0f
csum 0x0f
~ld
Free memory 35376
EEPROM init. Size = 332
SCR=14837
EEPROM Config is correct
Display TM1637 init
Закомментарьте строчку с инициализацией этого дисплея
скажите как и где..
я только учус)
// Инициализация дисплея
//Serial.printf(«Display TM1637 init\n»);
//tm1637.init();
эту? вот так?
забыл упомянуть что дисплея такого пока нет..есть такой MTC-S16204XF..но как я понял его сюда не прицепить.
теперь вот такое
Soft WDT reset
ctx: cont
sp: 3fff2af0 end: 3fff2d40 offset: 01b0
>>>stack>>>
3fff2ca0: 00000900 00000001 3ffea6a9 4020a284
3fff2cb0: 00000009 0000000b 3ffea24f 00000000
3fff2cc0: 00000000 00000000 3fff1b80 402089de
3fff2cd0: 3fff1078 00000967 3fff1b80 40208a41
3fff2ce0: 3ffea244 3fff1b04 3fff1b80 40203c13
3fff2cf0: 3fffdad0 3fff1b04 3fff2d84 40209640
3fff2d00: 00000000 00000000 3fff2d84 402036ac
3fff2d10: 3fffdad0 00000000 3fff2d84 3fff1d0c
3fff2d20: 3fffdad0 00000000 3fff1d04 40209004
3fff2d30: feefeffe feefeffe 3fff1d20 40100718
<<<stack<<<
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 1264, room 16
tail 0
chksum 0x0f
csum 0x0f
~ld
Free memory 33960
EEPROM init. Size = 332
SCR=12583
EEPROM Config is correct
Init DHT11on 14 pin …
Init button 12 pin …
Init relay cooler 13 pin …
WiFi is not config …
Start AP SmartHome_Cooler1
Open http://192.168.4.1 in your browser
Or by name: http://SmartHome_Cooler1.local
HTTP server started …
Starting UDP
Local port: 2390
Soft WDT reset
полскажите где копать
1. Попробовать все же собрать схему полностью. Проверить правильнось подключения всех устройств к ESP
2. Проверить интернет и подключение к нему
3. Использовать «метод научного тыка» — последовательно комментировать строчки пока не получите нормальную работу.
дисплея у меня нет.а все остальное установлено .
и так как это бутерброд то на второй плате прогрпматор .отдельного программатора у меня к сожалению нет
в любом случае спасибо)
Known Issues
As explained above, the connection drops every now and then
Websocket connection doesn’t work with mDNS or location.hostname for some reason
Cannot handle multiple clients
http://adityatannu.com/blog/post/2016/01/31/ESP8266-Witty-Cloud-Board-Demo.html
может как раз изза mDNS ?
Может и так. Хотя у меня ни разу из за него не перезагружалась. Проверить ведь не долго?
еще одна беда.. меняю значения в скетче сохраняю, и заливаю в еспшку .Но вот после окончания заливки смотрю монитором сом порта а значения не изменяются .
то есть меняю имя точки доступа и пароль а они не изменяются.
и как стереть полностью все данные с еспшки?
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v3de0c112
~ld
ь
Free memory 35248
EEPROM init. Size = 332
SCR=14837
EEPROM Config is correct
HTTP server started …
Starting UDP
Local port: 2390
Send NTP server 1.ru.pool.ntp.org 195.3.254.2
Sending NTP packet…
NTP received, length=48
NTP time = 1473421853
Get NTP time. Error = 0
Soft WDT reset
ctx: cont
sp: 3fff23f0 end: 3fff2640 offset: 01b0
>>>stack>>>
3fff25a0: 40105814 000f2dcc 3fff1560 00000000
3fff25b0: 3fff03a0 3fff1560 3fff1620 0000000b
3fff25c0: 00000000 00000000 3fff1478 40207202
3fff25d0: 3fff0970 00000c8d 3fff1478 40207265
3fff25e0: 3fff0970 00000106 3fff1478 4020396b
3fff25f0: 3fffdad0 3fff13fc 3fff2684 40207e48
3fff2600: 00000032 00000000 3fff2684 40203458
3fff2610: 00000000 00000000 00000001 3fff160c
3fff2620: 3fffdad0 00000000 3fff1604 40207804
3fff2630: feefeffe feefeffe 3fff1620 40100718
<<<stack<<<
все подключилось! Попадаю даже в вэбку! но отваливается от сети а потом снова соеденяется даже дает изменить некоторые значения. Или так и должно быть?
// Подключаемся к WiFi
// WiFi_begin();
// delay(2000);
закоментил эти строки
и получил вывод постом выше если разкоментить то не соединяется сосвсем.
Soft WDT reset вот это почему вылазит понять не могу .
даже датчики не успевают инициализироватся
в схеме контроллера не указаны номиналы резисторов
между Vcc и CH_PD
И GND,GPIO15 — GPIO2.
Насколько они необходимы в моем случае?
Напомню у меня «бутерброд» «Witty Cloud».
простите за такие вопросы но очень хочется разобраться )
Возможно и Soft WDT reset происходит из-за недостающих вышеупомянутых резисторов.
Большое спасибо за данный проект. Все сделано в точности. Результат порадовал!!! Да к тому же это мое первое учебное пособие. Но к сожалению на третий день обнулились показания влажности и температуры. Попробую заменить датчик DHT11. Но «кнопка» всегда работает — по крайней мере это лучше, чем каждый раз бегать включать и выключать вентилятор !!! Правда вентилятор иногда как бы жил своей жизнью — короткими пульсациями включался.
Алексей, если можно на примере подскажите как реализовать в данном проекте возможность отправки значения переменной из умного дома (или строкой из браузера)в WEB сервер (ESP8266). К примеру изменить порог освещенности (был 900, выставить 800),время отправки на сервер и т.п. Собственных знаний увы не хватает…
Всё, разобрался, помощь не нужна.
Здравствуйте. Очень заинтересовал ваш проект, будучи глубоко начинающим, пытаюсь его повторить)При компиляции скетча:
WiFi_SmartHome_cooler1:302: error: within this context within this context.
Ругается на содержимое функции DisplaySpecialChar, закоментировал содержание функции код откомпилировался, залил, теперь не происходит соединения с NTP сервером и время не отображается.
Connecting to: TP-LINK_/……
663
WiFi connect: 192.168.0.100/255.255.255.0/192.168.0.1
Open http://192.168.1.4 in your browser
Or by name: http://SmartHome_Cooler1.local
HTTP server started …
Starting UDP
Local port: 2390
Send NTP server 1.ru.pool.ntp.org 1.0.0.0
Sending NTP packet…
NTP server error
Get NTP time. Error = 1
Что делаю не правильно? подскажите если возможно. Заранее благодарен.
Похоже на то что не получен доступ к интернету
Хорошо, посмотрю, что с роутером. А что может быть по поводу отображения спецсимволов?
WiFi_SmartHome_cooler1:302: error: within this context within this context.
Это сообщение появляется при компиляции на каждую строку функции DisplaySpecialChar. Большое спасибо за оперативный ответ.
Попробуйте в начале программы добавить объявление функции
void DisplaySpecialChar(uint8_t BitAddr,int8_t SpecChar);
С подключением разобрался, спасибо. А функция DisplaySpecialChar работать так и не хочет( Поскажите, где скачать библиотеку TM1637, которая использована у вас (может быть дело в библиотеке). Спасибо.
Там в статье ссылка есть
https://github.com/reeedstudio/libraries/tree/master/DigitalTube
Разобрался, спасибо огромное)
Алексей, не могу скомпилировать… На 2-х компьютерах одинаковую ошибку выдает….
c:/users/„®¬/appdata/roaming/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libm.a(lib_a-w_sqrt.o):(.literal+0x8): undefined reference to
__ieee754_sqrt'
sqrt’:c:/users/„®¬/appdata/roaming/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libm.a(lib_a-w_sqrt.o): In function
d:\ivan\projects\arduinoesp\toolchain\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libm\math/../../../../../newlib/libm/math/w_sqrt.c:63: undefined reference to `__ieee754_sqrt’
collect2.exe: error: ld returned 1 exit status
Ошибка компиляции.
Может выложите готовую прошивку?
Только без функции выгрузки на сервер…
Спасибо.
Попробуйте версию 1.6.5 IDE
Прошивку выложу попозже. Сейчас допиливаю
Версия IDE — 1.6.5. ESP core пробовал несколько версий.
Я не понимаю откуда взялась последняя строка:
d:\ivan\projects\arduinoesp\toolchain\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libm\math/../../../../../newlib/libm/math/w_sqrt.c:63: undefined reference to `__ieee754_sqrt’
У меня никогда не было такой папки, в вашем проекте тоже не встречал….
Получилось, прошилось, работает.
Похоже причина была в том что я положил файлы проекта в директорию Ардуино,а надо было в папку из настроек.
По моему в 22-й строке файла WC_HTTP.cpp
WiFi.mode(WIFI_STA);
надо заменить на
WiFi.mode(WIFI_AP);
Или я не прав?
И следующая строка правильнее
WiFi.softAP(EC_Config.ESP_NAME, EC_Config.ESP_PASS);
раз уж есть в настройках пароль.
ЗЫ Спасибо, что делитесь исходниками с описанием.
В своих устройствах я поднимаю точку без пароля, так как этот режим служит только для конфигурирования.
Но в принципе вы правы, в защищенности лучше перебдеть чем недобдеть.
Здравствуйте, Алексей! Огромная Вам благодарность за проделанную работу и за то, что даете возможность воспользоваться Вашими трудами безвозмездно! Спасибо!
Собрал контроллер, заработал сразу. Но есть один вопрос. При отображении времени не мигают разделительные точки, при чем при циклической смене отображаемых параметров, точки в первом цикле горят постоянно, во втором не горят совсем и так далее при каждой смене. Возможно ли сделать, чтобы точки если не мигали, то хотя бы горели постоянно?
Выяснил, точки все-таки мигают, но с интервалом 7 секунд. Как можно это исправить?
На кнопку реагирует тоже не сразу, а после удержания ее примерно секунд 5..
К сожалению, когда ищет сеть или пытается соединиться с сервером — идет таймаут на все остальное. Скоро переведу весь свой умный дом на NQTT и опубликую результат
Спасибо за ответ! Сам уже понял свою ошибку. Изначально, так как не имею возможности и нужных знаний чтобы сделать отправку данных на сервер, я удалил данные из строк Интервал отправки 1,Интервал отправки 2,URL сервер. Оказалось, не нужно было оставлять строки Интервал отправки пустыми. Всё заработало как надо!
Наконец то дошли руки до Вашего проекта .
все собрал залил скетч .
Решил проверить на столе как реагирует датчик влажности.Показания были 36%
Решил на него подышать ипоказания изменились на дисплее показывает 01% а на вебстранице пишет Н=1.Вентилятор не включаетя но через пару минут он включился сам и пошел отсчет по таймеру
хочется видеть показания влажности от 0-100%
как это исправить?
Сейчас отлаживаю третью версию с интеграцией в умный дом
У предыдущего сдох сенсор DH11.
отличия хоть в чем?)) примерно? датчик какой будет в 3й версии
— Датчик AM2301
— Взаимодействие с умным домом Domoticz
— Изменен алгоритм включения вентилятора
— Добавлено программное подавление помех на кнопке
— Ну и на нормальной печатке все сделано
понятно. спасибо
У меня сейчас на ам2302 работает.
Алексей, подскажите, пожалуйста: на что влияет тактовая чистота чипа 80 и 160 МГц? Повысится ли частота ШИМ после увеличения тактовой частоты ESP8266 c 80 до 160 МГц?
Funny best dose for daily buying cialis in mercury drugs vessels are found to more evident and stressed.
Алексей, подскажите, где после компиляции и загрузки скетча хранятся настройки.Хочу прописать другую точку доступа. У меня проблемы с подключением по Веб интерфейсу, постоянно рвется соединение (плата Node MCU). Пару раз удалось подключиться и выставить свои настройки — больше не получается. Пытался менять настройки в библиотеках, которые находятся со скетчем. Но после прошивки все настройки остаются прежними. В мониторе порта все работает без ошибок.
Не могу скомпилить пишет:
WiFi_SmartHome_cooler1:46: error: ‘DHT11’ was not declared in this scope
WiFi_SmartHome_cooler1.ino: In function ‘void setup()’:
WiFi_SmartHome_cooler1:109: error: ‘class DHT’ has no member named ‘begin’
WiFi_SmartHome_cooler1.ino: In function ‘void loop()’:
WiFi_SmartHome_cooler1:219: error: ‘class DHT’ has no member named ‘readHumidity’
WiFi_SmartHome_cooler1:220: error: ‘class DHT’ has no member named ‘readTemperature’
Multiple libraries were found for «TM1637.h»
Used: C:\Users\Љ®¬ЇмовҐа\Documents\Arduino\libraries\TM1637
Not used: C:\arduino-1.6.5-r5\libraries\TM1637
‘DHT11’ was not declared in this scope
в чем может быть дело?
Автор на вопросы не отвечает.. ему пофиг.
Ну не то чтобы пофиг
Но с MQTT пока еще не закончил экспериментов. Сырой прошивкой не хочу делиться
Алексей, спасибо за ответы. Подскажите, а чем работа с MQTT будет отличаться от заливки данных на сервер? И когда можно будет увидеть последнюю версию Вашего скетча?
По поводу MQTT пока не уверен. Появилась проблема частой перезагрузки ESP во время приемки MQTT пакетов по подписке. С передачей проблем нет. Пока сделал промежуточную версию с HTTP но сервером DOMOTICZ. Финальная версия будет с сервером MAJORDOMO и скорее всего тем же HTTP или локальным BLYNK сервером.
Хотя руки чешутся выкинуть ESP и поставить NRF24L01
выходит ошибка компиляции. Где скачать такую библиотеку?
Arduino: 1.8.7 (Windows 7), Плата:»Generic ESP8266 Module, 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), ck, 26 MHz, 40MHz, DOUT (compatible), 512K (no SPIFFS), 2, nonos-sdk 2.2.1 (legacy), v2 Lower Memory, Disabled, None, Only Sketch, 115200″
WiFi_SmartHome_cooler1:22:23: error: WC_EEPROM.h: No such file or directory
compilation terminated.
exit status 1
WC_EEPROM.h: No such file or directory
Проверьте, что все файлы архива скетча находятся в том же каталоге что и *.ino
Разобрался. Они были в вашем проекте и их надо было скопировать в в папку где лежат библиотеки.
Не хочет компилировать. Текст ошибки:
WC_HTTP.cpp: In function ‘void WiFi_begin()’:
WC_HTTP.cpp:30: error: ambiguous overload for ‘operator!=’ (operand types are ‘IPAddress’ and ‘int’)
if( EC_Config.IP != 0 ){
К сожалению, разработчики поменяли тип переменной IPAddress
Будет работать строка
if( EC_Config.IP != IPAddress(0,0,0,0) )
или
if( EC_Config.IP[0] !=0 && EC_Config.IP[1] !=0 && EC_Config.IP[2] !=0 && EC_Config.IP[3] !=0 )
Можно откатиться на старую версию ESP8266 Core 2.4
Спасибо за совет. Откатил ESP8266 Core до 2.4, начало ругаться на пустые строки в DHT. Откатил DHT до версии 1.0.0 — все заработало.
Подскажите что и где нужно добавить, чтобы данные отсылать на народный мониторинг?
Сформировать строку по одному из предложенных народным мониторингом протоколов. Например, по тому же HTTP GET. На мониторинге есть подробное руководство по формату запроса
Приветствую
При проверочной компиляции выскакиевает ошибка
In file included from C:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground/Adafruit_CircuitPlayground.h:3:0,
from C:\WiFi_SmartHome_cooler1\WiFi_SmartHome_cooler1.ino:1:
C:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground/Adafruit_Circuit_Playground.h:114:3: error: ‘Adafruit_CPlay_FreeTouch’ does not name a type
Adafruit_CPlay_FreeTouch cap[7]; ///< the array of capacitive touch sensors
^
sketch\WC_HTTP.cpp: In function 'void WiFi_begin()':
WC_HTTP.cpp:30:24: error: ambiguous overload for 'operator!=' (operand types are 'IPAddress' and 'int')
if( EC_Config.IP != 0 ){
^
sketch\WC_HTTP.cpp:30:24: note: candidates are:
sketch\WC_HTTP.cpp:30:24: note: operator!=(uint32_t {aka unsigned int}, int)
sketch\WC_HTTP.cpp:30:24: note: operator!=(u32_t {aka long unsigned int}, int)
sketch\WC_HTTP.cpp:30:24: note: operator!=(int, int)
sketch\WC_HTTP.cpp:30:24: note: operator!=(const ip_addr_t* {aka const ip4_addr*}, const ip_addr_t* {aka const ip4_addr*})
sketch\WC_HTTP.cpp:30:24: note: operator!=(ip_addr_t* {aka ip4_addr*}, ip_addr_t* {aka ip4_addr*})
In file included from C:\Users\Oleh\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi\src/ESP8266WiFi.h:31:0,
from sketch\WC_HTTP.h:9,
from sketch\WC_HTTP.cpp:7:
C:\Users\Oleh\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/IPAddress.h:107:14: note: bool IPAddress::operator!=(const IPAddress&) const
bool operator!=(const IPAddress& addr) const {
^
C:\Users\Oleh\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/IPAddress.h:116:14: note: bool IPAddress::operator!=(uint32_t) const
bool operator!=(uint32_t addr) const {
^
C:\Users\Oleh\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/IPAddress.h:119:14: note: bool IPAddress::operator!=(u32_t) const
bool operator!=(u32_t addr) const {
Пробовал с IDE последней версии и 1.6.5. Ошибка одинаковая. Подозреваю, что-то не то «поправили» в библиотеках ESP. Вы какой версией пользовались? Сейчас актуальная 2.6.3.
Разобрался. Таки несоответствие синтаксиса версии коду.
Первый запуск произошел. Признаки жизни подает. Только не показывает температуру 0-1-2 нрадуса. Даже если дуть теплым воздухом.
Поставил DHT22. Может под него что-то править надо?
Да. В строке инициализации сенсора температуры заменить DHT11 на DHT22
Наткнулся еще на один баг. Если отключается электричество в доме — контроллер запускается быстрее, чем вафельный роутер. Вследствии чего остается висеть неподключенным к вафле. Как это побороть? Ресетить питанием неспортивно.
В последних версиях я использую библиотеку WiFiManager в которой решена эта и многие другие проблемы
То есть поменять используемую при компиляции вафельную библиотеку на WiFiManager?
Еще вопрос. Как будет термометр отображать отрицательную температуру?
WiFiManager только дополнительный прибамбас к стандартной библиотеке. Стандартная библиотека в виде бинарника собирается в проект и заменить ее сложно. Но никто не мешает делать проверки подключения WiFi. И, при необходимости, перезагрузка радиомодуля. Если не помогла — перезагрузка контроллера
Приветствую.
С библиотеками не стал заморачиваться. Проблему с подключением решил в лоб. Тупо поставил задержку на запуск, которая дает возможность точке доступа успеть стартовать после появления питания.
Но вопрос с отображением отрицательной температуры все равно остался. Не получается почему-то. То есть, у меня при минусе в помещении градусник показывает 1 градус.
Пытаюсь заменить датчик DHT на BME280. Убрал ненужный мне функционал, такой как индикатор, время, отправку данных на внешний сервер. Заменил библиотеки и соответствующие строки с запросом температуры и влажности, но почему-то после старта сервера идет постоянная перезагрузка контроллера.
Вот последние строки из консоли
HTTP server started …
Press button
Exception (28):
epc1=0x4020b7f4 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
>>>stack>>>
ctx: cont
sp: 3ffffdb0 end: 3fffffc0 offset: 0190
3fffff40: 4023e614 00000000 3ffefd64 00000000
3fffff50: 00a200a2 00a000a2 00a000a2 00a000a0
3fffff60: 00000000 3ffefd64 3ffefd94 4020b8dc
3fffff70: 4020e797 3ffefd64 3ffefd94 4020b960
3fffff80: 3fffdad0 3ffefd64 000008e9 40204811
3fffff90: 3fffdad0 00000000 3ffeffd4 3fff0120
3fffffa0: 3fffdad0 00000000 3fff00e0 4020dc70
3fffffb0: feefeffe feefeffe 3ffe84e4 40100ea9
<<<stack<<<
С чем это может быть связано?
Все, разобрался. Забыл прописать инициализацию датчика
Если вентилятор работает в автоматическом режиме то при необходимости выключить его кнопкой не получается. Точнее он выключается на несколько секунд и опять включается. Второй момент — при достижении заданного уровня влажности вентилятор тоже не выключается пока таймер не обнулится. Это так задумано?
Это старый алгоритм. В новом все переделал, но он на Atmegf328 + NRF24
http://samopal.pro/fancontroller3/
Да я уже этот код переделал. Включение не зависимо от освещения при превышении порога, выключается сразу при нормализации. Кнопкой можно приостановить работу вентилятора в любой момент или наоборот принудительно включить на интервал в 2 раза больше чем в автоматическом режиме.