not working

This commit is contained in:
2025-10-09 08:32:09 +02:00
parent 0c01edd7e1
commit 27e3d59738
2 changed files with 108 additions and 71 deletions

View File

@@ -12,9 +12,11 @@
platform = espressif32 platform = espressif32
board = esp32dev board = esp32dev
framework = arduino framework = arduino
monitor_speed = 115200
upload_port = COM6
monitor_port = COM6
lib_deps = lib_deps =
gioblu/PJON@^13.1 gioblu/PJON@^13.1
knolleary/PubSubClient@^2.8 knolleary/PubSubClient@^2.8
braydenanderson2014/Hashtable@^1.1.3 braydenanderson2014/Hashtable@^1.1.3
nkaaf/List@^3.0.1
robtillaart/SET@^0.2.8 robtillaart/SET@^0.2.8

View File

@@ -6,44 +6,42 @@
#include <WiFi.h> #include <WiFi.h>
#include <Hashtable.h> #include <Hashtable.h>
#include <set.h> #include <set.h>
#include <PJONDualUDP.h>
#define RECEIVER 1 #define RECEIVER 1
#define SBBPIN 12 #define SBBPIN 25
// put function declarations here: // put function declarations here:
void publishMqtt(PJONAny, uint8_t, String, String ); void publishMqtt(PJONAny, uint8_t, String, String );
void receiver_function(uint8_t , uint16_t length, const PJON_Packet_Info);
void error_handler(uint8_t, uint16_t);
long getDistance(); long getDistance();
// WLAN Daten // WLAN Daten
const char* ssid = "DEIN_SSID"; const char* ssid = "binde";
const char* password = "DEIN_PASSWORT"; const char* password = "bindi1518!";
// MQTT Daten // MQTT Daten
const char* mqtt_server = "DEIN_MQTT_BROKER"; const char* mqtt_server = "10.6.0.194";
const int mqtt_port = 1883; const int mqtt_port = 1883;
// Strategy // Strategy
StrategyLink<SoftwareBitBang> link; //StrategyLink<SoftwareBitBang> linkstrategy;
StrategyLink<DualUDP> linkstrategy;
// Bus Address // Bus Address
PJONAny bus(1); PJONAny bus(1);
struct mqttMessage { struct mqttMessage {
uint8_t method; // 0: publish 1: subscribe 2: unsubscribe uint8_t method; // 0: publish 1: subscribe 2: unsubscribe
char topic[250]; char topic[10];
char message[512]; char message[10];
}; };
mqttMessage receiveBuffer; mqttMessage receiveBuffer;
bool receivedFlag = false; bool receivedFlag = false;
WiFiClient espClient; //WiFiClient espClient;
PubSubClient client(espClient); //PubSubClient client(espClient);
Hashtable<String,Set> subs; Hashtable<String,Set> subs;
@@ -52,11 +50,13 @@ Hashtable<String,Set> subs;
void setup_wifi() { void setup_wifi() {
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); WiFi.begin(ssid, password);
Serial.println("connected");
while (WiFi.status() != WL_CONNECTED) { while (WiFi.status() != WL_CONNECTED) {
Serial.println(".");
delay(500); delay(500);
} }
} }
/*
void reconnect() { void reconnect() {
while (!client.connected()) { while (!client.connected()) {
if (client.connect("UltrasoundClient")) { if (client.connect("UltrasoundClient")) {
@@ -66,62 +66,16 @@ void reconnect() {
} }
} }
} }
*/
void setup() {
// put your setup code here, to run once:
link.strategy.set_pin(SBBPIN);
bus.strategy.set_link(&link);
bus.set_error(error_handler);
bus.set_receiver(receiver_function);
bus.begin();
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void loop() {
// put your main code here, to run repeatedly:
bus.update();
if (receivedFlag) {
receivedFlag = false;
}
}
// JSONMqtt funktions
void publishMqtt(PJONAny bus, uint8_t destAddress, String topic, String message ){
mqttMessage mqMessage;
mqMessage.method = 0;
topic.toCharArray(mqMessage.topic, topic.length());
message.toCharArray(mqMessage.message, message.length());
bus.send(destAddress,&mqMessage,sizeof(mqMessage));
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.println();
Set tempset;
memcpy(&tempset,subs.get(topic),sizeof(subs.get(topic)));
int n = tempset.first();
while (n != -1)
{
publishMqtt(bus, n, topic,String((char)payload));
n = tempset.next();
}
}
void receiver_function(uint8_t *payload, uint16_t length, const PJON_Packet_Info &packet_info) { void receiver_function(uint8_t *payload, uint16_t length, const PJON_Packet_Info &packet_info) {
/* Copy received data in buffer */ /* Copy received data in buffer */
Serial.println("received pjon message");
/*
memcpy(&receiveBuffer, payload, sizeof(receiveBuffer)); memcpy(&receiveBuffer, payload, sizeof(receiveBuffer));
receivedFlag = true; receivedFlag = true;
Serial.println(receiveBuffer.topic);
*/
/*
if (receiveBuffer.method == 0){ if (receiveBuffer.method == 0){
client.publish(receiveBuffer.topic,receiveBuffer.message); client.publish(receiveBuffer.topic,receiveBuffer.message);
} else if (receiveBuffer.method == 1){ } else if (receiveBuffer.method == 1){
@@ -134,11 +88,92 @@ void receiver_function(uint8_t *payload, uint16_t length, const PJON_Packet_Info
}else if (receiveBuffer.method == 2){ }else if (receiveBuffer.method == 2){
subs.get(receiveBuffer.topic)->sub(packet_info.tx.id); subs.get(receiveBuffer.topic)->sub(packet_info.tx.id);
} }
*/
}; };
void error_handler(uint8_t code, uint16_t data, void *custom_pointer) { void error_handler(uint8_t code, uint16_t data, void *custom_pointer) {
if(code == PJON_CONNECTION_LOST) { if(code == PJON_CONNECTION_LOST) {
Serial.print("Connection lost with device id "); Serial.print("Connection with device ID ");
Serial.println(bus.packets[data].content[0], DEC); Serial.print(bus.packets[data].content[0], DEC);
Serial.println(" is lost.");
}
if(code == PJON_PACKETS_BUFFER_FULL) {
Serial.print("Packet buffer is full, has now a length of ");
Serial.println(data, DEC);
Serial.println("Possible wrong bus configuration!");
Serial.println("higher PJON_MAX_PACKETS if necessary.");
}
if(code == PJON_CONTENT_TOO_LONG) {
Serial.print("Content is too long, length: ");
Serial.println(data);
} }
}; };
/*
void callback(char* topic, byte* payload, unsigned int length) {
Serial.println("received Mqtt Message");
Set tempset;
memcpy(&tempset,subs.get(topic),sizeof(subs.get(topic)));
int n = tempset.first();
String msg;
for (unsigned int i = 0; i < length; i++) {
msg += (char)payload[i]; // Zeichenweise anhängen
}
while (n != -1)
{
publishMqtt(bus, n, topic,msg);
n = tempset.next();
}
}
*/
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
setup_wifi();
//linkstrategy.strategy.set_pin(12);
bus.set_error(error_handler);
bus.strategy.set_link(&linkstrategy);
bus.set_receiver(receiver_function);
bus.begin();
//client.setServer(mqtt_server, mqtt_port);
//client.setCallback(callback);
}
unsigned long previousMillis = 0; // Zwischenspeicher für Zeitstempel
const long interval = 1000; // Intervall in Millisekunden (1 Sekunde)
void loop() {
// put your main code here, to run repeatedly:
bus.update();
bus.receive();
//client.loop();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
publishMqtt(bus,44, "test","42");
}
if (receivedFlag) {
receivedFlag = false;
}
}
// JSONMqtt funktions
void publishMqtt(PJONAny bus, uint8_t destAddress, String topic, String message ){
Serial.println(topic);
mqttMessage mqMessage;
mqMessage.method = 0;
topic.toCharArray(mqMessage.topic, topic.length());
message.toCharArray(mqMessage.message, message.length());
bus.send(destAddress,&mqMessage,sizeof(mqMessage));
}