2013-12-12 26 views
9

Podłączyłem Arduino do mojego laptopa za pomocą USB i mogę odczytać dane szeregowe za pomocą Processing.Jak odczytać dane portu szeregowego z JavaScript

Czy istnieje sposób na uzyskanie tych danych w czasie rzeczywistym do lokalnej przeglądarki internetowej? Na przykład pole tekstowe, które pokazuje wartość z portu szeregowego? Nie musi być podłączony do Internetu.

Wersja JavaScript przetwarzania nie obsługuje następującego kodu, który byłby idealnym rozwiązaniem.

kodu przetwarzanie jest:

myPort = new Serial(this, Serial.list()[0], 9600); 
// read a byte from the serial port 
int inByte = myPort.read(); 
// print it 
println(inByte); 
// now send this value somewhere...? 
// ehm... 
+1

Powinieneś spojrzeć na to: https://github.com/rwaldron/johnny-five. Może to ci pomoże. – kmas

Odpowiedz

10

Nie ma sposobu, aby bezpośrednio przejść do lokalnego urządzenia z poziomu przeglądarki internetowej. Ze względów bezpieczeństwa przeglądarki mają bardzo ograniczony dostęp do zasobów maszyn.

W tym celu należy napisać rozszerzenie do wybranej przeglądarki. Mimo że rozszerzenia mają również wiele ograniczeń.

Opcja druga polega na użyciu lokalnego serwera w celu zapewnienia wymaganej funkcjonalności. Osobiście polecam używanie node.js (jest lekki, szybki i łatwy w implementacji). Możesz odczytać/zapisać dane szeregowe za pomocą https://github.com/rwaldron/johnny-five (zgodnie z sugestią @kmas) lub https://github.com/voodootikigod/node-serialport, a następnie można użyć http://socket.io/, aby utworzyć prostą usługę i połączyć się z nią przez przeglądarkę. Socket.io wykorzystuje WebSockets w nowoczesnych przeglądarkach i działa wyjątkowo dobrze dla połączeń w czasie rzeczywistym.

+0

Dzięki! Próbowałem już używać rozszerzenia przeglądarki (Seriality), ale działa tylko w Safari na OS X. Wygląda na to, że nie mogę już dłużej zaglądać do Node.js! – Kokodoko

+0

... Chociaż wymagania nieco mnie niepokoją. XCode? Narzędzia linii poleceń? Pyton? (ale nie najnowszy?) ... wydaje się całkiem niezrozumiałe dla tak prostego pytania. – Kokodoko

+1

Istnieją inne opcje niż node.js. Po prostu uważam, że plik node.js byłby najbardziej przydatny, ponieważ moduł socket.io wykonuje większość operacji podnoszenia ciężarów w przeglądarce. Jeśli zdecydujesz się na Python, PHP, Ruby, itp., Będziesz musiał zainstalować i skonfigurować serwer internetowy i napisać własną implementację WebSocket, a nie będziesz miał żadnych przeciwieństw. –

1

Miałem podobny problem do rozwiązania. Mój system akwizycji danych (DAQ) (podobnie jak twoje arduino) przekazuje dane w protokołach HTTP, TCP, FTP, a także szeregowych. Musiałem go przechwycić na serwerze, a następnie przesłać na moją stronę w czasie rzeczywistym.

Hack, który napisałem, używa nodejs na serwerze i łączy DAQ z serwerem za pomocą gniazd TCP za pomocą modułu "net" nodejs i łączy serwer ze stroną HTML za pomocą socket.io.

Kod i kontekst można znaleźć w "How to get sensor data over TCP/IP in nodejs?".

Używam TCP, ponieważ chciałem transmitować dane na duże odległości. Musisz zmodyfikować protokół gniazda do portu szeregowego.

Do przekierowania szeregowego na TCP można użyć bloom z sensorMonkey dla Windows lub ich processing sketch dla * nix/Mac OS.

+0

Spojrzałem na to, ale wymaga to wielu kroków i polegam głównie na zewnętrznych usługach online. Korzystając z rozszerzenia do Chrome, mogę być w trybie offline i nadal mam dostęp do portu szeregowego. – Kokodoko

Powiązane problemy