Skip to content
Snippets Groups Projects
Anian Bühler's avatar
Anian Bühler authored
e53f00ec
History

didacticNetwork

Bibliothek zur Implementierung von vereinfachten Netzwerken auf Arduino-Boards. Die Funktionalitaeten entsprechen dem Stand der Technik, die Umsetzung ist didaktisch reduziert.

Bisher unterstuetzt:

publish/subscribe network

Beispiele

Broker:

  • sPSN_Broker.ino -> Broker Applikation (muss nicht angepasst werden)

Clients:

  • sPSN_Client1(2).ino -> Client Applikationen die sich gegenseitig einen analogen bzw. digtalen Wert senden
  • sPSN-ClientMinimal.ino -> Minimal-Code für den einfachen Einstieg
  • sPSN-Chat.ino -> Chat-Applikation die Nachrichten unter eigenem Namen austauschen lässt

Funktionen und Parameter

Client

#Anlegen der Client-Instanz 
didacticPSNetClient psnClient;

#Starten der Client-Instanz
void psnClient.begin(Stream& sSerial, fcn callback);
//Param1: Schnittstelle (Serial | SoftSerial); param2: Callback-Funktion

#Netzwerkverwaltung Client (Daten senden und Empfangen, Zugriffsregelung)
bool psnClient.handleNetwork();
// return: true wenn Daten versendet / false wenn nicht

#Topic eines anderen Clients abbonieren
int psnClient.subscribe(char* topic);
// param: Topic String/char-Array ("example" / char topic[n])
int psnClient.subscribe(char* topic, int length);
// param1: Topic String/char-Array; param2: Anzahl Zeichen des Topics
// return ERROR-Wert: DN_ERROR_NOERROR, DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten)

#Topic eines anderen Clients entfernen
bool psnClient.unsubscribe(char* topic);            
// param: Topic String/char-Array
bool psnClient.unsubscribe(char* topic, int length); 
// param1: Topic String/char-Array; Param2: Param2: Anzahl Zeichen des Topics
// return true wenn Daten versendet / false wenn nicht

#Daten unter Topic veroeffentlichen
int psnClient.publish(char* topic,char* payload); 
// param1: Topic String/char-Array; param2: payload-char-Array
int psnClient.publish(char* topic, int topicLength,char* payload, int payloadLength); 
// param1: Topic String/char-Array; param2: Anzahl Zeichen des Topics, param3: payload-char-Array; param4: Anzahl Zeichen der Payload
// return: ERROR-Wert: DN_ERROR_NOERROR, DN_ERROR_TOPIC_LEN, DN_ERROR_PAYLOAD_LEN (Payload zu lange - wird abgeschnitten)

#Callback-Funktion (wird bei neuen Daten aufgerufen)
void clientCallback(char* topic, int topicLength, char* payload, int payloadLength){...}
//param1: Topic der Nachricht, param2: Lange des Topics; param3: Nutdaten der Nachricht; param4: Laenge der

Broker

#Anlegen der Broker-Instanz
didacticPSNetBroker psnBroker; 

#Starten der Broker-Instanz 
void psnBroker.begin(Stream& sSerial); 
// param: Schnittstelle (Serial | SoftwareSerial)

#Netzwerkverwaltung Broker (Daten senden und Empfangen, Zugriffsregelung)
bool psnBroker.handleNetwork();

Hilfreiche Funktionen

Wichtiger Hinweis: Diese Funktionen koennen derzeit nur einmal pro Programm/Client-Instanz eingesetzt werden. Werden diese an verschiedenen Stellen mit verschiedenen Werten verwendet, werden Werte u. U. ueberschrieben.

#Flankenerkennung z.B. fuer Taster
int psnClient.edgeDetected(bool currentState);
// param: aktueller binärer Zustand
// return: 0 -> keine Flanke, RISING, FALLING

#Auf Wertaenderung groeßer Schwellwert pruefen
bool psnClient.valueChanged(int currentvalue, int threshold);
// param: aktueller Wert; param2: Schwellwert
// return: true -> Aenderung groeßer als Schwellwert; sonst false

#Nicht blockierendes Warten
bool psnClient.timeElapsed(long);
// param: zu wartende Zeit in Millisekunden
// return: true, wenn Zeit Wartezeit abgelaufen; sonst false

#Einlesen von Text ueber Serialle Schnittstelle bis Endezeichen empfangen wird
int psnClient.readSerialData(Stream&, char*, char);
// param1: Schnittstelle (Serial | SoftSerial); param2: Array in das die Zeichen eingelesen werden; param3: Endezeichen (char)
// return: Anzahl der eingelesenen Zeichen (0 wenn noch kein Endezeichen)

Konstanten

Konstanten aus der Library die fuer die Programmierung genutzt werden und teilweise angepasst werden koennen.

#ASCII Endezeichen
DN_ASCII_CR -> 'CR' -> (int) 13
DN_ASCII_NL -> 'NL' -> (int) 10

#Laenge Topics und Payload (Client und Broker)
MAX_LEN_TOPICS   default: 10
MAX_LEN_PAYLOAD  default: 20

#Anzahl Topics
MAX_NR_TOPICS_CLIENT  default: 5
MAX_NR_TOPICS_BROKER  default: 20

#ERRORs
DN_ERROR_NOERROR      0
DN_ERROR_TOPIC_LEN   -1
DN_ERROR_PAYLOAD_LEN -2

#Frame
MSG_PRELIMITER '<'
MSG_DELIMITER  '>'
MSG_SEPARATOR  '|'

#Dienste
MSG_PUBLISH     '@'
MSG_SUBSCRIBE   '?'
MSG_UPDATE      '#'
MSG_TOPIC_MULTI '*'