
- Цена: $1.42
Разводка у меня сделана так, что сигнал с ресивера подмешивается в общий кабель (телемак md-105m), т.е. можно смотреть спутник из любой комнаты, но только тот канал, что включен на ресивере. Нужно было переключать каналы находясь в другой комнате.
Для этого в продаже имеются радиопульты, но ценник на них по моему мнению сильно завышен, да и таскать его с собой из комнаты в комнату неудобно.
В итоге был собран wi-fi пульт на ESP-07 и ардуино mini, управление со смартфона, ir диод с любого старого пульта или радиомагазина. Но с течением времени я начал забывать как я все это собрал))) Поэтому описываю процедуру, пока совсем не забыл:
esp прошиваем по старой инструкции с этого топика: mysku.ru/blog/aliexpress/37815.html
содержимое init.lua (автозапуск):
кавычки оставляем, в них пишем имя сети, пароль, ну и прочие настройки, если отличаются от 192.168.0.Х. Запомнить что назначили в wifi.sta.setip({ip=«192.168.0.77», т.к. потом этот адрес нужно будет указать в приложении смартфона:
wifi.setmode(wifi.STATION) wifi.sta.config("имясети","пароль") wifi.sta.connect() wifi.sta.setip({ip="192.168.0.77",netmask="255.255.252.0",gateway="192.168.0.1"}) print("ESP8266 mode is: " .. wifi.getmode()) print("The module MAC address is: " .. wifi.ap.getmac()) print("Config done, IP is "..wifi.sta.getip()) dofile ("main.lua")
содержимое main.lua (сам скетч esp):
srv=net.createServer(net.TCP) srv:listen(80,function(conn) conn:on("receive", function(client,request) local buf = ""; local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP"); if(method == nil)then _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP"); end local _GET = {} if (vars ~= nil)then for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do _GET[k] = v end end local _info,_up,_guide,_left,_ok,_right,_f,_down,_exit,_button1,_button2,_button3,_button4,_button5,_button6,_button7,_button8,_button9,_last,_button0,_mute,_menu,_mail,_on,_red,_green,_yellow,_blue = "","" if(_GET.pin == "ok")then _ok = " selected=true"; uart.write(0,"a"); end if(_GET.pin == "up")then _up = " selected=true"; uart.write(0,"b"); end if(_GET.pin == "left")then _left = " selected=true"; uart.write(0,"c"); end if(_GET.pin == "right")then _right = " selected=true"; uart.write(0,"d"); end if(_GET.pin == "down")then _down = " selected=true"; uart.write(0,"e"); end if(_GET.pin == "exit")then _exit = " selected=true"; uart.write(0,"f"); end if(_GET.pin == "info")then _info = " selected=true"; uart.write(0,"g"); end if(_GET.pin == "guide")then _guide = " selected=true"; uart.write(0,"h"); end if(_GET.pin == "f")then _f = " selected=true"; uart.write(0,"i"); end if(_GET.pin == "button1")then _button1 = " selected=true"; uart.write(0,"j"); end if(_GET.pin == "button2")then _button2 = " selected=true"; uart.write(0,"k"); end if(_GET.pin == "button3")then _button3 = " selected=true"; uart.write(0,"l"); end if(_GET.pin == "button4")then _button4 = " selected=true"; uart.write(0,"m"); end if(_GET.pin == "button5")then _button5 = " selected=true"; uart.write(0,"n"); end if(_GET.pin == "button6")then _button6 = " selected=true"; uart.write(0,"o"); end if(_GET.pin == "button7")then _button7 = " selected=true"; uart.write(0,"p"); end if(_GET.pin == "button8")then _button8 = " selected=true"; uart.write(0,"q"); end if(_GET.pin == "button9")then _button9 = " selected=true"; uart.write(0,"r"); end if(_GET.pin == "last")then _last = " selected=true"; uart.write(0,"s"); end if(_GET.pin == "button0")then _button0 = " selected=true"; uart.write(0,"t"); end if(_GET.pin == "menu")then _menu = " selected=true"; uart.write(0,"u"); end if(_GET.pin == "mute")then _mute = " selected=true"; uart.write(0,"v"); end if(_GET.pin == "mail")then _mail = " selected=true"; uart.write(0,"w"); end if(_GET.pin == "on")then _on = " selected=true"; uart.write(0,"x"); end if(_GET.pin == "red")then _red = " selected=true"; uart.write(0,"g"); end if(_GET.pin == "green")then _green = " selected=true"; uart.write(0,"y"); end if(_GET.pin == "yellow")then _yellow = " selected=true"; uart.write(0,"z"); end if(_GET.pin == "blue")then _blue = " selected=true"; uart.write(0,"]"); end client:send(buf); client:close(); collectgarbage(); end) end)
Если делаем своё приложение (см ниже), то кнопки обзываем в соответствии с родным пультом ресивера, каждой кнопке назначаем букву, цифру или символ в соответствии с таблицей:
a = 97
b = 98
c = 99
d = 100
e = 101
f = 102
g = 103
h = 104
i = 105
j = 106
k = 107
l = 108
m = 109
n = 110
o = 111
p = 112
q = 113
r = 114
s = 115
t = 116
u = 117
v = 118
w = 119
x = 120
y = 121
z = 122
0 = 48
1 = 49
2 = 50
3 = 51
4 = 52
5 = 53
6 = 54
7 = 55
8 = 56
9 = 57
‘ = 39
, = 44
— = 45
. = 46
/ = 47
: = 58
= = 61
[ = 91
= 92
] = 93
` = 96
В моём сделано для триколора gs9305 так (если команды устраивают, не важно для какого пульта, то можно оставлять как есть):
т.е. если esp видит нажатие кнопки «ok» на ардуинку отправляется «a», если нажимаем «up» — отправляется «b» и т.п., согласно таблице символов можно добавить свои.
Теперь надо прошить ардуино, скетч такой (нужны библиотеки IRremote.h и IRremoteInt.h):
#include <IRremote.h> #include <IRremoteInt.h> IRsend irsend; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { int x = Serial.read(); { if (x == 97) { irsend.sendNEC(0x8C837, 32); delay(40); } if (x == 98) { irsend.sendNEC(0x88877, 32); delay(40); } if (x == 99) { irsend.sendNEC(0x848B7, 32); delay(40); } if (x == 100) { irsend.sendNEC(0x828D7, 32); delay(40); } if (x == 101) { irsend.sendNEC(0x8A857, 32); delay(40); } if (x == 102) { irsend.sendNEC(0x86897, 32); delay(40); } if (x == 103) { irsend.sendNEC(0x838C7, 32); delay(40); } if (x == 104) { irsend.sendNEC(0x8D827, 32); delay(40); } if (x == 105) { irsend.sendNEC(0x8EA15, 32); delay(40); } if (x == 106) { irsend.sendNEC(0x8C03F, 32); delay(40); } if (x == 107) { irsend.sendNEC(0x820DF, 32); delay(40); } if (x == 108) { irsend.sendNEC(0x8A05F, 32); delay(40); } if (x == 109) { irsend.sendNEC(0x8609F, 32); delay(40); } if (x == 110) { irsend.sendNEC(0x8E01F, 32); delay(40); } if (x == 111) { irsend.sendNEC(0x810EF, 32); delay(40); } if (x == 112) { irsend.sendNEC(0x8906F, 32); delay(40); } if (x == 113) { irsend.sendNEC(0x850AF, 32); delay(40); } if (x == 114) { irsend.sendNEC(0x8D02F, 32); delay(40); } if (x == 115) { irsend.sendNEC(0x8827D, 32); delay(40); } if (x == 116) { irsend.sendNEC(0x830CF, 32); delay(40); } if (x == 117) { irsend.sendNEC(0x8708F, 32); delay(40); } if (x == 118) { irsend.sendNEC(0x818E7, 32); delay(40); } if (x == 119) { irsend.sendNEC(0x8BA45, 32); delay(40); } if (x == 120) { irsend.sendNEC(0x800FF, 32); delay(40); } if (x == 121) { irsend.sendNEC(0x8B847, 32); delay(40); } if (x == 122) { irsend.sendNEC(0x858A7, 32); delay(40); } if (x == 93) { irsend.sendNEC(0x87887, 32); delay(40); } } } }
т.е. согласно приведенным выше кей кодам, при отправке с esp кода «a» на ардуино приходит «97», при отправке с esp «b» на ардуино приходит «98» и т.д.
Управление с ir происходит с ардуино, esp нужна нам только для отправки команд.
Т.е. например строка скетча
irsend.sendNEC(0x8C837, 32);
просто эмулирует нажатие кнопки на пульте, где 8C837 — код кнопки пульта (если NEC протокол, про остальные протоколы в гугл, там все есть).
Как узнать код кнопок обсосано в гугле давным-давно.
не буду переписывать чужие статьи, дам ссылку для примера (запрос поиска «Универсальный пульт на Arduino»), нужен будет ir приемник, я использовал от старого dvd плеера, потом припаял его обратно):
Теперь о подключениях:
Соединяем uart дуины и есп так:
со стороны дуины — rx; со стороны esp — tx. Вторую пару не соединять!
Подключение ir led к дуине: "+" — на 3пин, землю — на землю.
tx ардуины не соединять с rx esp! иначе по каналу пойдет мусор!
Запихиваем все в корпус.
Ir диод размещаем в зоне приемника ресивера.
ESP с подложкой (5->3.3), питаем обе платы от сотовой зарядки на 5 вольт.
Теперь о приложении, делал я его в app inventor 2:
выкладываю как само приложение, так и исходник для экспорта, (lowresolution — для 3.5" телов), можно редактировать приложение под свой пульт (файл .aia).
После установки жмем на шестеренку, вводим ip из начала рассказа (192.168.0.77), потом «ок» и опять жмем шестеренку.
может за давностью лет что и забыл, пишите, поправлю.
p.s. про облачные сервисы (Blink и т.п.) не писать, ешьте их сами)
(c) 2017 Источник материала