תוכן עניינים:
- שלב 1: יצירת סביבת בנייה
- שלב 2: קבל את קוד המקור, הגדר ובנה
- שלב 3: חבר רכיבי חומרה
- שלב 4: הבזק והפעל
- שלב 5: אינטראקציה
- שלב 6: פרטי יישום
וִידֵאוֹ: רצועת LED WiFi + חיישן טמפרטורה עם ESP8266: 6 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
מדריך זה מתאר את השלבים להקמת ESP8266 ולגרום לו לדבר הן עם חיישן טמפרטורה והן עם רצועת LED, תוך אפשרות לקבל קלט ולשלוח פלט באמצעות MQTT באמצעות WiFi. הפרויקט נעשה לקורס שנערך ב- Cal Poly San Luis Obispo בסתיו 2016- CPE 439: מערכות משובצות בזמן אמת. המטרה הכוללת הייתה להפגין את הקלות ביצירת "דבר" המחובר לאינטרנט עם חומרה זולה.
ציוד/ציוד נדרש:
- לוח NodeMCU ESP8266 dev
- רצועת LED WS2812B
- חיישן טמפרטורה MAX31820
- לוח לחם
- נגד 4.7K אוהם
- נגד 220 אוהם
- חוטי מגשר
- כבל מיקרו USB
- מחשב (או VM) שמריץ לינוקס (למשל אובונטו)
הנחות/תנאים מוקדמים:
- ניסיון בשימוש בכלים של שורת פקודה והתקנת חבילות במערכת הפצה מבוססת דביאן
- הבנה בסיסית בתחביר Makefile
- חיבור חוטים
שלב 1: יצירת סביבת בנייה
כדי לבנות את הפרויקט, תצטרך esp-open-sdk מותקן במחשב שלך. עקוב אחר הקישור וקרא את הוראות הבנייה. בקיצור, אתה תעשה כמה פקודות sudo apt-get להתקין תלות, שיבוט git-רקורסיבי לשכפל/להוריד esp-open-sdk, ולבסוף פקודת make לבנות esp-open-sdk.
תראה אותי
שלב 2: קבל את קוד המקור, הגדר ובנה
כעת, כאשר esp-open-sdk נבנה, שיבוט את מאגר הפרויקטים.
שיבוט git
שנה לספריית הפרויקט, צור תיקייה.local והעתק את הגדרות הדוגמה.
cd esp-rtos-tests
mkdir -p.local cp settings.example.mk.local/settings.mk
כעת פתח את.local/settings.mk עם כל עורך טקסט ושנה את ההגדרות הבאות:
- OPENSDK_ROOT: הנתיב המוחלט למיקום esp-open-sdk שבנית בשלב 1
- WIFI_SSID: ה- SSID של רשת ה- WiFi שלך
- WIFI_PASS: הסיסמה של רשת ה- WiFi שלך
- PIXEL_COUNT: מספר הפיקסלים ברצועת ה- LED WS2812B שלך
הערה: מכיוון שפרויקט זה משתמש ב- SPI כדי להניע את הנוריות ומשתמש ב- NodeMCU 3.3v כדי לספק אותן, סביר להניח שלא תוכל להניע יותר מ- 60 נוריות LED.
הערה: אין צורך לשנות את ההגדרות האחרות, אך ניתן לבצע אותן אם רוצים. מומלץ לשמור על סדר העדיפויות של המשימה. ככל שמספר העדיפות נמוך יותר, כך עדיפות המשימה נמוכה יותר.
עכשיו בנה את הפרויקט:
צור דוגמאות -C/cpe439
אם הכל מוגדר כהלכה, הוא אמור להתחיל בהרכבה. בסוף אתה אמור לראות:
נוצר בהצלחה 'קושחה/cpe439.bin'
תראה אותי
שלב 3: חבר רכיבי חומרה
כעת, לאחר שנאסף הקוד, הגיע הזמן לחבר את הציוד ההיקפי שלנו.
ראשית, הדבק את ה- NodeMCU על לוח הלחם, ולאחר מכן השתמש בחוטי מגשר כדי לבצע את החיבורים כפי שמוצג בתרשים.
כמה דברים שכדאי לשים לב אליהם:
- חשוב: קו הנתונים WS2812B אינו דו כיווני. אם אתה מסתכל מקרוב על הסימונים בצד ה- LED של הרצועה, אתה אמור לראות חיצים קטנים המצביעים לכיוון אחד. הפלט מ- D7 של NodeMCU צריך להיות בכיוון WS2812B באותו אופן כמו סמן הכיוון, אותו תוכל לראות בתרשים אם אתה מסתכל מקרוב.
- בהתאם לסוג המחברים שבהם מגיע ה- WS2812B שלך, ייתכן שיהיה עליך לבצע כמה שינויים בכדי לגרום להם להתחבר בצורה מאובטחת ללוח הלחם. תוכל גם להשתמש בקליפי תנין כדי לחבר אותם לכבלי מגשר המסוגלים ללוח.
- סיכות ה- MAX31820 בעלות גובה קטן יותר והן דקיקות יותר ממגשרים סטנדרטיים בגודל 0.1 אינץ '/2.54 מ"מ, מה שהופך אותן למסובכות לחיבור. אחת הדרכים לעקוף זאת היא להשתמש בחוטי מגשר בין נקבה לגבר, להוריד את מארז הפלסטיק מהצד הנשי, לאחר מכן השתמש בכמה צבתים כדי לחבק את קצות המגשר הנשי בחוזקה סביב סיכות ה- MAX31820 הקטנות יותר.
בדוק שוב את החיבורים לפני הפעלת ה- NodeMCU כדי לא לפגוע ברכיבים.
שלב 4: הבזק והפעל
הַברָקָה
כאשר כל החומרה מחוברת, חבר את ה- NodeMCU שלך והבהב באמצעות הפקודה הבאה:
צור פלאש -C דוגמאות/cpe439 ESPPORT =/dev/ttyUSB0
/dev/ttyUSB0 הוא ה- com הסידורי שאליו צריך להופיע NodeMCU. אם יש לך התקנים טוריים מחוברים, הוא עשוי להופיע כ /dev /ttyUSB1 או מספר אחר. כדי לבדוק תוכל להפעיל פקודה זו פעמיים, פעם אחת כאשר NodeMCU נותק, ופעם אחת מחובר לחשמל, ולהשוות את ההבדל:
ls /dev /ttyUSB*
בעיה נוספת שאתה עלול להיתקל בה היא אי הרשאת גישה למכשיר. שתי דרכים לתקן זאת הן:
-
הוסף את המשתמש שלך לקבוצת ההתקשרות:
sudo adduser $ (whoami) חיוג
- chmod או חסוך את המכשיר:
sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0השיטה הראשונה מועדפת מכיוון שהיא פתרון קבוע.
רץ
לאחר הפעלת פקודת הפלאש בהצלחה, המכשיר יאתחל מיד ויתחיל להריץ את הקוד המורכב. בכל שלב לאחר ההבהוב אתה יכול להריץ את הפקודה הבאה כדי לצפות בפלט סדרתי:
python3 -m serial.tools.miniterm --eol CRLF -exit -char 003 /dev /ttyUSB0 500000 --raw -q
כדי לחסוך זמן אתה יכול להוסיף את זה לקובץ ~/.bashrc שלך:
כינוי nodemcu = 'python3 -m serial.tools.miniterm --eol CRLF -exit -char 003 /dev /ttyUSB0 500000 --raw -q'
..אשר מאפשר לך פשוט להקליד "nodemcu" כינוי לפקודה זו.
אם הכל מוגדר כהלכה, רצועת ה- LED שלך צריכה להאיר בירוק, ובסדרה אתה צריך לראות חיבור WiFi, לקבל כתובת IP, להתחבר ל- MQTT ולהודעות שנתוני הטמפרטורה נדחקים החוצה.
מחובר עם MyWiFiSSID, הפעלת לקוח ערוץ 1dhcp … wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, מסכה: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init ok בקשת טמפ 'OKwifi_task: status = 5xQueueReceiveFi 25.43: (מחדש) התחברות לשרת MQTT test.mosquitto.org … xQueueReceive +25.50xQueueSend אישור עשה שלח MQTT connect … MQTTv311donexQueueReceive +25.56 xQueueSend בסדר
שלב 5: אינטראקציה
בהנחה שהמכשיר שלך התחבר ל- WiFi ולמתווך MQTT בהצלחה, תוכל לשלוח ולקבל נתונים מה- NodeMCU באמצעות MQTT. אם עדיין לא עשית זאת, התקן את חבילת לקוחות יתושים:
sudo apt-get להתקין לקוחות יתושים
כעת אתה אמור להיות מסוגל להשתמש בתוכניות mosquitto_pub ו- mosquitto_sub מהמעטפת שלך.
קבלת עדכוני טמפרטורה
כדי לקבל נתוני טמפרטורה נרצה להשתמש בפקודה mosquitto_sub כדי להירשם לנושא שאליו מפרסם NodeMCU.
mosquitto_sub -h test.mosquitto.org -t /cpe439 /temp
אתה אמור לראות נתוני טמפרטורה (בצלזיוס), המגיעים למסוף.
+25.87+25.93+25.68…
הגדרת מרחוק את צבע רצועת ה- LED
פורמט הודעות פשוט משמש לשליחת ערכי RGB ל- NodeMCU באמצעות MQTT. פורמט הפקודה נראה כך:
r: RRRg: GGGb: BBB ~
כאשר RRR, GGG, BBB תואמים לערכי RGB (0-255) של הצבע שברצונך לשלוח. כדי לשלוח את הפקודה שלנו, נשתמש בפקודה mosquitto_pub. הנה כמה דוגמאות:
mosquitto_pub -h test.mosquitto.org -t /cpe439 /rgb -m 'r: 255g: 0b: 0 ~' # redmosquitto_pub -h test.mosquitto.org -t /cpe439 /rgb -m 'r: 0g: 255b: 0 ~ ' # greenmosquitto_pub -h test.mosquitto.org -t /cpe439 /rgb -m' r: 0g: 0b: 255 ~ ' # כחול
אם אתה רוצה להיות יצירתי, מצא בוחר צבעים מקוון כמו זה וערוך את הפקודה בכל ערך RGB שתבחר.
היזהר
הנושאים בפרויקט זה מוגדרים ל /cpe439 /rgb ו /cpe439 /temp בברוקר MQTT ציבורי, מה שאומר שאין דבר שמונע מאדם אחר לפרסם או להירשם לאותם נושאים כמוך. בשביל לנסות דברים, שימוש ברוקר ציבורי זה בסדר, אבל לפרויקטים רציניים יותר תרצה להתחבר לברוקר עם הגנה באמצעות סיסמה, או להפעיל מתווך משלך בשרת.
שלב 6: פרטי יישום
Onewire
ל- ESP8266 רק משימות חסימה אחת כל כך ארוכות, כגון המתנה של 750 ms לחיישן הטמפרטורה לביצוע מדידת טמפרטורה בדרך כלל תגרום לכך ש- WiFi לא יתפקד כראוי, ואולי אפילו לקריסה. בפרדיגמת FreeRTOS, אתה מתקשר vTaskDelay () כדי להתמודד עם המתנות ארוכות אלה, אך יש צורך בהמתנה קצרה הרבה יותר בין קריאה לכתיבה, שהן קצרות יותר מתקתק מערכת FreeRTOS, ולכן אי אפשר להימנע מהן באמצעות vTaskDelay (). כדי לעקוף גם את אלה, מנהל ההתקן onewire בפרויקט זה נכתב להפעלת מכונת מדינה המונעת על ידי טיימר החומרה של ה- ESP8266, שיכול לגרום לאירועים הנמוכים כל 10 מיקרו שניות, וזה במקרה הקצר ביותר הזמן הנדרש בין פעולות קריאה/כתיבה ברשת. רוב היישומים האחרים משתמשים בקריאה חוסמת ל- delay_us () או דומה כדי להתמודד עם זה, אך אם אתה כל הזמן לוקח עדכוני טמפרטורה, כל העיכובים האלה מתחילים להתגבר, וכתוצאה מכך יישום פחות מגיב. המקור לחלק זה של הקוד נמצא בתיקייה תוספות/onewire.
WS2812B
ל- ESP8266 אין אפשרויות חומרה סטנדרטיות ל- PWM מספיק מהר כדי להניע פסי LED במהירות 800KHz. כדי לעקוף את זה, פרויקט זה משתמש בסיכת SPI MOSI להנעת נוריות ה- LED. על ידי התאמת קצב השעון של SPI ושינוי מטען ה- SPI מסביב, תוכל להשיג שליטה אמינה למדי על כל LED בודד. שיטה זו אינה נטולת פגמים שלה- עבור אחת הנורות צריך להיות מופעל עם מקור 5V ויש להוסיף מחלף רמה לפלט של סיכת ה- SPI. אבל 3.3V אכן עובד. שנית, ישנן תקלות המתרחשות עקב תזמון לא מושלם בשיטת SPI. והשלישית היא שעכשיו אתה לא יכול להשתמש ב- SPI לשום דבר אחר. רקע נוסף על שיטה זו ניתן למצוא כאן, והמקור לחלק זה של הקוד נמצא בתיקייה extras/ws2812.
שיטה אמינה יותר להנעת פסי LED היא שימוש ב- i2s. אולם לשיטה זו יש הרבה פריצות ספציפיות לשבבים, כך שנדמה היה ש- SPI היא בחירה טובה יותר כתרגיל למידה.
מוּמלָץ:
נורות LED רב -צבעוניות ריאקטיביות למוזיקה - חיישן גילוי קול Arduino - רצועת LED RGB: 4 שלבים
נורות LED רב -צבעוניות ריאקטיביות למוזיקה | חיישן גילוי קול Arduino | רצועת LED RGB: פרויקט נורות LED רב-צבעוניות המגיב על מוסיקה. בפרויקט זה נעשה שימוש בפס LED 5050 RGB פשוט (לא ה- LED המתייחס WS2812), חיישן גילוי קול Arduino ומתאם 12V
Raspberry Pi - TMP100 חיישן טמפרטורה חיישן Java הדרכה: 4 שלבים
Raspberry Pi-חיישן טמפרטורה TMP100 מדריך Java: TMP100 חיישן טמפרטורה דיגיטלי I2C MINI בעל דיוק גבוה, הספק נמוך. TMP100 אידיאלי למדידת טמפרטורה ממושכת. מכשיר זה מציע דיוק של ± 1 ° C ללא צורך בכיול או מיזוג אות רכיב חיצוני. הוא
קריאת טמפרטורה באמצעות חיישן טמפרטורה LM35 עם Arduino Uno: 4 שלבים
קריאת טמפרטורה באמצעות חיישן טמפרטורה LM35 עם Arduino Uno: היי חברים במדריך זה נלמד כיצד להשתמש ב- LM35 עם Arduino. Lm35 הוא חיישן טמפרטורה שיכול לקרוא ערכי טמפרטורה מ -55 ° C עד 150 ° C. זהו מכשיר בעל 3 מסופים המספק מתח אנלוגי ביחס לטמפרטורה. היג
נקודת גישה ESP8266 NodeMCU (שרת אינטרנט) עבור שרת אינטרנט עם חיישן טמפרטורה DT11 והדפסת טמפרטורה ולחות בדפדפן: 5 שלבים
נקודת גישה ESP8266 NodeMCU (AP) עבור שרת אינטרנט עם חיישן טמפרטורה DT11 וטמפרטורת הדפסה ולחות בדפדפן: שלום חברים ברוב הפרויקטים בהם אנו משתמשים ב- ESP8266 וברוב הפרויקטים אנו משתמשים ב- ESP8266 כשרת אינטרנט כך שניתן יהיה לגשת לנתונים ב כל מכשיר באמצעות wifi על ידי גישה לשרת האינטרנט המתארח על ידי ESP8266 אך הבעיה היחידה היא שאנחנו צריכים נתב עובד עבור
Raspberry Pi - TMP100 חיישן טמפרטורה חיישן פייתון הדרכה: 4 שלבים
Raspberry Pi-TMP100 חיישן טמפרטורה חיישן פייתון הדרכה: TMP100 חיישן טמפרטורה דיגיטלי I2C MINI בעל דיוק גבוה, הספק נמוך. TMP100 אידיאלי למדידת טמפרטורה ממושכת. מכשיר זה מציע דיוק של ± 1 ° C ללא צורך בכיול או מיזוג אות רכיב חיצוני. הוא