תוכן עניינים:

רצועת LED WiFi + חיישן טמפרטורה עם ESP8266: 6 שלבים
רצועת LED WiFi + חיישן טמפרטורה עם ESP8266: 6 שלבים

וִידֵאוֹ: רצועת LED WiFi + חיישן טמפרטורה עם ESP8266: 6 שלבים

וִידֵאוֹ: רצועת LED WiFi + חיישן טמפרטורה עם ESP8266: 6 שלבים
וִידֵאוֹ: Введение в плату разработки NodeMCU ESP8266 WiFi с примером HTTP-клиента 2024, יולי
Anonim
רצועת LED WiFi + חיישן טמפרטורה עם ESP8266
רצועת LED WiFi + חיישן טמפרטורה עם ESP8266

מדריך זה מתאר את השלבים להקמת 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 על לוח הלחם, ולאחר מכן השתמש בחוטי מגשר כדי לבצע את החיבורים כפי שמוצג בתרשים.

כמה דברים שכדאי לשים לב אליהם:

  1. חשוב: קו הנתונים WS2812B אינו דו כיווני. אם אתה מסתכל מקרוב על הסימונים בצד ה- LED של הרצועה, אתה אמור לראות חיצים קטנים המצביעים לכיוון אחד. הפלט מ- D7 של NodeMCU צריך להיות בכיוון WS2812B באותו אופן כמו סמן הכיוון, אותו תוכל לראות בתרשים אם אתה מסתכל מקרוב.
  2. בהתאם לסוג המחברים שבהם מגיע ה- WS2812B שלך, ייתכן שיהיה עליך לבצע כמה שינויים בכדי לגרום להם להתחבר בצורה מאובטחת ללוח הלחם. תוכל גם להשתמש בקליפי תנין כדי לחבר אותם לכבלי מגשר המסוגלים ללוח.
  3. סיכות ה- MAX31820 בעלות גובה קטן יותר והן דקיקות יותר ממגשרים סטנדרטיים בגודל 0.1 אינץ '/2.54 מ"מ, מה שהופך אותן למסובכות לחיבור. אחת הדרכים לעקוף זאת היא להשתמש בחוטי מגשר בין נקבה לגבר, להוריד את מארז הפלסטיק מהצד הנשי, לאחר מכן השתמש בכמה צבתים כדי לחבק את קצות המגשר הנשי בחוזקה סביב סיכות ה- MAX31820 הקטנות יותר.

בדוק שוב את החיבורים לפני הפעלת ה- NodeMCU כדי לא לפגוע ברכיבים.

שלב 4: הבזק והפעל

הַברָקָה

כאשר כל החומרה מחוברת, חבר את ה- NodeMCU שלך והבהב באמצעות הפקודה הבאה:

צור פלאש -C דוגמאות/cpe439 ESPPORT =/dev/ttyUSB0

/dev/ttyUSB0 הוא ה- com הסידורי שאליו צריך להופיע NodeMCU. אם יש לך התקנים טוריים מחוברים, הוא עשוי להופיע כ /dev /ttyUSB1 או מספר אחר. כדי לבדוק תוכל להפעיל פקודה זו פעמיים, פעם אחת כאשר NodeMCU נותק, ופעם אחת מחובר לחשמל, ולהשוות את ההבדל:

ls /dev /ttyUSB*

בעיה נוספת שאתה עלול להיתקל בה היא אי הרשאת גישה למכשיר. שתי דרכים לתקן זאת הן:

  1. הוסף את המשתמש שלך לקבוצת ההתקשרות:

    sudo adduser $ (whoami) חיוג

  2. 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 היא בחירה טובה יותר כתרגיל למידה.

מוּמלָץ: