همواره در پروژه هایی که برد های ESP به عنوان یک APs یا Soft APs عمل میکند، این مورد که چگونه IP ساخته شده توسط برد را تشخیص دهیم و یوزر و پسوورد مشخص شده را همزمان مشاهده کنیم. در این پروژه قصد انجام همین کار را داریم تا این نیاز را برطریف کنیم تا در هر لحظه به مقادیر IP ،ssid و Password دسترسی داشته باشیم. در این پروژه از یک نمایشگر Oled استفاده خواهیم کرد. در این سناریو ESP32-CAM استفاده شده در حالت Soft APs کار خواهد کرد و مقادیر نمایش داده شده مربوط به همین مورد خواهند بود. در ادامه آموزش ساخت اکسس پوینت ESP32-Cam با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
تراشه ESP-32
ESP32 نسل پیشرفته ESP8266 است. یکی از تفاوتهای آن بلوتوث داخلیاش میباشد. همچنین دارای هسته وایفای ۲,۴ گیگا هرتزی و بلوتوث داخلی تولید شده با تکنولوژی ۴۰ نانومتری شرکت TSMC میباشد. این ماژول دارای بهترین پرفورمنس در مصرف انرژی میباشد یعنی با کمترین مصرف انرژی بهترین نتیجه را برای ما به همراه دارد. اگر بخواهیم دقیقتر به این برد نگاه کنیم باید بگوییم که این یک chip است که پلتفرم NodeMCU در اون پیاده سازی شده که به این نوع چیپ ها System on a chip microcontrollers هم گفته میشود. از دیگر امکانات ماژول ESP32-cam میتوان به دوربین OV2640 با قابلیت ثبت تصویر با فرمت JPEG, BMP, grayscale اشاره کرد. همچنین با LED flash مونتاژ شده بر روی این ماژول قادر به تصویر برداری در مکانهای تاریک نیز خواهید بود. یکی از ویژگیهای کاربردی این ماژول ورودی micro SD با قابلیت ارتقا تا ۴GB است که به کاربر اجازه ذخیره تصاویر را هم میدهد.
ماژول نمایشگر Oled SSD1306
معمولا در پروژه های اینترنت اشیا و دیگر پروژه های امبدد از برای نمایش متن و مقادیر مختلف از نمایشگر های Oled استفاده می شود، این ماژول ها بدر انواع مختلق بسته به نوع درایور اندازه یافت می شوند که یکی از پرطرفدار ترین آن ها SSD1306 می باشد، این نوع از Oled ها معمولا در اندازه های ۰٫۹۶ و ۱٫۳ اینچ ساخته می شوند همچنین پروتکل ارتباطی Oled ها I2C می باشد. صفحه نمایش دیود ساطع کننده نور (OLED) که ما در این آموزش استفاده خواهیم کرد مدل SSD1306 است، یک صفحه نمایش تک رنگ، ۰٫۹۶ اینچی با ۱۲۸ × ۶۴ پیکسل همانطور که در شکل زیر نشان داده شده است. نمایشگر OLED نیازی به نور پس زمینه ندارد، که نتیجه آن ایجاد تضاد بسیار خوب در محیط های تاریک است. همچنین پیکسل های آن فقط هنگام روشن بودن انرژی مصرف می کنند، بنابراین صفحه نمایش OLED در مقایسه با سایر نمایشگرها، مصرف برق کمتری دارد.
ماژول FTDI programmer
برای پروگرام کردن ESP32-cam بدلیل اینکه پروگرامر داخلی برای قرار داده نشده، از این ماژول استفاده می کنیم در واقع این ماژول مبدل USB به TTL می باشد که از Rx و Tx با برد ESP-CAM و از طریق ارتباط USB با سیستم مورد استفاده ما ارتباط برقرار میکند. در این ماژول دو سطحی ولتاژ ۳٫۳ و ۵ ولت وجود دارد که در پروژه های مختلف می تواند مفید باشد.
دوربین OV2640
شاید برای شما سوال پیش آمده باشد که دوربین مورد استفاده در ESP-32cam چند مگاپیکسل کیفیت دارد، ولتاژ راه اندازی آن چقدر است و یا اصلا اسم این دوربین چیست؟! خب این دوربین با پارت OV2640 یافت می شود و ولتاژ ورودی ۳٫۳ ولت دارد و کیفیت آن نیز ۲ مگاپیکسل می باشد. کمترین فریم ریت این دوربین در حالت UXGA/SXGA ، پانزده فریم بر ثانیه و بیشترین فریم ریت آن در حالت CIF شصت فریم بر ثانیه می باشد. از سری دیگر دوربین های OV می توان به OV5640 اشاره کرد با کیفیت ۵ مگاپیکسل.
نحوه کار پروژه
در این پروژه ابتدا برد ESP32-CAM به حالت Soft APs تبدیل خواهد شد در این حالت به این دلیل که از اینترنت برای دریافت تصاویر استفاده نمیکنیم به اصطلاح به آن Soft Access Point می گوییم. همچنین در این مورد امکان ارسال درخواست Http و یا بالا آوردن کتابخانه های موجود در اینترنت امکان ندارد. در ادامه برای Soft APs مقادیر یوزر و پسوورد را مشخص میکنیم و همچنین IP مدنظر را به ما تحویل خواهد داد، تا از این طریق به وب سرور برای دریافت تصاویر دسترسی داشته باشیم. تمام این مقادیر برای آسان بودن فرآیند و ارتباط بهتر با کاربر بر روی نمایشگر Oled نمایش خواهیم داد. البته برای نمایش پسوورد یک میکروسوییچ در نظر گرفتهایم تا تنها با فشردن سوییچ پسوورد نمایش داده شود تا امنیت را تا حد امکان بالاتر ببریم.
وسایل مورد نیاز
نصب افزونه ESP32
برای شروع باید کتابخانه مربوط به این ماژول در نرم افزار Arduino IDE نصب گردد. ابتدا باید لینک زیر در محل ذکر شده File> Preferences کپی و پیست شود.
https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
سپس با مراجعه به بخش برد ها در Tools > Board > Boards Manager و جسجوی ESP32 قادر به دانلود کتابخانه مربوط خواهید بود.
اتصالات و راهاندازی
در این پروزه ابتدا اقدام به پروگرام کردن برد ESP32-CAM به کمک ماژول FTDI خواهیم کرد، این مورد را در آموزش های قبلی با موضوع راهاندازی ESP32-CAM پوشش دادهایم، اتصالات را مطابق شماتیک زیر متناسب با USB TO TTL استفاده شده برقرار کنید. دقت داشته باشد که در زمان پروگرام شدن کد یعنی پس از کامپایل کردن کد، دو پین GPIO 0 و GND به یکدیگر متصل هستند و پس از کامپایل موفق کد، برای اجرا شدن پروژه باید این اتصال را جدا کنید.
در ادامه اتصالات بین نمایشگر Oled و برد ESP را برقرار خواهیم، برای برقراری ارتباط i2c بین ماژول و برد از IO13 و IO14 در ESP32CAM استفاده خواهیم کرد و به پین های SCL و SDA در Oled متصل خواهند شد. همچین برای تغذیه نمایشگر Oled از پین های ۳v3 و GND استفاده خواهیم کرد.
در مرحله بعد اتصالات میکروسوییچ را برقرار میکنیم، که همچنین همراه با یک مقاومت نصب خواهد شد، برای اتصال این قطعه از پین IO15 در برد ESP32-CAM استفاده خواهیم کرد.
در نهایت نوبت به کد های این پروژه میرسد که باید با استفاده از پروگرامری که توضیح داده شد بر روی برد ESP کامپایل شود. در حین آپلود پین IO0 به GND متصل خواهد بود و بعد از کامپایل کد جدا خواهد شد. این کد دارای چند هدر مختلف است که وظیفه راهاندازی دوربین و تراشه را دارند. برای دریافت کد کامل از این لینک به صفحه گیتهاب من مراجعه و کد را دانلود کنید.
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire); #include "esp_camera.h" #include <WiFi.h> #define BUTTON_A 15 // Select camera model //#define CAMERA_MODEL_WROVER_KIT //#define CAMERA_MODEL_ESP_EYE //#define CAMERA_MODEL_M5STACK_PSRAM_ //#define CAMERA_MODEL_M5STACK_WIDE #define CAMERA_MODEL_AI_THINKER #include "camera_pins.h" const char* ssid = "Ecam"; const char* password = "314159265"; void startCameraServer(); void setup() { Serial.begin(115200); Serial.setDebugOutput(true); Serial.println(); pinMode(BUTTON_A, INPUT_PULLUP); Wire.begin(14, 13); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.display(); 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; //init with high specs to pre-allocate larger buffers if(psramFound()){ config.frame_size = FRAMESIZE_UXGA; config.jpeg_quality = 10; config.fb_count = 2; } else { config.frame_size = FRAMESIZE_SVGA; config.jpeg_quality = 12; config.fb_count = 1; } #if defined(CAMERA_MODEL_ESP_EYE) pinMode(13, INPUT_PULLUP); pinMode(14, INPUT_PULLUP); #endif // 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; } sensor_t * s = esp_camera_sensor_get(); //initial sensors are flipped vertically and colors are a bit saturated if (s->id.PID == OV3660_PID) { s->set_vflip(s, 1);//flip it back s->set_brightness(s, 1);//up the blightness just a bit s->set_saturation(s, -2);//lower the saturation } //drop down frame size for higher initial frame rate s->set_framesize(s, FRAMESIZE_QVGA); #if defined(CAMERA_MODEL_M5STACK_WIDE) s->set_vflip(s, 1); s->set_hmirror(s, 1); #endif WiFi.softAP(ssid, password); IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); startCameraServer(); Serial.print("Camera Ready! Use 'http://"); Serial.print(WiFi.localIP()); Serial.println("' to connect"); } void loop() { IPAddress IP = WiFi.softAPIP(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0,0); display.print("IP :"); display.println( IP); display.print("ssid:"); display.println( ssid); display.print("pwd :"); if(digitalRead(BUTTON_A)) { display.println(password); } else { display.println("*********"); } display.display(); display.clearDisplay(); delay(100); }
جمع بندی
در این پروژه یک رابط کاربری جالب برای برد های ESP32-CAM ساختیم اطلاعات شبکه ساخته شده توسط برد را در لحظه دریافت کنیم. همچنین میتوانید این مورد را برای هر برد ESP32 که در دسترس دارید جرا کنید. در بین اطلاعات نمایش داده شده، پسوورد APs نیز نمایش داده میشد که بوسیله یک میکروسوییچ از آن مراقبت کردیم به این شکل که تنها با فشردن کلید پسوورد نمایش داده میشود.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.