Sterowanie przez WWW - AlwaroAlwarez - 05-09-2016
Witajcie.
Mam napisany program do sterowania oświetleniem przy użyciu włączników dzwonkowych.
W przykładzie są 2 pomieszczenia gdzie po wciśnięciu przycisku można zapalić/zgasić światło i na wyświetlaczu LCD pojawi się aktualny stan.
Docelowo zależy mi na możliwości sterowania światłem zarówno przez włącznik dzwonkowy jak i przez stronę WWW.
Możecie podpowiedzieć jak zmodyfikować kod aby można dołożyć sterowanie przez serwer WWW.
Dodam, że teraz działam na ARDUINO UNO + ethernet schield.
Dotychczasowy działający kod.
Kod: #include <[color=#CC6600]Wire[/color].h>
#include <[color=#CC6600]LiquidCrystal_I2C[/color].h>
#include <[color=#CC6600]SPI[/color].h>
#include <[color=#CC6600]Ethernet[/color].h>
[color=#CC6600]byte[/color] mac[] = {0xEA,0xFE,0xED,0xED,0xAB,0xCD};
[color=#CC6600]byte[/color] ip[] = {192,168,6,26};
[color=#CC6600]EthernetServer[/color] server(80);
#define BACKLIGHT_PIN 3
[color=#CC6600]LiquidCrystal_I2C[/color] lcd(0x27, 2,1,0,4,5,6,7);
[color=#CC6600]int[/color] salon_button = 2;
[color=#CC6600]int[/color] salon_przekaznik=8;
[color=#CC6600]int[/color] kuchnia_button = 3;
[color=#CC6600]int[/color] kuchnia_przekaznik=9;
[color=#CC6600]boolean[/color] salon_last=[color=#006699]LOW[/color];
[color=#CC6600]boolean[/color] salon_now=[color=#006699]LOW[/color];
[color=#CC6600]boolean[/color] SalonON=[color=#CC6600]false[/color];
[color=#CC6600]boolean[/color] salon_stan;
[color=#CC6600]boolean[/color] kuchnia_last=[color=#006699]LOW[/color];
[color=#CC6600]boolean[/color] kuchnia_now=[color=#006699]LOW[/color];
[color=#CC6600]boolean[/color] KuchniaON=[color=#CC6600]false[/color];
[color=#CC6600]boolean[/color] kuchnia_stan;
[color=#CC6600]String[/color] ekran_gora;
[color=#CC6600]String[/color] ekran_dol_salon;
[color=#CC6600]String[/color] ekran_dol_kuchnia;
[color=#CC6600]void[/color] [color=#CC6600][b]setup[/b][/color] () {
[color=#CC6600]Ethernet[/color].[color=#CC6600]begin[/color](mac, ip);[color=#7E7E7E]//ethernet[/color]
server.[color=#CC6600]begin[/color]();[color=#7E7E7E]//ethernet[/color]
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]begin[/color](9600);[color=#7E7E7E]//ethernet[/color]
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]"Serwer wystartowal z IP: "[/color]);[color=#7E7E7E]//ethernet[/color]
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]([color=#CC6600]Ethernet[/color].[color=#CC6600]localIP[/color]());[color=#7E7E7E]//ethernet[/color]
[color=#CC6600]pinMode[/color] (salon_button, [color=#006699]INPUT_PULLUP[/color]);
[color=#CC6600]pinMode[/color] (salon_przekaznik, [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color] (kuchnia_button, [color=#006699]INPUT_PULLUP[/color]);
[color=#CC6600]pinMode[/color] (kuchnia_przekaznik, [color=#006699]OUTPUT[/color]);
lcd.[color=#CC6600]begin[/color](16,2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight([color=#006699]HIGH[/color]);
}
[color=#CC6600]void[/color] [color=#CC6600][b]loop[/b][/color] () {
salon_now = [color=#CC6600]digitalRead[/color](salon_button);
kuchnia_now = [color=#CC6600]digitalRead[/color](kuchnia_button);
[color=#CC6600]if[/color] (salon_last==[color=#006699]LOW[/color] && salon_now == [color=#006699]HIGH[/color])
{
SalonON = !SalonON;
}
[color=#CC6600]if[/color] (kuchnia_last==[color=#006699]LOW[/color] && kuchnia_now == [color=#006699]HIGH[/color])
{
KuchniaON = !KuchniaON;
}
salon_last=salon_now;
kuchnia_last=kuchnia_now;
[color=#CC6600]if[/color] (SalonON == 1)
{
ekran_gora = [color=#006699]"Salon Kuchnia"[/color];
ekran_dol_salon = [color=#006699]"wl. "[/color];
salon_stan == [color=#006699]HIGH[/color];
}
[color=#CC6600]if[/color] (SalonON == 0)
{
ekran_gora = [color=#006699]"Salon Kuchnia"[/color];
ekran_dol_salon = [color=#006699]"wyl."[/color];
salon_stan == [color=#006699]LOW[/color];
}
[color=#CC6600]if[/color] (KuchniaON == 1)
{
ekran_gora = [color=#006699]"Salon Kuchnia"[/color];
ekran_dol_kuchnia = [color=#006699]"wl. "[/color];
kuchnia_stan == [color=#006699]HIGH[/color];
}
[color=#CC6600]if[/color] (KuchniaON == 0)
{
ekran_gora = [color=#006699]"Salon Kuchnia"[/color];
ekran_dol_kuchnia = [color=#006699]"wyl."[/color];
kuchnia_stan == [color=#006699]LOW[/color];
}
lcd.[color=#CC6600]setCursor[/color] ( 0, 0 );
lcd.[color=#CC6600]print[/color](ekran_gora);
lcd.[color=#CC6600]setCursor[/color] ( 2, 1 );
lcd.[color=#CC6600]print[/color](ekran_dol_salon);
lcd.[color=#CC6600]setCursor[/color] ( 11, 1 );
lcd.[color=#CC6600]print[/color](ekran_dol_kuchnia);
[color=#CC6600]digitalWrite[/color] (salon_przekaznik, SalonON);
[color=#CC6600]digitalWrite[/color] (kuchnia_przekaznik, KuchniaON);
}
RE: Sterowanie przez WWW - krn78 - 03-11-2016
Wydaje mi się, że powinieneś postawić sobie bazę np. mySQL), do któej będziesz się podłączał zarówno za pomocą www (zmieniał wartości pól), jak i za pomocą Arduino (odczytywał wartości pól).
Potem, za pomocą Arduino, przypisujesz wartości odczytanych pól do zmiennych (choćby KuchniaON), i prawie cały kod pozostaje bez zmian
RE: Sterowanie przez WWW - AlwaroAlwarez - 25-11-2016
(03-11-2016, 15:10)krn78 napisał(a): Wydaje mi się, że powinieneś postawić sobie bazę np. mySQL), do któej będziesz się podłączał zarówno za pomocą www (zmieniał wartości pól), jak i za pomocą Arduino (odczytywał wartości pól).
Potem, za pomocą Arduino, przypisujesz wartości odczytanych pól do zmiennych (choćby KuchniaON), i prawie cały kod pozostaje bez zmian
Zapis do mySQL z Arduino to potrafię zrobić ale o odczycie to niestety nic w necie nie znalazłem.
Możecie podać jakiś przykład odczytu danych z mySQL w Arduino?
Pozdrawiam
Zapisz
RE: Sterowanie przez WWW - xblack - 26-11-2016
Hmmm jakiego protokołu używasz do komunikacji, osobiście polecam UDP jako tako że jest lżejszy co przekłada się na szybszą reakcje Arduino na polecenia wydawane przez www.
Dodatkowo odradzał bym integracje MySQL wedlug mnie jest to niepotrzebne, zamiast tego na stronce dodal bym dynamiczne wczytywanie stanu przycisku np przez jQuery (pozwala na wysyłanie requestów UDP, + nie potrzebujesz backendu)
|