ספרייה לביצוע שאילתות HTTP עם מודול WiFi ESP8266 ו- Arduino

ספרייה לביצוע שאילתות HTTP עם מודול WiFi ESP8266 ו- Arduino

ספרייה לביצוע שאילתות HTTP עם מודול WiFi ESP8266 ו- Arduino

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

תוכן עניינים

    El מודול WiFi ESP8266 זוהי אפשרות חסכונית מאוד, עם ביצועים המתאימים מאוד לשימוש עם מיקרו-בקרים וקל מאוד לשימוש בעבודה עם פקודות AT.

    כדי לסדר את השימוש בו עם בקשות HTTP, פיתחתי ספרייה קטנה התומכת בצרכים של פרויקט מכשירי ניהול השינה שלי (שקראתי לו SleepManager) מאחר שהיא מבססת את התשתית שלו על שרת אינטרנט שמאפשר להרחיב אותו לאובייקט. IOT כמו שירות ענן. לא קשה להוסיף שירותים אחרים כמו בקשות UDP לספרייה, למשל, ל סנכרון זמן דרך NTP למרות שכפי שאני מסביר בטקסט המקושר, זה לא קריטי לצרכים שלי ואני יכול לפתור את זה בצורה מקובלת עם בקשת HTTP לדף אינטרנט שהוכן למטרה זו, כפי שאני מראה בדוגמה לשימוש בספרייה זו.

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

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

    הפונקציות שנחשפות כפומבי מאפשרות (1) לדעת את מצב המודול: אם הוא מחובר או לא, אם יש נתונים במאגר וכמה ואם מודול ESP8266 השלים את הפעולה שהתבקשה; (2) התחבר לנקודת גישה WiFi ברשת עם שרת DHCP ו- (3) בצע בקשות HTTP GET ו-POST למרות שכפי שתראה, הקוד נועד להקל מאוד על הוספת אחרים.

    לגבי התפקוד הפנימי, ראשית נבנות שתי מטריצות, אחת עם פקודות ה-AT ואחרת עם התגובות הצפויות להצלחה וטעות; לאחר מכן, התוכנית שמשתמשת בספרייה חייבת לקרוא לפונקציה מעת לעת enviar שתהיה אחראית על שליחת ההזמנות למודול אם הן זמינות ואינן תפוסות ולפונקציה לקבל שיעבד תגובות מהמודול ESP8266 (ומשרת ה-HTTP דרכו אם רלוונטי)

    מכיוון שהמודול עלול להיות מנותק עקב אובדן אות, התוכנית הראשית יכולה לבדוק אם מודול ESP8266 מחובר לנקודת הגישה ל-WiFi (עם הפונקציה מחובר) ונסה להתחבר אחרת (עם הפונקציה connect_wifi)

    כדי לדעת אם הפעולה המבוקשת הסתיימה, התוכנית יכולה להשתמש בפונקציה מבצע_הסתיים ובמקרה זה שלח אחר או השתמש בנתונים המתקבלים שעבורם הפונקציה משמשת read_buffer, שמחזירה את תוכן המאגר שהתמלא בנתונים שהגיעו למודול ESP8266 עד להשלמת הפעולה, ואת הפונקציה buffer_length אשר מדווח על כמות הנתונים הללו שהשרת הזהיר שהם עומדים להישלח (כדי שניתן יהיה להוזיל את המידע מהמודול עצמו)

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

    הדוגמה הבאה משתמשת בשאילתת HTTP GET כדי לשאול את זמן השרת ולסנכרן אותו עם הזמן של המכשיר המיקרו-מבוקר על ידי הוספת זמן התגובה המשוער; למעשה, הוא מוסיף עוד 4 עד 6 שניות כדי לוודא שזמן המכשיר גדול מזמן השרת ולבדוק בקלות אם השעה בשעון זמן אמת המהווה חלק מהמכשיר נכונה או הלכה לאיבוד עקב הורדה סוללה.

    לאחר בדיקות רבות וידאתי שמערכת זו של סנכרון זמן עם מודול WiFi ESP8266 זה מספיק מדויק לצרכים שלי; במקרה הרע עם שגיאה של פחות מ-10 שניות שזה קצת לא רלוונטי במקרה שלי.

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

    לאחר קריאת התוכן של המאגר, בדוגמה זו הוא מעובד להשגת הזמן. ראשית, הטקסט בין הסוגרים נבחר (השרת מגיב באמצעות הפקודה PHP echo "{“.time()."}") הופך אותו ל"אובייקט זמן" ומשיג ממנו את התאריך והשעה בפורמט אנושי.

    התוכנית הבאה לדוגמה, בהשראת שאילתת משתמש, משמשת לאיתור כתובת ה-IP הציבורית באמצעות השירות בדוק IP AWS (שירותי האינטרנט של אמזון) כל חמש דקות.

    כמו בדוגמאות הקודמות, מניחים סדרה של הנחות שתצטרך לשנות בהתאם לתצורת הרשת שבה נעשה שימוש (192.168.1.X, בדוגמה), ה-SSID ומפתח ה-WiFi... הדרך למצוא את כתובת ה-IP אינה אלגנטית במיוחד, היא מניחה שהיא השורה האחרונה של התגובה לבקשת HTTP GET למרות שייתכן שיש API לעשות זאת בצורה יותר אורתודוקסית.


    אתה יכול הורד את ספריית ESP8266 עבור שאילתות HTTP עם Arduino Uno (ללא קונסולה) ומכאן אפשר הורד את ספריית השאילתות ESP8266 HTTP עבור Arduino שמשתמש בקונסולה, כלומר צריך ליישם יציאה טורית על ידי תוכנה או להשתמש כחומרה, למשל, לוח אם ארדואינו מגה o ארדואינו לאונרדו.

    לפרסם תגובה

    אולי פספסת