RisalDash RisalDash

دليل · ESP32 · نصائح

خمسة أشياء يفعلها ESP32 أصلًا

يستعمل معظم الناس ESP32 كأردوينو صغير مع Wi-Fi ولا يلمسون البقية. لكنّ خمس ميزات قوية مبنيّة أصلًا في الرقاقة — بلا عتاد إضافيّ وبلا البحث عن مكتبات. إليك ما هي كلٌّ منها، ولماذا تستحقّ الاستعمال، ومثال كود جاهز للنسخ للخمسة.

ESP32ESP-NOWنوم عميقOTAPWM
خمس ميزات خفية في ESP32: ESP-NOW ولمس GPIO ونوم عميق وOTA وPWM
الخمسة كلّها داخل الرقاقة — عليك فقط تشغيلها.

1. ESP-NOW — تحدّث مع ESP32 آخر دون موجّه

يتيح ESP-NOW للوحتين (أو كثيرات) تبادل حِزم صغيرة مباشرة، دون موجّه Wi-Fi ودون إنترنت — بعناوين MAC فقط. سريع (~1 مللي ثانية)، منخفض الطاقة، مثاليّ للريموتات وعقد الحسّاسات وروابط روبوت-روبوت. يركب على راديو Wi-Fi لكنّه يتخطّى كامل مكدّس TCP/IP؛ وموقعه بجوار Wi-Fi وBLE في دليل البروتوكولات.

ESP-NOW: لوحة ESP32 مرسِلة تتحدّث مباشرة مع لوحة ESP32 مستقبِلة، بلا موجّه Wi-Fi
#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).)

لمس سعويّ: ينخفض touchRead من ~72 إلى ~18 عند لمس اللوحة
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().

OTA: يدفع حاسوب ملفّ .bin عبر Wi-Fi إلى ESP32 على الجدار، بلا USB
#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()).

دورة عمل PWM وسطوع LED: 0% و50% و100%
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++ قليلة.