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

מודול ESP8266 - WiFi

עודכן ב: מאי 24

עבדתי לאחרונה עם ה-system-on-chip שנקרא ESP8266. זהו רכיב IoT בסיסי לתקשורת WiFi אותו ניתן לתכנת. יש אפשרות להשתמש בו כתחנה (מכשיר ברשת) ולהתחבר בעזרתו לרשת אלחוטית קיימת. אפשרות נוספת היא להשתמש בו כ-Access Point כך שמכשירים אחרים יתחברו אליו לרשת אלחוטית אותה הוא פותח לעולם. כמו כן, יש אפשרות להגדיר אותו כשרת - ואלו רק חלק קטן מהפיצ'רים שלו. הוא מכיל, בין היתר, מיקרוקונטרולר ויש אפשרות לחבר ל-GPIO שלו חיישנים ורכיבים אחרים, לפי הצורך. במאמר הבא אדגים שימוש בשני מודולים שעושים שימוש בצ'יפ הזה.


המודול הראשון איתו התעסקתי הוא ה-ESP-01S. קטן ובעל 8 פינים בלבד. המתח הדרוש להפעלת הכרטיסון הזה הוא 3.3 וולט והוא לא מגיע עם חיבור USB או כל התממשקות נוחה אחרת לחיבור למחשב.



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


יש שני מצבים כשעובדים בצורה הזאת. הראשון, כאשר רוצים לתכנת את הרכיב, מחברים את פין IO מספר 0 ל-GND. לאחר התכנות, כשרוצים להשתמש ברכיב, מנתקים את IO0 מה-GND.


* את ה-5 וולט חסמתי עם פין של ג'אמפר, כדי שלא אתחבר אליו בטעות - במקום ל-3.3.


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


כברירת המחדל, ה-firmware שמגיע עם הכרטיס ESP01 מאפשר עבודה איתו באמצעות AT Commands. לשם כך משתמשים ב-serial monitor שנמצא בתוכנת ארדואינו. אגב, יש אפשרות להשתמש בתוכנות serial אחרות, כמובן. יש לא מעט. ה-baud rate איתו עובדים הוא 115200 ויש צורך לאפשר Both NL & CR.


את סט הפקודות המלא ניתן למצוא בקובץ PDF הבא, מהאתר הרשמי של החברה - Espressif - שפיתחה את הרכיב:

https://www.espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf


הפקודה הראשונה והבסיסית שמאפשרת בדיקת תקינות הרכיב והחיבור שלו עם המערכת היא AT. אם הכל תקין, הרכיב יחזיר OK. הפקודה הבאה היא AT+GRM שמדפיסה את גירסת התוכנה. יש אפשרות לבצע, למשל, reset לרכיב. זה נעשה באמצעות AT+RST.


נעבור לאפשרויות מעניינות יותר. לפני כן, חשוב לדעת שרוב הפקודות מגיעות בתוספת של CUR_ או DEF_. ה-CUR מתייחס ל-session הנוכחי בלבד ולא נשמר ב-flash. ברגע שנאתחל את הרכיב, הפקודות בתוספת CUR שנתנו לרכיב - יימחקו. ה-DEF מתייחס להגדרות שנשמרו ב-flash ולא יימחקו באתחול. ניתן לאפס את ה-flash ולחזור ל-factory defaults באמצעות הפקודה AT+RESTORE. בהמשך אעבוד עם פקודות CUR אך ניתן להשתמש ב-DEF באותה צורה.


כפי שציינתי, יש אפשרות להשתמש ברכיב כלקוח ברשת אלחוטית, כ-AP או שניהם יחד. כדי לברר אילו אפשרויות יש לרכיב שלנו נכתוב ?=AT+CWMODE_CUR. קיבלתי את התשובה 1-3 (בהתאמה לאפשרויות שציינתי קודם לכן). כדי לבדוק באיזה Mode נמצא הרכיב, נכתוב ?AT+CWMODE_CUR. קיבלתי את התשובה 1, תחנה (station). נמשיך עם ה-Mode הזה ובהמשך נעבור ל-AP.


נבדוק אילו רשתות זמינות לחיבור. הפקודה היא AT+CWLAP. קיבלנו רשימה שמציגה את מספר הערוץ, שם הרשת (SSID), הכתובת הפיזית (MAC) וכן הלאה. הרשימה הידועה והמוכרת כאשר רוצים להתחבר לרשת אלחוטית מהמחשב האישי, למשל.


לפני שאתחבר לרשת אני רוצה לבדוק את הכתובת IP וכתובת ה-MAC של הרכיב שלי. עושים זאת עם הפקודה AT+CIFSR. אני לא מחובר לרשת ולכן כתובת ה-IP הנוכחית שלי היא 0.0.0.0.


חיבור לרשת האלחוטית נעשה באמצעות הפקודה:

AT+CWJAP_CUR="[ssid]","[password]"

קיבלתי תשובה של WIFI CONNECTED ו-WIFI GOT IP. החיבור הצליח. בדקתי שוב את ה-IP. הפעם הוא 192.168.1.14. מצויין.


הדבר הבא שאני מעוניין לעשות הוא להפוך את הרכיב לשרת HTTP. קודם כל יש צורך לאפשר ריבוי חיבורים לרכיב בעזרת הפקודה AT+CIPMUX=1. לאחר מכן ניצור שרת שיאזין על פורט 80. הפקודה היא AT+CIPSERVER=1,80. פתחתי את הדפדפן במחשב והזנתי את כתובת ה-IP של הרכיב. הדף בטעינה ומחכה לתשובה מהשרת. במקביל, בטרמינל של הרכיב, הופיע מידע על החיבור שהתבצע ובקשת GET ל-/. לשליחת תשובה מהשרת, דבר ראשון יש צורך להגדיר מה מספר התווים שאנו עומדים לשלוח. לשליחת 6 תווים, למשל, נכתוב AT+CIPSEND=0,6. אם הכל תקין, יופיע OK ומתחתיו הסימן <. כעת ניתן לשלוח הודעה ללקוח שהתחבר. שלחתי את המחרוזת 123456789, יותר מ-6 תווים, לצורך בדיקה. הדבר הבא שצריך לעשות הוא לשלוח close כדי שההודעה תישלח. הפקודה היא AT+CIPCLOSE=0 . בדפדפן הופיע 123456. לאחר מכן הופיעה בטרמינל הודעה על בקשה ל-favicon.ico אותו מבקש הדפדפן כברירת מחדל.




באותה צורה, ניתן לשלוח הודעות לשרת, בעזרת Telnet, למשל. מעבר לכך, יש עוד פקודות AT רבות נוספות אך כאן עצרתי והמשכתי לסביבת פיתוח ושפת תכנות נוחה ויעילה יותר. יש מספר אפשרויות כמו למשל פיתוח בשפת LUA מול ה-firmware שנקרא NodeMCU ויש אפשרות גם לכתוב בפייתון. אני בחרתי ב-++C לסביבת ארדואינו.


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

נכנסים ל-File ואז ל-Preferences.

מעתיקים את הכתובת הבאה:

http://arduino.esp8266.com/stable/package_esp8266com_index.json


ומדביקים אותה בשדה:

Additional Boards Manager URLs

לאחר מכן נכנסים ל-Tools ואז ל-Boards Manager.

ובחלון שנפתח מחפשים את esp8266 ומתקינים. התמונה היא לאחר התקנה.

חוזרים למסך הקודם ובוחרים את: Generic ESP8266 Module.


לאחר ההתקנה, יש עשרות דוגמאות מוכנות לשימוש. ננסה, למשל, שרת web פשוט. הדוגמא שנקראת: HelloServer.

הסבר קצר על הקוד. מאוד פשוט. בראש הקובץ יש הכללה של מספר ספריות. ספריה לטיפול ב-WiFi ל-ESP8266, ספריה שמכילה פונקציות להתחברות לרשת אלחוטית, ספריה ליצירת שרת web וספריה לטיפול ב-DNS.


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


בפונקציית setup נעשה חיבור לרשת האלחוטית כשלצורך דיבאג יש כתיבת לוג ב-serial. כמו כן יש הרצה של השרת והאזנה לבקשות שונות. בקשה ל-root - שהוא / - מחזירה את מחרוזת אחת. בקשה ל-inline מחזירה מחרוזת אחרת. בקשה ל-gif מחזירה תמונה קטנה שמיוצרת בקוד עצמו. לבסוף יש גם טיפול ב-Not Found - קוד 404.


שיניתי בחלק של ההגדרות את STASSID ואת ה-STAPSK לשם ולסיסמא של הרשת האלחוטית הביתית. כמו כן שיניתי את led ל-LED_BUILTIN שהוא הלד המובנה בכרטיסון. לחצתי על כפתור Upload והעליתי את התוכנה לכרטיס.


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



לאחר אתחול, עברתי ל-Serial Monitor.


פתחתי את הדפדפן בכתובת אותה קיבל ה-ESP8266 ובוצעה בקשה ל-root.


התשובה לבקשה inline.


וזאת התמונה שחוזרת לבקשת gif.


מודול נוסף בו אני עושה שימוש הוא NodeMCU ESP-12E. כפי שניתן לראות, למודול יש חיבור USB שמשמש גם לאספקת מתח וגם לתקשורת.


יש מספר דרכים לתכנת אותו והוא מגיע עם firmware שעובד עם שפת LUA. אני בחרתי להשתמש בסביבת פיתוח של ארדואינו. בוחרים את ה-Board המתאים מהרשימה ומכאן ואילך הפיתוח זהה למודול הקודם. כמובן שלמודול הזה יש אפשרויות רבות יותר מבחינת התממשקות ל-GPIO של הרכיב.


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