חיפוש
  • יניב אור

פרויקט Wikey - קודן ללא מגע יד אדם - הקדמה

עודכן ב: יול 22

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


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


נכנסתי לפרויקט כשהחלק העיקרי שלי בו הוא פיתוח התוכנה לרכיב ה-IoT וכתיבת הקוד בשרת המרוחק שעובד מול הרכיב הזה. התקשורת תיעשה באמצעות WebSocket על-גבי פרוטוקול HTTPS. הרכיב הוא ESP8266. זהו SOC, קיצור של system-on-chip אשר פותח ע"י חברת Espressif. אגב, כשנכנסתי לפרויקט כתבתי מאמר על השימוש הבסיסי ברכיב הזה: מודול ESP8266 - WiFi.


את הפיתוח עצמו אני עושה על לוח הפיתוח שנקרא ESP-12E, בסביבת הפיתוח ארדואינו - שפת ++C. קל מאוד וממש נוח לעבוד עם לוח הפיתוח הזה. מחברים אותו למחשב באמצעות כבל USB, מריצים את תוכנת הארדואינו והמערכת מוכנה לעבודה.



אתאר בקצרה ובאופן כללי את המערכת. אז יש לנו קודן סטנדרטי שמחובר לדלת הכניסה ואל הקודן מחובר הבקר האלחוטי שבעזרתו ניתן יהיה לשלוט על הקודן. אז דבר ראשון - לצורך קינפוג המערכת - הרכיב ESP8266 נכנס למצב Access Point ופותח רשת אלחוטית מקומית בעלת SSID וסיסמא. כמו כן, הרכיב מריץ שרת מקומי ומאפשר גישה למספר דפי web המאוחסנים על הרכיב עצמו. בדומה לראוטר ביתי, למשל. הטכנאי שמתקין את המערכת ונמצא בקרבה פיזית עם המכשיר, מתחבר לרשת שנוצרה ונכנס באמצעות דפדפן לדף הראשי. זה יכול היעשות באמצעות כל טלפון חכם, כמובן.


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


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


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


בענן ירוץ שרת NodeJS ובאמצעותו תהיה אפשרות לשלוח פקודות לרכיב ה-ESP8266 וגם לקבל ממנו משוב. התקשורת תיעשה באמצעות WebSockets בצורה מאובטחת ומוצפנת (SSL וכן הלאה). בהמשך תתווסף שכבה נוספת של MQTT לצורך העברת המסרים. שליחת הפקודות דרך השרת תתבצע באמצעות דפי Web אותם ישרת שרת נפרד, לצורך העניין Nginx.


זה כל התהליך, פחות או יותר. בהמשך אציג את הקוד ואתאר את הפעולה בצורה מפורטת יותר. הקוד הוא Open Source - פתוח לציבור ומפורסם בחשבון ה-Github שלי. ניתן למצוא אותו ב-repos הבאים:

הקוד של רכיב ה-IoT, בשפת ++C לסביבת ארדואינו - https://github.com/YanivOr/wikey


הקוד של שרת ה-NodeJS ודפי ה-Web שמשמשים לשליחת מסרים - https://github.com/YanivOr/wikey-web


המשך בחלקים הבאים:

פרויקט Wikey - פיתוח התוכנה ל-ESP8266 - בארדואינו

פרויקט Wikey - שרת websocket וממשק משתמש למפעיל

פרויקט Wikey - חיבור ה-ESP8266 לקודן


וגם:

ערכת קודן של דלת כניסה


הדגמה קצרה:


© 2023 by DO IT YOURSELF. Proudly created with Wix.com