{"id":306,"date":"2026-06-10T21:25:59","date_gmt":"2026-06-10T13:25:59","guid":{"rendered":"https:\/\/projectleon.net\/make\/blog\/esp32cam-fpv-wifi-robot-car-farsi\/"},"modified":"2026-06-10T21:26:00","modified_gmt":"2026-06-10T13:26:00","slug":"esp32cam-fpv-wifi-robot-car-farsi","status":"publish","type":"post","link":"https:\/\/projectleon.net\/make\/blog\/esp32cam-fpv-wifi-robot-car-farsi\/","title":{"rendered":"\u0633\u0627\u062e\u062a \u0645\u0627\u0634\u06cc\u0646 FPV \u0628\u0627 ESP32-CAM: \u062a\u0635\u0648\u06cc\u0631 \u0632\u0646\u062f\u0647\u060c \u06a9\u0646\u062a\u0631\u0644 \u0627\u0632 \u0645\u0631\u0648\u0631\u06af\u0631 \u0648\u0628 \u0648 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u06a9\u0627\u0645\u0644 \u0645\u0628\u062a\u062f\u06cc (\u0641\u0627\u0631\u0633\u06cc)"},"content":{"rendered":"<div class='hero-image-container' style='margin-bottom:28px;border-radius:14px;overflow:hidden;box-shadow:0 4px 18px rgba(0,0,0,0.08)'>\n<img src='https:\/\/projectleon.net\/make\/wp-content\/uploads\/2026\/06\/post02-esp32cam.jpg' alt='ESP32-CAM FPV \u0645\u0627\u0634\u06cc\u0646 \u0631\u0628\u0627\u062a\u06cc\u06a9' style='width:100%;height:auto;display:block' loading='eager'\/>\n<\/div>\n<div class='beginner-intro' style='background:#f0f7ff;border-right:4px solid #2e5fb6;padding:16px 20px;border-radius:10px;margin-bottom:22px'>\n<h2 style='margin-top:0'>ESP32-CAM \u0648 FPV \u06cc\u0639\u0646\u06cc \u0686\u0647\u061f (\u0628\u0631\u0627\u06cc \u06a9\u0633\u06cc \u06a9\u0647 \u062a\u0627 \u0627\u0645\u0631\u0648\u0632 \u0646\u062f\u06cc\u062f\u0647)<\/h2>\n<p><strong>ESP32-CAM<\/strong> \u06cc\u06a9 \u0628\u0631\u062f \u0627\u0644\u06a9\u062a\u0631\u0648\u0646\u06cc\u06a9\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0627\u0631\u0632\u0627\u0646 (\u0632\u06cc\u0631 \u06f5\u06f0\u06f0 \u0647\u0632\u0627\u0631 \u062a\u0648\u0645\u0627\u0646) \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u062e\u0648\u062f\u0634 \u06cc\u06a9 \u0645\u06cc\u06a9\u0631\u0648\u06a9\u0646\u062a\u0631\u0644\u0631 ESP32\u060c \u0648\u0627\u06cc\u200c\u0641\u0627\u06cc\u060c \u0628\u0644\u0648\u062a\u0648\u062b\u060c \u0648 \u06cc\u06a9 \u062f\u0648\u0631\u0628\u06cc\u0646 \u06f2 \u0645\u06af\u0627\u067e\u06cc\u06a9\u0633\u0644\u06cc \u062f\u0627\u0631\u062f. \u0645\u062f\u0644 \u0645\u062d\u0628\u0648\u0628 \u0622\u0646 \u0627\u0632 \u0634\u0631\u06a9\u062a AI-Thinker \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0628\u0631\u062f \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062f\u0648\u0631\u0628\u06cc\u0646 IP\u060c \u06cc\u06a9 \u0648\u0628\u200c\u0633\u0631\u0648\u0631\u060c \u0648 \u06cc\u06a9 \u06a9\u0646\u062a\u0631\u0644\u200c\u06a9\u0646\u0646\u062f\u0647 \u0631\u0628\u0627\u062a \u0639\u0645\u0644 \u06a9\u0646\u062f \u2014 \u0647\u0645\u0647 \u062f\u0631 \u06cc\u06a9 \u062a\u0631\u0627\u0634\u0647 \u06a9\u0648\u0686\u06a9.<\/p>\n<p><strong>FPV<\/strong> \u0645\u062e\u0641\u0641 First Person View \u06cc\u0639\u0646\u06cc \u062f\u06cc\u062f\u0646 \u062f\u0646\u06cc\u0627 \u0627\u0632 \u062f\u06cc\u062f \u0627\u0648\u0644\u200c\u0634\u062e\u0635. \u062f\u0631 \u067e\u0647\u067e\u0627\u062f\u0647\u0627 \u0648 \u0645\u0627\u0634\u06cc\u0646\u200c\u0647\u0627\u06cc RC\u060c FPV \u06cc\u0639\u0646\u06cc \u0634\u0645\u0627 \u062a\u0635\u0648\u06cc\u0631 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0646\u0635\u0628\u200c\u0634\u062f\u0647 \u0631\u0648\u06cc \u0648\u0633\u06cc\u0644\u0647 \u0631\u0627 \u0631\u0648\u06cc \u0646\u0645\u0627\u06cc\u0634\u06af\u0631 \u06cc\u0627 \u0639\u06cc\u0646\u06a9 \u0645\u06cc\u200c\u0628\u06cc\u0646\u06cc\u062f \u2014 \u0627\u0646\u06af\u0627\u0631 \u06a9\u0647 \u062e\u0648\u062f\u062a\u0627\u0646 \u0622\u0646\u062c\u0627 \u0646\u0634\u0633\u062a\u0647\u200c\u0627\u06cc\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0628\u0647\u200c\u062c\u0627\u06cc \u0641\u0631\u0633\u062a\u0646\u062f\u0647 FPV \u06af\u0631\u0627\u0646\u200c\u0642\u06cc\u0645\u062a\u060c \u0627\u0632 \u0648\u0627\u06cc\u200c\u0641\u0627\u06cc ESP32 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u062a\u0627 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0647 \u06af\u0648\u0634\u06cc \u06cc\u0627 \u0644\u067e\u200c\u062a\u0627\u067e \u0628\u06cc\u0627\u06cc\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0622\u067e\u0644\u0648\u062f \u06a9\u062f \u0631\u0648\u06cc ESP32-CAM \u0628\u0647 \u06cc\u06a9 <strong>FTDI Programmer<\/strong> \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f \u2014 \u06cc\u06a9 \u0645\u0628\u062f\u0644 USB-\u0628\u0647-UART \u0627\u0631\u0632\u0627\u0646 \u06a9\u0647 \u062f\u0648 \u067e\u06cc\u0646 TX\/RX \u0646\u062f\u0627\u0631\u062f \u0648\u0644\u06cc \u0628\u062f\u0648\u0646 \u0622\u0646 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 ESP32-CAM \u0645\u062a\u0635\u0644 \u0634\u0648\u06cc\u062f. \u0627\u06cc\u0646 \u06cc\u06a9 \u0628\u0627\u0631 \u062a\u0647\u06cc\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u0622\u06cc\u0646\u062f\u0647 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<\/div>\n<div style='border:1px solid #d8d8d8;padding:18px 20px;border-radius:12px;background:#fafafa;margin-bottom:22px'>\n<h2 style='margin-top:0'>\u0645\u062d\u0635\u0648\u0644\u06cc \u06a9\u0647 \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u062f<\/h2>\n<p><strong>\u0645\u0627\u0634\u06cc\u0646 \u0631\u0628\u0627\u062a\u06cc\u06a9 FPV \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0648\u0627\u06cc\u200c\u0641\u0627\u06cc<\/strong> \u2014 \u0628\u0627 \u06af\u0648\u0634\u06cc \u06cc\u0627 \u0644\u067e\u200c\u062a\u0627\u067e \u0628\u0647 \u0648\u0627\u06cc\u200c\u0641\u0627\u06cc ESP32-CAM \u0648\u0635\u0644 \u0645\u06cc\u200c\u0634\u0648\u06cc\u062f\u060c \u0635\u0641\u062d\u0647 \u06a9\u0646\u062a\u0631\u0644 \u0631\u0627 \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631 \u0628\u0627\u0632 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u060c \u062a\u0635\u0648\u06cc\u0631 \u0632\u0646\u062f\u0647 \u0645\u06cc\u200c\u0628\u06cc\u0646\u06cc\u062f \u0648 \u0645\u0627\u0634\u06cc\u0646 \u0631\u0627 \u0628\u0647 \u062c\u0644\u0648\/\u0639\u0642\u0628\/\u0686\u067e\/\u0631\u0627\u0633\u062a \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f.<\/p>\n<ul>\n<li><strong>\u0632\u0645\u0627\u0646 \u0633\u0627\u062e\u062a:<\/strong> \u06f3 \u062a\u0627 \u06f5 \u0633\u0627\u0639\u062a<\/li>\n<li><strong>\u0633\u0637\u062d:<\/strong> \u0645\u0628\u062a\u062f\u06cc \u0631\u0648 \u0628\u0647 \u0645\u062a\u0648\u0633\u0637<\/li>\n<li><strong>\u0628\u0631\u062f \u0648\u0627\u06cc\u200c\u0641\u0627\u06cc:<\/strong> \u06f3\u06f0 \u062a\u0627 \u06f1\u06f0\u06f0 \u0645\u062a\u0631 \u062f\u0631 \u0641\u0636\u0627\u06cc \u0628\u0627\u0632<\/li>\n<li><strong>\u0647\u0632\u06cc\u0646\u0647 \u062a\u0642\u0631\u06cc\u0628\u06cc:<\/strong> \u06f8\u06f0\u06f0 \u0647\u0632\u0627\u0631 \u062a\u0627 \u06f1.\u06f5 \u0645\u06cc\u0644\u06cc\u0648\u0646 \u062a\u0648\u0645\u0627\u0646<\/li>\n<\/ul>\n<\/div>\n<p><svg viewBox='0 0 860 250' width='100%' xmlns='http:\/\/www.w3.org\/2000\/svg' style='background:#fff;border:1px solid #e0e0e0;border-radius:12px;margin-bottom:22px'>\n<rect x='160' y='55' width='540' height='155' rx='18' fill='#f0f4ff' stroke='#3a60c0' stroke-width='3'\/>\n<rect x='320' y='72' width='200' height='52' rx='10' fill='#8bd3dd' stroke='#1f6f78' stroke-width='2'\/>\n<rect x='310' y='140' width='220' height='38' rx='10' fill='#f7d794' stroke='#a06d00' stroke-width='2'\/>\n<circle cx='198' cy='132' r='36' fill='#d0d0d0' stroke='#555' stroke-width='3'\/>\n<circle cx='662' cy='132' r='36' fill='#d0d0d0' stroke='#555' stroke-width='3'\/>\n<rect x='620' y='55' width='80' height='36' rx='8' fill='#b7e4a0' stroke='#3a7a1e' stroke-width='2'\/>\n<line x1='620' y1='73' x2='520' y2='98' stroke='#3a7a1e' stroke-width='2' stroke-dasharray='5,3'\/>\n<text x='430' y='32' text-anchor='middle' font-size='19' font-family='Tahoma' fill='#333'>ESP32-CAM FPV Robot \u2014 \u0645\u0639\u0645\u0627\u0631\u06cc \u0633\u06cc\u0633\u062a\u0645<\/text>\n<text x='420' y='103' text-anchor='middle' font-size='15' font-family='Tahoma' fill='#1f6f78'>ESP32-CAM (\u0645\u063a\u0632 + \u062f\u0648\u0631\u0628\u06cc\u0646 + WiFi AP)<\/text>\n<text x='420' y='165' text-anchor='middle' font-size='14' font-family='Tahoma' fill='#a06d00'>L298N \u062f\u0631\u0627\u06cc\u0648\u0631 \u0645\u0648\u062a\u0648\u0631 + \u0628\u0627\u062a\u0631\u06cc LiPo<\/text>\n<text x='198' y='137' text-anchor='middle' font-size='13' font-family='Tahoma'>\u0645\u0648\u062a\u0648\u0631 \u0686\u067e<\/text>\n<text x='662' y='137' text-anchor='middle' font-size='13' font-family='Tahoma'>\u0645\u0648\u062a\u0648\u0631 \u0631\u0627\u0633\u062a<\/text>\n<text x='660' y='77' text-anchor='middle' font-size='12' font-family='Tahoma' fill='#3a7a1e'>\u062f\u0648\u0631\u0628\u06cc\u0646 OV2640<\/text>\n<text x='430' y='235' text-anchor='middle' font-size='13' font-family='Tahoma' fill='#888'>\u06af\u0648\u0634\u06cc \u0634\u0645\u0627 \u2190 WiFi \u2190 ESP32-CAM \u2192 L298N \u2192 \u0645\u0648\u062a\u0648\u0631\u0647\u0627<\/text>\n<\/svg><\/p>\n<h2>\u0642\u0637\u0639\u0627\u062a \u0648 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 (BOM)<\/h2>\n<table style='width:100%;border-collapse:collapse;margin-bottom:18px'>\n<thead>\n<tr style='background:#e8f0fe'>\n<th style='padding:9px 12px;border:1px solid #ddd;text-align:right'>\u0642\u0637\u0639\u0647<\/th>\n<th style='padding:9px 12px;border:1px solid #ddd;text-align:right'>\u0645\u062f\u0644<\/th>\n<th style='padding:9px 12px;border:1px solid #ddd;text-align:right'>\u0646\u0642\u0634<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style='padding:8px;border:1px solid #ddd'>\u0628\u0631\u062f \u0627\u0635\u0644\u06cc<\/td>\n<td style='padding:8px;border:1px solid #ddd'>ESP32-CAM AI-Thinker<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u0645\u063a\u0632 + \u062f\u0648\u0631\u0628\u06cc\u0646 + WiFi<\/td>\n<\/tr>\n<tr style='background:#fafafa'>\n<td style='padding:8px;border:1px solid #ddd'>\u067e\u0631\u0648\u06af\u0631\u0627\u0645\u0631<\/td>\n<td style='padding:8px;border:1px solid #ddd'>FTDI FT232RL<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u0622\u067e\u0644\u0648\u062f \u06a9\u062f<\/td>\n<\/tr>\n<tr>\n<td style='padding:8px;border:1px solid #ddd'>\u062f\u0631\u0627\u06cc\u0648\u0631 \u0645\u0648\u062a\u0648\u0631<\/td>\n<td style='padding:8px;border:1px solid #ddd'>L298N<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u06a9\u0646\u062a\u0631\u0644 \u062f\u0648 \u0645\u0648\u062a\u0648\u0631 DC<\/td>\n<\/tr>\n<tr style='background:#fafafa'>\n<td style='padding:8px;border:1px solid #ddd'>\u0634\u0627\u0633\u06cc<\/td>\n<td style='padding:8px;border:1px solid #ddd'>Smart Car 2WD Kit<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u0628\u062f\u0646\u0647 \u0648 \u0645\u0648\u062a\u0648\u0631<\/td>\n<\/tr>\n<tr>\n<td style='padding:8px;border:1px solid #ddd'>\u0628\u0627\u062a\u0631\u06cc<\/td>\n<td style='padding:8px;border:1px solid #ddd'>2S LiPo 1500mAh<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u062a\u063a\u0630\u06cc\u0647<\/td>\n<\/tr>\n<tr style='background:#fafafa'>\n<td style='padding:8px;border:1px solid #ddd'>\u0631\u06af\u0648\u0644\u0627\u062a\u0648\u0631<\/td>\n<td style='padding:8px;border:1px solid #ddd'>AMS1117-3.3 \u06cc\u0627 LM2596<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u062a\u0628\u062f\u06cc\u0644 \u0648\u0644\u062a\u0627\u0698 \u0628\u0631\u0627\u06cc ESP32-CAM<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645: \u062a\u063a\u0630\u06cc\u0647 ESP32-CAM<\/h2>\n<p style='background:#fff3cd;border-right:4px solid #ffc107;padding:12px 16px;border-radius:8px'>ESP32-CAM \u0628\u0647 <strong>\u06f3.\u06f3 \u0648\u0644\u062a \u0628\u0627 \u062c\u0631\u06cc\u0627\u0646 \u062d\u062f\u0627\u0642\u0644 \u06f5\u06f0\u06f0mA<\/strong> \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f. \u0647\u0631\u06af\u0632 \u0627\u0632 \u067e\u06cc\u0646 5V \u0622\u0631\u062f\u0648\u06cc\u0646\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645 \u062a\u063a\u0630\u06cc\u0647 \u0646\u06a9\u0646\u06cc\u062f. \u06cc\u06a9 \u0631\u06af\u0648\u0644\u0627\u062a\u0648\u0631 AMS1117-3.3 \u06cc\u0627 LM2596 \u0628\u06cc\u0646 \u0628\u0627\u062a\u0631\u06cc \u0648 ESP32-CAM \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f. \u062a\u063a\u0630\u06cc\u0647 \u0636\u0639\u06cc\u0641 \u0634\u0627\u06cc\u0639\u200c\u062a\u0631\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0631\u06cc\u0633\u062a \u0634\u062f\u0646 ESP32-CAM \u0627\u0633\u062a.<\/p>\n<h2>\u0645\u0631\u0627\u062d\u0644 \u0633\u0627\u062e\u062a \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645<\/h2>\n<ol>\n<li><strong>\u0646\u0635\u0628 Arduino IDE \u0648 ESP32 Board Manager:<\/strong> \u062f\u0631 IDE \u0628\u0631\u0648\u06cc\u062f \u0628\u0647 File \u2192 Preferences\u060c \u062f\u0631 Additional Board URLs \u0627\u06cc\u0646 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f: <code>https:\/\/raw.githubusercontent.com\/espressif\/arduino-esp32\/gh-pages\/package_esp32_index.json<\/code> \u0633\u067e\u0633 \u0627\u0632 Boards Manager\u060c \u00abesp32 by Espressif\u00bb \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f.<\/li>\n<li><strong>\u0648\u0635\u0644 \u06a9\u0631\u062f\u0646 FTDI \u0628\u0647 ESP32-CAM \u0628\u0631\u0627\u06cc \u0622\u067e\u0644\u0648\u062f \u06a9\u062f:<\/strong> \u067e\u06cc\u0646 GPIO0 \u0631\u0627 \u0628\u0647 GND \u0648\u0635\u0644 \u06a9\u0646\u06cc\u062f (\u062d\u0627\u0644\u062a Flash Mode). \u0633\u067e\u0633: FTDI TX \u2192 ESP32 U0R\u060c FTDI RX \u2192 ESP32 U0T\u060c FTDI 3.3V \u2192 ESP32 3.3V\u060c FTDI GND \u2192 ESP32 GND.<\/li>\n<li><strong>\u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0631\u062f \u062f\u0631 IDE:<\/strong> Board: AI Thinker ESP32-CAM\u060c Port: \u067e\u0648\u0631\u062a FTDI \u0634\u0645\u0627.<\/li>\n<li><strong>\u0622\u067e\u0644\u0648\u062f \u06a9\u062f (\u062f\u0631 \u0628\u062e\u0634 \u0628\u0639\u062f).<\/strong><\/li>\n<li><strong>\u0628\u0639\u062f \u0627\u0632 \u0622\u067e\u0644\u0648\u062f:<\/strong> GPIO0 \u0631\u0627 \u0627\u0632 GND \u062c\u062f\u0627 \u06a9\u0646\u06cc\u062f \u0648 \u062f\u06a9\u0645\u0647 Reset \u0631\u0627 \u0628\u0632\u0646\u06cc\u062f.<\/li>\n<li><strong>\u0645\u0648\u0646\u062a\u0627\u0698 \u0631\u0648\u06cc \u0634\u0627\u0633\u06cc:<\/strong> ESP32-CAM \u0648 L298N \u0631\u0627 \u0631\u0648\u06cc \u0634\u0627\u0633\u06cc \u0628\u0628\u0646\u062f\u06cc\u062f\u060c \u0645\u0648\u062a\u0648\u0631\u0647\u0627 \u0631\u0627 \u0648\u0635\u0644 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ol>\n<h2>\u06a9\u062f \u06a9\u0627\u0645\u0644<\/h2>\n<pre style='background:#1e1e1e;color:#d4d4d4;padding:18px;border-radius:10px;overflow-x:auto;font-size:13px'><code class='language-cpp'>\n#include \"esp_camera.h\"\n#include &lt;WiFi.h&gt;\n#include \"esp_http_server.h\"\n\n\/\/ \u067e\u06cc\u0646\u200c\u0647\u0627\u06cc \u062f\u0648\u0631\u0628\u06cc\u0646 (\u0645\u062f\u0644 AI-Thinker)\n#define PWDN_GPIO_NUM     32\n#define RESET_GPIO_NUM    -1\n#define XCLK_GPIO_NUM      0\n#define SIOD_GPIO_NUM     26\n#define SIOC_GPIO_NUM     27\n#define Y9_GPIO_NUM       35\n#define Y8_GPIO_NUM       34\n#define Y7_GPIO_NUM       39\n#define Y6_GPIO_NUM       36\n#define Y5_GPIO_NUM       21\n#define Y4_GPIO_NUM       19\n#define Y3_GPIO_NUM       18\n#define Y2_GPIO_NUM        5\n#define VSYNC_GPIO_NUM    25\n#define HREF_GPIO_NUM     23\n#define PCLK_GPIO_NUM     22\n\n\/\/ \u067e\u06cc\u0646\u200c\u0647\u0627\u06cc \u0645\u0648\u062a\u0648\u0631\n#define IN1 12\n#define IN2 13\n#define IN3 15\n#define IN4 14\n\nconst char* ssid     = \"ESP32-CAM-Car\";\nconst char* password = \"12345678\";\n\nvoid setupCamera() {\n  camera_config_t config;\n  config.ledc_channel = LEDC_CHANNEL_0;\n  config.ledc_timer   = LEDC_TIMER_0;\n  config.pin_d0 = Y2_GPIO_NUM; config.pin_d1 = Y3_GPIO_NUM;\n  config.pin_d2 = Y4_GPIO_NUM; config.pin_d3 = Y5_GPIO_NUM;\n  config.pin_d4 = Y6_GPIO_NUM; config.pin_d5 = Y7_GPIO_NUM;\n  config.pin_d6 = Y8_GPIO_NUM; config.pin_d7 = Y9_GPIO_NUM;\n  config.pin_xclk = XCLK_GPIO_NUM; config.pin_pclk = PCLK_GPIO_NUM;\n  config.pin_vsync = VSYNC_GPIO_NUM; config.pin_href = HREF_GPIO_NUM;\n  config.pin_sscb_sda = SIOD_GPIO_NUM; config.pin_sscb_scl = SIOC_GPIO_NUM;\n  config.pin_pwdn  = PWDN_GPIO_NUM; config.pin_reset = RESET_GPIO_NUM;\n  config.xclk_freq_hz = 20000000;\n  config.pixel_format = PIXFORMAT_JPEG;\n  config.frame_size   = FRAMESIZE_VGA;\n  config.jpeg_quality = 15;\n  config.fb_count     = 1;\n  esp_camera_init(&config);\n}\n\nvoid forward()  { digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW); }\nvoid backward() { digitalWrite(IN1,LOW);digitalWrite(IN2,HIGH);digitalWrite(IN3,LOW);digitalWrite(IN4,HIGH); }\nvoid left()     { digitalWrite(IN1,LOW);digitalWrite(IN2,HIGH);digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW); }\nvoid right()    { digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);digitalWrite(IN3,LOW);digitalWrite(IN4,HIGH); }\nvoid stopAll()  { digitalWrite(IN1,LOW);digitalWrite(IN2,LOW);digitalWrite(IN3,LOW);digitalWrite(IN4,LOW); }\n\nstatic esp_err_t cmd_handler(httpd_req_t *req) {\n  char buf[10]; int ret = httpd_req_recv(req, buf, sizeof(buf)-1);\n  if(ret &lt;= 0) return ESP_FAIL;\n  buf[ret] = 0;\n  String cmd = String(buf);\n  if(cmd==\"F\") forward();\n  else if(cmd==\"B\") backward();\n  else if(cmd==\"L\") left();\n  else if(cmd==\"R\") right();\n  else stopAll();\n  httpd_resp_send(req, \"OK\", 2);\n  return ESP_OK;\n}\n\nstatic esp_err_t stream_handler(httpd_req_t *req) {\n  httpd_resp_set_type(req, \"multipart\/x-mixed-replace; boundary=frame\");\n  while(true) {\n    camera_fb_t *fb = esp_camera_fb_get();\n    if(!fb) continue;\n    char part[64];\n    snprintf(part, sizeof(part), \"--frame\\r\\nContent-Type: image\/jpeg\\r\\nContent-Length: %d\\r\\n\\r\\n\", fb->len);\n    httpd_resp_send_chunk(req, part, strlen(part));\n    httpd_resp_send_chunk(req, (const char*)fb->buf, fb->len);\n    httpd_resp_send_chunk(req, \"\\r\\n\", 2);\n    esp_camera_fb_return(fb);\n    delay(30);\n  }\n  return ESP_OK;\n}\n\nvoid setup() {\n  for(int p : {IN1,IN2,IN3,IN4}) pinMode(p, OUTPUT);\n  stopAll();\n  setupCamera();\n  WiFi.softAP(ssid, password);\n\n  httpd_config_t config = HTTPD_DEFAULT_CONFIG();\n  config.server_port = 80;\n  httpd_handle_t server = NULL;\n  httpd_start(&server, &config);\n\n  httpd_uri_t cmd_uri = { .uri=\"\/cmd\", .method=HTTP_POST, .handler=cmd_handler };\n  httpd_uri_t stream_uri = { .uri=\"\/stream\", .method=HTTP_GET, .handler=stream_handler };\n  httpd_register_uri_handler(server, &cmd_uri);\n  httpd_register_uri_handler(server, &stream_uri);\n}\n\nvoid loop() { delay(1000); }\n<\/code><\/pre>\n<h2>\u0686\u06a9\u200c\u0644\u06cc\u0633\u062a \u062a\u0633\u062a<\/h2>\n<table style='width:100%;border-collapse:collapse;margin-bottom:18px'>\n<thead>\n<tr style='background:#e8f0fe'>\n<th style='padding:9px;border:1px solid #ddd;text-align:right'>\u062a\u0633\u062a<\/th>\n<th style='padding:9px;border:1px solid #ddd;text-align:right'>\u0646\u062a\u06cc\u062c\u0647<\/th>\n<th style='padding:9px;border:1px solid #ddd;text-align:right'>\u0631\u0627\u0647\u200c\u062d\u0644<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style='padding:8px;border:1px solid #ddd'>WiFi \u00abESP32-CAM-Car\u00bb \u062f\u0631 \u06af\u0648\u0634\u06cc \u062f\u06cc\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u061f<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u0628\u0644\u0647<\/td>\n<td style='padding:8px;border:1px solid #ddd'>GPIO0 \u0631\u0627 \u0627\u0632 GND \u062c\u062f\u0627 \u06a9\u0631\u062f\u0647 \u0648 Reset \u0632\u062f\u0647\u200c\u0627\u06cc\u062f\u061f<\/td>\n<\/tr>\n<tr style='background:#fafafa'>\n<td style='padding:8px;border:1px solid #ddd'>\u0622\u062f\u0631\u0633 192.168.4.1\/stream \u062a\u0635\u0648\u06cc\u0631 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f\u061f<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u0628\u0644\u0647<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u062a\u063a\u0630\u06cc\u0647 \u06f3.\u06f3V \u06a9\u0627\u0641\u06cc \u0627\u0633\u062a\u061f (AMS1117)<\/td>\n<\/tr>\n<tr>\n<td style='padding:8px;border:1px solid #ddd'>\u062f\u0633\u062a\u0648\u0631 POST \u0628\u0647 \/cmd \u0645\u0648\u062a\u0648\u0631\u0647\u0627 \u0631\u0627 \u062d\u0631\u06a9\u062a \u0645\u06cc\u200c\u062f\u0647\u062f\u061f<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u0628\u0644\u0647<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u067e\u06cc\u0646\u200c\u0647\u0627\u06cc IN1-IN4 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f<\/td>\n<\/tr>\n<tr style='background:#fafafa'>\n<td style='padding:8px;border:1px solid #ddd'>\u062f\u0645\u0627\u06cc ESP32-CAM \u0645\u0639\u0645\u0648\u0644\u06cc \u0627\u0633\u062a\u061f<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u06af\u0631\u0645 \u0648\u0644\u06cc \u062f\u0627\u063a \u0646\u0647<\/td>\n<td style='padding:8px;border:1px solid #ddd'>\u0647\u06cc\u062a\u200c\u0633\u06cc\u0646\u06a9 \u06a9\u0648\u0686\u06a9 \u0628\u0686\u0633\u0628\u0627\u0646\u06cc\u062f<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><svg viewBox='0 0 860 220' width='100%' xmlns='http:\/\/www.w3.org\/2000\/svg' style='background:#fff;border:1px solid #e0e0e0;border-radius:12px;margin-bottom:22px'>\n<rect x='40' y='75' width='160' height='70' rx='12' fill='#e8f4ff' stroke='#3a60c0' stroke-width='2'\/>\n<rect x='280' y='75' width='160' height='70' rx='12' fill='#8bd3dd' stroke='#1f6f78' stroke-width='2'\/>\n<rect x='520' y='75' width='160' height='70' rx='12' fill='#f7d794' stroke='#a06d00' stroke-width='2'\/>\n<rect x='700' y='75' width='120' height='70' rx='12' fill='#b7e4a0' stroke='#3a7a1e' stroke-width='2'\/>\n<line x1='200' y1='110' x2='280' y2='110' stroke='#555' stroke-width='2.5'\/>\n<line x1='440' y1='110' x2='520' y2='110' stroke='#555' stroke-width='2.5'\/>\n<line x1='680' y1='110' x2='700' y2='110' stroke='#555' stroke-width='2.5'\/>\n<text x='120' y='108' text-anchor='middle' font-size='14' font-family='Tahoma'>\u06af\u0648\u0634\u06cc \u0634\u0645\u0627<\/text>\n<text x='120' y='125' text-anchor='middle' font-size='12' font-family='Tahoma'>\u0645\u0631\u0648\u0631\u06af\u0631 \u0648\u0628<\/text>\n<text x='360' y='108' text-anchor='middle' font-size='14' font-family='Tahoma'>ESP32-CAM<\/text>\n<text x='360' y='125' text-anchor='middle' font-size='12' font-family='Tahoma'>WiFi Access Point<\/text>\n<text x='600' y='108' text-anchor='middle' font-size='14' font-family='Tahoma'>L298N<\/text>\n<text x='600' y='125' text-anchor='middle' font-size='12' font-family='Tahoma'>\u062f\u0631\u0627\u06cc\u0648\u0631 \u0645\u0648\u062a\u0648\u0631<\/text>\n<text x='760' y='115' text-anchor='middle' font-size='14' font-family='Tahoma'>\u0645\u0648\u062a\u0648\u0631\u0647\u0627<\/text>\n<text x='430' y='185' text-anchor='middle' font-size='13' font-family='Tahoma' fill='#666'>\u06a9\u0646\u062a\u0631\u0644 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0645\u0631\u0648\u0631\u06af\u0631 \u2014 \u0628\u062f\u0648\u0646 \u0627\u067e \u062e\u0627\u0635<\/text>\n<\/svg><\/p>\n<h2>\u0648\u06cc\u062f\u0626\u0648\u0647\u0627\u06cc \u0622\u0645\u0648\u0632\u0634\u06cc<\/h2>\n<div style='display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px;margin:20px 0'>\n<iframe width='100%' height='315' src='https:\/\/www.youtube.com\/embed\/SCjzv1AmSOs' title='ESP32-CAM Robot Car' frameborder='0' allow='accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture' allowfullscreen><\/iframe><br \/>\n<iframe width='100%' height='315' src='https:\/\/www.youtube.com\/embed\/MicCEyd3QKo' title='ESP32-CAM FPV Setup' frameborder='0' allow='accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture' allowfullscreen><\/iframe>\n<\/div>\n<h2>\u0645\u0646\u0627\u0628\u0639 \u0628\u06cc\u0634\u062a\u0631<\/h2>\n<ul>\n<li><a href='https:\/\/www.aparat.com\/result\/ESP32_CAM_%D8%A2%D9%85%D9%88%D8%B2%D8%B4' target='_blank'>\u0622\u067e\u0627\u0631\u0627\u062a: \u0622\u0645\u0648\u0632\u0634 ESP32-CAM \u0641\u0627\u0631\u0633\u06cc<\/a><\/li>\n<li><a href='https:\/\/randomnerdtutorials.com\/esp32-cam-video-streaming-web-server-camera-home-assistant\/' target='_blank'>Random Nerd Tutorials: ESP32-CAM Streaming<\/a><\/li>\n<li><a href='https:\/\/github.com\/espressif\/esp32-camera' target='_blank'>\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0631\u0633\u0645\u06cc: ESP32 Camera Driver<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u0622\u0645\u0648\u0632\u0634 \u06a9\u0627\u0645\u0644 \u0633\u0627\u062e\u062a \u0645\u0627\u0634\u06cc\u0646 FPV \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0648\u0627\u06cc\u200c\u0641\u0627\u06cc \u0628\u0627 ESP32-CAM\u061b \u062a\u0635\u0648\u06cc\u0631 \u0632\u0646\u062f\u0647 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc\u060c \u06a9\u0646\u062a\u0631\u0644 \u0627\u0632 \u0645\u0631\u0648\u0631\u06af\u0631\u060c \u06a9\u062f \u0622\u0645\u0627\u062f\u0647\u060c BOM \u0648 \u062a\u0633\u062a.<\/p>\n","protected":false},"author":1,"featured_media":305,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[19,17],"tags":[22,63,24,48,50,32,64],"class_list":["post-306","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials-2","category-uav","tag-esp32","tag-esp32-cam","tag-fpv","tag-ugv","tag-50","tag-beginner","tag-64"],"_links":{"self":[{"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/posts\/306","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/comments?post=306"}],"version-history":[{"count":1,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/posts\/306\/revisions"}],"predecessor-version":[{"id":307,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/posts\/306\/revisions\/307"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/media\/305"}],"wp:attachment":[{"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/media?parent=306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/categories?post=306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/tags?post=306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}