управление кондиционером через интернет (IR Led + ENC28J60)
- Войдите на сайт для отправки комментариев
Добрый вечер.
Уже больше месяца бьюсь над одной проблемой (конечно время самой проблеме(увлечению) уделяю не так много, как хотелось бы, но пополнение в семействе важнее
Есть у меня мысль, соорудить устройство для управления кондиционером через интернет.
Для этого у меня есть arduino mini, ENC28J60, IR Led ну и остальные плюшки, которые сейчас не так важны.
Нашел интересные примеры для работы с ENC28J60 и больше всего, для тестирования, мне подходит пример номер 7
Сам код:
#include <EtherCard.h> static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01}; static byte myip[] = {192,168,1,2}; byte Ethernet::buffer[700]; const int ledPin = 2; boolean ledStatus; char* on = "ON"; char* off = "OFF"; char* statusLabel; char* buttonLabel; void setup () { Serial.begin(57600); Serial.println("WebLed Demo"); if (!ether.begin(sizeof Ethernet::buffer, mymac, 10)) Serial.println( "Failed to access Ethernet controller"); else Serial.println("Ethernet controller initialized"); if (!ether.staticSetup(myip)) Serial.println("Failed to set IP address"); Serial.println(); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); ledStatus = false; } void loop() { word len = ether.packetReceive(); word pos = ether.packetLoop(len); if(pos) { if(strstr((char *)Ethernet::buffer + pos, "GET /?status=ON") != 0) { Serial.println("Received ON command"); ledStatus = true; } if(strstr((char *)Ethernet::buffer + pos, "GET /?status=OFF") != 0) { Serial.println("Received OFF command"); ledStatus = false; } if(ledStatus) { digitalWrite(ledPin, HIGH); statusLabel = on; buttonLabel = off; } else { digitalWrite(ledPin, LOW); statusLabel = off; buttonLabel = on; } BufferFiller bfill = ether.tcpOffset(); bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n" "<html><head><title>WebLed</title></head>" "<body>LED Status: $S " "<a href=\"/?status=$S\"><input type=\"button\" value=\"$S\"></a>" "</body></html>" ), statusLabel, buttonLabel, buttonLabel); ether.httpServerReply(bfill.position()); } }
И что же я хочу получить ( но у самого не выходит аленький цветок, сколько бы книжек и форумов я не прочитал)
При включении диода через интернет, отправляется команда кондиционеру на включение, при выключении светодиода выключение.
Из примера на ХАБРЕ я разобрался с кодами для управления моего кондиционера, привел их в нужный вид (они работаю, кондер на них реагирует)
unsigned int AcOff[228] = {3750,1400,600,1150,600,1150,550,500,550,450,550,500,550,1150,600,450,550,450,550,1200,550,1200,550,450,550,1200,550,500,550,450,550,1200,550,1150,600,450,550,1200,550,1150,600,450,550,450,600,1150,550,500,550,500,500,1200,550,450,600,450,550,450,550,500,550,450,550,500,550,500,500,500,550,450,550,500,550,450,550,500,550,450,550,500,550,450,550,500,550,450,550,450,600,450,550,450,600,1150,550,500,550,450,550,500,550,450,550,500,550,1150,550,500,550,500,500,500,550,450,550,1200,550,1200,550,1150,600,450,550,500,550,450,550,450,600,450,550,1200,550,450,550,1200,550,1200,550,450,550,1200,550,450,600,450,550,450,600,450,550,450,550,500,550,500,500,500,550,450,550,500,550,450,550,500,550,450,550,450,600,450,550,450,600,450,550,450,600,1150,550,500,550,450,550,500,550,450,550,450,600,450,550,450,600,450,550,450,600,1150,550,500,550,450,550,450,600,450,550,500,550,450,550,1200,550,1150,600,450,550,1200,550,1150,600,1150,550,500,500}; unsigned int AcAutoOn[228] = {3800,1400,550,1200,550,1200,550,450,550,500,550,450,550,1200,550,450,600,450,550,1200,550,1150,600,450,550,1200,550,500,500,500,550,1150,600,1150,550,500,550,1150,600,1150,550,500,550,500,500,1200,550,450,600,450,550,1200,550,450,550,500,550,450,550,450,600,450,550,450,600,450,550,450,600,450,550,450,600,450,550,500,500,500,550,450,550,500,550,450,550,500,550,1150,600,450,550,450,600,1150,550,500,550,450,550,500,550,450,550,450,600,1150,550,500,550,450,550,500,550,450,550,1200,550,1200,550,1150,600,450,550,500,550,450,550,450,600,450,550,1200,550,450,550,1200,550,1200,550,450,550,1200,550,450,600,450,550,500,500,500,550,450,550,500,550,450,550,500,550,450,550,450,600,450,550,500,550,450,550,450,600,450,550,500,550,450,550,450,600,1150,550,500,550,450,550,450,600,450,550,450,600,450,550,500,550,450,550,450,600,1150,550,500,550,450,550,500,550,450,550,450,600,450,550,1200,550,450,550,1200,550,1200,550,1150,600,1150,550,500,500};
Это команды включения в автоматическом режиме и выключения кондея.
Так как мне заставить, что бы мой IR диод отправлял команды при включении и выключении диода.
Натолкните на мысль, буду весьма признателен.
1. добавьте после 33 строки две функции
void ConditionerON()
{
...
}
void ConditionerOFF()
{
...
}
2. Добавьте после 55 строки
ConditionerON();
3. Добавьте после 59 строки
ConditionerOFF();
Я понял так,
Где-то, возможно в очень далекой галактике, мигает диод... Ардуино каким то мистическим образом узнает что диод включился и дает по инету команду кондиционеру включиться..
Мистика и колдовство.. может кровь дракона была просрочена?
Спасибо за ответ. Постараюсь на днях проверить, отпишусь.
Насколько смог использовал ваши рекомендации. В програмировании слаб, думаю я накосячил.
Мой вариант:
Web страница зависает и не меняет статус диода
Парни, после очередного, длительного мозгового штурма, пришел к такому варианту
1 вариант (рабочий) тестировал отправку команды при нажатии и отжатии кнопки с включением и отключением подсветки дисплея
Но меня больше интересует вопрос отправки команды через интернет.
Пытаюсь зацепиться к такому варианту, но при этом страница зависает и нет реакции, в чем может быть проблема?
Для доступа через интернет необходимо пробрасывать порт веб сервера наружу , желательно не на стандартный 80 порт. А так же в скетче в параметрах должен быть указан шлюз - ип адрес роутера..
Проблема совсем в другом.
при добавке моего кода
078
}
079
AcControl(ledPin);
080
}
081
void
AcControl(
int
b_s){
082
int
status = 0;
083
if
(b_s == HIGH){
084
status = 1;
085
}
086
if
(b_s == LOW){
087
status = 2;
088
}
089
if
(status != ac_status) {
090
ac_status = status;
091
{
092
if
(status == 1) {
093
irsend.sendRaw(AcAutoOn,228,38);
094
delay (40);
095
}
096
if
(status == 2){
097
irsend.sendRaw(AcOff,228,38);
098
delay (40);
099
}
100
}
101
}
102
}
web страница зависает. Без моего кода скетч работает верно и зависаний нет
Добрый день. Для информации, если интересно.
Я использую для управления кондиционером устройство UniPing v3 http://www.netping.ru/products/uniping-v3. К UniPing v3 подключил модуль IRC-TR v2 http://www.netping.ru/products/netping-IRC-TR-v2 для дистанционного управления устройством с инфракрасным интерфейсом по сети TCP/IP (web, SNMP).
Устройство работает стабильно, нареканий нет.
Цены на сайте актуальные? Как-то неожиданно недорого...