دليل · ESP32 · نصائح
خمسة أشياء يفعلها ESP32 أصلًا
يستعمل معظم الناس ESP32 كأردوينو صغير مع Wi-Fi ولا يلمسون البقية. لكنّ خمس ميزات قوية مبنيّة أصلًا في الرقاقة — بلا عتاد إضافيّ وبلا البحث عن مكتبات. إليك ما هي كلٌّ منها، ولماذا تستحقّ الاستعمال، ومثال كود جاهز للنسخ للخمسة.
1. ESP-NOW — تحدّث مع ESP32 آخر دون موجّه
يتيح ESP-NOW للوحتين (أو كثيرات) تبادل حِزم صغيرة مباشرة، دون موجّه Wi-Fi ودون إنترنت — بعناوين MAC فقط. سريع (~1 مللي ثانية)، منخفض الطاقة، مثاليّ للريموتات وعقد الحسّاسات وروابط روبوت-روبوت. يركب على راديو Wi-Fi لكنّه يتخطّى كامل مكدّس TCP/IP؛ وموقعه بجوار Wi-Fi وBLE في دليل البروتوكولات.
#include <esp_now.h>
#include <WiFi.h>
uint8_t peer[] = {0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC}; // receiver MAC
typedef struct { int id; float temp; } Msg;
Msg data;
void setup() {
WiFi.mode(WIFI_STA);
esp_now_init();
esp_now_peer_info_t p = {};
memcpy(p.peer_addr, peer, 6);
esp_now_add_peer(&p);
}
void loop() {
data.id = 1; data.temp = 24.5;
esp_now_send(peer, (uint8_t *)&data, sizeof(data)); // no router, ~1 ms
delay(2000);
} 2. اللمس السعويّ — أيّ لوحة تصير زرًّا
لـ ESP32 الكلاسيكيّ 10 أطراف GPIO قادرة على اللمس. وصّل طرفًا إلى رقعة نحاس أو رقاقة أو رأس
برغي، فيُعيد touchRead() رقمًا ينخفض حين يقترب إصبع — بلا زرّ وبلا رقاقة إضافية. رائع
للوحات الأنيقة، والتحكّم الخفيّ، والإيقاظ باللمس. (تستعمل S2/S3 واجهة لمس مختلفة قليلًا؛ الكلاسيكيّ يستعمل
touchRead(T0..T9).)

void setup() {
Serial.begin(115200);
}
void loop() {
int v = touchRead(T0); // T0 = GPIO4 on the classic ESP32
if (v < 40) Serial.println("touched!"); // lower = a finger is there
delay(100);
} 3. النوم العميق — أشهر على بطارية
بين دفعات العمل، يستطيع ESP32 الهبوط إلى نوم عميق عند ~10 ميكروأمبير والاستيقاظ بمؤقّت أو
طرف. هذا الفرق بين عقدة بطارية تدوم يومًا وأخرى تدوم عامًا. العقبة: عند الاستيقاظ تُعاد تهيئة الرقاقة ويعمل
setup() من جديد، فاحفظ الحالة في ذاكرة RTC. التفاصيل في
دليل النوم العميق.

#define uS_PER_S 1000000ULL
void setup() {
Serial.begin(115200);
Serial.println("awake — do the work, then sleep");
// ... read a sensor, send it ...
esp_sleep_enable_timer_wakeup(10 * uS_PER_S); // wake in 10 seconds
esp_deep_sleep_start(); // ~10 uA until then
}
void loop() {} // never runs — setup() runs again on each wake 4. OTA — حدّث البرنامج عبر الأثير
حين تكون اللوحة على الجدار لا تريد نزعها لإعادة البرمجة. يدفع OTA برنامجًا جديدًا عبر Wi-Fi:
أضِف بضعة أسطر فيظهر منفذ شبكة في Arduino IDE. ضروريّ للأجهزة المنشورة — وإن أردته بسطر واحد فعلًا، تعرض
لوحة RisalDash زرّ «تحديث البرنامج» عبر dash.enableOTA().

#include <WiFi.h>
#include <ArduinoOTA.h>
void setup() {
WiFi.begin("your-ssid", "your-pass");
while (WiFi.status() != WL_CONNECTED) delay(300);
ArduinoOTA.begin(); // the board is now flashable over Wi-Fi
}
void loop() {
ArduinoOTA.handle(); // pick the network port in the IDE
} 5. PWM على أيّ طرف تقريبًا — السطوع والسرعة والسيرفو
تولّد طرفية LEDC في ESP32 PWM عتاديًّا على أيّ GPIO تقريبًا — عتّم LED، أو اضبط سرعة محرّك،
أو موضع سيرفو، كلّه دون حجب المعالج. تختار طرفًا وتردّدًا ودقّة، ثم تكتب قيمة دورة العمل فقط. في Arduino-ESP32
الإصدار 3.x هي واجهة ledcAttach() الأنيقة أدناه (الإصدار 2.x القديم استعمل
ledcSetup() + ledcAttachPin()).
void setup() {
ledcAttach(18, 5000, 8); // pin 18, 5 kHz, 8-bit (0..255) [core 3.x]
}
void loop() {
for (int d = 0; d <= 255; d++) { ledcWrite(18, d); delay(4); } // fade up
for (int d = 255; d >= 0; d--) { ledcWrite(18, d); delay(4); } // fade down
} اجمعها معًا
لا شيء من هذا يحتاج درعًا أو قائمة تسوّق — إنه سيليكون تملكه أصلًا. حسّاس بطارية يستيقظ بـاللمس، ويقرأ، ويطلق القيمة عبر ESP-NOW، ثم يعود إلى النوم العميق — يُحدَّث ميدانيًّا بـOTA، مع LED حالة بـPWM — هذه خمس ميزات «خفية» وصفر قطع إضافية. تلك هي الفكرة: ESP32 يفعل أكثر بكثير من مجرّد الوميض.
تريد واجهة فوقها؟ لوحة حيّة كاملة — مع OTA مدمج — في أسطر C++ قليلة.