/* Use following command to receive the data socat -u UDP-RECVFROM:9998,fork - Format of the data is a CSV deliminated by ; counter, voltage, wifi strength */ #include #include #include // ---------------- USER CONFIG ---------------- const char* WIFI_SSID = "control-tower-24"; const char* WIFI_PASSWORD = "expaexpa"; // Destination for UDP packets const char* UDP_TARGET_IP = "192.168.1.255"; // <-- change to your receiver's IP const uint16_t UDP_TARGET_PORT = 9998; // How often to read + send (ms) const unsigned long SEND_INTERVAL_MS = 100; // Arduino AD 24-bit převodník s 2 kanály // piny pro připojení SCK a DT z modulu int pSCK = 7; int pDT = 4; WiFiUDP udp; // definování různých nastavení kanálů a jejich zesílení #define kanal_A_zesil_128 1 #define kanal_B_zesil_32 2 #define kanal_A_zesil_64 3 unsigned long lastSendTime = 0; void connectWiFi() { Serial.print("Connecting to WiFi"); WiFi.setTxPower(WIFI_POWER_19_5dBm); WiFi.setSleep(false); WiFi.setAutoReconnect(true); WiFi.persistent(true); // saves credentials to flash, faster reconnect WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(400); Serial.print("."); } Serial.println(); Serial.print("WiFi connected. IP address: "); Serial.println(WiFi.localIP()); } void setup() { // nastavení pinů modulu jako výstup a vstup pinMode(pSCK, OUTPUT); pinMode(pDT, INPUT); // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); // probuzení modulu z power-down módu digitalWrite(pSCK, LOW); connectWiFi(); // spuštění prvního měření pro nastavení měřícího kanálu spusteniMereni(kanal_A_zesil_64); } long counter = 0; void loop() { // Reconnect WiFi if dropped if (WiFi.status() != WL_CONNECTED) { connectWiFi(); } unsigned long now = millis(); if (now - lastSendTime >= SEND_INTERVAL_MS) { lastSendTime = now; long rssi = WiFi.RSSI(); // dBm long odpor = spusteniMereni(kanal_A_zesil_64); // Build payload: counter;temperature;pressure;rssi\n char payload[64]; snprintf(payload, sizeof(payload), "%ld;%ld;%ld\n", counter, odpor, rssi); counter = counter + 1; Serial.print("Sending UDP packet: "); Serial.println(payload); udp.beginPacket(UDP_TARGET_IP, UDP_TARGET_PORT); udp.print(payload); udp.endPacket(); } } // vytvoření funkce pro měření z nastaveného kanálu long spusteniMereni(byte mericiMod) { byte index; long vysledekMereni = 0L; // načtení 24-bit dat z modulu while(digitalRead(pDT)); for (index = 0; index < 24; index++) { digitalWrite(pSCK, HIGH); vysledekMereni = (vysledekMereni << 1) | digitalRead(pDT); digitalWrite(pSCK, LOW); } // nastavení měřícího módu for (index = 0; index < mericiMod; index++) { digitalWrite(pSCK, HIGH); digitalWrite(pSCK, LOW); } // konverze z 24-bit dvojdoplňkového čísla // na 32-bit znaménkové číslo if (vysledekMereni >= 0x800000) vysledekMereni = vysledekMereni | 0xFF000000L; // přepočet výsledku na mikrovolty podle zvoleného // kanálu a zesílení switch(mericiMod) { case 1: vysledekMereni = vysledekMereni/128/2; break; case 2: vysledekMereni = vysledekMereni/32/2; break; case 3: vysledekMereni = vysledekMereni/64/2; break; } return vysledekMereni ; }