ESPNOW Fails to send to reciever

I have tried ESPnow before, but with this code, the sender fails to recieve, even though both the sender and recievered are initialized
Here's the code for the ESP32 CAM (My Sender) :

//Last time, it wasn't obivious enough that I was the one who wrote my code and that I should add more comments to my code to show that I understand how the code works. That being said, enjoy my notes! :D
//Libraries
#include "esp_wifi.h"
#include "esp_camera.h"
#include <WiFi.h>
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "fb_gfx.h"
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
#include "esp_http_server.h"
#include <esp_now.h>
#include <WebServer.h>
// WiFi Password
const char *ssid = "***CENSORED***";
const char *password = "***CENSORED***";
WebServer server(80);
//ESP32-WROOM MAC ADDRESS
uint8_t broadcastAddress[] = { 0xE0, 0x5A, 0x1B, 0xAC, 0x5A, 0xF8 };
#define PART_BOUNDARY "123456789000000000000987654321"

#define CAMERA_MODEL_AI_THINKER

#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27

#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
//ESP NOW
typedef struct struct_message {
  int b;
} struct_message;
struct_message myData;
esp_now_peer_info_t peerInfo;
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
  Serial.print("\r\nLast Packet Send Status:\t");
  Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
static const char *_STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
static const char *_STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
static const char *_STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";

httpd_handle_t camera_httpd = NULL;
httpd_handle_t stream_httpd = NULL;

static const char PROGMEM INDEX_HTML[] = R"rawliteral(
<html>
  <head>
    <title>Terra</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
      body { font-family: Arial; text-align: center; margin:0px auto; padding-top: 30px;}
      table { margin-left: auto; margin-right: auto; }
      td { padding: 8 px; }
      .button {
        background-color: #842593;
        border: none;
        color: white;
        padding: 10px 20px;
        text-align: center;
        text-decoration: none;
        display: inline-block;
        font-size: 18px;
        margin: 6px 3px;
        cursor: pointer;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
        -khtml-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
        -webkit-tap-highlight-color: rgba(0,0,0,0);
      }
      img {  width: auto ;
        max-width: 100% ;
        height: auto ; 
      }
    </style>
  </head>
  <body>
    <h1>Cave Research Robot</h1>
    <img src="" id="photo" >
    <table>
      <tr><td colspan="3" align="center"><button class="button" onmousedown="toggleCheckbox('forward');" ontouchstart="toggleCheckbox('forward');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Forward</button></td></tr>
      <tr><td align="center"><button class="button" onmousedown="toggleCheckbox('left');" ontouchstart="toggleCheckbox('left');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Left</button></td><td align="center"><button class="button" onmousedown="toggleCheckbox('stop');" ontouchstart="toggleCheckbox('stop');">Stop</button></td><td align="center"><button class="button" onmousedown="toggleCheckbox('right');" ontouchstart="toggleCheckbox('right');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Right</button></td></tr>
      <tr><td colspan="3" align="center"><button class="button" onmousedown="toggleCheckbox('backward');" ontouchstart="toggleCheckbox('backward');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Backward</button></td></tr>                   
    </table>
    </head>
    <body>
    
    <br>
    <br>
        <section class="main">
        <figure>
      <div id="stream-container" class="image-container">
        <div class="close" id="close-stream">×</div>
        <img id="stream" src="" class="rotate90">
      </div>
    </figure>
    <br>
    <br>
          <h4>Distance (Meters): <span id="DISvalue">0</span></h4>
        </section>
   <script>
   function toggleCheckbox(x) {
     var xhr = new XMLHttpRequest();
     xhr.open("GET", "/action?go=" + x, true);
     xhr.send();
   }
    setInterval(function() {getSensorData();}, 1000); // Call the update function every second
    function getSensorData() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function(){
      if(this.readyState == 4 && this.status == 200){
        document.getElementByld("DISvalue").innerHTML = this.responseText;
      }
    };
    xhttp.open("GET", "DISread", true);
    xhttp.send();
   }
   window.onload = document.getElementById("photo").src = window.location.href.slice(0, -1) + ":81/stream";
  </script>
  </body>
</html>
)rawliteral";

static esp_err_t index_handler(httpd_req_t *req) {
  httpd_resp_set_type(req, "text/html");
  return httpd_resp_send(req, (const char *)INDEX_HTML, strlen(INDEX_HTML));
}

static esp_err_t stream_handler(httpd_req_t *req) {
  camera_fb_t *fb = NULL;
  esp_err_t res = ESP_OK;
  size_t _jpg_buf_len = 0;
  uint8_t *_jpg_buf = NULL;
  char *part_buf[64];

  res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
  if (res != ESP_OK) {
    return res;
  }

  while (true) {
    fb = esp_camera_fb_get();
    if (!fb) {
      Serial.println("Camera capture failed");
      res = ESP_FAIL;
    } else {
      if (fb->width > 400) {
        if (fb->format != PIXFORMAT_JPEG) {
          bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
          esp_camera_fb_return(fb);
          fb = NULL;
          if (!jpeg_converted) {
            Serial.println("JPEG compression failed");
            res = ESP_FAIL;
          }
        } else {
          _jpg_buf_len = fb->len;
          _jpg_buf = fb->buf;
        }
      }
    }
    if (res == ESP_OK) {
      size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
      res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
    }
    if (res == ESP_OK) {
      res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
    }
    if (res == ESP_OK) {
      res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
    }
    if (fb) {
      esp_camera_fb_return(fb);
      fb = NULL;
      _jpg_buf = NULL;
    } else if (_jpg_buf) {
      free(_jpg_buf);
      _jpg_buf = NULL;
    }
    if (res != ESP_OK) {
      break;
    }
    //Serial.printf("MJPG: %uB\n",(uint32_t)(_jpg_buf_len));
  }
  return res;
}

static esp_err_t cmd_handler(httpd_req_t *req) {
  char *buf;
  size_t buf_len;
  char variable[32] = {
    0,
  };

  buf_len = httpd_req_get_url_query_len(req) + 1;
  if (buf_len > 1) {
    buf = (char *)malloc(buf_len);
    if (!buf) {
      httpd_resp_send_500(req);
      return ESP_FAIL;
    }
    if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK) {
      if (httpd_query_key_value(buf, "go", variable, sizeof(variable)) == ESP_OK) {
      } else {
        free(buf);
        httpd_resp_send_404(req);
        return ESP_FAIL;
      }
    } else {
      free(buf);
      httpd_resp_send_404(req);
      return ESP_FAIL;
    }
    free(buf);
  } else {
    httpd_resp_send_404(req);
    return ESP_FAIL;
  }

  sensor_t *s = esp_camera_sensor_get();
  int res = 0;

  if (!strcmp(variable, "forward")) {
    Serial.println("Forward");
    // Set values to send
    myData.b = (1);
    // Send message via ESP-NOW
    esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
    if (result == ESP_OK) {
      Serial.println("Sent with success");
    } else {
      Serial.println("Error sending the data");
    }
  } else if (!strcmp(variable, "left")) {
    Serial.println("Left");
    // Set values to send
    myData.b = (2);
    // Send message via ESP-NOW
    esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
    if (result == ESP_OK) {
      Serial.println("Sent with success");
    } else {
      Serial.println("Error sending the data");
    }
  } else if (!strcmp(variable, "right")) {
    Serial.println("Right");
    // Set values to send
    myData.b = (3);
    // Send message via ESP-NOW
    esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
    if (result == ESP_OK) {
      Serial.println("Sent with success");
    } else {
      Serial.println("Error sending the data");
    }
  } else if (!strcmp(variable, "backward")) {
    Serial.println("Backward");
    // Set values to send
    myData.b = (4);
    // Send message via ESP-NOW
    esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
    if (result == ESP_OK) {
      Serial.println("Sent with success");
    } else {
      Serial.println("Error sending the data");
    }
  } else if (!strcmp(variable, "stop")) {
    Serial.println("Stop");
    // Set values to send
    myData.b = (5);
    // Send message via ESP-NOW
    esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
    if (result == ESP_OK) {
      Serial.println("Sent with success");
    } else {
      Serial.println("Error sending the data");
    }
  } else {
    res = -1;
  }

  if (res) {
    return httpd_resp_send_500(req);
  }

  httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
  return httpd_resp_send(req, NULL, 0);
}
void handleDIS(){
  String dis = String(readUltrasonicDistance(13, 12), 2);
  server.send(200, "text/plain", dis);
}
void startCameraServer() {
  httpd_config_t config = HTTPD_DEFAULT_CONFIG();
  config.server_port = 80;
  httpd_uri_t index_uri = {
    .uri = "/",
    .method = HTTP_GET,
    .handler = index_handler,
    .user_ctx = NULL
  };

  httpd_uri_t cmd_uri = {
    .uri = "/action",
    .method = HTTP_GET,
    .handler = cmd_handler,
    .user_ctx = NULL
  };
  httpd_uri_t stream_uri = {
    .uri = "/stream",
    .method = HTTP_GET,
    .handler = stream_handler,
    .user_ctx = NULL
  };
  if (httpd_start(&camera_httpd, &config) == ESP_OK) {
    httpd_register_uri_handler(camera_httpd, &index_uri);
    httpd_register_uri_handler(camera_httpd, &cmd_uri);
  }
  config.server_port += 1;
  config.ctrl_port += 1;
  if (httpd_start(&stream_httpd, &config) == ESP_OK) {
    httpd_register_uri_handler(stream_httpd, &stream_uri);
  }
}

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);  //disable brownout detector
  Serial.begin(115200);
  Serial.setDebugOutput(false);
  // Connect to Wi-Fi network with SSID and password
  Serial.print("Setting AP (Access Point)…");
  // Remove the password parameter, if you want the AP (Access Point) to be open
  WiFi.softAP(ssid, password);

  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);

  server.begin();

  // Init ESP-NOW
  if (esp_now_init() != ESP_OK) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }

  // Once ESPNow is successfully Init, we will register for Send CB to
  // get the status of Trasnmitted packet
  esp_now_register_send_cb(OnDataSent);

  // Register peer
  memcpy(peerInfo.peer_addr, broadcastAddress, 6);
  peerInfo.channel = 0;
  peerInfo.encrypt = false;

  // Add peer
  if (esp_now_add_peer(&peerInfo) != ESP_OK) {
    Serial.println("Failed to add peer");
    return;
  }

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;

  if (psramFound()) {
    config.frame_size = FRAMESIZE_VGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }

  // Camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }
  // Start streaming web server
  startCameraServer();
  server.on("/DISread", handleDIS);
}
long readUltrasonicDistance(int triggerPin, int echoPin) {
  pinMode(triggerPin, OUTPUT);  // Clear the trigger
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  // Sets the trigger pin to HIGH state for 10 microseconds
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  pinMode(echoPin, INPUT);
  // Reads the echo pin, and returns the sound wave travel time in microseconds
  return pulseIn(echoPin, HIGH);
}

void loop() {
}

Here's the code for the ESP32 WROOM (My Reciever):

//Libraries
#include <esp_now.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include "esp_wifi.h"
//Chanel
#define CHANNEL 1
//Servos
Servo shoulder1;
Servo elbow1;
Servo shoulder2;
Servo elbow2;
Servo hip3;
Servo knee3;
Servo hip4;
Servo knee4;
//Starting position based on how servos are installed
int s1 = 90;
int s2 = 90;
int h3 = 90;
int h4 = 90;
int e1 = 90;
int e2 = 90;
int k3 = 90;
int k4 = 90;
//Delays
int d1 = 500;
int d2 = 1000;
int d3 = 50;
int d4 = 75;
int d5 = 100;
int d6 = 3000;
int m = 0;
//servo GPIO pins
int s1Pin = 19;
int e1Pin = 18;
int s2Pin = 5;
int e2Pin = 17;
int h3Pin = 16;
int k3Pin = 4;
int h4Pin = 2;
int k4Pin = 15;
//Methods
void walk_fwd() {
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 50 - m);
    delay(0);
    elbow2.write(e2 + 50 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - 20 + m);
    delay(0);
    hip3.write(h3 + 20 - m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee3.write(k3 - 62 + m);
    delay(0);
    elbow2.write(e2 + 62 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - m);
    delay(0);
    hip3.write(h3 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 38 - m);
    delay(0);
    elbow2.write(e2 + 38 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k4 + 50 + m);
    delay(0);
    elbow1.write(e1 - 50 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + 20 - m);
    delay(0);
    hip4.write(h4 - 20 + m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee4.write(k4 + 62 - m);
    delay(0);
    elbow1.write(e1 - 62 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + m);
    delay(0);
    hip4.write(h4 - m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k3 + 38 + m);
    delay(0);
    elbow1.write(e2 - 38 - m);
    delay(15);
  }
}
void walk_left() {
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 40 - m);
    delay(0);
    elbow2.write(e2 + 80 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - 50 + m);
    delay(0);
    hip3.write(h3 + 10 - m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee3.write(k3 - 52 + m);
    delay(0);
    elbow2.write(e2 + 92 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - m);
    delay(0);
    hip3.write(h3 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 28 - m);
    delay(0);
    elbow2.write(e2 + 68 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k4 + 80 + m);
    delay(0);
    elbow1.write(e1 - 40 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + 10 - m);
    delay(0);
    hip4.write(h4 - 50 + m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee4.write(k4 + 92 - m);
    delay(0);
    elbow1.write(e1 - 52 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + m);
    delay(0);
    hip4.write(h4 - m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k3 + 68 + m);
    delay(0);
    elbow1.write(e2 - 28 - m);
    delay(15);
  }
}
void walk_right() {
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 80 - m);
    delay(0);
    elbow2.write(e2 + 40 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - 10 + m);
    delay(0);
    hip3.write(h3 + 50 - m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee3.write(k3 - 92 + m);
    delay(0);
    elbow2.write(e2 + 52 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - m);
    delay(0);
    hip3.write(h3 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 68 - m);
    delay(0);
    elbow2.write(e2 + 28 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k4 + 40 + m);
    delay(0);
    elbow1.write(e1 - 80 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + 50 - m);
    delay(0);
    hip4.write(h4 - 10 + m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee4.write(k4 + 52 - m);
    delay(0);
    elbow1.write(e1 - 92 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + m);
    delay(0);
    hip4.write(h4 - m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k3 + 28 + m);
    delay(0);
    elbow1.write(e2 - 68 - m);
    delay(15);
  }
}
void walk_back() {
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k3 - 48 - m);
    delay(0);
    elbow1.write(e2 + 48 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 - m);
    delay(0);
    hip4.write(h4 + m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee4.write(k4 - 72 + m);
    delay(0);
    elbow1.write(e1 + 72 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 - 30 + m);
    delay(0);
    hip4.write(h4 + 30 - m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k4 - 60 - m);
    delay(0);
    elbow1.write(e1 + 60 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 + 48 + m);
    delay(0);
    elbow2.write(e2 - 48 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 + m);
    delay(0);
    hip3.write(h3 - m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee3.write(k3 + 72 - m);
    delay(0);
    elbow2.write(e2 - 72 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 + 30 - m);
    delay(0);
    hip3.write(h3 - 30 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 + 60 + m);
    delay(0);
    elbow2.write(e2 - 60 - m);
    delay(15);
  }
}
void walk_stop() {
  elbow2.write(e2 + 60);
  delay(d5);
  shoulder2.write(s2 - 30);
  delay(d5);
  knee4.write(k4 + 60);
  delay(d5);
  hip4.write(h4 - 30);
  delay(d5);
  elbow1.write(e1 - 60);
  delay(d5);
  shoulder1.write(s1 + 30);
  delay(d5);
  knee3.write(k3 - 60);
  delay(d5);
  hip3.write(h3 + 30);
  delay(d6);
}
// WiFi Password
const char* ssid1 = "VinnieWiFi";
const char* password1 = "Qwerty123!";
// Receive data
typedef struct struct_message {
  int b;
} struct_message;
struct_message myData;
// callback function that will be executed when data is received
void OnDataRecv(const uint8_t* mac, const uint8_t* incomingData, int len) {
  memcpy(&myData, incomingData, sizeof(myData));
  Serial.println("Data Recieved");
  if (myData.b == 1) {
    Serial.println("Forward");
    while (myData.b == 1){
      walk_fwd();}
   }else if (myData.b == 2) {
    Serial.println("Left");
    while (myData.b == 2){
      walk_left();}
  } else if (myData.b == 3) {
    Serial.println("Right");
    while (myData.b == 3){
      walk_right();}
  } else if (myData.b == 4) {
    Serial.println("Backward");
    while (myData.b == 4){
      walk_back();}
  } else
    Serial.println("Stop");
    walk_stop();
  }

void setup() {
  Serial.begin(115200);
  // Wi-Fi connection
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(ssid1, password1, CHANNEL, 1);
  IPAddress myIP = WiFi.softAPIP();
  WiFi.begin(ssid1, password1);
  Serial.println("Connected");
  // Init ESP-NOW
  esp_now_init();
  if (esp_now_init() != ESP_OK) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }
  esp_now_register_recv_cb(esp_now_recv_cb_t(OnDataRecv));

  hip3.attach(h3Pin);  //purple
  hip3.write(h3);
  delay(d1);
  shoulder1.attach(s1Pin);  //orange
  shoulder1.write(s1);
  delay(d1);
  hip4.attach(h4Pin);  //grey
  hip4.write(h4);
  delay(d1);
  shoulder2.attach(s2Pin);  //green
  shoulder2.write(s2);
  delay(d1);
  knee3.attach(k3Pin);  //black
  knee3.write(k3);
  delay(d1);
  elbow1.attach(e1Pin);  //yellow
  elbow1.write(e1);
  delay(d1);
  knee4.attach(k4Pin);  //white
  knee4.write(k4);
  delay(d1);
  elbow2.attach(e2Pin);  //blue
  elbow2.write(e2);
  delay(d5);
  elbow2.write(e2 + 60);
  delay(d5);
  shoulder2.write(s2 - 30);
  delay(d5);
  knee4.write(k4 + 60);
  delay(d5);
  hip4.write(h4 - 30);
  delay(d5);
  elbow1.write(e1 - 60);
  delay(d5);
  shoulder1.write(s1 + 30);
  delay(d5);
  knee3.write(k3 - 60);
  delay(d5);
  hip3.write(h3 + 30);
  delay(d5);
}

void loop() {
}


}

void loop() {
}

And here's what's in the Serial Monitor:

entry 0x400805f0
Setting AP (Access Point)…AP IP address: 192.168.4.1
Forward
Error sending the data
Stop
Error sending the data
Forward
Error sending the data
Stop
Error sending the data
Forward
Error sending the data
Stop
Error sending the data
Left
Error sending the data
Stop
Error sending the data

Any help is appeciated. I thought I posted this yesterday, but turns out the pain killers I took were WAY too strong, so I never actually finished typing this. If I did already post this, opps!

sender and receiver having the same MAC won't work

My bad, I copied the wrong code, I've edited it to fix it

Ok, so I have fixed up my code, so now the first thing will send, but that's the problem. It only sends the first command.

Here's the new code for the sender:

//Last time, it wasn't obivious enough that I was the one who wrote my code and that I should add more comments to my code to show that I understand how the code works. That being said, enjoy my notes! :D
//Libraries
#include "esp_wifi.h"
#include "esp_camera.h"
#include <WiFi.h>
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "fb_gfx.h"
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
#include "esp_http_server.h"
#include <esp_now.h>
#include <WebServer.h>
// WiFi Password
const char *ssid = "TerraWiFi";
const char *password = "Qwerty123!";
WebServer server(80);
//ESP32-WROOM MAC ADDRESS
uint8_t broadcastAddress[] = { 0xE0, 0x5A, 0x1B, 0xAC, 0x5A, 0xF8 };
#define PART_BOUNDARY "123456789000000000000987654321"

#define CAMERA_MODEL_AI_THINKER

#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27

#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
//ESP NOW
typedef struct struct_message {
  int b;
} struct_message;
struct_message myData;
esp_now_peer_info_t peerInfo;
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
  Serial.print("\r\nLast Packet Send Status:\t");
  Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
static const char *_STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
static const char *_STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
static const char *_STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";

httpd_handle_t camera_httpd = NULL;
httpd_handle_t stream_httpd = NULL;

static const char PROGMEM INDEX_HTML[] = R"rawliteral(
<html>
  <head>
    <title>Terra</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
      body { font-family: Arial; text-align: center; margin:0px auto; padding-top: 30px;}
      table { margin-left: auto; margin-right: auto; }
      td { padding: 8 px; }
      .button {
        background-color: #842593;
        border: none;
        color: white;
        padding: 10px 20px;
        text-align: center;
        text-decoration: none;
        display: inline-block;
        font-size: 18px;
        margin: 6px 3px;
        cursor: pointer;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
        -khtml-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
        -webkit-tap-highlight-color: rgba(0,0,0,0);
      }
      img {  width: auto ;
        max-width: 100% ;
        height: auto ; 
      }
    </style>
  </head>
  <body>
    <h1>Cave Research Robot</h1>
    <img src="" id="photo" >
    <table>
      <tr><td colspan="3" align="center"><button class="button" onmousedown="toggleCheckbox('forward');" ontouchstart="toggleCheckbox('forward');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Forward</button></td></tr>
      <tr><td align="center"><button class="button" onmousedown="toggleCheckbox('left');" ontouchstart="toggleCheckbox('left');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Left</button></td><td align="center"><button class="button" onmousedown="toggleCheckbox('stop');" ontouchstart="toggleCheckbox('stop');">Stop</button></td><td align="center"><button class="button" onmousedown="toggleCheckbox('right');" ontouchstart="toggleCheckbox('right');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Right</button></td></tr>
      <tr><td colspan="3" align="center"><button class="button" onmousedown="toggleCheckbox('backward');" ontouchstart="toggleCheckbox('backward');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Backward</button></td></tr>                   
    </table>
    </head>
    <body>
    
    <br>
    <br>
        <section class="main">
        <figure>
      <div id="stream-container" class="image-container">
        <div class="close" id="close-stream">×</div>
        <img id="stream" src="" class="rotate90">
      </div>
    </figure>
    <br>
    <br>
          <h4>Distance (Meters): <span id="DISvalue">0</span></h4>
        </section>
   <script>
   function toggleCheckbox(x) {
     var xhr = new XMLHttpRequest();
     xhr.open("GET", "/action?go=" + x, true);
     xhr.send();
   }
    setInterval(function() {getSensorData();}, 1000); // Call the update function every second
    function getSensorData() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function(){
      if(this.readyState == 4 && this.status == 200){
        document.getElementByld("DISvalue").innerHTML = this.responseText;
      }
    };
    xhttp.open("GET", "DISread", true);
    xhttp.send();
   }
   window.onload = document.getElementById("photo").src = window.location.href.slice(0, -1) + ":81/stream";
  </script>
  </body>
</html>
)rawliteral";

static esp_err_t index_handler(httpd_req_t *req) {
  httpd_resp_set_type(req, "text/html");
  return httpd_resp_send(req, (const char *)INDEX_HTML, strlen(INDEX_HTML));
}

static esp_err_t stream_handler(httpd_req_t *req) {
  camera_fb_t *fb = NULL;
  esp_err_t res = ESP_OK;
  size_t _jpg_buf_len = 0;
  uint8_t *_jpg_buf = NULL;
  char *part_buf[64];

  res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
  if (res != ESP_OK) {
    return res;
  }

  while (true) {
    fb = esp_camera_fb_get();
    if (!fb) {
      Serial.println("Camera capture failed");
      res = ESP_FAIL;
    } else {
      if (fb->width > 400) {
        if (fb->format != PIXFORMAT_JPEG) {
          bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
          esp_camera_fb_return(fb);
          fb = NULL;
          if (!jpeg_converted) {
            Serial.println("JPEG compression failed");
            res = ESP_FAIL;
          }
        } else {
          _jpg_buf_len = fb->len;
          _jpg_buf = fb->buf;
        }
      }
    }
    if (res == ESP_OK) {
      size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
      res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
    }
    if (res == ESP_OK) {
      res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
    }
    if (res == ESP_OK) {
      res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
    }
    if (fb) {
      esp_camera_fb_return(fb);
      fb = NULL;
      _jpg_buf = NULL;
    } else if (_jpg_buf) {
      free(_jpg_buf);
      _jpg_buf = NULL;
    }
    if (res != ESP_OK) {
      break;
    }
    //Serial.printf("MJPG: %uB\n",(uint32_t)(_jpg_buf_len));
  }
  return res;
}

static esp_err_t cmd_handler(httpd_req_t *req) {
  char *buf;
  size_t buf_len;
  char variable[32] = {
    0,
  };

  buf_len = httpd_req_get_url_query_len(req) + 1;
  if (buf_len > 1) {
    buf = (char *)malloc(buf_len);
    if (!buf) {
      httpd_resp_send_500(req);
      return ESP_FAIL;
    }
    if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK) {
      if (httpd_query_key_value(buf, "go", variable, sizeof(variable)) == ESP_OK) {
      } else {
        free(buf);
        httpd_resp_send_404(req);
        return ESP_FAIL;
      }
    } else {
      free(buf);
      httpd_resp_send_404(req);
      return ESP_FAIL;
    }
    free(buf);
  } else {
    httpd_resp_send_404(req);
    return ESP_FAIL;
  }

  sensor_t *s = esp_camera_sensor_get();
  int res = 0;

  if (!strcmp(variable, "forward")) {
    Serial.println("Forward");
    // Set values to send
    myData.b = (1);
    // Send message via ESP-NOW
    esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
    if (result == ESP_OK) {
      Serial.println("Sent with success");
    } else {
      Serial.println("Error sending the data");
    }
  } else if (!strcmp(variable, "left")) {
    Serial.println("Left");
    // Set values to send
    myData.b = (2);
    // Send message via ESP-NOW
    esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
    if (result == ESP_OK) {
      Serial.println("Sent with success");
    } else {
      Serial.println("Error sending the data");
    }
  } else if (!strcmp(variable, "right")) {
    Serial.println("Right");
    // Set values to send
    myData.b = (3);
    // Send message via ESP-NOW
    esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
    if (result == ESP_OK) {
      Serial.println("Sent with success");
    } else {
      Serial.println("Error sending the data");
    }
  } else if (!strcmp(variable, "backward")) {
    Serial.println("Backward");
    // Set values to send
    myData.b = (4);
    // Send message via ESP-NOW
    esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
    if (result == ESP_OK) {
      Serial.println("Sent with success");
    } else {
      Serial.println("Error sending the data");
    }
  } else if (!strcmp(variable, "stop")) {
    Serial.println("Stop");
    // Set values to send
    myData.b = (5);
    // Send message via ESP-NOW
    esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
    if (result == ESP_OK) {
      Serial.println("Sent with success");
    } else {
      Serial.println("Error sending the data");
    }
  } else {
    res = -1;
  }

  if (res) {
    return httpd_resp_send_500(req);
  }

  httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
  return httpd_resp_send(req, NULL, 0);
}
void handleDIS(){
  String dis = String(readUltrasonicDistance(13, 12), 2);
  server.send(200, "text/plain", dis);
}
void startCameraServer() {
  httpd_config_t config = HTTPD_DEFAULT_CONFIG();
  config.server_port = 80;
  httpd_uri_t index_uri = {
    .uri = "/",
    .method = HTTP_GET,
    .handler = index_handler,
    .user_ctx = NULL
  };

  httpd_uri_t cmd_uri = {
    .uri = "/action",
    .method = HTTP_GET,
    .handler = cmd_handler,
    .user_ctx = NULL
  };
  httpd_uri_t stream_uri = {
    .uri = "/stream",
    .method = HTTP_GET,
    .handler = stream_handler,
    .user_ctx = NULL
  };
  if (httpd_start(&camera_httpd, &config) == ESP_OK) {
    httpd_register_uri_handler(camera_httpd, &index_uri);
    httpd_register_uri_handler(camera_httpd, &cmd_uri);
  }
  config.server_port += 1;
  config.ctrl_port += 1;
  if (httpd_start(&stream_httpd, &config) == ESP_OK) {
    httpd_register_uri_handler(stream_httpd, &stream_uri);
  }
}

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);  //disable brownout detector
  Serial.begin(115200);
  Serial.setDebugOutput(false);
  // Connect to Wi-Fi network with SSID and password
  Serial.print("Setting AP (Access Point)…");
  // Remove the password parameter, if you want the AP (Access Point) to be open
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(ssid, password);
  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);

  server.begin();

  // Init ESP-NOW
  if (esp_now_init() != ESP_OK) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }

  // Once ESPNow is successfully Init, we will register for Send CB to
  // get the status of Trasnmitted packet
  esp_now_register_send_cb(OnDataSent);

  // Register peer
  memcpy(peerInfo.peer_addr, broadcastAddress, 6);
  peerInfo.channel = 0;
  peerInfo.encrypt = false;

  // Add peer
  if (esp_now_add_peer(&peerInfo) != ESP_OK) {
    Serial.println("Failed to add peer");
    return;
  }

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;

  if (psramFound()) {
    config.frame_size = FRAMESIZE_VGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }

  // Camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }
  // Start streaming web server
  startCameraServer();
  server.on("/DISread", handleDIS);
}
long readUltrasonicDistance(int triggerPin, int echoPin) {
  pinMode(triggerPin, OUTPUT);  // Clear the trigger
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  // Sets the trigger pin to HIGH state for 10 microseconds
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  pinMode(echoPin, INPUT);
  // Reads the echo pin, and returns the sound wave travel time in microseconds
  return pulseIn(echoPin, HIGH);
}

void loop() {
}

Here's the new Reciever Code:

//Libraries
#include <esp_now.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include "esp_wifi.h"
//Chanel
#define CHANNEL 1
//Servos
Servo shoulder1;
Servo elbow1;
Servo shoulder2;
Servo elbow2;
Servo hip3;
Servo knee3;
Servo hip4;
Servo knee4;
//Starting position based on how servos are installed
int s1 = 90;
int s2 = 90;
int h3 = 90;
int h4 = 90;
int e1 = 90;
int e2 = 90;
int k3 = 90;
int k4 = 90;
//Delays
int d1 = 500;
int d2 = 1000;
int d3 = 50;
int d4 = 75;
int d5 = 100;
int d6 = 3000;
int m = 0;
//servo GPIO pins
int s1Pin = 19;
int e1Pin = 18;
int s2Pin = 5;
int e2Pin = 17;
int h3Pin = 16;
int k3Pin = 4;
int h4Pin = 2;
int k4Pin = 15;
//Methods
void walk_fwd() {
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 50 - m);
    delay(0);
    elbow2.write(e2 + 50 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - 20 + m);
    delay(0);
    hip3.write(h3 + 20 - m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee3.write(k3 - 62 + m);
    delay(0);
    elbow2.write(e2 + 62 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - m);
    delay(0);
    hip3.write(h3 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 38 - m);
    delay(0);
    elbow2.write(e2 + 38 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k4 + 50 + m);
    delay(0);
    elbow1.write(e1 - 50 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + 20 - m);
    delay(0);
    hip4.write(h4 - 20 + m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee4.write(k4 + 62 - m);
    delay(0);
    elbow1.write(e1 - 62 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + m);
    delay(0);
    hip4.write(h4 - m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k3 + 38 + m);
    delay(0);
    elbow1.write(e2 - 38 - m);
    delay(15);
  }
}
void walk_left() {
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 40 - m);
    delay(0);
    elbow2.write(e2 + 80 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - 50 + m);
    delay(0);
    hip3.write(h3 + 10 - m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee3.write(k3 - 52 + m);
    delay(0);
    elbow2.write(e2 + 92 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - m);
    delay(0);
    hip3.write(h3 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 28 - m);
    delay(0);
    elbow2.write(e2 + 68 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k4 + 80 + m);
    delay(0);
    elbow1.write(e1 - 40 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + 10 - m);
    delay(0);
    hip4.write(h4 - 50 + m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee4.write(k4 + 92 - m);
    delay(0);
    elbow1.write(e1 - 52 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + m);
    delay(0);
    hip4.write(h4 - m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k3 + 68 + m);
    delay(0);
    elbow1.write(e2 - 28 - m);
    delay(15);
  }
}
void walk_right() {
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 80 - m);
    delay(0);
    elbow2.write(e2 + 40 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - 10 + m);
    delay(0);
    hip3.write(h3 + 50 - m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee3.write(k3 - 92 + m);
    delay(0);
    elbow2.write(e2 + 52 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 - m);
    delay(0);
    hip3.write(h3 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 - 68 - m);
    delay(0);
    elbow2.write(e2 + 28 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k4 + 40 + m);
    delay(0);
    elbow1.write(e1 - 80 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + 50 - m);
    delay(0);
    hip4.write(h4 - 10 + m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee4.write(k4 + 52 - m);
    delay(0);
    elbow1.write(e1 - 92 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 + m);
    delay(0);
    hip4.write(h4 - m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k3 + 28 + m);
    delay(0);
    elbow1.write(e2 - 68 - m);
    delay(15);
  }
}
void walk_back() {
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k3 - 48 - m);
    delay(0);
    elbow1.write(e2 + 48 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 - m);
    delay(0);
    hip4.write(h4 + m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee4.write(k4 - 72 + m);
    delay(0);
    elbow1.write(e1 + 72 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder1.write(s1 - 30 + m);
    delay(0);
    hip4.write(h4 + 30 - m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee4.write(k4 - 60 - m);
    delay(0);
    elbow1.write(e1 + 60 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 + 48 + m);
    delay(0);
    elbow2.write(e2 - 48 - m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 + m);
    delay(0);
    hip3.write(h3 - m);
    delay(15);
  }
  for (m = 0; m <= 24; m += 1) {
    knee3.write(k3 + 72 - m);
    delay(0);
    elbow2.write(e2 - 72 + m);
    delay(15);
  }
  for (m = 0; m <= 30; m += 1) {
    shoulder2.write(s2 + 30 - m);
    delay(0);
    hip3.write(h3 - 30 + m);
    delay(15);
  }
  for (m = 0; m <= 12; m += 1) {
    knee3.write(k3 + 60 + m);
    delay(0);
    elbow2.write(e2 - 60 - m);
    delay(15);
  }
}
void walk_stop() {
  elbow2.write(e2 + 60);
  delay(d5);
  shoulder2.write(s2 - 30);
  delay(d5);
  knee4.write(k4 + 60);
  delay(d5);
  hip4.write(h4 - 30);
  delay(d5);
  elbow1.write(e1 - 60);
  delay(d5);
  shoulder1.write(s1 + 30);
  delay(d5);
  knee3.write(k3 - 60);
  delay(d5);
  hip3.write(h3 + 30);
  delay(d6);
}
// WiFi Password
const char* ssid1 = "TerraWiFi";
const char* password1 = "Qwerty123!";
// Receive data
typedef struct struct_message {
  int b;
} struct_message;
struct_message myData;
// callback function that will be executed when data is received
void OnDataRecv(const uint8_t* mac, const uint8_t* incomingData, int len) {
  memcpy(&myData, incomingData, sizeof(myData));
  Serial.println("Data Recieved");
  if (myData.b == 1) {
    Serial.println("Forward");
    while (myData.b == 1){
      walk_fwd();}
   }else if (myData.b == 2) {
    Serial.println("Left");
    while (myData.b == 2){
      walk_left();}
  } else if (myData.b == 3) {
    Serial.println("Right");
    while (myData.b == 3){
      walk_right();}
  } else if (myData.b == 4) {
    Serial.println("Backward");
    while (myData.b == 4){
      walk_back();}
  } else
    Serial.println("Stop");
    walk_stop();
  }

void setup() {
  Serial.begin(115200);
  // Wi-Fi connection
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(ssid1, password1, CHANNEL, 1);
  IPAddress myIP = WiFi.softAPIP();
  WiFi.begin(ssid1, password1);
  Serial.println("Connected");
  // Init ESP-NOW
  esp_now_init();
  if (esp_now_init() != ESP_OK) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }
  esp_now_register_recv_cb(esp_now_recv_cb_t(OnDataRecv));

  hip3.attach(h3Pin);  //purple
  hip3.write(h3);
  delay(d1);
  shoulder1.attach(s1Pin);  //orange
  shoulder1.write(s1);
  delay(d1);
  hip4.attach(h4Pin);  //grey
  hip4.write(h4);
  delay(d1);
  shoulder2.attach(s2Pin);  //green
  shoulder2.write(s2);
  delay(d1);
  knee3.attach(k3Pin);  //black
  knee3.write(k3);
  delay(d1);
  elbow1.attach(e1Pin);  //yellow
  elbow1.write(e1);
  delay(d1);
  knee4.attach(k4Pin);  //white
  knee4.write(k4);
  delay(d1);
  elbow2.attach(e2Pin);  //blue
  elbow2.write(e2);
  delay(d5);
  elbow2.write(e2 + 60);
  delay(d5);
  shoulder2.write(s2 - 30);
  delay(d5);
  knee4.write(k4 + 60);
  delay(d5);
  hip4.write(h4 - 30);
  delay(d5);
  elbow1.write(e1 - 60);
  delay(d5);
  shoulder1.write(s1 + 30);
  delay(d5);
  knee3.write(k3 - 60);
  delay(d5);
  hip3.write(h3 + 30);
  delay(d5);
}

void loop() {
}

Two receiver codes, or did you accidentally paste twice?

Accidentally pasted twice, sorry

Taking a poorly-educated guess, but is it related to the "while" clauses inside your void OnDataRecv?

I think that is the issue, but I do need those while loops or else the user has to spam the forward button

I’m very new to ESP-NOW (and semi inexperienced w Arduino), but I am doing something very similar to your project.

I send the variable to the receiver, and the “on receive” function ONLY sets this variable on the receiver board. The receiver then uses this variable in a SWITCH CASE to perform whatever action is necessary.