»Начало 
Raspberry Pi и LIRC с екстри


Raspberry Pi и LIRC с екстри

10/12/2013, 2 коментара

Задачата на Pi номер 2 е да управлява разни нещица, като TV, климатик, лампи и т.н. и тъй като всички те работят с IR дистанционни, то решението се нарича LIRC - Linux Infrared Remote Control.

Инсталацията на LIRC в Raspbian Wheezy е абсолютно тривиална:

apt-get install lirc

В /etc/modules добавяте:

lirc_dev
lirc_rpi gpio_in_pin=17 gpio_out_pin=22

gpio_in_pin и gpio_out_pin са всъщност номерата на GPIO портовете, а не pin-овете на конектора! Можете да ползвате произволни, но поне за rev2 на Pi не ползвайте 27, защото lirc_rpi не познава този номер а номера от rev1, който е 21 и съответно реве.

Хардуера също не е нещо особено. Схемата, компонентите и всичко необходимо можете да намерите тук: http://alexba.in/blog/2013/06/08/open-source-universal-remote-parts-and-pictures/

Общо взето трябват ви един NPN транзистор, два IR светодиода (може и един, но трябва да добавите съпротивление на мястото на другия, пък и ако имате два можете да ги насочите в различни посоки), един резистор 10K и един IR приемник. Общата сума е сигурно под 10 лева.

Лично аз ползвам за транзистор P2N2222AG, IR светодиодите ми са L-53F3BT а IR приемника ми е TSOP32338SS1V, който бях поръчал по погрешка. По параметри е сходен с TSOP38238, но са разменени краката на захранването и масата.

Как изглежда творението:



Има малко компоненти в повече, но за това ще пиша някой друг път.

Наложи ми се да презапоявам всичко, защото пробната платка имаше слети писти по края си ... не ме питайте защото са изобщо там, но пък правеха много хубаво късо :) В крайна сметка всичко тръгна и нямаше нито един изгорял компонент, нито пък изгорял GPIО порт на Pi-to!

В заглавието пише екстри. Причината е, че нормалните дистанционни могат лесно да бъдат "записани" от LIRC. Това става с командата:

irrecord -d /dev/lirc0 --disable-namespace

disable-namespace ще ви даде свобода да си именувате копчетата, както на вас ви харесва, а не според някакви стандарти.

И така стигаме до екстрите. Опита да се "научи" LIRC да си говори с дистанционното на климатика ми Daikin се оказаха не толкова успешни.

Причината за това е, че дистанционното не праща просто една команда, както правят например дистанционните на телевизорите, а изпраща цялата информация - температура, настройка на вентилатор, режим та даже и таймерите!

Това означава, че всеки път когато се натисне клавиш от дистанционното на климатика се изготвя код, който съдържа цялата нужна информация и се изпраща. А това пък означава, че ако решите да "записвате" командите ще имате доста на брой комбинации, което пък си е жива хамалогия.

За разкодирането и самия код, който говори климатика ще пиша друг път.

Сега проблема беше, че по някакъв начин трябваше да накарам LIRC да праща код, който аз външно ще генерирам.

Решението се нарича patch за LIRC за да може да изпраща CCF сигнали - http://www.harctoolbox.org/lirc_ccf.html

Въпросният patch добавя SEND_CCF_ONCE към irsend. По този начин можете да пращате какъвто искате код с една проста команда.

irsend SEND_CCF_ONCE 0000 006C 0022 0002 015B 00AD 0016 0016 0016 0041 0016 0016 0016 0041 0016 ...

До тук добре ще си кажете, но как да patch-нем lirc-а от Rasbian Wheezy, така че да не се занимаваме с теглене на изходен код, търсене на същите опции с които е компилиран т.н. Ето как:

Добавяте в /etc/apt/sources.list следното:

deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
deb-src http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi

След това правим:

apt-get update
apt-get upgrade

След това е време за същинската част:

apt-get -b source lirc

Изчаквате, докато започне компилацията и натискате Ctrl C за да я спрете. Спокойно ... все пак трябва да patch-нем LIRC нали?

И така теглим patch-a:

wget http://www.harctoolbox.org/downloads/ccf_patch_lirc-0.9.0.diff

Тук някъде аз трябваше да редактирам patch-a, защото се оказа, че буфера, който е заложен е малък за командата, която пращам към климатика. Две са промените - на ред 164 има:

#define PACKET_SIZE 1000

Просто го смених на 5000, защото не ми се смяташе колкото точно ще ми трябва.

Втората промяна е на ред 193

#define PACKET_SIZE 1024

Отново го направих на 5000.

Patch-ваме

cd lirc-0.9.0~pre1 (или версията, която имате)
patch -p1 <../ccf_patch_lirc-0.9.0.diff
cd ..

Сега повтаряме:

apt-get -b source lirc

След известно време компилацията ще приключи и е време да инсталирате двата готови пакета.

dpkg -i lirc_0.9.0~pre1-1_armhf.deb liblircclient0_0.9.0~pre1-1_armhf.deb

Това е :) Стартирате LIRC и сте вие ...

След тази операция поне при мен apt настояваше да си слага бинарната версия при всеки upgrade. Затова създавате файл lirc в /etc/apt/preferences.d със следното съдържание:

Package: lirc
Pin: release n=precise
Pin-Priority: -1

След това apt-get upgrade спря да настоява да сменя пакета :)

Май това е за сега ...


Коментари


Lirc patch
Публикуван на: 07/02/2015 18:02
Автор: MiKe

Helllo,
I want to use use your Daikin solution, but I have a problem with the Lirc patch. I have followed your steps, but when i use the irsend SEND_CCF_ONCE 0000 0022 0002 ... I get the following error message:
irsend: command failed: SEND_CCF_ONCE 0000 0022
irsend: Can only handle CCF codes of type 0000.
Can you please help me?
best regards
MiKe
Публикуван на: 12/02/2015 17:02
Автор: drJeckyll drJeckyll_at_Jeckyll.net

Can you post/send me whole command? May be you are missing some code in header?
You need 0000 first. Then you need to specify frequency (use 006C for 38kHz). Then you need to specify number of pulses. Then number of repeats (0001). And then to put command.

See here: http://f-e-n.net/u9

Here is PHP class to make your life easy: http://www.jeckyll.net/images/JeckyllNet/daikin/daikin.php.gz

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

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

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

  Линк към страница
  Прикачена картинка
  Прикачен видео файл
Показва времето на публикуването, заедно с линк към страницата с поста и коментарите
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