מאמר זה הוא מאמר בסדרת מאמרים המסבירים להורים על תכנות על מיקרו בקר מסוג ESP32. כדאי מאד להתחיל עם המאמר הראשון בסדרה.
במאמר הקודם למדנו על הסימולטור של ESP32 ואיך לכתוב קוד עם GPT כדי שיפעיל לנו LED מובנה. עכשיו אנו נלמד איך מתכננים מעגל חשמלי (ומה זה) בסיסי ונעשה את זה בסימולטור.
הגדולה של ESP32 היא לאו דווקא היכולת שלו להריץ קוד אלא היכולת שלו להתממשק ל-IoT. כלומר לממשקי קלט/פלט בעולם האמיתי. להדליק נורה, לכבות נורה, להדליק מזגן. לסובב מאוורר, לעשות דברים פיזיים ולקבל מידע ממקורות פיזיים: טמפרטורה, לחות, חיישן תנועה וכו'. את התקשורת הזו עם הרכיבים אנו עושים עם שתי שורות הפינים שיש על המיקרובקר. הפינים האלו מופעלים על ידי קוד.
מה הקוד עושה לפינים האלו? תלוי כמובן. מדובר בפינים שחלקם מעבירים מתח, חלקם הם "אדמה" (כלומר סוגרים מתח חשמלי) וחלקם הם פינים מסוג GPIO – ראשי תבות של General Purpose Input/Output – פינים שיכולים לקבל או לקלוט מידע.
בחלק מהמקרים ובשימוש הפשוט ביותר אנחנו משתמשים ב-GPIO על מנת לסגור מעגל חשמלי. רוב הקוראים (גם אני!) לא יודעים בכלל אלקטרוניקה וחשמל. אבל מעגל חשמלי זה קונספט די מוכר – בגדול יש לנו מעגל, שמצד אחד מועבר זרם ומהצד השני מישהו מקבל אותו.. נשים משהו באמצע? והוא יידלק.
כדי לכבות את הנורה, אנו מנתקים את המעגל. עם מפסק. ככה עובד מעגל חשמלי.
במעגל חשמלי אחד המונחים הכי חשובים להכיר הוא מתח. מסומן ב-V. יש לנו ב-ESP32 שני סוגי פינים שמעבירים 3.3 וולט או 5 וולט. זה נקרא מתח. למשל בשקע הביתי יש לנו 220 וולט.
למה אנחנו צריכים להכיר את זה? כי לא כל מכשיר, חיישן או נורה יודעים לעבוד עם כל מתח. אנחנו רגילים בעולם שלנו לתקוע מנורה לשקע והיא תעבוד, כי היא יודעת להתמודד עם 220 וולט. אבל אם נחבר נורת LED חלשה למתח כזה, היא תשרף. למה? כי היא לא יודעת לעבוד עם מתח גבוה. האמת? היא גם לא יודעת להתמודד עם 5 וולט. עם מה היא יודעת להתמודד? תלוי בצבע ובגודל, אבל בגדול (בגדול!) אפשר לומר ש:
סוג LED | מתח מקסימלי בוולט |
אדום | 1.63-2.03 |
צהוב | 2.10-2.18 |
כחול | 2.48-3.7 |
כיוון שיש לנו פין שמוציא 3.3V, אז אנחנו יכולים לחבר אליו ישירות נורת LED בצבע כחול.
כלומר המעגל שלנו יהיה מורכב מ: חוט שיוצא מפין שמוציא מתח של 3.3 V, יתחבר לצד החיובי של ה-LED הכחול וחוט נוסף שיוצא מהצד השלילי של ה-LED הכחול ויתחבר לגראונד. זה משהו שאפילו אני, עם שתי ידיים שמאליות, יודע.
אבל רגע! איך אנו יודעים מה הפינים שלנו? מה מוציא מתח ומה לא? ראשית, יש לנו משהו שנקרא pinout. מפה מסודרת עם תוויות לכל הפינים של המיקרובקר. אנחנו יכולים לחפש esp32 pinout 30 pins בגוגל ולמצוא ״מפה״ של כל הפינים. הנה אתר שיש בו pinout מאד נאה לכל סוגי ה-ESP32.
גם בסימולטור עצמו יש לנו מיפוי של זה. בואו ונבנה מעגל חשמלי פשוט, עם LED כחול, בסימולטור שלנו. ראשית, יש לי כיתוביות קטנות ליד כל פין. גם אם אני עולה עם העכבר על הפין, אני אראה את התפקיד שלו.
לחלק מהפינים קוראים GPIO. אני אסביר בהמשך עליהם אבל אם אתם רואים GPIO זה פשוט פין.
אחרי שאיתרנון את שני הפינים – בצד ימין למטה – ליד אחד כתוב GND וליד השני כתוב 3V3, אני אלחץ על לחצן הפלוס הכחול ואבחר להוסיף נורית LED. אמקם אותה לצד המיקרו בקר ואלחץ עליה כדי לבחור את צבעה: כחול.
עכשיו אני אלחץ על הפין הארוך שלה ואמתח כבל אל פין ה-3v3.
אעשה אותו דבר עם הגראונד. אני יכול לבחור גם את צבע החוטים (ג׳מפרים). אם כבר יש לכם את החוטים האמיתיים, מומלץ לבחור בצבעים שלהם. זה ממש עוזר כשמרכיבים.
נלחץ על play ונראה מה קורה – הנורית הכחולה עובדת!
עשינו מעגל חשמלי! נכון, בסימולטור, ועדיין!
טוב, מנורה כחולה דולקת באופן קבוע זה לא מאד מעניין. איך שולטים *בקוד* על המנורה? פשוט. נחבר אותה במקום למקור מתח קבוע לפין שיעביר מתח רק שנורה על כך בקוד.
כדי להדגים, ניצור קוד שיגרום למנורה להבהב! ניגש לצ׳אט GPT הנאמן שלנו ונשאל אותו:
Act as a senior programming instructor that explains everything to a student.
I have ESP32 that runs MicroPython. Write me a code that blinks a LED that is connected to a pin
נקבל גם הסבר נאה וגם קוד. בהסבר יהיה כתוב לאיזה פין לחבר אותו. פה למשל קיבלתי את הקוד הזה והסבר על חיבור לפין מספר 2.
from machine import Pin
import time
# Define the pin where the LED is connected (in this case GPIO2)
led = Pin(2, Pin.OUT)
while True:
led.value(1) # Turn LED on
time.sleep(0.5) # Wait for 0.5 seconds
led.value(0) # Turn LED off
time.sleep(0.5) # Wait for 0.5 seconds
עכשיו אני אלחץ על הכבל שמחובר ל-3v3 ואמחק אותו עם delete. אמתח כבל חדש ל D2, אדביק את הקוד ואלחץ על play. מה יקרה? אני אראה הבהוב!
ברוב הפעמים אנחנו לא מחברים LED ככה סתם וצריכים להשתמש ברזיסטור (כלומר נגד) ואת זה נלמד מייד בפוסט הבא בסדרה – על רזיסטורים וגם את זה נעשה באמולטור (הרי לכל הציוד שהזמנו בעלי אקספרס לוקח זמן להגיע, לא?).