Witam,
Na początku chciałem zaznaczyć, że tytuł miał brzmieć:
Asynchroniczna komunikacja: serwer www [AJAX] <-> n*[system uc avr] [RS232] ale... niestarczyłomimiejsca...
Dobrze, no to lecimy...
Wczoraj na chat'cie (jak to się odmienia??) pytałem pewnego kolegę i poradził mi żebym tutaj wklepał ten pomysł. Nie będę wymieniał o Kogo chodzi, najwyżej niech sam się zdekonspiruje.
Od jakiegoś czasu chodzi mi po głowie pomysł wykorzystania pewnych technologii w komunikacji obustronnej pomiędzy: - systemem mikroprocesorowym avr (mikrokontroler + moduły + czujniki, etc.) a
- serwerem www (wykupionym hostingiem, gdzie trzymamy dane, pliki, bazę danych, etc. - w najprostszym ujęciu hosting jest gdzieś w świecie, wśród firm oferujących te usługi)
Technologie, o których wspomniałem (języki programowania jak kto woli) to m.in.:-
język C - do wysterowania uc avr (lub C++ do tych bardziej zaawansowanych), logicznie związany z uc avr
-
plik w formacie xml - hmm.. jakby to głupio nie napisać... do bezkonfliktowej wymiany informacji pomiędzy językami z gwarancją potwierdzenia odbioru
- język
javascript - działa po stronie przeglądarki na komputerze (urządzeniu) klienta, ale logicznie związany jest ze stroną www
- język
php - działa po stronie serwera, do obsługi funkcji, a konkretnie do odczytywania i zapisywania danych do pliku xml.php, logicznie związany ze stroną
- biblioteka
jquery - do uproszczonej obsługi funkcji XMLHttpRequest
- technologia
AJAX (Asynchronous Javascript And Xml) - do tego, żeby funkcja XMLHttpRequest działała zgodnie z założeniami, a więc: odświeżanie zawartości strony bez przeładowywania strony
Skupię się chwilę na tym całym AJAX'ie, którego na marginesie nigdy nie lubiałem
ale tutaj
wydaje mi się sensownym rozwiązaniem, dlatego, że:
- jest to asynchroniczna wymiana danych - a więc podobnie jak w jednej z możliwości protokołu rs232
- jest to technologia umożliwiająca natychmiastową reakcję na błąd funkcji, a więc bepieczna, do tego w sensie logicznym dość mocno przypominająca reguły rodem z protokołu RS232 (wysyłanie, potwierdzenie, gotowość do odbioru, etc.)
- umożliwia wysterowanie wieloma systemami mikrokontrolerowymi avr bez wchodzenia w kolizję przy transmisji danych
Jak miałaby wyglądać komunikacja/cały system komunikacji:1. Jest coś takiego jak
terminal, a więc miejsce/punkt odniesienia,z którego wydawane są rozkazy do systemu uc avr. Oczywiście tam też do terminala wędrują wyniki z czujników, etc. z uc avr. Terminal to nic innego jak nasza stronka. Jest to centrum, sterownia wszystkiego co podepniemy pod ten system komunikacji.
2. Z drugiej strony linii komunikacyjnej mamy
system mikroprocesorowy avr (obojętnie jaki tam uc avr będzie siedział, byle by był w stanie odebrać dane przez łącze komunikacyjne i coś z nimi zrobić). Innymi słowy, używając terminologii z RS232 jest to urządzenie końcowe. Jest on wyposażony w czujniki, lub przekaźniki sterujące elementami elektronicznymi (urządzeniami) w miejscu gdzie on się znajduje. W domyślnym założeniu do wysłania odebrania danych używa dowolnego modułu ethernetowego, np. ENC28J60.
Oczywiście bardzo ważna jest tutaj sprawa z systemami zabezpieczającymi, gdyby coś poszło nie tak, system mikroprocesorowy ma ustabilizować w sposób maksymalnie bezpieczny całą sytuacje. Takie funkcje systemu mikroprocesorowego avr są domyślnie i obowiązkowo przewidziane i co ważne mogą być aktywowane NIEZALEŻNIE od stanu serwera www.3.
Wymiana danych:
Najpierw chciałem w uc avr budować ładnie cały wielki plik XML, ale w/w Kolega uświadomił mnie (po krótkich obliczeniach w pamięci)
że to nie ma sensu. No więc, musiałem przyjąć inne rozwiązanie.
Skoro nie mogę za bardzo obciążyć procesorka avr to niech ten ciężar będzie przeniesiony na procesor serwera www - on z takim czymś dużo prościej sobie poradzi. O co chodzi? Już piszę. Dobrze by było zmieścić więcej niż mniej: danych odczytu z czujników, lub rozkazów wędrujące do uc avr. Jak to zrobić po stronie avr? Ano, jest coś takiego jak pola bitowe struktury. Zrobić taką jedną (w podstawowym zamyśle) strukturę i zapisać w niej dane. Teraz te dane to będzie ramka danych, to będą podstawowe dane w pliku wysyłanym do serwera. Pomyślałem sobie, dobrze, skoro nie można ładować takiego wielkiego bydlaka jakim jest plik xml, to niech to będzie przynajmniej plik xml z jednym węzłem, gdzie wartością będą właśnie dane z w/w struktury wraz z polami bitowymi. Ten plik xml powędruje sobie do serwera www, a skrypt strony www (obojętnie już w jakim języku) "zdekoduje" tą strukturę do normalnego pliku xml2ajax.php i tenże xml2ajax.php będzie wykonany przez serwer www. Z kolei w drugą stronę, czyli użytkownik wyda polecenie przez stronę www do systemu uc avr, będzie tak, że skrypt serwera www odpowiednio przygotuje plik xml2avr.php (struktura z polami bitowymi) i wyśle go do systemu uc avr.
Sprawę potwierdzeń, flag odbioru pozostawiam otwartą, bo jeszcze do końca tego nie przemyślałem.
Jedna z niewątpliwych zalet tego systemu komunikacji, to to, że nie jest skierowany on do konkretnych urządzeń, które np. MUSZĄ mieć Androida, lub inny system operacyjny urządzenia, tylko wystarczy że mają przeglądarkę, która potrafi wyświetlić przetworzone dane z serwera.
Pytania do Kolegów z Forum Atnel:1. Jak Waszym zdaniem powinna wyglądać struktura pliku wymiany informacji (nagłówek, dane, koniec, flaga, ?) - tak żeby można było upakować wiele zmiennych, ale żeby była to struktura dość elastyczna w konfiguracji - oczywiście jakiś kompromis jest potrzebny.
2. UDP czy TCP - jeśli chodzi o uc avr? -bierzemy pod uwagę tak i odczyt z czujników, jak i wykonywanie poleceń z potwierdzeniem. Wydaje mi się, że lepsze byłoby TCP, ale jestem ciekaw Waszego zdania.
Może Ktoś z Kolegów podpowie mi co robię/myślę źle, lub co robię i myślę dobrze
Może wspólnymi siłami powstanie coś ciekawego? Wychodzę z założenia, że będzie to dobrze służyło ludziom, a nie że stanie się dla nich utrapieniem.
Pozdrawiam! j23 Jarek