זה הזמן לטנף את הידיים – IoT בסיסי עם ESP32

מדריך בסיסי להתחלת עבודה בעולם האמיתי עם ESP32

במאמרים הקודמים הסברתי על מה זה ESP32 ואיך אפשר לעבוד איתו עם מיקרופייתון, הראיתי איך יוצרים איתו דברים מעניינים עם WiFi למשל – אבל חלק מהכיף של ESP32 ומיקרובקרים אחרים זה לעשות דברים בעולם המציאותי – IoT שזה ראשי תבות של Internet Of Things – שם כולל למגוון טכנולוגיות ואביזרים המאפשרים לנו לשלוט על העולם האמיתי באמצעות תכנות ובאמצעות תקשורת אינטרנט.

היום יש בקרים שאפשר לקנות שבאים כבילט אין – בקר ששולט על הדוד למשל ומאפשר הפעלה מרחוק (אין כמו לסיים יום עבודה ולהדליק מרחוק את הדוד כדי לחזור למים חמים), שליטה על רובוטי ניקוי, מזגנים, השקיה וכו׳. אבל אפשר במקום קיטים מוכנים ליצור את הדברים האלו בעצמכם עם קצת זמן ומעט ידע טכני ואז גם השמים הם הגבול.

המיקרובקרים הם מעולים לדברים כאלו בדיוק, הם זולים, אפשר לחבר אותם לסוללה או אפילו למתאם סולרי והם יכולים לעבוד עם כל דבר. איך הם עובדים? באמצעות הפינים שלהם (בחבחבח) ועכשיו ברצינות – מדובר בחורים בצידי ה-ESP32, שניתן להלחים אליהם פינים וברוב המקומות הם כבר באים מולחמים מראש. בגדול חלק מהפינים הם פיני GPIO, שזה ראשי תבות של General Purpose Input/Output ויש אותם גם בפיי פיקו וכמובן שגם ברספברי פיי.

אפשר לעשות איתם המון אבל בואו ונלך על בטוח – ונדגים איך אני מדליק מנורת LED קטנה. המנורה תידלק כאשר אני סוגר מעגל חשמלי. בואו נעשה מעגל חשמלי ממש פשוט ונחמד ב-ESP32.

לכל פין ב-ESP32 יש שם ומספר. את מפת הפינים אפשר למצוא באמצעות גיגול פשוט של ESP32 pinout – אם יש לכם מספר דגם אז אפשר להוסיף אותו. הנה דוגמה למשל של אחד הדגמים של Espressif מהדוקומנטציה שלהם.

זה נראה מעט מפחיד בהתחלה, אז בואו ננסה להתמקד בשני פינים – אחד שכתוב עליו GND שהוא הצד השלילי של מעגל חשמלי ואחד שכתוב עליו 3V3 שהוא הצד החיובי של המעגל החשמלי ומציין מתח של 3 וולט. מה קורה אם אני מחבר כבל מאחד לשני? יש לי מעגל חשמלי. מה קורה אם אני מחבר כבל חשמלי אל קצה אחד של נורה שיודעת להתמודד עם מתח של 3 וולט ואת הקצה השני אל הצד השלילי? יש לי מעגל חשמלי שבאמצעו יש מנורה וברגע שאני אחבר את המיקרובקר לחשמל המעגל החשמלי יעבוד.

לפני שניגש להלחמות, בואו נתאמן! יש כמה סימולטורים של ESP32 אך אני אדגים עם הסימולטור של Woki. אכנס לסימולטור, אקח נורת LED כחולה, שיודעת להתמודד עם 3V ואחבר את הקצה הארוך שלה אל פין חיבוי שמוציא מתח של 3V ואת הקצה הקצר שלה אל פין של GND ואלחץ על play, אני אראה שהמנורה נדלקת.

זה מהמם, אבל אנחנו רוצים לשלוט על המנורה, איך אנו עושים את זה? נעביר את צד החיובי לפין אחר שמזרים מתח רק אם אנו רוצים. איך נגיד מתי אנו רוצים? נכתוב קוד במיקרופייתון שיעשה את זה.

אנו נחבר את הצד החיובי של הנורה אל D15 שהוא פין כללי.

הפין הזה יוציא מתח כשנרצה ורק כשנגדיר לו. איך? אנו צריכים להגדיר שהוא פין יוצא (כלומר מוציא מתח) ואז להפעיל אותו כשאנו רוצים. אנו עושים את זה באמצעות מודול של מיקרופייתון שנקרא מודול machine. זה מודול ייחודי לסביבה שרצה על ESP32 ומאפשרת לנו לעשות פעולות שהן קצת low level. אחת מהם היא להפעיל את הפינים.

import machine

led = machine.Pin(15, machine.Pin.OUT)

led.value(1)

הקוד הזה כולל שלוש שורות בלבד – ראשית import ל-machine. השניה היא הכי חשובה והיא בעצם יצירת קשר עם הפין והגדרתו כפין של פלט. כזה שיכול להוציא מתח. האחרונה היא בעצם הגדרה של 1 ואז הדלקה שלו. אם אני אריץ את הקוד הזה, אני אראה שהמנורה נדלקת!

מי שיודע קצת פייתון רואה את הפוטנציאל, בואו ונדגים עם קוד מעט יותר מעניין – כזה שבו אנו גורמים למנורה להבהב – שוב, מה שחשוב בקוד הזה הוא ההגדרה של ה-led. כל השאר זה פייתון ממש בסיסי.

import machine
import time

led = machine.Pin(15, machine.Pin.OUT)

def toggle_led():
    led.value(not led.value())

while True:
    toggle_led()
    time.sleep(0.5)

אני מקבל את הערך (1 – יש זרם. 0 – אין זרם) באמצעות פונקצית value שבה אני יכול גם לשנות את הערך ובכך להפסיק או להפעיל את הזרם. כשיש זרם חשמלי המנורה עובדת, כשאין, אז היא נכבית.

וכמובן שהשמים הם הגבול, אבל כדאי לעצור כאן ולקחת את התרשים הזה ולהפוך אותו למציאות! בשביל זה אני צריך נורה, כבלים ושאר ירקות. את הדברים האלו, אם אין לכם בבית, קונים בעלי אקספרס – אפשר לחפש Arduino sensor kit כי כל הדברים שעובדים עם ארדואינו יעבדו יפה גם עם כל מיקרובקר אחר. אנו רוצים נורה כחולה, שני כבלים ולחבר אותם ל ESP32.

על מנת להתחיל, כדאי למזער את כל הבעיות ורק נראה שהכל עובד. נחבר עם כבל את הGND ומתח קבוע של 3V לנורית led כחולה שיודעת לטפל במתח כזה. אם הכל דולק? מעולה. אם לא, זה הזמן לנסות לראות אם:

  1. הכבלים מחוברים כמו שצריך.
  2. להחליף נורית LED שיכולה להיות תקולה.
  3. לראות שבאמת חיברתם לפינים המתאימים – השוו ל pinout של המיקרובקר שלכם ולשים לב שזה באמת הדגם שלכם.

אם הכל תקין, אז נראה אור כחול רצוף.

השלב הבא הוא לחבר את הכבל מהמתח הקבוע אל פין 15. להפעיל את Thonny ולהכניס את הקוד שמבצע הבהוב. בשלב הראשוני אני מעדיף להשתמש בקוד שמהבהב 20 פעמים וזהו. While True יכול לעשות מעט בלגן.

import machine
import time

GPIO_PIN = 15
led = machine.Pin(GPIO_PIN, machine.Pin.OUT)

def toggle_led():
    led.value(not led.value())

cycle_limit = 20
cycles = 0

while cycles < cycle_limit:
    toggle_led()
    time.sleep(0.5)
    cycles += 1

אם הכל יהיה תקין – אנו נראה את ה-LED מהבהב כ-20 פעמים.

ומפה השמיים הם הגבול – כי למה להסתפק ב-LED אם אפשר לעשות עוד דברים? ברגע שמשתלטים על האלקטרוניקה הבסיסית, אז החגיגה באמת מתחילה.

שימו לב שהשתמשתי במדריך זה ב-LED כחול שיכול לקבל מתח של 3V. אם אנו רוצים ציוד אחר, זה הזמן ללמוד על… מתח. לא להתעלף, זו באמת אלקטרוניקה בסיסית וכתבתי על כך מדריך מאד נאה. יופי של הפעלה ופעילות.

במאמר הבא אנו מדברים על דברים יותר מעניינים מ-LED – כלומר לקבל קלט אנלוגי ודיגיטלי מחיישנים!

פוסטים נוספים שכדאי לקרוא

צילום מסך של סוואגר
יסודות בתכנות

openAPI

שימוש בתשתית הפופולרית למיפוי ותיעוד של API וגם הסבר בסיסי על מה זה API

פתרונות ומאמרים על פיתוח אינטרנט

נגישות טכנית – פודקאסט ומבוא

פרק בפודקאסטעל נגישות בעברית שצולל לכלים האוטומטיים ולפן המאד מאד טכני של הנגישות.

גלילה לראש העמוד