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 '*'