#include #include #include "ESPAsyncWebServer.h" #include // Replace with your network credentials (STATION) const char* ssid = "pinky"; const char* password = "1234"; // ESP8266 Mac address (first peer) uint8_t mac_peer1[] = {0x5C, 0xCF, 0x7F, 0x00, 0x0C, 0x51}; // ESP8266 Mac address (second peer) uint8_t mac_peer2[] = {0x5C, 0xCF, 0x7F, 0x02, 0xF7, 0x1E}; // ESP8266 Mac address (third peer) uint8_t mac_peer3[] = {0xEC, 0xFA, 0xBC, 0x41, 0xA9, 0x83}; esp_now_peer_info_t peer1; esp_now_peer_info_t peer2; esp_now_peer_info_t peer3; // Structure example to receive data // Must match the sender structure typedef struct struct_message { int red; int green; int blue; int node; int timer; } struct_message; struct_message myMessage; const char* R = "r"; const char* G = "g"; const char* B = "b"; const char* N = "n"; const char* T = "t"; AsyncWebServer server(80); AsyncEventSource events("/events"); /* // callback function that will be executed when data is received void OnDataRecv(const uint8_t * mac_addr, const uint8_t *incomingData, int len) { // Copies the sender mac address to a string char macStr[18]; Serial.print("Packet received from: "); snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); Serial.println(macStr); memcpy(&incomingReadings, incomingData, sizeof(incomingReadings)); board["id"] = incomingReadings.id; board["temperature"] = incomingReadings.temp; board["humidity"] = incomingReadings.hum; board["readingId"] = String(incomingReadings.readingId); String jsonString = JSON.stringify(board); events.send(jsonString.c_str(), "new_readings", millis()); Serial.printf("Board ID %u: %u bytes\n", incomingReadings.id, len); Serial.printf("t value: %4.2f \n", incomingReadings.temp); Serial.printf("h value: %4.2f \n", incomingReadings.hum); Serial.printf("readingID value: %d \n", incomingReadings.readingId); Serial.println(); } */ const char index_html[] PROGMEM = R"rawliteral( Pinky Pager Dash

Pinky Pager Dash

Red :

Green :

Blue :

Timer :

)rawliteral"; void notFound(AsyncWebServerRequest *request) { request->send(404, "text/plain", "Not found"); } void sendMsgtoNodes() { Serial.println("send esp now message"); Serial.println(myMessage.red); Serial.println(myMessage.green); Serial.println(myMessage.blue); Serial.println(myMessage.node); Serial.println(myMessage.timer); esp_now_send(NULL , (uint8_t *) &myMessage, sizeof(myMessage)); } void setup() { // Initialize Serial Monitor Serial.begin(115200); // Set the device as a Station and Soft Access Point simultaneously WiFi.mode(WIFI_AP_STA); /* // Set device as a Wi-Fi Station WiFi.begin(ssid, password); //while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Setting as a Wi-Fi Station.."); // } Serial.print("Station IP Address: "); Serial.println(WiFi.localIP()); Serial.print("Wi-Fi Channel: "); Serial.println(WiFi.channel()); */ WiFi.softAP(ssid); IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); // Init ESP-NOW if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } memcpy(peer1.peer_addr, mac_peer1, 6); peer1.channel = 1; peer1.encrypt = 0; // Register the peer Serial.println("Registering a peer 1"); if ( esp_now_add_peer(&peer1) == ESP_OK) { Serial.println("Peer 1 added"); } memcpy(peer2.peer_addr, mac_peer2, 6); peer2.channel = 1; peer2.encrypt = 0; // Register the peer Serial.println("Registering a peer 2"); if ( esp_now_add_peer(&peer2) == ESP_OK) { Serial.println("Peer 2 added"); } memcpy(peer3.peer_addr, mac_peer3, 6); peer3.channel = 1; peer3.encrypt = 0; // Register the peer Serial.println("Registering a peer 3"); if ( esp_now_add_peer(&peer3) == ESP_OK) { Serial.println("Peer 3 added"); } // Once ESPNow is successfully Init, we will register for recv CB to // get recv packer info //esp_now_register_recv_cb(OnDataRecv); server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) { request->send_P(200, "text/html", index_html); }); // Send a GET request to /get?input1= server.on("/get", HTTP_GET, [] (AsyncWebServerRequest * request) { String inputMessage = "No message sent"; String inputParam = "none"; // Serial.println(request); // GET input1 value on /get?input1= if (request->hasParam(R)) { inputMessage = request->getParam(R)->value(); inputParam = R; myMessage.red = inputMessage.toInt(); } // GET input2 value on /get?input2= if (request->hasParam(G)) { inputMessage = request->getParam(G)->value(); inputParam = G; myMessage.green = inputMessage.toInt(); } // GET input3 value on /get?input3= if (request->hasParam(B)) { inputMessage = request->getParam(B)->value(); inputParam = B; myMessage.blue = inputMessage.toInt(); } // GET input3 value on /get?input3= if (request->hasParam(N)) { inputMessage = request->getParam(N)->value(); inputParam = N; myMessage.node = inputMessage.toInt(); } // GET input3 value on /get?input3= if (request->hasParam(T)) { inputMessage = request->getParam(T)->value(); inputParam = T; myMessage.timer = inputMessage.toInt(); } Serial.println(inputMessage); sendMsgtoNodes(); request->send(200, "text/html", index_html); //request->send(200, "text/html", "HTTP GET request sent to your ESP on input field ("+ inputParam + ") with value: " + inputMessage +"
Return to Home Page"); }); server.onNotFound(notFound); server.begin(); /* events.onConnect([](AsyncEventSourceClient *client){ if(client->lastId()){ Serial.printf("Client reconnected! Last message ID that it got is: %u\n", client->lastId()); } // send event with message "hello!", id current millis // and set reconnect delay to 1 second client->send("hello!", NULL, millis(), 10000); }); server.addHandler(&events); server.begin(); */ } void loop() { static unsigned long lastEventTime = millis(); static const unsigned long EVENT_INTERVAL_MS = 5000; if ((millis() - lastEventTime) > EVENT_INTERVAL_MS) { events.send("ping", NULL, millis()); lastEventTime = millis(); } }