3. Sterowanie modułem (diodą) przez Wi-Fi (Access Point)
Założenie mamy następujące. Mamy dwie diody podłączone do ESP8266 i chcemy nimi sterować- włączać i wyłączać. Przejdźmy zatem do kodu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
--konfgiturujemy diody led1 = 3 led2 = 4 gpio.mode(led1, gpio.OUTPUT) gpio.mode(led2, gpio.OUTPUT) --konfiguracja Wi-Fi cfg={} cfg.ssid="NodeServer" cfg.pwd="feriarlab" wifi.ap.config(cfg) cfgip={} cfgip.ip="192.168.1.1"; cfgip.netmask="255.255.255.0"; cfgip.gateway="192.168.1.1"; wifi.ap.setip(cfgip); wifi.setmode(wifi.SOFTAP) --konfiguracja polaczenia srv=net.createServer(net.TCP) srv:listen(80,function(conn) conn:on("receive", function(client,request) local buf = ""; --sprawdzenie czy w adresie strony znajduje sie znaczenik- adres?komenda local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP"); if(method == nil)then _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP"); end local _GET = {} --jezeli vars jest rozne od nil to osadz komende w adresie po = if (vars ~= nil)then for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do --przypisz zmiennej _GET odczyt nadanej komendy _GET[k] = v end end --utwórz interfejs WWW buf = buf.."<h1> ESP8266 Zapalnik diody</h1>"; buf = buf.."<p>Dioda 1 <a href=\"?pin=ON1\"><button>Wlacz</button></a> <a href=\"?pin=OFF1\"><button>Wylacz</button></a></p>"; buf = buf.."<p>Dioda 2 <a href=\"?pin=ON2\"><button>Wlacz</button></a> <a href=\"?pin=OFF2\"><button>Wylacz</button></a></p>"; local _on,_off = "","" --jezeli komenda ON1 to zapal diode 1 itd. if(_GET.pin == "ON1")then gpio.write(led1, gpio.LOW); elseif(_GET.pin == "OFF1")then gpio.write(led1, gpio.HIGH); elseif(_GET.pin == "ON2")then gpio.write(led2, gpio.LOW); elseif(_GET.pin == "OFF2")then gpio.write(led2, gpio.HIGH); end --wyslij na serwer i zamknij polaczenie client:send(buf); client:close(); collectgarbage(); end) end) |
Na początku konfigurujemy pin 3 i 4 jako wyjścia i przypisujemy im aliasy- odpowiednio led1 i led2 Następnie konfigurujemy połączenie jako Access Point i nadajemy mu stały adres IP, żeby potem nie szukać. Teraz konfigurujemy połączenie, ustawiamy je jako receive i zaczynamy teraz zabawę :) definiujemy zmienną lokalną buf jako string, do której będzie zapisany jakby nasz interfejs WWW. Następnie w adresie dostępu do naszego modułu sprawdzamy czy znajduje się znacznik w postaci adres?komenda. Jest to tak zrealizowane, że przy wciśnięciu przycisku w interfejsie zostaniemy jakby odesłani do nowej strony, tzn. zmieni się nam adres i będzie on np. w takiej postaci:
http://192.168.1.1/?pin=komenda
Następnie tworzona jest nowa zmienna lokalna _GET, w której będzie przechowywana komenda. Teraz jest wykonywane sprawdzenie, czy do tej zmiennej coś zostało zapisane (czy jest różna od nil). Jeżeli warunek jest spełniony to są tworzone dwie zmienne k i v do których zapisywane są każde znalezione słowa (%w+), a następnie umieszczane w zmiennej w postaci _GET[k] = v
gdzie zmienna k zawsze będzie mieć wartość pin, a v to będzie komenda, czyli np. ON1, ON2, OFF1, OFF2.
Teraz tworzony jest nasz interfejs WWW oraz poniżej jest sprawdzane, czy jakiś warunek został spełniony- czy jakaś komenda została zwrócona. Na samym końcu dane są wystawiane na serwer oraz połączenie jest zamykane.
4. Podsumowanie
Po tej części kursu stworzenie własnego serwera w oparciu o ESP8266 nie powinno stawić większego problemu. Mam nadzieję, że w kursie zostało wszystko jasno wyjaśnione. Jeżeli masz jakieś pytania to możesz śmiało zadawać je w komentarzach :)
Jeżeli chcesz być informowany na bieżąco o nowościach ze strony to kliknij „Lubię to!” bądź subskrybuj naszą stronę, aby otrzymywać na adres e-mail nowości ze strony. Jeżeli masz jakieś pytania to śmiało zadawaj je na forum ; )