#include #include #include #include // Pins fuer Softserial definieren SoftwareSerial bluetooth(2, 3); // TX, RX // Netzwerk-Einstellungen // MAC-Adresse darf nur einmal im Netz vohanden sein // Fuer jedes Geraet aendern!! byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xAA }; // Port fur Daten-Empfang unsigned int localPort = 6001; // IP Adresse Loxone-MiniServer IPAddress RecipientIP(10, 10, 10, 24); // Port Loxone-MiniServer... An diesen Port werden die Daten gesendet unsigned int RecipientPort = 80; // Buffer fuer Daten-Empfang char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // Start der UDP-Instanz EthernetUDP Udp; //Variablen definition fuer weiter Verarbeitung int x; String btrd; void setup() { Serial.begin(9600); bluetooth.begin(9600); //Ethernet starten if (!Ethernet.begin(mac)) Serial.println("dhcp failed"); else { Serial.print("IP des Device: "); Serial.println(Ethernet.localIP()); } //UDP starten Port Udp.begin(localPort); // BT-Modul Setup bluetooth.print("AT"); // check ob Modul arbeitet Antwort muss "OK" sein if (bluetooth.find("OK")) { Serial.print("BT Modul OK ..."); sendUDP("Anwesenheit BT-Modul ...OK"); } else { Serial.print("BT Modul Error ..."); sendUDP("Anwesenheit BT-Modul ...FEHLER"); } bluetooth.print("AT+ROLE1"); // auf Master setzen bluetooth.print("AT+RESET"); // Neustart ..nach setzen der ROLE noetig bluetooth.print("AT+SHOW0"); // zeigt nur MAC der BT-Devices bluetooth.print("AT+IMME1"); // fuehrt Befehle ohne Pause aus delay(1000); // kurze Pause ist noetig für das Modul //Serial leeren clearAll(); Serial.println("Warte auf UDP-Befehl"); } void loop() { // schaut on ein UDP Befehl empfangen wurde checkUDP(); if (!strcmp(packetBuffer, "000")) { scanbt(); } } //// Module //// // Serial-Speicher loeschen void clearAll() { // Serial + Softserial leeren for (int i = 0; i < bluetooth.available(); i++) { bluetooth.read(); } for (int i = 0; i < Serial.available(); i++) { Serial.read(); } // Paket-Buffer leeren for (int i = 0; i < UDP_TX_PACKET_MAX_SIZE; i++) packetBuffer[i] = 0; } // empfangene UDP-Befehle auswerten void checkUDP() { // pruefen ob Daten vorhanden sind int packetSize = Udp.parsePacket(); if (packetSize) { Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE); Serial.print("Packet Content: "); Serial.println(packetBuffer); } delay(10); } // UDP-Befehl senden void sendUDP(String text) { Udp.beginPacket(RecipientIP, RecipientPort); Udp.print(text); Udp.endPacket(); delay(10); } // Bluetooth-Geraete suche void scanbt() { sendUDP("Scan aktiv"); Serial.println("//Suche BT-Device//"); bluetooth.print("AT+DISC?"); // BT-Devices suchen delay(5000); //Wartezeit zur Auswertung if (bluetooth.available() > 0) { btrd = bluetooth.readStringUntil('\n'); x = Serial.parseInt(); String btrd2 = btrd; // Unnoetige Zeichen entfernen btrd2.replace("OK+DISCSOK+DIS0:", ""); btrd2.replace("OK+DIS0", ""); btrd2.replace("OK+DISCE", ""); String btrd_clean = btrd2; // wenn kein Device gefunden wurde if (btrd_clean == "OK+DISCS") { Serial.println("kein BT Device"); sendUDP("kein BT Device"); } else { Serial.println(btrd_clean); sendUDP(btrd_clean); } } else { Serial.print("Fehler... Keine Daten vom BT-Modul"); sendUDP("Fehler... Keine Daten vom BT-Modul"); } clearAll(); }