Skip to content
Snippets Groups Projects
Verified Commit 3204095f authored by Anian Bühler's avatar Anian Bühler
Browse files

updated Basic examples

parent d0fa9652
Branches
No related tags found
No related merge requests found
...@@ -27,15 +27,16 @@ ...@@ -27,15 +27,16 @@
#define LED2_PIN 6 #define LED2_PIN 6
#define BUTTON_PIN 2 #define BUTTON_PIN 2
char topicPublish[MAX_LEN_TOPICS] = "btnState"; //Topic unter dem (eigene) Daten veröffentlicht werden char topicPublish[MAX_LEN_TOPICS] = "btnNr"; // Topic unter dem (eigene) Daten veröffentlicht werden
char topicSubscribe[MAX_LEN_TOPICS] = "potiVal"; //Topic (von anderem TN) das abboniert werden soll char topicSubscribe[MAX_LEN_TOPICS] = "potiNr"; // Topic (von anderem TN) das abboniert werden soll
SoftwareSerial sSerial(10, 11); // Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender SoftwareSerial sSerial(10, 11); // Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender
DidacticPSNetClient psnClient; // Erzeuge PubSub-Client-Instanz DidacticPSNetClient psnClient; // Erzeuge PubSub-Client-Instanz
// Callback-Funktion - wird beim Empfang neuer Daten aufgerufen // Callback-Funktion - wird beim Empfang neuer Daten aufgerufen
void newData(char* topic, char* payload) { void newData(char *topic, char *payload)
{
Serial.print("New data from topic "); Serial.print("New data from topic ");
Serial.print(topic); Serial.print(topic);
Serial.print(": "); Serial.print(": ");
...@@ -51,8 +52,8 @@ void newData(char* topic, char* payload) { ...@@ -51,8 +52,8 @@ void newData(char* topic, char* payload) {
analogWrite(LED2_PIN, 255 - valueLED); // Setze Ausgang invertiert zum empfangenen Wert analogWrite(LED2_PIN, 255 - valueLED); // Setze Ausgang invertiert zum empfangenen Wert
} }
void setup()
void setup() { {
Serial.begin(SERIAL_BAUD); // Starte Serielle Schnittstelle (zum PC) Serial.begin(SERIAL_BAUD); // Starte Serielle Schnittstelle (zum PC)
sSerial.begin(SERIAL_BAUD); // Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen) sSerial.begin(SERIAL_BAUD); // Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen)
...@@ -62,11 +63,11 @@ void setup() { ...@@ -62,11 +63,11 @@ void setup() {
psnClient.subscribe(topicSubscribe); // Lege fest zu welchem Topic Daten empfangen werden sollen psnClient.subscribe(topicSubscribe); // Lege fest zu welchem Topic Daten empfangen werden sollen
} }
void loop() { void loop()
{
psnClient.handleNetwork(); // Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten psnClient.handleNetwork(); // Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten
boolean buttonState = digitalRead(BUTTON_PIN); // lese Taster ein und speichere Wert boolean buttonState = digitalRead(BUTTON_PIN); // lese Taster ein und speichere Wert
psnClient.publishOnChange(topicPublish, buttonState); // bereite Topic und Nutzdaten zum senden vor, wenn sich buttonState ändert psnClient.publishOnChange(topicPublish, buttonState); // bereite Topic und Nutzdaten zum senden vor, wenn sich buttonState ändert
} }
/**
*file: sPSN_Client1
*author: letsgoING -> info@letsgoing.de
*
*description:
* Dieses Programm ist ein einfaches Beispiel für ein einfaches Pub-Sub-Netzwerk.
* Für das Netwerk werden 3 Arduinos mit IR-Link-Modulen benötigt:
*
* Arduino1: sPSN_Broker.ino
*
* Arduino2: sPSN_Client1.ino (dieses Programm) -> Sendet Wert des Potis | Empfängt Zustand des Tasters
* (Poti an PinA0 | LED an Pin5)
*
* Arduino3: sPSN_Client2.ino -> Sendet Zustand des Tasters | Empfängt Wert des Potis
* (Taster an Pin2 | LED an Pin5)
*
* parameter:
* MAX_LEN_PAYLOAD = 20 Zeichen (didacticNet.h)
* MAX_LEN_TOPICS = 10 Zeichen (didacticNet.h)
*
*date: 06.07.2021
*/
#include <Arduino.h>
#include "SoftwareSerial.h"
#include "DidacticNet.h"
#define SERIAL_BAUD 2400 // lege Geschwindigkeit für serielle Schnittstellen fest
#define LED_PIN 5
#define POTI_PIN A0
#define THRESHOLD 10 // Schwellwert für min. Wertänderung
char topicPublish[MAX_LEN_TOPICS] = "potiNr"; // Topic unter dem (eigene) Daten veröffentlicht werden
char topicSubscribe[MAX_LEN_TOPICS] = "btnNr"; // Topic (von anderem TN) das abboniert werden soll
SoftwareSerial sSerial(10, 11); // Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender
DidacticPSNetClient psnClient; // Erzeuge PubSub-Client-Instanz
void setup()
{
pinMode(LED_PIN, OUTPUT);
Serial.begin(SERIAL_BAUD); // Starte Serielle Schnittstelle (zum PC)
sSerial.begin(SERIAL_BAUD); // Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen)
psnClient.begin(sSerial); // Starte PubSub Client an SoftwareSerial Schnittstelle
psnClient.subscribe(topicSubscribe); // Lege fest zu welchem Topic Daten empfangen werden sollen
}
void loop()
{
// VERWALTE NETZWERK
psnClient.handleNetwork(); // Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten
// NEUE NACHRICHT VERFUEGBAR?
if (psnClient.available()) // Prüfen ob neue Nachricht verfügbar
{
char recievedTopic[MAX_LEN_TOPICS] = {0};
psnClient.readTopic(recievedTopic); // Einlesen des zuletzt empfangenen Topics in Array "recievedTopic"
bool recievedState = psnClient.readBooleanPayload(); // lese Payload als Boolean -> NUR WENN SICHER DASS BOOLEAN KOMMT!!
Serial.print("New data from ");
Serial.print(recievedTopic);
Serial.print(": ");
Serial.println(recievedState);
bool static stateLED = false; // static Variable verhält sich wie globale Variable (wird nicht gelöscht)
if (recievedState == true) // Wechsle Zustand der Variable "stateLED" wenn Taster beim Sender gedrueckt wurde
{
stateLED = !stateLED; // Invertiere Zustand der LED => HIGH wird zu LOW / LOW wird zu HIGH
digitalWrite(LED_PIN, stateLED); // Setze Ausgang entsprechend dem empfangenen Wert
}
}
// BEREITE NACHRICHT BEI AENDERUNG AM POTI ZUM SENDEN VOR
int currentValue = analogRead(POTI_PIN); // lese Poti ein und speichere Wert
psnClient.publishOnChange(topicPublish, currentValue, THRESHOLD);
}
/**
*file: sPSN_Client1
*author: letsgoING -> info@letsgoing.de
*
*description:
* Dieses Programm ist ein einfaches Beispiel für ein einfaches Pub-Sub-Netzwerk.
* Für das Netwerk werden 3 Arduinos mit IR-Link-Modulen benötigt:
*
* Arduino1: sPSN_Broker.ino
*
* Arduino2: sPSN_Client1.ino -> Sendet Wert des Potis | Empfängt Zustand des Tasters
* (Poti an PinA0 | LED an Pin5)
*
* Arduino3: sPSN_Client2.ino (dieses Programm) -> Sendet Zustand des Tasters | Empfängt Wert des Potis
* (Taster an Pin2 | LED an Pin5)
*
*date: 06.07.2021
*/
#include <Arduino.h>
#include "SoftwareSerial.h"
#include "DidacticNet.h"
#define SERIAL_BAUD 2400 // lege Geschwindigkeit für serielle Schnittstellen fest
#define LED_PIN 5
#define LED2_PIN 6
#define BUTTON_PIN 2
char topicPublish[MAX_LEN_TOPICS] = "btnNr"; // Topic unter dem (eigene) Daten veröffentlicht werden
char topicSubscribe[MAX_LEN_TOPICS] = "potiNr"; // Topic (von anderem TN) das abboniert werden soll
SoftwareSerial sSerial(10, 11); // Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender
DidacticPSNetClient psnClient; // Erzeuge PubSub-Client-Instanz
void setup()
{
Serial.begin(SERIAL_BAUD); // Starte Serielle Schnittstelle (zum PC)
sSerial.begin(SERIAL_BAUD); // Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen)
psnClient.begin(sSerial, newData); // Starte PubSub Client an SoftwareSerial Schnittstelle
psnClient.subscribe(topicSubscribe); // Lege fest zu welchem Topic Daten empfangen werden sollen
}
void loop()
{
// VERWALTE NETZWERK
psnClient.handleNetwork(); // Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten
// NEUE NACHRICHT VERFUEGBAR?
if (psnClient.available()) // Prüfen ob neue Nachricht verfügbar
{
char recievedTopic[MAX_LEN_TOPICS] = {0};
psnClient.readTopic(recievedTopic); // Einlesen des zuletzt empfangenen Topics in Array "recievedTopic"
int recievedValue = psnClient.readIntegerPayload(); // lese Payload als Integer -> NUR WENN SICHER DASS INTEGER KOMMT!!
Serial.print("New data from ");
Serial.print(recievedTopic);
Serial.print(": ");
Serial.println(recievedValue);
int mappedValue = map(recievedValue, 0, 1023, 0, 255); // passe analogRead-Wert (0-1023) für analogWrite (0-255) an
int valueLED = constrain(mappedValue, 0, 255); // begrenze für analogWrite (0-255)
analogWrite(LED_PIN, valueLED); // Setze Ausgang entsprechend dem empfangenen Wert
analogWrite(LED2_PIN, 255 - valueLED); // Setze Ausgang invertiert zum empfangenen Wert
}
// BEREITE NACHRICHT BEI AENDERUNG AM TASTER ZUM SENDEN VOR
boolean buttonState = digitalRead(BUTTON_PIN); // lese Taster ein und speichere Wert
psnClient.publishOnChange(topicPublish, buttonState); // bereite Topic und Nutzdaten zum senden vor, wenn sich buttonState ändert
}
/**
*file: sPSN_Client1
*author: letsgoING -> info@letsgoing.de
*
*description:
* Dieses Programm ist das Minimal-Beispiel für ein einfaches Pub-Sub-Netzwerk.
* Es wird jede Sekunde ein analoger Messwert (AO) übertragen
* und die empfangenen Daten auf dem SerialMonitor ausgegeben
*
* Für das Netwerk werden 3 oder mehr Arduinos mit IR-Link-Modulen benötigt:
*
* Arduino1: sPSN_Broker.ino
*
* Arduino2-n: sPSN_ClientMinimal.ino (dieses Programm)
*
* parameter:
* MAX_LEN_PAYLOAD = 20 Zeichen (didacticNet.h)
* MAX_LEN_TOPICS = 10 Zeichen (didacticNet.h)
*
*date: 06.07.2021
*/
#include <Arduino.h>
#include "SoftwareSerial.h"
#include "DidacticNet.h"
SoftwareSerial sSerial(10, 11); // Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender
DidacticPSNetClient psnClient; // Erzeuge PubSub-Client-Instanz
void setup()
{
Serial.begin(2400); // Starte Serielle Schnittstelle (zum PC)
sSerial.begin(2400); // Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen)
psnClient.begin(sSerial); // Starte PubSub Client an SoftwareSerial Schnittstelle
// Hier EMPFANGS-TOPIC ANPASSEN -> default "topic1"
psnClient.subscribe("topic1"); // Lege fest zu welchem Topic Daten empfangen werden sollen
}
void loop()
{
// VERWALTE NETZWERK
psnClient.handleNetwork(); // Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten
// NEUE NACHRICHT VERFUEGBAR?
if (psnClient.available()) // Prüfen ob neue Nachricht verfügbar
{
char recievedTopic[MAX_LEN_TOPICS] = {0};
char recievedPayload[MAX_LEN_PAYLOAD] = {0};
psnClient.readTopic(recievedTopic); // Einlesen des zuletzt empfangenen Topics in Array "recievedTopic"
psnClient.readPayload(recievedPayload); // Einlesen der zuletzt empfangenen Payload in Array "recievedPayload"
Serial.print("New data from ");
Serial.print(recievedTopic);
Serial.print(": ");
Serial.println(recievedPayload);
}
// BEREITE NACHRICHT BEI AENDERUNG AM POTI ZUM SENDEN VOR
int currentValue = analogRead(A0); // lese Poti ein und speichere Wert
psnClient.publish("topic1", currentValue); // Hier SENDE-TOPIC ANPASSEN -> default "topic1"
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment