תוכן עניינים:
- שלב 1: כיצד להתחיל עם I2C - עולם מפואר של תקשורת אינטר -IC
- שלב 2: סקירה כללית על I2C
- שלב 3: כיצד להגדיר חיישני I²C
- שלב 4: התחל בתנועה - מד תאוצה
- שלב 5: ממשק עם בקר
- שלב 6: חיבורים
- שלב 7: קוד
- שלב 8: הפעל את מכשיר ה- I2C שלך
וִידֵאוֹ: תחילת העבודה עם ממשק חיישן I2C ?? - ממשק MMA8451 שלך באמצעות ESP32s: 8 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:12
במדריך זה תלמדו הכל כיצד להתחיל, להתחבר ולקבל מכשיר I2C (מד תאוצה) שעובד עם בקר (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
שלב 1: כיצד להתחיל עם I2C - עולם מפואר של תקשורת אינטר -IC
כולם Arduino, סדרת ESP, PIC, Rasberry PI וכו '. אבל מה עושים עם זה ברגע שיש לכם אחד כזה?
הדבר הטוב ביותר הוא להוסיף חיישנים וכאלה. כיום הרבה מהטכנולוגיה החדשה הלוהטת משתמשת בפרוטוקול I2C כדי לאפשר למחשב, לטלפונים, לטאבלטים או לבקרי מיקרו לדבר את החיישנים. טלפונים חכמים היו פחות חכמים אם הם לא היו יכולים לדבר עם חיישן מד התאוצה הזה כדי לדעת לאיזה כיוון הטלפון שלך פונה.
שלב 2: סקירה כללית על I2C
I2C הוא פרוטוקול תקשורת סידורי, סינכרוני וחצי דופלקס המאפשר קיום דו-קיומי של מאסטרים ועבדים רבים באותו אוטובוס. אוטובוס I2C מורכב משני קווים: קו נתונים סידורי (SDA) ושעון סדרתי (SCL). שני הקווים דורשים נגדי משיכה.
SDA (Data Serial) - השורה של המאסטר והעבד לשלוח ולקבל נתונים. SCL (שעון סידורי) - הקו המוביל את אות השעון. עם יתרונות כמו פשטות ועלות ייצור נמוכה, I2C משמש בעיקר לתקשורת של התקנים היקפיים במהירות נמוכה למרחקים קצרים (בתוך רגל אחת).
רוצה ללמוד עוד על I2C? ……
שלב 3: כיצד להגדיר חיישני I²C
לפני שתכנס לפרויקט, עליך להבין כמה יסודות של החיישן שלך. אז מזגו לעצמכם כוס קפה לפני שאתם צוללים פנימה:)? …
הכוח הגדול של I2C הוא שאתה יכול לשים כל כך הרבה חיישנים על אותם ארבעה חוטים. אך עבור יחידות עם מספר מודולים מוכנים מראש, ייתכן שתצטרך להסיר כמה נגדים מסוג smd מהפריצות, אחרת המשיכה באוטובוס עלולה להפוך לאגרסיבית מדי.
איזה מידע אנו רוצים מתוך גליון הנתונים ??
- פונקציונליות חיישן
- פונקציונליות Pinouts ו- pins
- תיאור הממשק (אל תפספסו להסתכל על "טבלת בחירת כתובות I2c")
- נרשמים !!
הכל בסדר תמצא את זה בקלות אבל נרשמים ?? רישומים הם פשוט מיקומי זיכרון בתוך מכשיר I²C. הסיכום של כמה רשמים בחיישן נתון, ומה שהם שולטים או מכילים נקרא מפת רגיסטר. רוב המידע בגליון הנתונים של החיישן עוסק בהסבר כיצד כל רגיסט מתפקד, והם יכולים להיות די סיכוי לקרוא אותו מכיוון שהמידע מוצג לעתים רחוקות בצורה ישירה.
כדי לתת לך מושג למה אני מתכוון בכך: ישנם סוגים רבים של רשמים, אך למבוא זה אני הולך לקבץ אותם לשני סוגים כלליים: רשימות בקרה ונתונים.
1) רשימות בקרה
רוב החיישנים משנים את אופן פעולתם על סמך הערכים המאוחסנים ברשומי הבקרה. תחשוב על רשימות הבקרה כבנקים של מתגי הפעלה/כיבוי, אותם אתה מפעיל על ידי הגדרת מעט ל -1 וכיבוי על ידי הגדרת הסיביה ל 0. לחיישנים מבוססי שבבים I²C יש לרוב תריסר הגדרות תפעוליות או יותר לדברים כמו ביט- מצבים, הפרעות, בקרת קריאה-כתיבה, עומק, מהירות הדגימה, הפחתת רעש וכו ', כך שבדרך כלל עליך להגדיר סיביות במספר רשימות בקרה שונות לפני שתוכל לבצע קריאה בפועל.
2) רגידי נתונים שלא כמו פקד רושם בנק-מתגים, אני חושב על אוגרי פלט נתונים כמכולות המכילות מספרים שבמקרה מאוחסנים בצורה בינארית. אז אתה רוצה לדעת נתונים, תמיד קרא את רושמי הנתונים כמו מי אני רושם לזיהוי מכשיר, רשום סטטוס וכו '.
אז אתחול חיישן I²C הוא תהליך רב שלבי וסדר הפעולות הנכון מוסבר לעתים קרובות בכתב הפוך, במקום פשוט בגליון הנתונים. הרשימה לעולם לא אומרת "כדי לקבל קריאה מחיישן זה, בצע (1), (2), (3), (4) וכו '", אך אתה מוצא תיאורים של סיביות פנקס הבקרה שאומרים "לפני שתגדיר ביט x בזה register עליך להגדיר את bit y במרשם הבקרה האחר הזה ".
ובכל זאת אני תמיד מוצא שגיליון הנתונים הוא אינטראקטיבי יותר מרוב הטקסט. אם תתייחס אליו עבור פיסת מידע ספציפית ונתן לך את כל הפרטים, הקשרים וההפניות. פשוט שב וקרא כדי להוציא את כל ההפניות שלך.:)
שלב 4: התחל בתנועה - מד תאוצה
מדי תאוצה מודרניים הם מכשירי מיקרו אלקטרו-מכניים (MEMS), מה שאומר שהם מסוגלים להתאים לשבב קטן בתוך הגאדג'טים הקטנים ביותר. שיטה אחת למדידת האצה בה משתמשים מד תאוצה MEMS היא שימוש במסה מוליכה זעירה המונעת על מעיינות. האצת המכשיר גורמת למתיחות או התכווצות של המעיינות, וניתן למדוד את סטיית המסה המוליכה באמצעות שינוי קיבול ללוחות סמוכים וקבועים.
מדי תאוצה מוגדרים לפי התכונות הבאות:
- מספר הצירים, מאחד לשלושה צירים, המסומנים ב- X, Y ו- Z בתרשימי המפרט. שים לב שמדי תאוצה מסוימים נקראים 6 צירים או 9 צירים, אך זה רק אומר שהם מצורפים עם התקני MEMS אחרים כגון גירוסקופים ו/או מגנטומטרים. לכל אחד מהמכשירים האלה יש גם שלושה צירים, ולכן ישנן 3, 6 או 9 צירים יחידות מדידה אינרציאלית (IMU).
- סוג הפלט, אנלוגי או דיגיטלי. מד תאוצה דיגיטלי דואג לעצב את נתוני ההאצה לייצוג דיגיטלי הניתן לקריאה באמצעות I2C או SPI.
- טווח ההאצה הנמדד ב- g, כאשר 1g הוא התאוצה הנובעת מכוח המשיכה של כדור הארץ.
- מעבדי עזר שיכולים להוריד כמה מהחישובים הדרושים לניתוח הנתונים הגולמיים מה- MCU. לרוב מד התאוצה יש יכולת הפרעה פשוטה לזהות סף תאוצה (הלם) ומצב 0 גרם (נפילה חופשית). אחרים יכולים לבצע עיבוד מתקדם על הנתונים הגולמיים כדי להציע נתונים משמעותיים יותר ל- MCU.
שלב 5: ממשק עם בקר
מכיוון שאנו מכירים מיקרו -בקרי ESP במגמה, נשתמש ב- ESP32 כדוגמה שלנו. אז קודם כל אתה צריך Nodemcu-32s.
אל תדאג אם יש לך לוחות ESP אחרים או אפילו Arduino !!! אתה רק צריך להתקין את Arduino IDE והתצורה שלך לפי לוחות הפיתוח שלך, עבור Arduino, ESP NodeMCU, ESP32s וכו '… תצטרך גם סוג של חלקים I2C, בדרך כלל על לוח פריצה. במדריך זה אני הולך להשתמש ב- MMA8451 לוח פריצה של מד תאוצה דיגיטלי.
ומעט חוטי מגשר….
שלב 6: חיבורים
והנה פריסה.
השתמשתי בחיבור הבא מהמודול למעלה למודול Nodemcu-32s שלי.
ESP32s - מודול
3v3 - וין
Gnd - Gnd
SDA 21 - SDA
SCL 22 - SCL
"זכור, לרוב לא לכל לוחות הפיתוח (בעיקר במערכות ESP) יש pinout ברור ברור שיסייע לקבוע באילו סיכות משתמשים !! אז לפני החיבור, זיהוי הסיכות הנכונות של הלוח שלך לשימוש אילו סיכות מיועדות ל- SDA ו- SCL."
שלב 7: קוד
זה דורש את ספריית Adafruit
מתוך
הורד, פרק ותמצא תיקיית דוגמאות, בתיקייה פשוט פתח את MMA8451demo ב- Arduino IDE שלך והנה …
תראה את הקוד הבא עבור ממשק החיישן MMA8451 שלך עם הבקר שלך
#לִכלוֹל
#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); הגדרת void (void) {Serial.begin (9600); Wire.begin (4, 5); / * הצטרף לאוטובוס i2c עם SDA = D1 ו- SCL = D2 של NodeMCU */ Serial.println ("Adafruit MMA8451 test!"); if (! mma.begin ()) {Serial.println ("לא ניתן היה להתחיל"); בעוד (1); } Serial.println ("נמצא MMA8451!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("טווח ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } לולאת void () {// קרא את הנתונים 'הגולמיים' בספירות 14 סיביות mma.read (); Serial.print ("X: / t"); Serial.print (mma.x); Serial.print ("\ tY: / t"); Serial.print (mma.y); Serial.print ("\ tZ: / t"); Serial.print (mma.z); Serial.println (); / * קבל אירוע חיישן חדש */ sensors_event_t אירוע; mma.getEvent (& event); / * הצג את התוצאות (האצה נמדדת ב- m/s^2) */Serial.print ("X: / t"); Serial.print (event.acceleration.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Serial.print (event.acceleration.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Serial.print (event.acceleration.z); Serial.print ("\ t"); Serial.println ("m/s^2"); / * קבל את כיוון החיישן */ uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("דיוקן מלפנים"); לשבור; מקרה MMA8451_PL_PUB: Serial.println ("דיוקן למעלה"); לשבור; מקרה MMA8451_PL_PDF: Serial.println ("דיוקן מלפנים"); לשבור; מקרה MMA8451_PL_PDB: Serial.println ("דיוקן למטה לאחור"); לשבור; מקרה MMA8451_PL_LRF: Serial.println ("חזית ימין לרוחב"); לשבור; מקרה MMA8451_PL_LRB: Serial.println ("נוף ימין אחורי"); לשבור; מקרה MMA8451_PL_LLF: Serial.println ("נוף חזית שמאלי"); לשבור; מקרה MMA8451_PL_LLB: Serial.println ("נוף אחורי שמאלי"); לשבור; } Serial.println (); עיכוב (1000); }
שמור, אמת והעלה ……
פתח את הצג הטורי ותראה משהו כזה, הזזתי את החיישן ומכאן הקריאות השונות
X: -2166 Y: 1872 Z: 2186
X: -2166 Y: 1872 Z: 2186X: -4.92 Y: 5.99 Z: 4.87 m/s^2
נוף קדמי שמאלי
X: -224 Y: -2020 Z: 3188
X: -5.10 Y: -3.19 Z: 7.00 m/s^2
דיוקן מלפנים
ובכן, אם הכל התנהל כפי שהוא אמור להיות, אז כעת יש לך את היסודות של I2C ואיך לחבר את המכשיר שלך.
אבל המכשיר לא עובד ??
פשוט המשך לשלב הבא ……
שלב 8: הפעל את מכשיר ה- I2C שלך
שלבים בסיסיים לעבודה במכשירי I2C
בואו לחקור….
- החיווט תקין.. (בדוק שוב)
- התוכנית נכונה.. (כן, זו דוגמא לבדיקה..)
התחל עם שלבים לפתרון ….
שלב 1: הפעל את תוכנית סורק מכשירי I2C כדי לבדוק את כתובת המכשיר וראשית התקן I2C שלך בסדר
אתה יכול להוריד סקיצה ולבדוק את הפלט.
תוצאה - המכשיר פועל וכתובת החיישן נכונה
סורק I2C. סורק…
כתובת שנמצאה: 28 (0x1C) בוצע. נמצא מכשיר אחד.
שלב 2: בדוק את ספריית החיישנים
פתח את הקובץ Adafruit_MMA8451.h ומצא את כתובת המכשיר
תוצאה - כתובת שונה מהמכשיר שלי ??
/*================================================= ========================= I2C ADRESS/BITS --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <ברירת מחדל MMA8451 I2C, אם A היא GND, 0x1C /*======================= ==================================================== */
עשה - ערוך קובץ מפנקס (שנה כתובת) + שמור + הפעל מחדש את IDE
זה עובד. אתה יכול לקבל את הקריאות שלך.
אדן לא….. ???
שלב 3: בדוק Wire.begin מוחלף?
פתח את הקובץ Adafruit_MMA8451.c ומצא את Wire.begin.
תוצאה - הצהרה זו מוחלפת
/********************************************* ************************ //*! @brief הגדרת ה- HW (קריאת ערכי מקדמים וכו ')* / / ********************************* ***********************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;
עשה - ערוך קובץ מפנקס (הצהרת הערה) + שמור + הפעל מחדש את IDE
ולבסוף המכשיר עובד ☺…
אני כמעט מעמיס על הדרכה זו מכיוון שמטרתה העיקרית הייתה להסביר כיצד להתחיל, לקבל נתונים מגליון נתונים, להתחבר ולגרום למכשיר I2C לעבוד עם דוגמה בסיסית ביותר.
מוּמלָץ:
תחילת העבודה עם RPLIDAR בעלות נמוכה באמצעות Jetson Nano: 5 שלבים
תחילת העבודה עם RPLIDAR בעלות נמוכה שימוש בג'טסון ננו: סקירה קצרה זיהוי ותחום אור (LiDAR) פועל באותו אופן שבו משתמשים במדדי טווח קולי עם דופק לייזר במקום גלי קול. Yandex, Uber, Waymo וכו 'משקיעים רבות בטכנולוגיית LiDAR עבור מכונית האוטונומית שלהם
תחילת העבודה עם ערכת שולחן העבודה של Raspberry Pi 4: 7 שלבים
תחילת העבודה עם ערכת שולחן העבודה של Raspberry Pi 4: Raspberry Pi 4 הוא מחשב מיני קטן וחזק, עם תמיכה במסך כפול 4K, USB 3.0, מעבד חדש ו- GPU ועד זיכרון RAM בנפח של עד 4GB. למד כיצד להגדיר את Raspberry Pi 4 דגם B ולהתקין כל מה שאתה צריך כדי להשתמש ב- fu
תחילת העבודה עם Digispark Attiny85 באמצעות Arduino IDE: 4 שלבים
תחילת העבודה עם Digispark Attiny85 שימוש ב- Arduino IDE: Digispark הוא לוח פיתוח מבוססי מיקרו -בקר מבוסס Attiny85 הדומה לקו ה- Arduino, רק זול יותר, קטן יותר וקצת פחות חזק. עם שלל מגינים להרחבת הפונקציונליות שלו והיכולת להשתמש במזהה Arduino המוכר
תחילת העבודה עם ESP32 CAM - הזרמת וידאו באמצעות ESP CAM באמצעות Wifi - פרויקט מצלמות אבטחה ESP32: 8 שלבים
תחילת העבודה עם ESP32 CAM | הזרמת וידאו באמצעות ESP CAM באמצעות Wifi | פרויקט מצלמות אבטחה ESP32: היום נלמד כיצד להשתמש בלוח ה- CAM החדש של ESP32 וכיצד אנו יכולים לקודד אותו ולהשתמש בו כמצלמת אבטחה ולקבל סרטון סטרימינג באמצעות wifi
תחילת העבודה עם AWS IoT עם חיישן טמפרטורה אלחוטי באמצעות MQTT: 8 שלבים
תחילת העבודה עם AWS IoT עם חיישן טמפרטורה אלחוטי באמצעות MQTT: במדריכים קודמים עברנו פלטפורמות ענן שונות כמו Azure, Ubidots, ThingSpeak, Losant וכו '. השתמשנו בפרוטוקול MQTT לשליחת נתוני החיישן לענן כמעט. כל פלטפורמת הענן. למידע נוסף