• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterowanie przez WWW
#1
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);

}
 
Odpowiedź
#2
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
 
Odpowiedź
#3
(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
 
Odpowiedź
#4
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)
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości