30 wrz 2018

24-kanałowy sterownik LAN [Bascom]

Chciałem nieco odświeżyć stary, nie do końca sensowny jak na te czasy temat,
jakim jest mikroserwer oparty o równie archaiczny mikrokontroler Atmega32 i układ ENC28J60. W moim projekcie układ ma pracować jako prosta automatyka domu, więc tak też dostosowałem kod programu.

Najpierw zabrałem się za uporządkowanie kodu, by zyskać jak najwięcej pamięci RAM dla swobodnej pracy programu. Pozbyłem się NTP, bo zegar i data do niczego mi potrzebny nie jest, i naniosłem poprawki opisywane przez jednego z kolegów na forum elektrody (źródła poniżej). Dodałem też zmienną ułatwiającą zmianę portu HTTP, bez zbędnego przeszukiwania całego kodu – to spore ułatwienie.

Cała konfiguracja zaczyna się od linijki 295, i można w niej ustawić adres IP, MAC, i port HTTP.




Program działa bardzo stabilnie. W stabilności pomaga taktowanie uC, wzięte bezpośrednio z sygnału zegarowego ukłau ENC28J60. Jest to aż 25MHz, czyli więcej niż maksymalne dozwolone taktowanie Atmegi, ale znosi to ona bez problemu. Można taktować ją osobnym kwarcem, ale prędzej czy później komunikacja między ENC się rozjedzie, i serwer nie będzie działał. 




 


No i na koniec, co udało mi się osiągnąć…
Możliwość sterowania przez polecenia GET, wszystkimi pinami portów A, C, i D, co daje aż 24 wyjścia, do których już można podłączyć choćby przekaźniki.
Niestety mimo wyświetlania na stronie mikroserwera stanu poszczególnych pinów w portach, nie potrafię podjąć tych danych przez zewnętrzną stronę, co uniemożliwia mi uzyskanie sprzężenia zwrotnego. To duża wada, ale może kiedyś uda mi się ją rozwiązać, albo i wam jeśli ktoś będzie zainteresowany projektem.


 

Jak steruje się portami?

Sama strona serwera, jest bardzo minimalistyczna, choć jest jeszcze miejsce w RAMie na jej rozbudowanie. Pełni ona rolę bardziej diagnostyczną, no i taką żeby serwerek jakoś tam widniał w sieci. Moim zdaniem w zupełności wystarcza. Sterowanie portami odbywa się poprzez polecenia wpisywane w pasku adresu strony.

Przykłady:
http://192.168.1.125/A0=1 – Ustawia stan wysoki na PORTA.0
http://192.168.1.125/A0=0 – Ustawia stan niski na PORTA.0
http://192.168.1.125/C3=1 – Ustawia stan wysoki na PORTC.3
http://192.168.1.125/C3=0 – Ustawia stan niski na PORTC.3
http://192.168.1.125/A=1 – Ustawia stan wysoki na wszystkich pinach portu A
http://192.168.1.125/A=0 – Ustawia stan niski na wszystkich pinach portu A


No tak… ale wpisywanie nie jest zbyt wygodne, żeby zaświecić czy zgasić sobie choćby światło w pokoju. Przyszło mi na myśl proste rozwiązanie, polegające na stworzeniu strony internetowej w równie archaicznym jak cały projekt programie Microsoft Front Page ;)
Są tam dość ładne gotowe przyciski do wyboru, które mogą służyć jako hiperłącza z komendami, które będą „otwierać” się w małej na 1 piksel ramce wbudowanej – tak wiem…. rozwiązanie na poziomie informatyki w czwartej klasie podstawowej ale działa! I wygląda nie najgorzej :D 







Można wrzucić taką stronę na telefon z Androidem, choć nie próbowałem, albo można skompilować ją do aplikacji APK za pomocą programu „Website 2 APK Builder” https://websitetoapk.com/

Chyba wyczerpałem już ten stary temat. Myślę że mimo braku zabezpieczeń i informacji zwrotnej o stanie pinów na zewnętrznej stronie, ten prosty mikroserwerek można z powodzeniem wykorzystać, jako chociaż namiastkę „inteligentnego domu” i sterować zdalnie oświetleniem, czy innymi sprzętami. Koszt wykonania jest śmiesznie niski. 24 wyjścia za 30zł (nie licząc przekaźników), więc nawet dla zabawy można pochylić się nad tematem ;)