Arduino Polska Forum
Sterowanie przez WWW - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Sterowanie przez WWW (/watek-sterowanie-przez-www)



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 Smile


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


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)