Arduino Polska Forum

Pełna wersja: Sterowanie przez WWW
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
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);

}
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 Smile
(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 Smile

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
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)