diff --git a/platformio.ini b/platformio.ini index 2e4ca52..4a430f8 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,9 +12,11 @@ platform = espressif32 board = esp32dev framework = arduino +monitor_speed = 115200 +upload_port = COM6 +monitor_port = COM6 lib_deps = gioblu/PJON@^13.1 knolleary/PubSubClient@^2.8 braydenanderson2014/Hashtable@^1.1.3 - nkaaf/List@^3.0.1 robtillaart/SET@^0.2.8 diff --git a/src/main.cpp b/src/main.cpp index b7ca35b..0cd362a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,44 +6,42 @@ #include #include #include +#include #define RECEIVER 1 -#define SBBPIN 12 +#define SBBPIN 25 // put function declarations here: 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(); // WLAN Daten -const char* ssid = "DEIN_SSID"; -const char* password = "DEIN_PASSWORT"; +const char* ssid = "binde"; +const char* password = "bindi1518!"; // MQTT Daten -const char* mqtt_server = "DEIN_MQTT_BROKER"; +const char* mqtt_server = "10.6.0.194"; const int mqtt_port = 1883; // Strategy -StrategyLink link; - - +//StrategyLink linkstrategy; +StrategyLink linkstrategy; // Bus Address PJONAny bus(1); struct mqttMessage { uint8_t method; // 0: publish 1: subscribe 2: unsubscribe - char topic[250]; - char message[512]; + char topic[10]; + char message[10]; }; mqttMessage receiveBuffer; bool receivedFlag = false; -WiFiClient espClient; -PubSubClient client(espClient); +//WiFiClient espClient; +//PubSubClient client(espClient); Hashtable subs; @@ -52,11 +50,13 @@ Hashtable subs; void setup_wifi() { WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); + Serial.println("connected"); while (WiFi.status() != WL_CONNECTED) { + Serial.println("."); delay(500); } } - +/* void reconnect() { while (!client.connected()) { 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) { /* Copy received data in buffer */ + Serial.println("received pjon message"); + /* memcpy(&receiveBuffer, payload, sizeof(receiveBuffer)); receivedFlag = true; - + Serial.println(receiveBuffer.topic); + */ + /* if (receiveBuffer.method == 0){ client.publish(receiveBuffer.topic,receiveBuffer.message); } 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){ subs.get(receiveBuffer.topic)->sub(packet_info.tx.id); } - +*/ }; + void error_handler(uint8_t code, uint16_t data, void *custom_pointer) { if(code == PJON_CONNECTION_LOST) { - Serial.print("Connection lost with device id "); - Serial.println(bus.packets[data].content[0], DEC); + Serial.print("Connection with device ID "); + Serial.print(bus.packets[data].content[0], DEC); + Serial.println(" is lost."); } -}; \ No newline at end of file + 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)); +} +