#include #include #include #include #include //#define DEBUG #ifdef BOARD_HAS_USB_SERIAL #include SLIPEncodedUSBSerial SLIPSerial( thisBoardsSerialUSB ); #else #include SLIPEncodedSerial SLIPSerial(Serial); // Change to Serial1 or Serial2 etc. for boards with multiple serial ports that don’t have Serial #endif // Set your new MAC Address // MAC naslov sprejemnika: 08:3A:F2:50:EF:6C uint8_t newMACAddress[] = {0x08, 0x3A, 0xF2, 0x50, 0xEF, 0x6C}; typedef struct sensor_msg { uint8_t id; float aX; float aY; float aZ; float qX; float qY; float qZ; float qW; } sensor_msg; //sensor_msg odcitek; // Maksimalno stevilo #define ST_KEGLOV 10 int odcitekId; sensor_msg odcitki[ST_KEGLOV]; bool poslji[ST_KEGLOV]; void prejemPodatkov(const uint8_t * mac_addr, const uint8_t * noviPodatki, int len) { char macNaslov[18]; snprintf(macNaslov, sizeof(macNaslov), "%02x:%02x:%02x:%02x:%02x:%02x", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); #ifdef DEBUG Serial.print("Prejel podatke od "); Serial.println(macNaslov); #endif // ID odcitka je na prvem mestu! memcpy(&odcitekId, noviPodatki, sizeof(uint8_t)); #ifdef DEBUG Serial.print("RAZBIRAM ID "); Serial.println(odcitekId); #endif memcpy(&odcitki[odcitekId], noviPodatki, sizeof(sensor_msg)); #ifdef DEBUG Serial.printf("aX: %i \n", odcitki[odcitekId].aX); Serial.printf("aY: %i \n", odcitki[odcitekId].aY); Serial.printf("aZ: %i \n", odcitki[odcitekId].aZ); Serial.printf("qX: %f \n", odcitki[odcitekId].qX); Serial.printf("qY: %f \n", odcitki[odcitekId].qY); Serial.printf("qZ: %f \n", odcitki[odcitekId].qZ); Serial.printf("qW: %f \n", odcitki[odcitekId].qW); Serial.println(); #endif poslji[odcitekId] = true; } void setup() { SLIPSerial.begin(115200); // Ne posiljaj preden se podatki napolnijo for (int i = 0; i < ST_KEGLOV; i++) { poslji[0] = false; } Serial.println("Inicializiram WIFI..."); WiFi.mode(WIFI_STA); esp_wifi_set_mac(WIFI_IF_STA, &newMACAddress[0]); esp_err_t result = esp_now_init(); if (result != ESP_OK) { Serial.println("Error initializing ESP-NOW"); Serial.println(result); return; } Serial.print("MAC naslov: "); Serial.println(WiFi.macAddress()); esp_now_register_recv_cb(prejemPodatkov); } void loop() { /* OSC MSG channels */ OSCBundle bundle; char glava[32]; for (int i = 0; i < ST_KEGLOV; i++) { if (poslji[i]) { sprintf(glava, "/ww/%d/accel", i); /* Serial.print("Posiljam "); Serial.println(glava); */ bundle.add(glava) .add(odcitki[i].aX) .add(odcitki[i].aY) .add(odcitki[i].aZ); sprintf(glava, "/ww/%d/quaternion", i); /* Serial.print("Posiljam "); Serial.println(glava); */ bundle.add(glava) .add(odcitki[i].qW) .add(odcitki[i].qX) .add(odcitki[i].qY) .add(odcitki[i].qZ); /* Serial.printf("XaX: %i \n", odcitki[i].aX); Serial.printf("XaY: %i \n", odcitki[i].aY); Serial.printf("XaZ: %i \n", odcitki[i].aZ); Serial.printf("XqX: %f \n", odcitki[i].qX); Serial.printf("XqY: %f \n", odcitki[i].qY); Serial.printf("XqZ: %f \n", odcitki[i].qZ); Serial.printf("XqW: %f \n", odcitki[i].qW); Serial.println(); */ SLIPSerial.beginPacket(); bundle.send(SLIPSerial); SLIPSerial.endPacket(); bundle.empty(); poslji[i] = false; } } //delay(10); }