- חומרים נדרשים:
- איך הדברים עובדים?
- תכנות ה- ESP8266-01:
- חיבור ESP8266-01 עם Arduino:
- תוכנית Arduino ועבודה:
ה- ESP8266-01 היווה מודול נהדר להרוות את כל צמאוננו לפרויקטים של IOT. מאז שחרורו, היא פיתחה קהילה חזקה והתפתחה למודול Wi-Fi קל לשימוש, זול וחזק. פלטפורמת קוד פתוח נוספת הפופולרית בהרבה היא Arduino, יש לה כבר טונות של פרויקטים שנבנו סביב זה. שילוב של שתי פלטפורמות אלה יפתח דלתות לפרויקטים חדשניים רבים, ולכן במדריך זה נלמד כיצד לממשק את מודול ESP8266-01 עם Arduino. בדרך זו נוכל לשלוח או לקבל נתונים בין הארדואינו לאינטרנט.
לצורך מדריך זה נקרא את השעה, התאריך, הטמפרטורה והלחות מהאינטרנט באמצעות API עם ה- ESP8266-01. לאחר מכן שלח את הערכים הללו ללוח Arduino והצג אותם על גבי מסך LCD * 16 * 2. נשמע מגניב נכון !! אז בואו נתחיל.
חומרים נדרשים:
- לוח Arduino (כל גרסה)
- ESP8266-01
- לוח מתכנתים FTDI עם אפשרות 3.3V
- LCD בגודל 16x2
- פוטנציומטר
- לחץ על הכפתור
- חוטי חיבור
- קרש לחם
איך הדברים עובדים?
לפני שנצלול פנימה, חשוב לדעת איך בעצם הדבר הזה הולך לעבוד. בעיקרון, עלינו להתחיל עם המודול ESP8266-01. אנו נשתמש ב- Arduino IDE לתכנת ה- ESP8266 והקוד ייכתב בכדי להשתמש ב- API לקריאת קובץ JSON באמצעות בקשת http. לאחר מכן ננסח את קובץ JSON זה כדי לחלץ רק את המידע הנדרש מקובץ JSON המלא.
לאחר שנוסח את המידע נדפיס אותו באמצעות התקשורת הטורית. שורות סדרתיות אלה יחוברו לארדואינו, כך שהארדואינו יוכל לקרוא את המידע שנשלח מ- ESP8266. לאחר קריאת המידע ועיבודו נציג אותו על גבי מסך ה- LCD.
זה בסדר, אם לא הבנתם את זה לגמרי, כי אנחנו נלמד את אותו הדבר בהמשך המדריך הזה.
תכנות ה- ESP8266-01:
הדרכה זו מניחה שיש לך ניסיון מסוים במודול ESP8266. אם לא, מומלץ לקרוא את שלוש ההדרכות הבאות כדי להבין את זה לחלוטין.
- תחילת העבודה עם ESP8266-01
- תכנות ESP8266-01 באמצעות פקודות AT
- תכנות ה- ESP8266-01 באמצעות Arduino IDE ומהבהב את זיכרונו
אתה יכול גם לבדוק את כל הפרויקטים שלנו ב- ESP8266 כאן.
כאן אנו מתכנתים את מודול ESP8266-01 באמצעות ה- Arduino IDE. עבור חומרה אנו משתמשים בלוח FTDI עם 3.3 וולט כדי לתכנת ESP8266, מכיוון שזה יהפוך את החומרה לפשוטה בהרבה. תרשים המעגל לחיבור ה- ESP8266 שלך עם לוח FTDI מוצג להלן.
ודא שהתנאים הבאים מתקיימים
1. ה- ESP8266-01 הוא רק 3.3V סובלני, אל תשתמש ב- 5V. אז הגדר FTDI רק במצב 3.3V.
2. GPIO_0 חייב להיות מקורקע למצב תכנות
3. יש לחבר את סיכת האיפוס באמצעות כפתור לסיכה הקרקעית. יש ללחוץ על כפתור זה ממש לפני העלאת הקוד. בכל פעם שלוחצים על הכפתור נורית הכחול במודול ESP8266-01 תעלה גבוה כדי לציין שהמודול מאופס.
לאחר סיום החיבורים, פתח את ה- IDE של Arduino ובדוק אם אתה מסוגל להעלות תוכנית לדוגמה בהצלחה. אם אינך בטוח כיצד להשתמש ב- Arduino IDE להעלאת תוכנית ל- ESP8266, עקוב אחר התכנות ESP8266 עם Arduino כדי ללמוד אותה. בשלב זה אני מניח שהעלתם את תוכנית ההבהוב בהצלחה.
. התוכנית השלמה ניתנת בסוף עמוד זה בהמשך להלן. אני מסביר אותם כקטעים קטנים. התוכנית דורשת גם לקבץ את ספריית Arduino JSON, כך שאם לא הוספת את הספרייה ל- ID של Arduino כבר, הוסף אותה על ידי הורדה מספריית Arduino JSON מ- Github.
ה- ESP8266 צריך להתחבר לאינטרנט כדי לקבל את הנתונים לגבי תאריך, שעה, טמפרטורה ולחות. אז אתה צריך לאפשר לו להתחבר ל- Wi-Fi שלך על ידי הוכחת ה- SSID והסיסמה בשורות שלמטה
const char * ssid = "JIO-Fi"; // הזן את ה- Wi-Fi SSID const char * סיסמה שלך = "Pas123"; // הזן את סיסמת ה- Wi-Fi שלך
בתוך פונקציית setup () אנו בודקים אם ה- ESP מסוגל להתחבר ל- Wi-Fi, אם לא הוא יחכה שם לנצח רק על ידי הדפסת "Connecting.." על הצג הסדרתי.
בעוד (WiFi.status ()! = WL_CONNECTED) {// המתן עד שהאינטרנט מחובר לעיכוב (1000); Serial.print ("מתחבר.."); // הדפסת חיבור.. עד שנוצר חיבור }
השלב הבא הוא השלב החשוב מאוד. אם חיבור ה- Wi-Fi מצליח עלינו להפעיל בקשה http לקבל לקרוא את קובץ JSON מהאינטרנט. במדריך זה אני משתמש ב- API שמספק wunderground.com. אז אם אתם מתכננים להשתמש בו תוכלו להיכנס לקישור ולהירשם למפתח ה- API בחינם או להשתמש בכל ממשק API שבחרתם. לאחר שתסיים סופית עם ה- API שלך, בסופו של דבר תופיע קישור כזה למטה
הערה: שיניתי את מפתח ה- API של קישור זה כך שזה לא יעבוד. שמור על מפתח ה- API שלך מאובטח ואל תשתף.
ה- API שלי כאן משמש לקבלת נתוני מזג האוויר של צ'נאי. אתה יכול להשתמש בכל API. אך כאשר אתה טוען את ה- API בכל דפדפן, עליו להחזיר קובץ JSON. לדוגמא ה- API שלי מחזיר את קובץ ה- JSON הבא
שלך עשוי להחזיר קובץ עם נתונים שונים. אנו יכולים לבדוק אם קובץ JSON זה מתקבל גם על ידי ה- ESP8266 שלנו על ידי קריאתו והדפסת JSON על הצג הסדרתי שלנו באמצעות השורות הבאות.
int httpCode = http.GET (); // העבירו בקשת קבל אם (httpCode> 0) {// בדקו את הקוד החוזר // מטען = http.getString (); // אחסן את הערך על מטען מטען משתנה לצורך איתור באגים // Serial.println (מטען); // הדפיסו את המטען לצורך ניפוי באגים אחרת הגיבו על שתי השורות
הגבתי על שורות אלה, מכיוון שהן נחוצות רק לבדיקה. לאחר שווידאת ש- ESP8266 מסוגל להשיג את נתוני JSON הגיע הזמן לנסח את הנתונים. כפי שאתה יכול לראות נתונים אלה הם עצומים ורוב הערכים חסרי תועלת למעט אלה שנדרשים לנו כמו תאריך, שעה, טמפרטורה ולחות.
לכן אנו משתמשים בספריית JSON Arduino כדי להפריד בין הערכים הנדרשים לנו ולאחסן אותה במשתנה. זה אפשרי מכיוון שהערכים בקובץ JSON מוקצים כצמדי ערך שם. אז שם זה הוא מחרוזת שתחזיק את הערך הנדרש עבורנו.
לשם כך עלינו לעבור לאתר אשר ינתח את קובץ JSON וייתן לנו את קוד הארדואינו. כן זה קל כמו זה. המשך לכתובת https://arduinojson.org/assistant/ והדבק את קובץ JSON שטעננו בדפדפן שלנו ולחץ על Enter. כשסיימתי שלי נראה משהו כזה למטה
גלול מעט למטה כדי לראות את תוכנית הניסוח שנוצרת באופן אוטומטי
כל שעליכם לעשות הוא לבחור את המשתנה הרצוי, להעתיק אותם ולהדביק אותו על ה- Arduino IDE שלכם, כמו שעשיתי כאן
/ * נתוני ניסוח באמצעות ליבררי JSON * / // השתמש https://arduinojson.org/assistant/ כדי לקבל את ערכי הניסוח עבור מחרוזת JSON const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * סוף נתוני הניסוח * / // כתובת הערך sin למשתנים הרצויים JsonObject & current_observation = root; // תחת הנוכחי_התבוננות JsonObject & הנוכחי_התבוננות_התבוננות_מיקום = הנוכחי_התבוננות; // תחת תצפית_מיקום const char * current_observation_station_id = current_observation; // "ICHENNAI1" // קבל את דחיות המיקום const char * current_observation_local_time_rfc822 = תצפית נוכחית; // זמן מקומי // קבל את הזמן המקומי const char * current_observation_temperature_string = current_observation; // "90.7 F (32.6 C)" // קבל את ערך הטמפרטורה const char * current_observation_relative_humidity = current_observation; // "73%" // מקבלים את ערך הלחות
העתקתי זה עתה את המשתנים current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string ו- current_observation_relative_humidity . מכיוון שאנו מתכננים להציג רק את ארבעת הנתונים הללו על גבי מסך ה- LCD שלנו.
לבסוף, השגנו את הנתונים הדרושים לנו מהאינטרנט ושמרנו אותם כמשתנה בו נוכל להשתמש בנוחות. כדי לשלוח את הנתונים הללו לארדואינו פשוט נכתוב אותם באופן סדרתי למרות המסך הסידורי. השורות הבאות יעשו בדיוק את אותו הדבר
// הדפיסו את המשתנים באמצעות צג סדרתי Serial.print (current_observation_station_id); // שלח את פרטי המיקום לעיכוב Arduino (100); // עיכוב יציבות Serial.print (current_observation_local_time_rfc822); // שלח את פרטי הזמן המקומי לעיכוב בארדואינו (100); // עיכוב יציבות Serial.print (current_observation_temperature_string); // שלח את פרטי הטמפרטורה לעיכוב של Arduino (100); // עיכוב יציבות Serial.print (current_observation_relative_humidity); // שלח את פרטי הלחות לעיכוב בארדואינו (100); // עיכוב יציבות
שים לב שהשתמשתי ב- Serial.print () ולא ב- Serial.println () שכן הפקודה Serial.println () תוסיף a / n ו / r יחד עם הנתונים שאינם נחוצים לנו. הוספנו גם עיכוב של 10 שניות כך שה- ESP ישלח ערכים אלה רק במרווח של 10 שניות לארדואינו.
חיבור ESP8266-01 עם Arduino:
עד כה תכננו את ה- ESP8266-01 שלנו לקרוא את הנתונים הנדרשים מהאינטרנט במרווח של 10 שניות ולשלוח אותם באופן סדרתי. עכשיו עלינו לממשק את ה- ESP עם Arduino כדי שנוכל לקרוא את הנתונים הסידוריים האלה. עלינו להוסיף גם תצוגת 16 * 2 LCD לארדואינו בכדי שנוכל להציג את הנתונים המתקבלים ממודול ESP8266. דיאגרמת מעגל להתממשק במודול ESP8266 עם Arduino מוצג להלן
וודא שהסיכה GPIO_0 נותרה פנויה, הפעל את המודול רק באמצעות הסיכה 3.3V של Arduino ולחץ על כפתור הלחיצה כדי להכניס את מודול ה- ESP למודול ההפעלה. כעת התוכנית שהעלינו ל- ESP הייתה צריכה להתחיל לעבוד ואת המודול צריך לשלוח את הנתונים באמצעות סיכה טורית לארדואינו. סיכות סדרתיות אלה מחוברות לסיכה מספר 6 ו -7 בארדואינו. אז נוכל להשתמש באפשרות הסדרתית של התוכנה בארדואינו כדי לקרוא את הנתונים הסידוריים האלה מהסיכות.
תוכנית Arduino ועבודה:
תוכנית Arduino להשלים גם ניתנת ביחד עם קוד ESP בסוף דף זה. אתה יכול לגלול מטה כדי להציג את התוכנית או לקרוא עוד אם אתה רוצה להבין את התוכנית.
תוכנית הממשק די פשוטה, עלינו להשתמש בספרייה הסדרתית של התוכנה כדי לקרוא את הנתונים מהסיכה 6 ו -7 ולהציג אותם על גבי מסך ה- LCD. מכיוון שהנתונים המתקבלים הם בפורמט מחרוזות עלינו להשתמש באפשרות המיתור כדי לשבור את המטען לדרישה שלנו או אפילו להמיר אותו למספר שלם במידת הצורך. אז אנו מתחילים בהגדרת הפינים אליהם מחובר ה- LCD.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // סיכות שאליהן מחובר LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
מכיוון שאנו חברנו את סיכות Rx ו- Tx של ESP8266 עם 6 ו 7 th סיכה של Arduino עלינו לאתחל את סדרתי תוכנה עבור הפינים האלה, כך שנוכל לקבל את נתון סדרו מהם יש.אני שמות זה כמו ESP_Serial, אתה יכול תן להם שם כל מה שאתה רוצה
SoftwareSerial ESP_Serial (6,7); // טקס, רקס
בתוך פונקציית setup () אנו מאתחלים את התקשורת הטורית עבור צג סידורי וגם עבור סדרת התוכנה. אם הייתם יכולים להיזכר הגענו לתוכנית ESP לתקשר בקצב שידור 9600 ולכן עלינו להשתמש באותו קצב שידור ליציאה הטורית של התוכנה. אנו מציגים גם הודעת מבוא קטנה על גבי LCD למשך 2 שניות.
הגדרת חלל () {lcd.begin (16, 2); // אנו משתמשים בתצוגת LCD 16 * 2 lcd.print ("Arduino & ESP"); // הצג הודעת מבוא Serial.begin (115200); ESP_Serial.begin (9600); עיכוב (2000); lcd.clear (); }
בתוך פונקציית הלולאה הראשית () עלינו לבדוק אם ה- ESP8266 שולח משהו. אם זהו, אנו קוראים את המחרוזת מ- ESP8266 ושומרים אותו למשתנה שנקרא מטען. המטען המשתנה הוא מסוג מחרוזת והוא יכיל את המידע המלא שנשלח מהמודול ESP8266.
בעוד (ESP_Serial.available ()> 0) {מטען = ESP_Serial.readString ();
כעת עלינו לפצל מחרוזת זו לגושים קטנים כדי שנוכל להשתמש בהם למטרה שלנו, במקרה זה עלינו לפצל אותם כדי להציג אותם על גבי מסך ה- LCD. ניתן לעשות זאת בקלות על ידי שימוש בפונקציית המצע בארדואינו. עליכם לדעת את המיקום של כל תו בכדי להשתמש בפונקציית המצע הזו. ניתן להדפיס את המטען על צג סדרתי בכדי לדעת את מיקום התווים ולהשתמש בהם כדי לסווג את המצעים כמוצג להלן
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); טמפרטורה = מטען מטען. כיסוי תחתון (48, 54); לחות = מטען מטען.משתנה (55, 60);
עכשיו אני יכול להמשיך ולהשתמש במשתנים אלה כדי להדפיס אותם על צג סדרתי או פשוט להדפיס אותם על גבי LCD. עם זאת, הדפסתם בצג הסידורי תעזור לנו לבדוק אם המצעים מפוצלים כהלכה. בשלב הבא אנו פשוט מדפיסים אותם על צג ה- LCD בעזרת השורות הבאות
lcd.clear (); lcd.setCursor (1, 0); lcd.print (local_date); lcd.setCursor (8, 0); lcd.print (local_time); lcd.setCursor (1, 1); lcd.print (טמפרטורה); lcd.setCursor (10, 1); lcd.print (לחות);
העלה את התוכנית לארדואינו וודא שהחיבורים הם כמוצג בתרשים המעגל שלעיל. כוונן את הניגודיות של תצוגת ה- LCD עד שתראה את הדברים בצורה ברורה. אתה אמור לראות את הודעת המבוא על גבי LCD ואז לאחר כמה שניות יש להציג את הפרטים כגון תאריך, שעה, טמפרטורה ולחות במסך LCD כמוצג להלן.
אתה יכול גם להבחין בנור הכחול ב- ESP8266 מהבהב בכל פעם שהנתונים נכנסים. אם אינך יכול לראות זאת המשמעות היא ש- ESP אינו במצב תכנות נסה ללחוץ על כפתור Reset בדוק גם את החיבורים.
בדומה לזה אתה יכול להשתמש בכל ממשק API כדי לקבל את כל הנתונים הנדרשים מהאינטרנט ולהאכיל אותו לארדואינו ולתהליך העבודה שלך עם ארדואינו. יש המון API זמינים באינטרנט ועם כל אלה תוכלו לבצע מספר בלתי מוגבל של פרויקטים. מקווה שהבנתם את הפרויקט ונהניתם לבנות אותו. אם נתקלת בבעיה כלשהי, פרסם אותם בסעיף ההערות למטה או בפורומים שלנו.
תוכל למצוא את כל הפרויקטים הקשורים ל- ESP8266 כאן.