راهنمای شروع کار با ESP32

در این مقاله قصد داریم نحوه استفاده از ماژول ESP32 را با استفاده از نرم‌افزار آردوینو را توسط چند مثال عملی آموزش دهیم.میکروکنترلر ESP32 نسخه به روز شده ESP8266 می باشد. این SOC دارای دو هسته پردازشی ‫‪Xtensa‬‬ ‫‪LX6‬‬ با فرکانس کاری ۲۴۰ مگاهرتز و توان پردازشی ‫‪DMIPS‬‬ ‫‪600‬‬ بوده و همچنین به ۵۲۰ کیلوبایت حافظه داخلی و ۴ مگابایت حافظه برنامه از نوع SPI Flash مجهز شده است.این ماژول دارای وای فای و بلوتوث داخلی بوده که برای پروژه های IoT مناسب می باشد.Key Features:240 MHz dual core Tensilica LX6 microcontroller with 600 DMIPSIntegrated 520 KB SRAMIntegrated 802.11 b/g/n HT40 Wi-Fi transceiver, baseband, stack and LwIPIntegrated dual mode Bluetooth (classic and BLE)16 MB flash, memory-mapped to the CPU code space2.3V to 3.6V operating voltage-40°C to +125°C operating temperatureOnboard PCB antenna / IPEX connector for external antennaSensors:Ultra-low noise analog amplifierHall sensor10x capacitive touch interfaces32 kHz crystal oscillator34 x GPIO:3 x UARTs, including hardware flow control3 x SPI2 x I2S18 x ADC input channels2 x DAC2 x I2CPWM/timer input/output available on every GPIO pinOpenOCD debug interface with 32 kB TRAX bufferSDIO master/slave 50 MHzSupports external SPI flash up to 16 MBSD-card interface supportSecurity Related:WEP, WPA/WPA2 PSK/EnterpriseHardware accelerated encryption: AES/SHA2/Elliptical Curve Cryptography/RSA-4096Performance:Supports sniffer, Station, SoftAP and Wi-Fi direct modeMax data rate of 150 Mbps@11n HT40, 72 Mbps@11n HT20, 54 Mbps@11g, and 11 Mbps@11bMaximum transmit power of 19.5 dBm@11b, 16.5 dBm@11g, 15.5 dBm@11nMinimum receiver sensitivity of -97 dBm135 Mbps UDP sustained throughput5 μA power consumption in Deep-sleepدر جدول زیر این ماژول به ESP8266 مقایسه شده است:نصب پلاگین ESP32 برای آردوینونرم‌افزارآردوینو به صورت پیشفرض از ESP32 پشتیبانی نمی‌کند از این رو باید افزونه آن را به صورت مجرا به آن اضافه نمود. برای این منظور ابتدا از مسیر File> Preferences پنجره preferences را باز نمایید.آدرس زیر را در قسمت مشخص شده کپی کرده و سپس بر روی کلید OK کلیک نمایید. https://dl.espressif.com/dl/package_esp32_index.json در مرحله بعد از مسیر Tools > Board > Boards Manager پبجره Boards Manager را باز کنید و در قسمت مشخص شده عبارت ESP32 را وارد کرده و بر روی گزینه Install کلیک کنید. زمان نصب با توجهبه سرعت اینترنت ممکن است طولانی شود.پس از به پایان رسیدن مراحل نصب ماژول ESP32 به همراه مثال‌های آن به نرم‌افزار آردوینو اضافه شده و قابل استفاده می باشد.مثال ۱: Hello World! Blinking a LEDماژول ESP32 دارای ۳۴ عدد پورت با کاربرد های مختلف می‌باشد که در تصویر زیر نحوه چینش پایه‌ها نشان داده شده است.int LED = 2; void setup() { pinMode(LED, OUTPUT); } void loop() { digitalWrite(LED, HIGH); // turn the LED on delay(1000); // wait for a second digitalWrite(LED, LOW); // turn the LED off delay(1000); // wait for a second }در این مثال پورت ۲ توسط تابع pinMode به عنوان خروجی تعریف شده و وضعیت آن در هر ثانیه توسط تابع DigitalWrite تغییر می کند.خواند مقدار ورودی از پورت از طریق تابع DigitalRead انجام می شود.مثال ۲: The Touch Sensorمیکروکنترلر ESP32 دارای ۱۰ کانال ورودی تاچ خازنی می‌باشد که می‌توان از آن‌ها به عنوان کلید لمسی استفاده نمود.ورودی های لمسی به پورت های زیر متصل هستند.T0: GPIO 4T1: GPIO 0T2: GPIO 2T3: GPIO 15T4: GPIO 13T5: GPIO 12T6: GPIO 14T7: GPIO 27T8: GPIO 33T9: GPIO 32برای خواند مقدار سنسور لمسی از تابع touchRead به صورت زیر استفاده می شود.int value = touchRead(4);در مثال بعدی وضعیت وضعیت LED متصل به پین ۲ توسط ورودی لمسی T0 کنترلر می شود.#define TOUTCH_PIN T0 // ESP32 Pin D4 #define LED_PIN 2 int touch_value = 100; void setup() { Serial.begin(115200); delay(1000); // give me time to bring up serial monitor Serial.println(&quotESP32 Touch Test&quot); pinMode(LED_PIN, OUTPUT); digitalWrite (LED_PIN, LOW); } void loop() { touch_value = touchRead(TOUTCH_PIN); Serial.println(touch_value); // get value using T0 if (touch_value < 50) { digitalWrite (LED_PIN, HIGH); } else { digitalWrite (LED_PIN, LOW); } delay(1000); }مثال ۳: Analog Inputمیکروکنترلر ESP32 دارای دو واحد مبدل آنالوگ به دیجیتال ۱۲ بیتی و ۱۸ کانال مالتی پلکسر می باشد. با این مبدل می‌توان ولتاژ بین ۰ تا ۳.۳ ولت را به دیجیتال تبدیل نمود.با توجه به دقت ۱۲ بیتی ابن مبدل می‌توان حداکثر مثدار ۴۰۹۵ را اندازه‌گیری نمود. ورودی های این مبدل به پین های زیر متصل شده است.GPIO 0 ==> ADC2_CH1GPIO 2 ==> ADC2_CH2GPIO 4 ==> ADC2_CH0GPIO 12 => ADC2_CH5GPIO 13 => ADC2_CH4GPIO 14 => ADC2_CH6GPIO 15 => ADC2_CH3GPIO 25 => ADC2_CH8GPIO 26 => ADC2_CH9GPIO 27 => ADC2_CH7GPIO 32 => ADC1_CH4GPIO 33 => ADC1_CH5GPIO 34 => ADC1_CH6GPIO 35 => ADC1_CH7GPIO 36 => ADC1_CH0GPIO 37 => ADC1_CH1GPIO 38 => ADC1_CH2GPIO 39 => ADC1_CH3نحوه خواند مقدار آنالوگ با تابع analogRead به صورت زیر می باشد.int analog_value = analogRead(36);در مثال زیر مقدار ورودی آنالوگ متصل به پین ۳۶ توسط مبدل خوانده شده و با نرخ ۱۱۵۲۰۰ بیت بر ثانیه به پورت سریال ارسال می شود.//Analog Input #define ANALOG_PIN_0 36 int analog_value = 0; void setup() { Serial.begin(115200); delay(1000); // give me time to bring up serial monitor Serial.println(&quotESP32 Analog IN Test&quot); } void loop() { analog_value = analogRead(ANALOG_PIN_0); Serial.println(analog_value); delay(500); }مثال ۴: Dimming a LED: Analog Output Using PWMدر این مثال می‌خواهیم با مقدار خوانده شده توسط ADC و تولید موج PWM نور LED متصل به پین ۲ را کنترلر کنیم.//Analog Input #define ANALOG_PIN_0 36 int analog_value = 0; // PMW LED #define LED_PIN 2 int freq = 5000; int ledChannel = 0; int resolution = 8; int dutyCycle = 0; void setup() { Serial.begin(115200); delay(1000); // give me time to bring up serial monitor Serial.println(&quotESP32 Analog IN/OUT Test&quot); ledcSetup(ledChannel, freq, resolution); ledcAttachPin(LED_PIN, ledChannel); ledcWrite(ledChannel, dutyCycle); } void loop() { analog_value = analogRead(ANALOG_PIN_0); Serial.println(analog_value); dutyCycle = map(analog_value, 0, 4095, 0, 255); ledcWrite(ledChannel, dutyCycle); delay(500); }