kramann.info
© Guido Kramann

Login: Passwort:










2.7.2 Serielle Kommunikation zwischen Arduino und PC, zwischen Arduino und lokalem Server

2.7.2 Serial communication between Arduino and PC, between Arduino and local server (EN google-translate)

2.7.2 Komunikacja szeregowa pomiędzy Arduino i komputerem PC, pomiędzy Arduino i serwerem lokalnym (PL google-translate)

Informative Forumsdiskussionen und Links zum Thema:

Informative forum discussions and links to the topic:

Pouczające dyskusje na forum i linki do tematu:

PHP-Klasse, die die serielle Kommunikation über PHP erleichtert.
Forumsbeiträge zu POST-Anfragen beim Server über Javascript.
Forumsbeiträge zur seriellen Kommunikation über PHP.
Verwendung von xmlHttpRequest in Javascript.

Erstes Experiment: Serielle Kommunikation über den seriellen Monitor der Arduino-IDE

First experiment: Serial communication via the serial monitor of the Arduino IDE

Pierwszy eksperyment: komunikacja szeregowa poprzez szeregowy monitor Arduino IDE

Das folgende Arduino-Programm aktiviert beim Mikrocontroller eine serielle Verbindung und schaltet eine LED ein, wenn ein A empfangen wird und schaltet sie aus, wenn irgendein anderes Zeichen empfangen wird:

The following Arduino program activates a serial connection at the microcontroller and turns on an LED when an A is received and turns it off, if any other Character is received:

Poniższy program Arduino aktywuje połączenie szeregowe w mikrokontrolerze i włącza się dioda LED po odebraniu A i wyłącza ją, jeśli jest inna Otrzymano znak:

char c;

void setup() 
{
    Serial.begin(9600);
    pinMode(13,OUTPUT);      
    digitalWrite(13,0);
}

void loop() 
{
  // put your main code here, to run repeatedly:
  if(Serial.available())
  {
      c=Serial.read();
      if(c=='A')
      {
          digitalWrite(13,1);
      }
      else
      {
          digitalWrite(13,0);
      }
  }    
}

Code 2.7.2-1: seriell001b.ino im Ordner .../Arduino/seriell001b

seriell001b.zip

Um mit dem Programm vom PC aus kommunizieren zu können wird ein Terminal für serielle Kommunikation benötigt. Dieses bringt die Arduino-IDE bereits in Form des Seriellen Monitors mit:

To be able to communicate with the program from the PC, a terminal for serial Communication needed. This brings the Arduino IDE already in the form of the serial monito

Aby móc komunikować się z programem z komputera, terminal dla portu szeregowego Komunikacja potrzebna. Dzięki temu Arduino IDE ma już postać monitora szeregoweg

Seriellen Monitor öffnen.

Bild 2.7.2-1: Seriellen Monitor öffnen.

Einstellugen am seriellen Monitor und senden des Zeichens A über den Knopf

Bild 2.7.2-2: Einstellugen am seriellen Monitor und senden des Zeichens A über den Knopf "Senden".

Zweites Experiment: Serielle Kommunikation mittels PHP

Second Experiment: Serial Communication via PHP

Drugi eksperyment: komunikacja szeregowa za pośrednictwem PHP

Für die nachfolgenden Experimente muß ein XAMPP-Server verfügbar sein. Entpacken Sie nachfolgendes .zip-File "serielltest.zip" in dessen htdocs-Ordner und starten den Webbrowser. Vorausgesetzt wird, dass außerdem der Arduino-Micro über USB mit dem PC verbunden ist und den seriellen Port ttyACM0 hat und obiges Programm auf den Arduino geflasht wurde und der lokale XAMPP-Server gestartet wurde.

For subsequent experiments, an XAMPP server must be available. Unzip the following .zip file serielltest.zip into its htdocs folder and start the web browser. It is also assumed that the Arduino Micro is also connected to the PC via USB and the serial port has ttyACM0 and the above program has been flashed on the Arduino and the local XAMPP server was started.

W przypadku kolejnych eksperymentów serwer XAMPP musi być dostępny. Rozpakuj następujący plik .zip serielltest.zip do swojego folderu htdocs i uruchom przeglądarkę internetową. Zakłada się, że również Arduino Micro jest podłączony przez USB do komputera i ma port szeregowy ttyACM0, a powyżej program został wysłany do Arduino i lokalny serwer XAMPP został uruchomiony.

serielltest.zip

Rufen Sie über einen Webbrowser im Wechsel folgende Links auf:

Call up the following links via a web browser:

Wywołaj następujące linki przez przeglądarkę internetową:

  • http://localhost/serielltest/an.php
  • http://localhost/serielltest/aus.php
htdocs/serielltest/an.php (htdocs/serielltest/php_serial.class.php muß auch dort liegen)

Bild 2.7.2-3: htdocs/serielltest/an.php (htdocs/serielltest/php_serial.class.php muß auch dort liegen)

htdocs/serielltest/aus.php (htdocs/serielltest/php_serial.class.php muß auch dort liegen)

Bild 2.7.2-4: htdocs/serielltest/aus.php (htdocs/serielltest/php_serial.class.php muß auch dort liegen)

Drittes Experiment: Serielle Kommunikation mittels PHP ausgelöst durch ein Formular auf einer Webseite (LED blinkt)

Third experiment: Serial communication via PHP triggered by a form on a web page (LED flashes)

Trzeci eksperyment: komunikacja szeregowa przez PHP uruchamiana przez formularz na stronie internetowej (dioda LED miga)

htdocs/serielltest/post_lesen2.php (htdocs/serielltest/php_serial.class.php muß auch dort liegen)

Bild 2.7.2-5: htdocs/serielltest/post_lesen2.php (htdocs/serielltest/php_serial.class.php muß auch dort liegen)


Problem: Ein submit in einer POST-Anfrage führt zum Wechsel der Webseite zum "target".


Stimmen aktuelle Seite und target überein, kann immerhin auf der aktuellen Seite nach dem neu laden weitergearbeitet werden. Jedoch bedeutet es einen hohen Performance-Verlust bei jeder Serveranfrage die Seite neu zu laden.

Voices current page and target match, after all, can be on the current page after re-loading will be continued. However, it means a high performance loss each server request to reload the page.

Głosy na bieżącą stronę i dopasowanie docelowe, mimo wszystko, mogą znajdować się na bieżącej stronie ponowne ładowanie będzie kontynuowane. Oznacza to jednak dużą utratę wydajności na poziom każde żądanie serwera, aby ponownie załadować stronę.

Abhilfe schafft die Javascript-Funktion XMLHttpRequest():

The Javascript function XMLHttpRequest () can help:

Funkcja JavaScript XMLHttpRequest () może pomóc:

Viertes Experiment: Serielle Kommunikation mittels PHP ausgelöst durch einen XMLHttpRequest() mit Javascript

Fourth experiment: Serial communication via PHP triggered by an XMLHttpRequest () with Javascript

Czwarty eksperyment: komunikacja szeregowa przez PHP wyzwalana przez XMLHttpRequest () z Javascriptem

htdocs/serielltest/request.html (htdocs/serielltest/php_serial.class.php muß auch dort liegen)

Bild 2.7.2-6: htdocs/serielltest/request.html (htdocs/serielltest/php_serial.class.php muß auch dort liegen)

htdocs/serielltest/post_lesen3.php (htdocs/serielltest/php_serial.class.php muß auch dort liegen)

Bild 2.7.2-7: htdocs/serielltest/post_lesen3.php (htdocs/serielltest/php_serial.class.php muß auch dort liegen)

Übung
exercise
ćwiczenie

Erweitern Sie die Programmteile aus Experiment vier so, dass vom Arduino immer das vom Webbrowser ein empfangener ASCII-Großbuchstabe an diesen als Kleinbuchstabe zurückgesendet wird und dort auch empfangen und angezeigt wird.

Extend the program parts from experiment four so that the Arduino always receives an ASCII capital letter received from the web browser is sent back to them as a lowercase letter and is also received and displayed there.

Rozszerz części programu z eksperymentu 4, aby Arduino zawsze otrzymywało wielką literę ASCII otrzymaną z przeglądarki internetowej jest odesłany do nich jako mała litera i jest również odbierany i wyświetlany tam.

Mögliche Probleme mit der seriellen Verbindung und deren Behebung

Possible problems with the serial connection and their rectification

Możliwe problemy z połączeniem szeregowym i ich usunięciem

Zugriff auf einen seriellen Port erhält man, wenn dieser extra frei geschaltet wird mit (Beispiel, wenn der Port ttyACM0 heißt, was typische für das Arduino-Gerät unter Linux ist):

Access to a serial port is obtained when this is separately enabled with (Example, if the port is ttyACM0, which is typical for the Arduino device on Linux):

Dostęp do portu szeregowego uzyskuje się, gdy jest on oddzielnie włączony (Przykład: jeśli port to ttyACM0, który jest typowy dla urządzenia Arduino w systemie Linux):

  • sudo chmod a+rw /dev/ttyACM0

... oder der aktuelle Linux-Benutzer ist Mitglied der Gruppe dialout.

... or the current Linux user is a member of the dialout group.

... lub aktualny użytkownik Linux jest członkiem grupy dialout.

Schließlich könnte ein anderes Programm den Zugang auf den seriellen Port verhindern, da es diesen gelockt hat, z.B. gtkterm oder der Arduino Serial-Monitor. Dieses müßte vor dem flashen beendet werden.

Finally, another program could prevent access to the serial port since it has lured it, e.g. gtkterm or the Arduino Serial Monitor

Wreszcie inny program może uniemożliwić dostęp do portu szeregowego odkąd go zwabił, np. gtkterm lub monitor szeregowy Arduino