Tutorial Stone Display STW Serie #3 – Send Data to Display

Tutorial Stone Display STW Serie #3 – Send Data to Display

Wie send ich Daten vom Arduino zum Stone STW Display?

1. Wie werden die Daten Übertragen?

Die Daten werden per Serieller Schnittstelle übertragen (auch als UART oder USART bezeichnet). Die serielle Kommunikation an den Pins RX / TX verwendet TTL-Logikpegel (5 V oder 3,3 V je nach Board). Welche Pins auf deinem Board RX / TX sind musst du im Pinout nachsehen. Beim Arduino Uno R3 wäre das Pin 0 = RX und Pin 1 = TX.

Einschränkung für SoftwareSerial!

Die Einschränkung betrifft die SoftwareSerial. Kurz zur Erklärung, mit der SoftwareSerial kann man die Serielle Schnittstelle auf nahezu beliebige Pins legen. Das hat den Vorteil das die Serielle Schnittstelle bei hochladen des Sketch nicht abgezogen werden muss.
Die SoftwareSerial funktioniert mit dem Arduino leider nicht. Der Grund dafür ist, der Arduino kann mit dem SoftwareSerial nur eine Bautrate von 57600bps. Das Display benötigt aber eine Bautrate von 115200bps, somit bleibt nur die Physische Schnittstelle übrig.

Hier könnt Ihr die Eigenschaften der SoftwareSerial nachlesen.
https://www.arduino.cc/en/Reference/softwareSerial

2. Struktur der Daten für die Übertragung.

Hier ein Beispiel wie die Daten zusammengesetzt sind:
ST<{“cmd_code“:”set_value“,”type“:”progress_bar“,”widget“:”progress_bar“,”value“:20}>ET

Frame head: ST<
Command content: { json } Kann aus 3 oder 4 Datentypen bestehen.
Frame end: >ET

Im cmd_code gibt man die Eigenschaften an, was gemacht werden soll, in meinem Beispielprogramm:
set_value
set_text
set_angle

Bei type spricht man das jeweilige Objekt an, in diesem Beispiel die Progress Bar.

Bei widget wird der Name des entsprechen Widget eingetragen.

Bei widget wird der Name des endsprechen Widget eingetragen.

Im letzten Datenfeld wird der value, angle oder text definiert, der geändert werden soll.

Hier könnt ihr euch die Command Set Instruction Lister herunterladen.

3. 1. Version der Datenübertragung (Serial.Print Methode)

Der Datensatz wird hier mit einem einfachen Print Befehle an das Display gesendet. Hier ist es egal ob man eine Serial.println(F(); oder Serial.println(); benutzt, beide funktionieren.
				
					void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println(F("ST<{\"cmd_code\":\"set_value\",\"type\":\"progress_bar\",\"widget\":\"progress_bar\",\"value\":0}>ET"));
  Serial.println(F("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"label\",\"text\":\"\"}>ET"));
  Serial.println(F("ST<{\"cmd_code\":\"set_angle\",\"type\":\"gauge_pointer\",\"widget\":\"gauge_pointer2\",\"angle\":0}>ET"));
  delay(1000);
  Serial.println(F("ST<{\"cmd_code\":\"set_angle\",\"type\":\"gauge_pointer\",\"widget\":\"gauge_pointer2\",\"angle\":60}>ET"));
  Serial.println(F("ST<{\"cmd_code\":\"set_value\",\"type\":\"progress_bar\",\"widget\":\"progress_bar\",\"value\":20}>ET"));
  Serial.println(F("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"label\",\"text\":\"Arduino\"}>ET"));
  delay(1000);
  Serial.println(F("ST<{\"cmd_code\":\"set_angle\",\"type\":\"gauge_pointer\",\"widget\":\"gauge_pointer2\",\"angle\":120}>ET"));
  Serial.println(F("ST<{\"cmd_code\":\"set_value\",\"type\":\"progress_bar\",\"widget\":\"progress_bar\",\"value\":40}>ET"));
  Serial.println(F("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"label\",\"text\":\"Arduino-Projekte\"}>ET"));
  delay(1000);
  Serial.println(F("ST<{\"cmd_code\":\"set_angle\",\"type\":\"gauge_pointer\",\"widget\":\"gauge_pointer2\",\"angle\":180}>ET"));
  Serial.println(F("ST<{\"cmd_code\":\"set_value\",\"type\":\"progress_bar\",\"widget\":\"progress_bar\",\"value\":60}>ET"));
  delay(1000);
  Serial.println(F("ST<{\"cmd_code\":\"set_angle\",\"type\":\"gauge_pointer\",\"widget\":\"gauge_pointer2\",\"angle\":240}>ET"));
  Serial.println(F("ST<{\"cmd_code\":\"set_value\",\"type\":\"progress_bar\",\"widget\":\"progress_bar\",\"value\":80}>ET"));
  Serial.println(F("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"label\",\"text\":\"Arduino-Projekte.info\"}>ET"));
  delay(1000);
  Serial.println(F("ST<{\"cmd_code\":\"set_angle\",\"type\":\"gauge_pointer\",\"widget\":\"gauge_pointer2\",\"angle\":300}>ET"));
  Serial.println(F("ST<{\"cmd_code\":\"set_value\",\"type\":\"progress_bar\",\"widget\":\"progress_bar\",\"value\":100}>ET"));
  delay(2000);
  }
				
			

4. 2. Version der Datenübertragung (Json Methode)

Für diese Methode benötigt Ihr die Json Library. Ich habe diese hier verwendet. https://arduinojson.org/
Oder Ihr ladet Sie über die Arduino IDE herunter. Dazu geht Ihr auf Sketch -> Bibliothek einbinden -> Bibliotheken verwalten und dann sucht Ihr ArduinoJson.
Hier ist es so das die Datensätze in das doc geschrieben und zusammengesetzt werden. Dann mit dem ST und ET per Serieller Schnittstelle übertragen werden. Ich denke diese Variante eignet sich besser um mit Variablen zu arbeiten.
				
					#include <ArduinoJson.h>

void setup() {
  Serial.begin(115200);
}

void loop() {
    Serial.write("ST<");
    StaticJsonDocument<128> doc;
    doc["cmd_code"] = "set_value";
    doc["type"] = "progress_bar";
    doc["widget"] = "progress_bar";
    doc["value"] = 0;
    serializeJson(doc, Serial);
    Serial.write(">ET");
    delay(1000);
    Serial.write("ST<");
    doc["cmd_code"] = "set_value";
    doc["type"] = "progress_bar";
    doc["widget"] = "progress_bar";
    doc["value"] = 80;
    serializeJson(doc, Serial);
    Serial.write(">ET");
    delay(1000);

}
				
			

Schaut im Online Shop vorbei!

Weitere Beträge zum Thema Stone Display: