Alin Li مستكشف ESP32

Your First Program — GPIO & Built-in Sensors

للأعمار 9–14 | مناسب للمبتدئين

🔌 1. ما ESP32؟

The ESP32 is a tiny but powerful microcontroller — think of it as a small brain that can control electronic things! It was made by a company called Espressif Systems.

Key Facts

Unlike your big computer, the ESP32 is made to do one job really well — read sensors, blink lights, control motors, and talk to the internet!

FeatureDetails
ProcessorDual-core, up to 240 MHz (super fast for its size!)
Wi-FiBuilt-in! Can connect to the internet
BluetoothBuilt-in! Can talk to your phone
GPIO PinsUp to 34 pins you can program
المستشعرات المدمجةTouch sensors, Hall effect sensor, Temperature sensor
الذاكرة520 KB RAM + 4 MB Flash
الطاقة3.3V (يمكن تغذيته عبر USB!)
Fun Fact

The ESP32 costs about $3–$8 — cheaper than a sandwich! Yet it has Wi-Fi, Bluetooth, and dozens of sensors packed inside. Thousands of smart home devices use it!

🗺️ 2. مخطط السياق — الصورة العامة

A context diagram shows how the ESP32 talks to the outside world. It's like a map of who's connected to whom!

ESP32 System Context Diagram

ESP32 متحكّم دقيق 🌡️ Sensors (درجة الحرارة، اللمس، تأثير هول) data in 💡 LEDs / Actuators (مصابيح، محرّكات، طنّانات) signals out 💻 حاسوبك (Arduino IDE — رفع الشيفرة) USB 🌐 Wi-Fi (الإنترنت / السحابة) wireless 📱 Bluetooth (الهاتف / الأجهزة) wireless 🔋 الطاقة (USB أو بطارية) 🔘 أزرار (إدخال المستخدم)
Think About It

The ESP32 sits in the center of everything. It reads data from sensors and buttons (inputs), processes the information using your code, and sends commands to LEDs and motors (outputs). It can also talk wirelessly via Wi-Fi and Bluetooth!

📌 3. فهم أطراف GPIO

GPIO stands for General Purpose Input/Output. إنها الأطراف المعدنية على لوحة ESP32 التي تتصل بالعالم الخارجي، كأنها يدا المتحكم!

What Can GPIO Do?

⬇️ Digital INPUT
Read ON (1) or OFF (0). Example: Is the button pressed?
⬆️ Digital OUTPUT
Send ON (1) or OFF (0). Example: Turn LED on!
📊 إدخال تناظري (ADC)
Read values 0–4095. Example: How bright is the light?
📈 إخراج تناظري (DAC/PWM)
Send varying signals. Example: Dim an LED slowly.

GPIO Pin Map — ESP32 DevKit

Common ESP32 Pin Functions

ESP32 WROOM-32 USB 3V3 GND GPIO 15 GPIO 2 ★ GPIO 4 GPIO 5 GPIO 18 GPIO 19 GPIO 21 VIN (5V) GND GPIO 13 (T4) GPIO 12 (T5) GPIO 14 (T6) GPIO 27 (T7) GPIO 25 (DAC1) GPIO 26 (DAC2) GPIO 33 (ADC) الطاقة Digital I/O Touch Sensor DAC Output Built-in LED ★ ★ GPIO 2 is connected to the built-in LED on most ESP32 boards
Important

Be careful! The ESP32 works at 3.3V، وليس 5V. لا توصل إشارة 5V مباشرة بطرف GPIO — فقد تتلف لوحتك. كما تُستخدم بعض الأطراف (GPIO 6–11) داخليًا لذاكرة الفلاش — don't use those!

GPIO Visual Model — Inputs & Outputs

🌡️ Sensor
INPUT
🔘 زر
INPUT
GPIO 34 ←
GPIO 15 ←
ESP32
Processes Data
→ GPIO 2
→ GPIO 5
💡 LED
OUTPUT
🔊 طنّان
OUTPUT

🔍 4. المستشعرات المدمجة

The ESP32 has sensors already built inside the chip — you don't need to connect any extra hardware!

🖐️ مستشعرات اللمس (السعوية)

يمكن لـ 10 أطراف GPIO اكتشاف متى touch them! Pins: GPIO 0, 2, 4, 12, 13, 14, 15, 27, 32, 33. They work by sensing the tiny electrical charge in your finger.

🧲 مستشعر تأثير هول

Detects magnetic fields near the chip! Hold a magnet close to the ESP32 and it can tell — useful for detecting if a door is open or a wheel is turning.

🌡️ Internal Temperature Sensor

يقيس درجة حرارة chip itself (وليس الغرفة). مفيد لمراقبة ارتفاع حرارة الشريحة. النطاق: نحو -40°C إلى 125°C.

📊 ADC (محوّل تناظري إلى رقمي)

Reads analog voltage on certain pins (0–3.3V) and converts it into a number (0–4095). This is how you read external sensors like light sensors, potentiometers, and more!

🛠️ 5. إعداد Arduino IDE

Before we write code, we need to set up the Arduino IDE — the free software we use to write and upload programs to the ESP32.

1
Download Arduino IDE — Go to arduino.cc/en/software and download the free IDE for your computer (Windows, Mac, or Linux).
2
إضافة دعم لوحة ESP32 — Open Arduino IDE → File → Preferences. في حقل "Additional Board Manager URLs" الصق:
https://dl.espressif.com/dl/package_esp32_index.json
3
Install ESP32 Package — Go to Tools → Board → Boards Manager. ابحث عن "ESP32" وانقر على Install on "esp32 by Espressif Systems".
4
Select Your Board — Tools → Board → ESP32 Arduino → ESP32 Dev Module.
5
Select the Port — Connect ESP32 via USB. Go to Tools → Port and select the new COM port that appears.
Tip

If no port appears, you may need to install the CP2102 or CH340 USB driver — this depends on which USB chip your ESP32 board uses. Ask your instructor!

✨ 6. Your First Program — Blink!

Every maker's first program is Blink — making an LED turn on and off! The ESP32 has a built-in LED on GPIO 2.

The Program Flow

Start
→
setup() runs once
→
LED ON
→
Wait 1 sec
→
LED OFF
→
Wait 1 sec
→
🔁 كرّر إلى الأبد

The Code

C++ / Arduino // ============================================= // مستكشف ESP32 من Alin Li — برنامج الوميض // برنامجك الأول! يجعل LED يومض. // ============================================= // الخطوة 1: حدّد الطرف الموصول بـ LED #define LED_PIN 2 // LED المدمج على GPIO 2 // الخطوة 2: تعمل setup() مرة واحدة عند بدء اللوحة void setup() { pinMode(LED_PIN, OUTPUT); // أخبر ESP32: «GPIO 2 مخرج OUTPUT» Serial.begin(115200); // ابدأ التواصل مع الحاسوب (للرسائل) Serial.println("Blink program started!"); } // الخطوة 3: تعمل loop() باستمرار إلى الأبد void loop() { digitalWrite(LED_PIN, HIGH); // شغّل LED (HIGH = 3.3V) Serial.println("LED is ON"); delay(1000); // انتظر 1000ms (1 ثانية) digitalWrite(LED_PIN, LOW); // أطفئ LED (LOW = 0V) Serial.println("LED is OFF"); delay(1000); // انتظر 1 ثانية أخرى }

Code Breakdown

خطWhat It DoesIn Simple Words
#define LED_PIN 2Creates a name for pin number«لنُسمِّ GPIO 2 باسم 'LED_PIN'»
pinMode(LED_PIN, OUTPUT)Sets pin as output«يا ESP32، هذا الطرف سيرسل الإشارات»
Serial.begin(115200)Starts serial communication«لنتواصل مع الحاسوب بهذه السرعة»
digitalWrite(LED_PIN, HIGH)Sends 3.3V to pin«أرسل الطاقة! شغّل!»
digitalWrite(LED_PIN, LOW)Sends 0V to pin«أوقف الطاقة! أطفئ!»
delay(1000)Waits 1000 milliseconds«انتظر 1 ثانية»
Upload Tip

Click the → Upload button in Arduino IDE. Some ESP32 boards need you to hold the BOOT button while uploading. Release it when you see "Connecting..." in the console.

📋 7. Sequence Diagram — What Happens Step by Step

A sequence diagram shows the order of events — who does what and when. Let's see what happens when the Blink program runs!

Blink Program — Sequence Diagram

Your Computer ESP32 CPU GPIO 2 (LED) Serial SETUP Upload code via USB pinMode(2, OUTPUT) Serial.begin(115200) LOOP 🔁 كرّر digitalWrite(2, HIGH) print "LED is ON" 1 ثانية digitalWrite(2, LOW) print "LED is OFF" 1 ثانية ↩ Go back to start of loop()

🖐️ 8. Project: Touch Sensor

لنستخدم في ESP32 built-in capacitive touch sensor! لا حاجة إلى أجزاء إضافية — المس سلكًا موصولًا بطرف يدعم اللمس فحسب.

كيف يعمل

Finger touches wire
→
Touch value drops
→
ESP32 reads value
→
If < threshold → LED ON!
Touch Sensor // ============================================= // مستكشف ESP32 من Alin Li — مستشعر لمس // المس GPIO 4 لتشغيل LED! // ============================================= #define LED_PIN 2 // LED مدمج #define TOUCH_PIN 4 // طرف يدعم اللمس (T0) #define THRESHOLD 40 // حساسية اللمس (الأقل = أكثر حساسية) void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(115200); Serial.println("Touch sensor ready! Touch GPIO 4..."); } void loop() { int touchValue = touchRead(TOUCH_PIN); // اقرأ قيمة اللمس Serial.print("Touch value: "); Serial.println(touchValue); if (touchValue < THRESHOLD) { digitalWrite(LED_PIN, HIGH); // تم اللمس! LED مضاء Serial.println("*** TOUCHED! ***"); } else { digitalWrite(LED_PIN, LOW); // لا يوجد لمس. LED مطفأ } delay(100); // تأخير صغير لتجنب إغراق المخرج التسلسلي }
How Touch Sensing Works

Your body has a tiny electrical charge. When you touch the wire, the capacitance changes. The ESP32 measures this change — when untouched, values are high (~50–80). When touched, they drop (~10–20). The THRESHOLD of 40 is the "decision line"!

🧲 9. Project: Hall Effect Sensor

The Hall sensor is built into the ESP32 chip. It detects magnetic fields — bring a magnet close and watch the values change!

Hall Sensor // ============================================= // مستكشف ESP32 من Alin Li — مستشعر تأثير Hall // اكتشف المغناطيس قرب شريحة ESP32! // ============================================= #define LED_PIN 2 #define MAG_THRESHOLD 50 // اضبط حسب مغناطيسك void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(115200); Serial.println("Hall sensor ready! Bring a magnet close..."); } void loop() { int hallValue = hallRead(); // اقرأ المجال المغناطيسي Serial.print("Hall value: "); Serial.println(hallValue); // يُكتشف المغناطيس إذا ارتفعت القيمة أو انخفضت كثيرًا if (abs(hallValue) > MAG_THRESHOLD) { digitalWrite(LED_PIN, HIGH); Serial.println("🧲 MAGNET DETECTED!"); } else { digitalWrite(LED_PIN, LOW); } delay(200); }
Try This!

Hold a refrigerator magnet near the metal can on the ESP32 (فهنا توجد الشريحة). جرّب جانبي المغناطيس — القطب الشمالي يجعل القيمة موجبة، والجنوبي يجعلها سالبة!

🔘 10. مشروع: إدخال زر + إخراج LED

والآن لنجمع external button (إدخال) مع LED (خرج). اضغط على الزر → يضيء LED!

Wiring Diagram

Button → ESP32 → LED Connection

🔘 زر رجل واحدة ← GPIO 15 الرجل الأخرى ← GND GPIO 15 GND ESP32 Your code here! GPIO 2 💡 LED (مدمج على GPIO 2)
Button + LED // ============================================= // مستكشف ESP32 من Alin Li — زر + LED // اضغط الزر على GPIO 15 → يضيء LED على GPIO 2 // ============================================= #define LED_PIN 2 #define BUTTON_PIN 15 void setup() { pinMode(LED_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT_PULLUP); // استخدم مقاومة الرفع الداخلية Serial.begin(115200); Serial.println("Button + LED ready!"); } void loop() { int buttonState = digitalRead(BUTTON_PIN); // تعني INPUT_PULLUP: القيمة LOW عند الضغط، وHIGH عند الإفلات if (buttonState == LOW) { digitalWrite(LED_PIN, HIGH); Serial.println("Button PRESSED → LED ON"); } else { digitalWrite(LED_PIN, LOW); } delay(50); // تأخير صغير لإزالة ارتداد الزر }
What is INPUT_PULLUP?

The ESP32 has a built-in pull-up resistor inside. When you use INPUT_PULLUP، يقرأ الطرف عادةً HIGH (1)، وتنخفض قراءته إلى LOW (0) عندما تضغط الزر الذي يوصله بـGND. وهذا يعني أنك لا تحتاج إلى مقاومة إضافية — ففي ESP32 مقاومة داخلية!

💡 11. نصائح وأفضل الممارسات

Tip #1 — Use Serial Monitor

أضف دائمًا Serial.println() messages to your code! Open the Serial Monitor (أدوات ← مراقب المنفذ التسلسلي، اضبط معدل البود على 115200) لترى ما يفعله ESP32. كأنك تمنح لوحتك صوتًا.

Tip #2 — Voltage Matters

ESP32 GPIO works at 3.3V. لا توصل 5V مباشرة أبدًا. إذا احتجت إلى مستشعرات تعمل بجهد 5V، فاستخدم voltage divider أو level shifter.

Tip #3 — Safe GPIO Pins

Best pins to use: GPIO 2, 4, 5, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33. Avoid: GPIO 6–11 (flash memory), GPIO 34–39 (input-only, no pull-up).

Tip #4 — Save Your Work

احفظ شيفرتك دائمًا باسم واضح مثل blink_test_v1.ino. أنشئ إصدارًا جديدًا كلما أجريت تغييرات كبيرة لتستطيع الرجوع إلى السابق!

Tip #5 — Read the Errors

If uploading fails, read the orange/red text in the Arduino console! Common fixes: check USB cable, select correct board, hold BOOT button, or try a different USB port.

Tip #6 — The Power of delay()

delay(ms) pauses everything. For simple projects it's fine, but for advanced projects, learn about millis() which lets you time things without freezing your code!

🏆 12. تحديات لك!

Ready to test your skills? Try these challenges and level up!

⭐ Challenge 1 — Speed Blink

عدّل برنامج Blink ليومض 5 times fast (100ms لكل واحد)، ثم توقّف لمدة 2 ثانية، ثم كرّر. تلميح: استخدم for loop!

⭐⭐ Challenge 2 — Touch Brightness

Use the touch sensor to control LED brightness. Softer touch = dimmer, harder touch = brighter. Hint: use analogWrite() أو ledcWrite() with PWM!

⭐⭐ Challenge 3 — Magnet Counter

Count how many times a magnet passes by the Hall sensor and display the count on Serial Monitor. Can you make it count only once per pass?

⭐⭐⭐ Challenge 4 — Secret Knock

Use the touch sensor to create a "secret knock" pattern. The LED only turns on if you tap the wire in the right pattern (e.g., tap-tap-pause-tap). Think about timing!

⭐⭐⭐ Challenge 5 — Multi-Sensor Dashboard

Read ALL sensors (touch, hall, and a button) at once, and print a formatted dashboard to the Serial Monitor that updates every second. Make it look nice with labels and separators!

📝 Quick Reference Card

FunctionWhat It DoesExample
pinMode(pin, mode)Set pin as INPUT or OUTPUTpinMode(2, OUTPUT);
digitalWrite(pin, val)Set pin HIGH (on) or LOW (off)digitalWrite(2, HIGH);
digitalRead(pin)Read HIGH or LOW from pinint v = digitalRead(15);
analogRead(pin)Read analog value (0–4095)int v = analogRead(34);
touchRead(pin)Read touch sensor valueint v = touchRead(4);
hallRead()Read Hall sensor valueint v = hallRead();
delay(ms)توقف مؤقت لمدة بالمللي ثانيةdelay(1000); = 1 sec
Serial.begin(baud)Start serial communicationSerial.begin(115200);
Serial.println(text)Print text + new lineSerial.println("Hi!");