الغسالة اللي في بيتكم، والمكيف، والعربية، جواهم كمبيوتر صغير حد برمجه. وده الـ Embedded Systems.
الـ Embedded إنك تكتب الكود اللي بيشتغل جوه الأجهزة دي، قريب جدًا من الهاردوير: بيقرا حساس، ويشغّل موتور، ويرد في الوقت المظبوط. وعلشان تتعلمه صح فيه ترتيب: C كويس جدًا ومعاها أساسيات الإلكترونيات، وبعدها Microcontroller تبدأ فيه بـ Arduino وبعدين STM32 أو ESP32، وبعدها طرق الاتصال UART و I2C و SPI، وفي الآخر RTOS.
علّم على كل حاجة تخلصها وانت ماشي، علشان تعرف انت فين، وترجع تكمّل من نفس المكان.
قبل ما تبدأ
- ذاكر كل يوم، حتى لو شوية. المدد هنا محسوبة على ساعتين في اليوم. لو وقتك أقل هتاخد وقت أطول، وده عادي.
- المدد تقريبية. في ناس هتخلص أسرع وناس أبطأ. عدّي المرحلة لما تبقى جاهز فعلًا، مش لما الوقت يخلص.
- اشتغل بإيدك من أول يوم. هات من أول أسبوع kit فيه breadboard و LEDs ومقاومات وزراير وأسلاك، ومعاه multimeter. وكل مرحلة فيها مشروع، متعديش للي بعدها قبل ما تعمله بإيدك.
المرحلة 1 من 6
Cاللغة القريبة من الهاردوير
المدة: 6 لـ 8 أسابيع
ابدأ بلغة C كويس جدًا. هي اللغة الأساسية في المجال ده، لأنها بتديك تحكم في الذاكرة وفي كل bit بنفسك، وده بالظبط اللي محتاجه وانت بتكلم الهاردوير.
وكلمة «كويس جدًا» مقصودة: الـ pointers والـ bits مش حاجة تعدّي عليها بسرعة. ومن أول أسبوع، ابدأ معاها مرحلة الإلكترونيات اللي بعدها.
هتتعلم إيه
0 من 12اعمل بإيدك
8 لمبات في رقم واحد. اكتب functions بتشغّل وتطفي وتقلب وتقرا bit معين، و function بتطبع الرقم بالـ binary. وبعدين برنامج بيعتبر كل bit في uint8_t لمبة، وتتحكم فيهم من الكيبورد: تشغّل لمبة، وتطفي لمبة، وتعمل نور بيجري من ناحية للتانية.
تعدّي للمرحلة اللي بعدها لما
- تقدر تشرح الـ pointers لحد تاني بالرسم
- بتشغّل أو تطفي bit معين في رقم من غير ما تبص على شرح
- بتقرا رسالة الـ compiler وتصلّح الـ error بنفسك
الأمان قبل أي توصيلة
- اشتغل على جهد واطي بس. زي الـ 5 فولت اللي جاية من الـ USB، أو بطاريات صغيرة. متقربش من كهربا البيت (220 فولت)، ومتفكش أي جهاز متوصل بالفيشة وانت لسه بتتعلم. دي خطر على حياتك.
- افصل الباور قبل ما تغيّر أي سلك. وبعد ما توصّل، راجع التوصيلات بعينك قبل ما ترجّع الباور.
- اتأكد من الموجب والسالب. الـ LED والمكثف الإلكتروليتي وأي chip ممكن يتحرقوا لو اتوصلوا بالعكس، والمكثف ممكن ينفجر.
- متوصّلش الـ 5V أو الـ 3.3V بالـ GND على طول. ده short، وبيسخّن ويحرق.
- كل LED لازم معاه مقاومة. ومتشغّلش موتور من pin على طول، استخدم driver.
- اعرف الـ pin بيستحمل كام فولت. الـ ESP32 بيشتغل على 3.3V، و 5V على أي pin فيه ممكن تحرقه. ارجع للـ datasheet دايمًا.
- بطاريات الليثيوم بتولّع لو اتعاملت غلط. متعملهاش short، ومتخبطهاش، واشحنها بالشاحن المخصوص ليها بس.
- لو حاجة سخنت جامد أو شميت ريحة حريق، افصل الباور فورًا. ومتلمسش القطعة لحد ما تبرد.
- الكاوية بتبقى سخنة جدًا. رجّعها الحامل بتاعها دايمًا، واشتغل في مكان فيه تهوية، واغسل إيدك بعد اللحام.
المرحلة 2 من 6
أساسيات الإلكترونياتالفولت والتيار والمقاومة
المدة: 2 لـ 4 أسابيع
ومع C، أساسيات الإلكترونيات: الفولت والتيار والمقاومة، وإزاي تقرا Datasheet، ودا الكتالوج اللي بيشرح القطعة: رجليها، وبتشتغل على كام فولت، وأقصى حاجة تستحملها.
دي بتمشي مع C، مش بعدها: خلي كل يوم فيه شوية كود وشوية توصيل. وهنا هتبدأ تشوف الغلطة بعينك: LED مش بينوّر، أو قطعة سخنت. اقرا قواعد الأمان اللي فوق قبل أول توصيلة.
هتتعلم إيه
0 من 12اعمل بإيدك
4 دواير على الـ breadboard من غير microcontroller. LED بمقاومة انت حاسبها، وبعدين زرار بيشغّله، وبعدين voltage divider تقيس خرجه بالـ multimeter وتقارنه بحسابك، وفي الآخر transistor بيشغّل buzzer. وارسم الـ schematic بتاع كل دايرة قبل ما توصّلها.
تعدّي للمرحلة اللي بعدها لما
- بتحسب المقاومة اللي محتاجها قبل ما توصّل، مش بالتجربة
- بتلاقي الغلط في الدايرة بالـ multimeter بنفسك
- فتحت datasheet لقطعة وطلّعت منه الـ pinout وأقصى فولت تستحمله
المرحلة 3 من 6
Arduinoأول Microcontroller
المدة: 3 لـ 4 أسابيع
بعد كده Microcontroller، ودا كمبيوتر صغير في شريحة واحدة: فيه processor وذاكرة ورجول (pins) بتوصّلها بالقطع. ابدأ بـ Arduino.
Arduino بيسهّل عليك كل حاجة: الـ board جاهزة، والكود بيترفع بزرار، وفيه مكتبات لحساسات وشاشات كتير. وده اللي محتاجه في الأول: تشوف الكود بتاعك بيحرك حاجة حقيقية بسرعة.
هتتعلم إيه
0 من 12اعمل بإيدك
إشارة مرور. 3 LEDs بتشتغل بالترتيب، وزرار للمشاة بيقطع الدورة، و buzzer بيصفّر والمشاة بتعدّي، وحساس ضوء بيخلي الإشارة تفلّش أصفر بالليل. وكله بـ millis() من غير delay()، علشان الزرار يستجيب على طول.
تعدّي للمرحلة اللي بعدها لما
- بتكتب كود فيه أكتر من حاجة شغالة في نفس الوقت من غير
delay() - تقدر توصّل حساس جديد وتشغّله من الـ datasheet بتاعه
- لما حاجة متشتغلش، بتعرف المشكلة في الكود ولا في التوصيل
المرحلة 4 من 6
STM32 أو ESP32تحت غطا الـ Arduino
المدة: 5 لـ 8 أسابيع
وبعدين ادخل على STM32 أو ESP32. Arduino كان مخبّي عنك حاجات كتير، وهنا بتنزل تحت: الـ registers، والـ clocks، والـ interrupts، والـ debugger.
اختار واحد بس. STM32 عيلة كبيرة من الشرايح، وعليها مصادر كتير بتشرح الشغل من الـ registers. و ESP32 جواه WiFi و Bluetooth، فلو بتحب الـ IoT ابدأ بيه. وخلي بالك: الاتنين بيشتغلوا على 3.3V، فراجع أي حاجة 5V قبل ما توصّلها.
هتتعلم إيه
0 من 12اعمل بإيدك
Blink وزرار من الـ registers. LED بيفلّش بـ timer مش بـ delay، وزرار شغال بـ interrupt بيغيّر سرعة الفلاش، من غير مكتبات جاهزة على قد ما تقدر. وبعدين اعمل نفس الحاجة بالـ HAL أو بـ ESP-IDF، وقارن الكود.
تعدّي للمرحلة اللي بعدها لما
- تقدر تفتح جزء الـ GPIO في الـ reference manual وتطلّع منه الـ registers اللي محتاجها
- استخدمت الـ debugger ووقفت الكود عند breakpoint
- فاهم الـ HAL بتعمل إيه من جوه، مش بتستخدمها وخلاص
المرحلة 5 من 6
UART و I2C و SPIاللغات اللي القطع بتكلم بيها بعض
المدة: 4 لـ 6 أسابيع
وبعدها طرق الاتصال، زي UART و I2C و SPI، ودي اللغات اللي القطع بتكلم بيها بعض. الحساس بيبعت قراياته للـ microcontroller، والـ microcontroller بيكلم الشاشة، وكل واحد بلغته.
انت استخدمت UART من غير ما تاخد بالك، مع الـ Serial Monitor في Arduino. هنا بتفهمهم من جوه، وبتكتب الـ driver بنفسك من الـ datasheet.
هتتعلم إيه
0 من 11اعمل بإيدك
محطة طقس صغيرة. حساس حرارة ورطوبة على I2C، وشاشة صغيرة على SPI أو I2C، والقرايات بتتبعت للكمبيوتر على UART كل ثانية. واكتب الـ driver بتاع الحساس بنفسك من الـ datasheet، من غير مكتبة جاهزة.
تعدّي للمرحلة اللي بعدها لما
- كتبت driver لقطعة من الـ datasheet بس
- شفت الإشارة على logic analyzer وعرفت البايتات اللي اتبعتت
- لو القطعة مبتردش، عندك خطوات ثابتة تعرف بيها السبب
- مرتاح في الـ interrupts والـ timers قبل ما تدخل الـ RTOS
المرحلة 6 من 6
RTOSكذا حاجة في نفس الوقت
المدة: 4 لـ 6 أسابيع
وفي الآخر RTOS، ودا نظام تشغيل صغير بيخلي الجهاز يعمل كذا حاجة في نفس الوقت من غير ما يتأخر: يقرا الحساس، ويحدّث الشاشة، ويرد على الزرار، وكل واحدة في وقتها.
هنتعلم على FreeRTOS: مجاني، ومستخدم كتير، و ESP-IDF مبني عليه أصلًا. ومتدخلش المرحلة دي قبل ما تكون مرتاح في الـ interrupts والـ timers، لأن الـ RTOS مبني عليهم.
هتتعلم إيه
0 من 12اعمل بإيدك
محطة الطقس بـ RTOS. قسّمها لـ tasks: task بتقرا الحساس، و task بتحدّث الشاشة، و task بترد على commands من الـ UART، وبينهم queues. وزوّد watchdog، وزرار بـ interrupt بيغيّر شكل العرض على طول حتى والحساس شغال. وسيبها شغالة يوم كامل من غير ما تعلّق.
تعدّي للمرحلة اللي بعدها لما
- عارف كل task عندك بتشتغل إمتى وليه
- مفيش اتنين tasks بيكلموا نفس القطعة من غير mutex
- الجهاز فضل شغال يوم كامل من غير ما يعلّق
سلم المشاريع
المشاريع هي اللي بتعلمك بجد، وهي اللي هتوريها لأي حد عايز يشغّلك. دول 5 مشاريع، كل واحد أصعب شوية من اللي قبله، وكلهم من المراحل فوق. والأخير هو اللي بيقفل الخطة.
8 لمبات في رقم واحد
C و Bitwise
كل bit لمبة، وتتحكم فيهم من الكيبورد. نفس اللي هتعمله بعد كده مع الـ registers.
إشارة مرور
Arduino و millis و Interrupts
أول مشروع بيتحرك قدامك: LEDs وزرار وحساس، وكله شغال مع بعض من غير
delay().Blink وزرار من الـ registers
STM32 أو ESP32 و Timers و Debugger
نفس الفكرة البسيطة، بس من تحت خالص: انت اللي بتكتب في الـ registers.
محطة طقس
UART و I2C و SPI
حساس وشاشة وكمبيوتر بيكلموا بعض، والـ driver بتاع الحساس كاتبه بإيدك.
محطة الطقس بـ RTOS
FreeRTOS و Queues و Watchdog
مشروع الـ portfolio: نفس المحطة بعد ما قسّمتها لـ tasks، وشغالة يوم كامل من غير ما تعلّق. صوّرها فيديو وهي شغالة، وارسم الـ schematic، وارفع الكود على GitHub بـ README بيشرح كل task بتعمل إيه.
مصادر مجانية
كل دول مجانيين، أو فيهم جزء مجاني يكفيك. متجمعش مصادر كتير: اختار مصدر أساسي واحد لكل مرحلة وكمّل بيه، والباقي ارجعله لما تقف في حتة.
C
- Beej’s Guide to C Programming (بيفتح في تاب جديدة)كتاب C مجاني أونلاين، مكتوب بأسلوب خفيف ومفصّل.
- Learn-C.org (بيفتح في تاب جديدة)دروس C قصيرة وتمارين بتحلها في المتصفح.
- CS50x (بيفتح في تاب جديدة)كورس Harvard المجاني، فيه أسابيع كاملة بـ C، وبيشرح الـ memory والـ pointers كويس.
الإلكترونيات
- SparkFun: Ohm’s Law (بيفتح في تاب جديدة)الفولت والتيار والمقاومة وقانون أوم، بالرسم.
- SparkFun: How to Use a Multimeter (بيفتح في تاب جديدة)إزاي تقيس بالـ multimeter من غير ما تبوّظه.
- SparkFun: How to Read a Schematic (بيفتح في تاب جديدة)رموز القطع، وإزاي تقرا رسمة أي دايرة.
- Tinkercad Circuits (بيفتح في تاب جديدة)تبني الدايرة وتجربها في المتصفح قبل ما توصّلها بجد، وفيه Arduino كمان.
- Falstad Circuit Simulator (بيفتح في تاب جديدة)simulator بيوريك التيار ماشي فين في الدايرة.
- Adafruit Guide to Excellent Soldering (بيفتح في تاب جديدة)إزاي تلحم صح وبأمان، لما تحتاج تلحم.
Arduino
- Arduino Built-in Examples (بيفتح في تاب جديدة)أمثلة رسمية للزرار والـ analog والـ PWM والـ Serial، وكل مثال بتوصيلته.
- Arduino Language Reference (بيفتح في تاب جديدة)كل function في Arduino بتعمل إيه.
STM32 و ESP32
- Modern Embedded Systems Programming (بيفتح في تاب جديدة)كورس فيديو مجاني بيشرح الـ embedded من تحت: الـ registers، والـ interrupts، لحد الـ RTOS.
- Embedded Systems: Shape The World (بيفتح في تاب جديدة)كتاب أونلاين مجاني من University of Texas، بيشرح الـ microcontrollers من الصفر.
- ESP-IDF Get Started (بيفتح في تاب جديدة)الشرح الرسمي لأول مشروع على ESP32 بـ ESP-IDF.
- Wokwi (بيفتح في تاب جديدة)simulator في المتصفح لـ Arduino و ESP32 و STM32، تجرب فيه من غير board.
طرق الاتصال
- SparkFun: Serial Communication (بيفتح في تاب جديدة)شرح الـ UART والـ baud rate وشكل البيانات على السلك.
- SparkFun: I2C (بيفتح في تاب جديدة)إزاي الـ I2C شغال، والـ addresses، والـ pull-ups.
- SparkFun: SPI (بيفتح في تاب جديدة)شرح الـ SPI وإمتى تستخدمه.
- PulseView (بيفتح في تاب جديدة)برنامج مجاني بتشوف بيه إشارات الـ logic analyzer، وبيفك الـ UART و I2C و SPI لوحده.
RTOS
- FreeRTOS Kernel Book (بيفتح في تاب جديدة)الكتاب الرسمي لـ FreeRTOS، ببلاش: الـ tasks والـ queues والـ semaphores بالتفصيل.
- Interrupt (بيفتح في تاب جديدة)مقالات عملية عن الـ firmware: الـ debugging، والـ RTOS، وحاجات هتقابلها في الشغل الحقيقي.
أكتر الأخطاء اللي بشوفها
- إنك تذاكر نظري بس ومتمسكش قطع بإيدك. ورأيي إن هنا الغلطة بتشوفها بعينك، وممكن تحرق قطعة. وده مش وحش، ده اللي بيعلّمك. فاشتغل بإيدك على مشاريع صغيرة من أول يوم، واعتبر القطع الرخيصة اللي هتتحرق جزء من التعليم. بس خليك على الجهد الواطي دايمًا.
- إنك توصّل قبل ما تفتح الـ datasheet. قطع كتير بتتحرق علشان حد وصّل 5V على حاجة بتشتغل على 3.3V، أو عكس الموجب والسالب. دقيقتين في الـ datasheet أرخص من قطعة جديدة.
- إنك تفضل على Arduino على طول. Arduino بداية ممتازة، بس بيخبّي عنك الـ registers والـ clocks والـ interrupts. لو عمرك ما نزلت تحت، هتقف أول ما تقابل مشكلة المكتبة مش بتحلها.
- إنك تحط
delay()في كل حتة. الجهاز بيقف تمامًا وهو مستني، فالزرار مبيستجيبش والحساس بيفوته قرايات. اتعلمmillis()والـ timers والـ interrupts بدري. - إنك تجري على RTOS قبل ما تفهم الـ interrupts. الـ RTOS مبني على الـ interrupts والـ timers، ولو مش فاهمهم، كل مشكلة هتبان سحر.
بعد كده
لما تخلص الخطة دي ومحطة الطقس شغالة، دي الخطوات اللي بعدها:
- Embedded Linux: أجهزة أكبر زي Raspberry Pi بيشتغل عليها Linux كامل. هنا بتتعلم الـ drivers، وإزاي الجهاز بيعمل boot، وإزاي تبني نظام صغير على قدّ الجهاز.
- تصميم PCB بـ KiCad: بدل الـ breadboard والأسلاك، تصمم البوردة بتاعتك وتطبعها. و KiCad مجاني ومفتوح المصدر.
- IoT: توصّل أجهزتك بالإنترنت، بـ ESP32 وبروتوكول زي MQTT، وتتحكم فيها أو تقرا بياناتها من أي مكان.
احفظ الصفحة دي، وارجعلها كل ما تخلص حاجة وعلّم عليها. ولو وقفت في مرحلة ومش فاهم، ارجع للي قبلها، غالبًا المشكلة هناك.