»Начало 
esp8266 и управление на климатик по IR


esp8266 и управление на климатик по IR

14/02/2015, 4 коментара

След като преди време направих управление на климатика си вкъщи, дойде ред и на климатика в офиса. Той е от световно известната марка Chunlan и информация относно IR протокола аз поне не намерих, но затова по-късно.

Първоначално реших, че може да направя нещо просто - например отново с lirc и да ползвам "сървъра", който е включен в офиса. След това обаче на хоризонта се появи мъника esp8266 ... и разбира се защо пък да не пробвам да ползвам него.

Можете да си намерите всякакви модулчета на цени от около 2-3-5 долара. Вероятно щяха да свършат работа, но тъй като не съм кой знае какъв голям фен на запояването и електрониката като цяло предпочетох да си купя ей това чудо от Олимекс - MOD-WIFI-ESP8266-DEV. Общо взето всичко, което може да бъде изведено го имате изведено и остава просто да си закачите каквото и където искате.

За да си управлявате климатика обаче няма нужда от кой знае какво. Стига ви един GPIO пин. Ако обаче искате да закачите още нещо, то с модулите, които се продават като WIFI-COM ще ви трябва доста стабилна ръка за да изведете други пинове.

И така задачата беше ясна. Остана реализацията. Доста хора се ограничават просто до използването на esp8266 като wireless модул за връзка към ... например arduino. Този подход разбира се е доста по-лесен, защото има готови библиотеки за IR например. Това обаче означава, че ще ви трябва arduino или клонинг, още няколко левчета и ... още запояване, платки ... esp8266 обаче може да прави доста неща. Проблемът обаче е, че е добре да прочетете какво точно можете да очаквате, а не да се хвърляте с главата напред например (като мен), защото в описанието на esp8266 пише: PWM.

Схемата на свързване не е по-различна от схемата, която използвам за управлението у нас. В случая използвам само частта за изпращане. Аз използвам пин 22 (GPIO4).

И тук ударих на камък. Оказа се, че esp8266 има PWM. Само, че е софтуерен. И ограничен. На 500Hz. Моето дистанционно на климатика обаче ползва 38 KHz. Простото премахване на ограничението в pwm.c не даде резултат и на пина просто не се появи нищо. Звучи странно при положение, че esp8266 работи на 80 MHz да не можете да изкарате 38 KHz, но явно това би изисквало доста ресурс за да бъде ограничено до само 500Hz.

От друга страна обаче нищо не ви пречи да си цъкате пина нагоре надолу колкото пъти искате. Още повече, че като идея IR управленията позволяват доста голяма грешка. Не забелязах голяма разлика ако спирам или не спирам прекъсванията докато пращам, но за всеки случай в кода ги забранявам. Получи се една не много красива функция, но пък работи.

Самия протокол на климатика е доста прост. В протокола на Дайкин-а имаше три паузи и чексуми, докато в китайското чудо Chunlan няма нищо подобно. Можете да получите цялата информация много лесно, като ползвате mode2 от lirc. Дистанционното праща общо 9 байта, но интересни са само първите 3. Байт едно съдържа информация за включването и изключването, както и за режима. В байт две се намира температурата. Байт три е за режима на вентилатора и клапата. Останалите байтове са за часовника и таймерите, които така и не успях да настроя от самото дистанционно. Явно не е за моята глава, пък и на кого му трябват?

И така описанието:

 0 \ 11 Heat | 00 Cool
 1 / 10 Dry
 2
 3 - 1 On | 0 Off
 4
 5
 6
 7

 8 | Temp 9
 9 |
10 |
11 |
12 |
13 |
14
15

16 \ 00 Fan auto | 01 Fan 2
17 / 11 Fan 1    | 10 Fan 3
18
19 - Vane
20
21
22
23

Необозначените битове са нули.

Към температурата се добавя 9.

Лично аз използвам този шаблон:

000000000000000000000000001001001110000000000000000000000000000000110000

в който установявам съответните битове в 0 или 1, според това което искам.

След като можех да пращам сигналите към климатика и съответно да го управлявам дойде ред и на интерфейса.

Както знаете за esp8266 съществува esp-httpd. Първоначално не разполагаше с HTTP Authentication, но после се сдоби с Basic. WEB сървъра разполага с поддръжка на CGI така, че няма никакъв проблем да се направи "шарен" и "модерен" интерфейс. Аз ползвам jQuery и jQuery Mobile, но поради ограничените ресурси ги зареждам от Google Hosted Libraries.

Ето и как изглежда WEB интерфейса:



WEB интерфейса е хубаво нещо, но пък е още по-добре, че можете да направите esp8266 да говори mqtt. У нас ползвам Мosquitto заедно с Node-Red. За да е по-весело можете да "закачите" няколко Mosquitto-та и да си пращате съобщения между тях. Затова в офиса се появи още едно Mosquitto и така съобщенията си пътуват напред-назад :)

Има няколко налични библиотеки за mqtt, но аз ползвам ето тази: https://github.com/tuanpmt/esp_mqtt

Текущите настройки в JSON формат се получават по HTTP така:

curl -u user:pass http://ip.address/load.tpl
{"power":"on","mode":"heat","temp":"18","fan":"3","swing":"off","dht_temp":"2000","dht_humid":"3900"}

Можете да промените настройките по HTTP така:

curl -u user:pass http://ip.address/save.cgi?power=on&mode=heat
ОК

Почти същото важи и за mqtt:
Ако изпратите settings на /office/service/ac ще получите на /office/service/ac/settings:

{"power":"on","mode":"heat","temp":"18","fan":"3","swing":"off","dht_temp":"2000","dht_humid":"3900"}

За да промените настройките по mqtt просто изпратете в JSON:

{"power":"on"}
или
{"temp":"22","fan":"3"}
или
...

Както и по HTTP така и по mqtt можете да пращате една или повече настройки.

При промяна на някоя настройка независимо дали по HTTP или по mqtt ще получите на /office/service/ac/settings новите настройки.

Настройките се записват и не се губят при рестартиране на esp8266.

Валидните настройки са:

power: on/off
mode: heat/cool
temp: 15-30
fan: 1/2/3/auto
swing: on/off

След като имате изведени всички пинове на esp8266 спокойно можете да закачите DHT22 и да си отчитате температурата и влажността. Ако не държите толкова на точността, то можете да ползвате и DHT11, което е малко по-орязана версия и доста по-евтина, и аз ползвам именно DHT11. Използвам пин 20 (GPIO2).

Ето и как изглежда цялото "нещо":

   



Изходния код, който движи желязото е тук: http://jeckyll.net/images/JeckyllNet/esp8266_ac/automation.tgz



Коментари


Здрасти.
Публикуван на: 13/07/2015 20:07
Автор: Stefan stef_ok_at_abv.bg

Чудесен проект.Амо може да ми разясниш малко повече.Малко съм нов с това ESP8266 и затова да питам.Има ли предварително някъкъв фърмуер качен на ЕСП-то(modemcu или друг).Кода от линка по-горе с какво се компилира и с какво се качва съответно.Понеже пробвах да направя нещо подобно но ударих на камък заради това че първо няма хардуерен шим и срещнах проблем да изгенерирам 38 кхц с delay().Става въпрос за daikin ама с по-различен от този от предните ти статии.Мерси предварително.
Публикуван на: 14/07/2015 13:07
Автор: drJeckyll drJeckyll_at_Jeckyll.net

Честно казано не помня какво има качено, но така или иначе се флаши наново та не е болка за умиране и да има.

Сетваш си първо toolchain-а, SDK-то и просто компилираш и флашваш след това. Подробно обяснения можеш да намериш на http://www.esp8266.com/

Дайкина ще бъде по-труден, защото командата му е по-дълга.

Сега виждам, че вече има библиотека за IR - https://github.com/sh4d0w12/esp8266_IRremote
AC not listed
Публикуван на: 22/10/2018 18:10
Автор: John atuxnull_at_gmail.com

HI. really nice tutorial. i would like to build my own for my AC. the problem is that my AC is not listed. How do i find the codes? Also may i have the build of materials? What hardware have you used apart from an ESP8266?
Публикуван на: 25/10/2018 08:10
Автор: drJeckyll drJeckyll_at_Jeckyll.net

You must decode protocol by yourself. It's not hard:
http://www.jeckyll.net/?step=module_action&modname=news&lang=2&modstep=news_details&news_id=167&cat=201&subcat=201

But if you google around it may find protocol already decoded.

напиши нов коментар
Какво е това?

Това трябва да бъде нещо като микро блог или просто начин да записвам разни кратки мисли, идеи, линкове и т.н.

Към всеки пост може да има "закачени" следните елементи:

  Линк към страница
  Прикачена картинка
  Прикачен видео файл
Показва времето на публикуването, заедно с линк към страницата с поста и коментарите
2.4HGz OFF / 5GHz Only ON
bye bye Debian ... apt-get dist-upgrade може да деинсталира ядро :) E ... крайно време беше да го разкарам това недоразумение :)
drWEB Live CD е Gentoo базирано - well done!
Като едно време ... 3.11

Linux notebook 3.11.0-gentoo-dr #1 SMP PREEMPT Tue Sep 3 22:17:44 EEST 2013 i686 Intel(R) Core(TM)2 CPU T7200 @ 2.00GHz GenuineIntel
вчера 3.6.4, днеска 3.6.5 ... така е то ...
не искам глупави thumbail-и от firefox ПЪК! browser.pagethumbnails.capturing_disabled = true
... напоследък дори журналистите имат проблем с разбиране на написаното ...
Мързи ме да напиша около 20 реда код вече ... 10 дни ...
noteX31 ~ # uptime
23:12:42 up 1016 days, 14:39, 2 users, load average: 1.45, 0.64, 0.24
4:30 поздрава за всички, които отърваха Ugly Kid Joe :P
нЕкви хора си правят нЕкъв PR ... и разказват, че станали жертви ...
noteX31 ~ # uptime
10:36:05 up 939 days, 2:03, 4 users, load average: 0.11, 0.66, 0.52
... като не си гледаш разните странни E-Mail-и като например hostmaster@... ти изтича SSL сертификата ...
stretch
stretch
stretch
stretch
interoffice
interoffice
interoffice
interoffice