Your First Program — GPIO & Built-in Sensors
للأعمار 9–14 | مناسب للمبتدئين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.
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!
| Feature | Details |
|---|---|
| Processor | Dual-core, up to 240 MHz (super fast for its size!) |
| Wi-Fi | Built-in! Can connect to the internet |
| Bluetooth | Built-in! Can talk to your phone |
| GPIO Pins | Up to 34 pins you can program |
| المستشعرات المدمجة | Touch sensors, Hall effect sensor, Temperature sensor |
| الذاكرة | 520 KB RAM + 4 MB Flash |
| الطاقة | 3.3V (يمكن تغذيته عبر USB!) |
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!
A context diagram shows how the ESP32 talks to the outside world. It's like a map of who's connected to whom!
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!
GPIO stands for General Purpose Input/Output. إنها الأطراف المعدنية على لوحة ESP32 التي تتصل بالعالم الخارجي، كأنها يدا المتحكم!
Be careful! The ESP32 works at 3.3V، وليس 5V. لا توصل إشارة 5V مباشرة بطرف GPIO — فقد تتلف لوحتك. كما تُستخدم بعض الأطراف (GPIO 6–11) داخليًا لذاكرة الفلاش — don't use those!
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.
يقيس درجة حرارة chip itself (وليس الغرفة). مفيد لمراقبة ارتفاع حرارة الشريحة. النطاق: نحو -40°C إلى 125°C.
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!
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.
https://dl.espressif.com/dl/package_esp32_index.jsonIf 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!
Every maker's first program is Blink — making an LED turn on and off! The ESP32 has a built-in LED on GPIO 2.
| خط | What It Does | In Simple Words |
|---|---|---|
#define LED_PIN 2 | Creates 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 ثانية» |
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.
A sequence diagram shows the order of events — who does what and when. Let's see what happens when the Blink program runs!
لنستخدم في ESP32 built-in capacitive touch sensor! لا حاجة إلى أجزاء إضافية — المس سلكًا موصولًا بطرف يدعم اللمس فحسب.
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"!
The Hall sensor is built into the ESP32 chip. It detects magnetic fields — bring a magnet close and watch the values change!
Hold a refrigerator magnet near the metal can on the ESP32 (فهنا توجد الشريحة). جرّب جانبي المغناطيس — القطب الشمالي يجعل القيمة موجبة، والجنوبي يجعلها سالبة!
والآن لنجمع external button (إدخال) مع LED (خرج). اضغط على الزر → يضيء LED!
The ESP32 has a built-in pull-up resistor inside. When you use INPUT_PULLUP، يقرأ الطرف عادةً HIGH (1)، وتنخفض قراءته إلى LOW (0) عندما تضغط الزر الذي يوصله بـGND. وهذا يعني أنك لا تحتاج إلى مقاومة إضافية — ففي ESP32 مقاومة داخلية!
أضف دائمًا Serial.println() messages to your code! Open the Serial Monitor (أدوات ← مراقب المنفذ التسلسلي، اضبط معدل البود على 115200) لترى ما يفعله ESP32. كأنك تمنح لوحتك صوتًا.
ESP32 GPIO works at 3.3V. لا توصل 5V مباشرة أبدًا. إذا احتجت إلى مستشعرات تعمل بجهد 5V، فاستخدم voltage divider أو level shifter.
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).
احفظ شيفرتك دائمًا باسم واضح مثل blink_test_v1.ino. أنشئ إصدارًا جديدًا كلما أجريت تغييرات كبيرة لتستطيع الرجوع إلى السابق!
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.
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!
Ready to test your skills? Try these challenges and level up!
عدّل برنامج Blink ليومض 5 times fast (100ms لكل واحد)، ثم توقّف لمدة 2 ثانية، ثم كرّر. تلميح: استخدم for loop!
Use the touch sensor to control LED brightness. Softer touch = dimmer, harder touch = brighter. Hint: use analogWrite() أو ledcWrite() with PWM!
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?
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!
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!
| Function | What It Does | Example |
|---|---|---|
pinMode(pin, mode) | Set pin as INPUT or OUTPUT | pinMode(2, OUTPUT); |
digitalWrite(pin, val) | Set pin HIGH (on) or LOW (off) | digitalWrite(2, HIGH); |
digitalRead(pin) | Read HIGH or LOW from pin | int v = digitalRead(15); |
analogRead(pin) | Read analog value (0–4095) | int v = analogRead(34); |
touchRead(pin) | Read touch sensor value | int v = touchRead(4); |
hallRead() | Read Hall sensor value | int v = hallRead(); |
delay(ms) | توقف مؤقت لمدة بالمللي ثانية | delay(1000); = 1 sec |
Serial.begin(baud) | Start serial communication | Serial.begin(115200); |
Serial.println(text) | Print text + new line | Serial.println("Hi!"); |