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

בקר ממסר ממסר Alexa Raspberry Pi: 6 שלבים
בקר ממסר ממסר Alexa Raspberry Pi: 6 שלבים

וִידֵאוֹ: בקר ממסר ממסר Alexa Raspberry Pi: 6 שלבים

וִידֵאוֹ: בקר ממסר ממסר Alexa Raspberry Pi: 6 שלבים
וִידֵאוֹ: Как собрать ПЛК Raspberry Pi Pico || Редактор OpenPLC 2024, יולי
Anonim
בקר ממסר Alexa Raspberry Pi
בקר ממסר Alexa Raspberry Pi
בקר ממסר Alexa Raspberry Pi
בקר ממסר Alexa Raspberry Pi
בקר ממסר ממסר Alexa
בקר ממסר ממסר Alexa

יצרתי את המדריך הזה כדי לחלוק את החוויות שלי משילוב מכשירי IOT עם Alexa של אמזון.

פרויקט זה מאפשר לשלוט בלוח ממסר המחובר לפאי פטל מבקר smarthome.

הוא נבדק עם Alexa אך נראה שהוא עובד מצוין עם Samsung Smartthings וממשקי שליטה אחרים מכיוון שהוא מחקה סדרת שקעי Wemo של Belkin.

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

אני גם לא רוצה ללכת למעמקי קוד lambda ב- Amazon.com אז שמרתי על זה פשוט מאוד.

פרסמתי את המקור וההערות ב- Github:

github.com/Switchdoctorstu/StuPiMo

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

שלב 1: חומרים מתכלים וחיבורים

אספקה וחיבורים
אספקה וחיבורים
אספקה וחיבורים
אספקה וחיבורים
אספקה וחיבורים
אספקה וחיבורים

הדברים שאתה צריך זמינים בקלות באמזון / EBay:

  • פאי פטל *
  • ספק כוח פי
  • מחברי דופונט
  • לוח ממסר
  • כבל מיקרו USB ישן (לחתוך לשניים לצורך הספק לכרטיס הממסר)

כל פי פטל יעבוד, בדקתי את זה על דגם B ואפס.

*אם אתה משתמש ב- Pi Zero תזדקק למתאם רשת OTG (אלא אם תקנה את גרסת ה- 'W' עם buit ב- WiFi)

יהיה עליך לחבר את ה- Pi לרשת.

השתמש במחברי הדופונט כדי לחבר את כרטיס הממסר ל- Pi.

שים לב שכרטיס הממסר צריך להשתמש בחשמל חיצוני (הסר את הקישור והתחבר ל- 5v חיצוני). הוא יפעל באמצעות PI אך לא מומלץ להפעלת הייצור.

עבור ההתקנה שלי השתמשתי ב- HUB USB המופעל חיצונית. זה מספק את הכוח ל- PI.

חתכתי גם את קצה כבל USB ישן והפעלתי את הממסרים מחיבור USB שני לרכזת כדי להישאר בטוח. גרסת ה'ייצור 'שלי משתמשת באספקת חשמל קטנה של מצב מתג 5V 5A. שוב, פשוט חתכתי חוט USB לחצי כדי להפעיל את ה- Pi באמצעות מיקרו- USB וחתכתי שניים ממחברי הדופונט כדי להפעיל את לוח הממסרים. ישנם 4 חוטים בכבל ה- USB, רובם משתמשים באדום/שחור לציון אספקת 5V אך אם יש ספק השתמשו במד כדי לוודא שאתם מקבלים את החוטים הנכונים.

סיכות הממסר בלוח מחוברות לסיכות ה- GPIO הרלוונטיות בכותרת ה- PI.

הקוד מאפשר לך לבחור את סיכות GPIO אך ברירת המחדל שבה השתמשתי הייתה:

  1. ממסר סיכה 1 - קרקע
  2. ממסר סיכה 2 - ממסר 1 - GPIO 0
  3. ממסר סיכה 3 - ממסר 2 - GPIO 1
  4. ממסר סיכה 4 - ממסר 3 - GPIO 2
  5. ממסר סיכה 5 - ממסר 4 - GPIO 3
  6. ממסר סיכה 6 - ממסר 5 - GPIO 4
  7. ממסר סיכה 7 - ממסר 6 - GPIO 5
  8. ממסר סיכה 8 - ממסר 7 - GPIO 6
  9. ממסר סיכה 9 - ממסר 8 - GPIO 7
  10. ממסר פין 10 - +5v להגיון

שלב 2: הגדרת PI

אני לא מתכוון ליצור מחדש הדרכה כיצד להפעיל את ה- PI שלך ולהתחבר לרשת.

ישנם מדריכים רבים כולל הדרכה מצוינת ב:

www.instructables.com/id/Ultimate-Raspberr…

תצטרך להביא את עצמך לנקודה שבה ה- PI גלוי ברשת ותוכל להתחבר אליו.

זה לא משנה אם זה באמצעות אתרנט או אלחוטי.

ניתן להשלים את הפרויקט הזה רק עם ה- Raspberry PI באמצעות עורך המתכנתים של Geany אך אני אישית יותר קל לבצע את הכנת הקוד שלי במחשב באמצעות Visual Studio או Eclipse (או אפילו Notepad ++) ולאחר מכן להעלות אותו ל- PI לצורך ניפוי באגים באמצעות חיבור VNC. שוב אני לא מתכוון לכסות את זה כאן כיוון שיש הרבה הוראות מצוינות על הגדרת VNC ב- RPi.

כל מה שאתה צריך זה להגיע לנקודה שבה אתה יכול להעלות ולקמפל את הקוד.

הערה אחת שחשובה היא שמכיוון שמטפל ה- UPNP דורש שידור רב -שידורי UDP, יש להגדיר את הממשקים שבהם נעשה שימוש למצב 'מופקר'.

ניתן לעשות זאת בשורת הפקודה:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

ו / או

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

צריך להפוך את זה לקבוע ולכן ערכתי את /etc/rc.local

sudo nano / etc / rc.local

לכלול את השורה:

sudo ifconfig eth0 promisc

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

שלב 3: הורדת ועריכת הקוד

הקוד עצמו יושב במאגר Github שלי;

github.com/Switchdoctorstu/StuPiMo/blob/ma…

אמנם יש דרכים 'נכונות' לשבט את המאגר. היה לי קל יותר פשוט לפתוח את עורך Geany בשולחן העבודה של Pi ולהדביק את הקוד.

באופן דומה, אם אתה משתמש בשורת הפקודה;

צור ספרייה חדשה

mkdir Stu

שנה לזה

תקליטור Stu

צור קובץ טקסט חדש

ננו StuPiMo.c

העתק את הקוד מה- Github raw והדבק אותו בקובץ החדש

שמור וצא.

ברגע שיש לך את הקובץ כאובייקט קוד מקור C אתה יכול לאסוף אותו באמצעות

gcc -o StuPiMo StuPiMo.c -l wiringPi

שים לב שיש צורך ב- "-l wiringPi" כדי לוודא שהקומפיילר מקשר בספריית ה wiringPi הנדרשת.

לאחר מכן ניתן להריץ את הקוד באמצעות

./StuPiMo

שוב, אם אתה רוצה שזה יופעל בעת ההפעלה, השתמש בפקודה:

sudo nano /etc/rc.local

כדי להוסיף את השורה הבאה

sudo/home/pi/Stu/StuPiMo &

לקובץ /etc/rc.local שלך. אל תשכח לשמור את הקובץ שלך ביציאה.

שים לב שה' & 'חיוני על מנת להבטיח שתהליך משנה ייווצר כדי להבטיח שהתסריט לא ייחסם בשלב זה.

שלב 4: שימוש בו

לאחר שתפעיל את הקוד, שאל את אלקסה ל'גלה התקנים 'והיא אמורה למצוא את כל 8 מכשירי ה- Wemo הווירטואליים.

אז זה רק מקרה של אמירה: "Alexa turn on socket 1" או "Alexa turn off socket 6" וכו 'והממסר הרלוונטי ישתנה.

שלב 5: כיצד פועל הקוד

הקוד פועל על ידי אמולציה של סדרת התקני שקע Belkin Wemo.

כדי להשיג זאת הוא צריך להתמודד עם 2 פונקציות עיקריות

  • מטפל בשידור UPNP גילוי
  • 'מטפל בהתקן' (אחד לכל מכשיר וירטואלי) לניהול הפקודות שנשלחות למכשיר והתגובות הנדרשות.

תכונת 'בונוס' היא שהיא מפרסמת גם דף אינטרנט המאפשר שליטה במכשירים.

מטפל UPNP

מטפל ה- UPNP פותח שקע לניטור מנות פרוטוקול SSDP ביציאה 1900 239.255.255.250.

הוא מגיב לכל שאילתות 'M-SEARCH' המגיעות עם חבילת תגובה לגילוי שמכריזה על אמולטורי ה- wemo האישיים לכל מי ששואל.

מטפל בהתקנים

מטפלים במכשירים (אחד לכל מכשיר וירטואלי) עוקבים אחר סדרת יציאות IP ומגיבים לבקשות.

הוא יגיש תגובה setup.xml כשתתבקש

הוא יגיש קובץ תיאור אירוע כאשר תתבקש

הוא יענה לבקשת GETBINARYSTATE

הוא יעבד ויענה לבקשה של SETBINARYSTATE

שרת אינטרנט

שרת האינטרנט הוא שגרה פשוטה הבונה טופס HTML המכיל כפתור לכל ממסר.

הוא יגיב ללחיצת הכפתורים ויחליף את מצב הממסר בהתאם.

שלב 6: התאמה אישית ושמות ידידותיים

התאמה אישית ושמות ידידותיים
התאמה אישית ושמות ידידותיים

לא השתגעתי על הקוד כדי לשמור אותו פשוט וניתן לעריכה.

ניתן להתאים את היסודות לפי הגדרות בתחילת הקוד:

// הגדרות גלובליות#הגדר WEBPORT 5353 // יציאה להריץ את שרת האינטרנט

#define NUMDEVICES 8 // מספר התקנים וירטואליים ליצירה

#define PORTBASE 43450 // יציאת בסיס בסיס להעלאה ממנה

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

NUMDEVICES מגדיר את מספר אמולטורי WEMO בודדים שיש להשיק. אם יש לך כרטיס ממסר 2 יציאות, הגדר אותו ל- 2, 4 יציאות = 4 וכו '.

השמות הידידותיים למכשירים נקבעים בשגרה הנקראת setup_names:

int setup_names (ידידותי ל- char [NUMDEVICES] [NAMELEN]) {int i = 0;

// השתמש בלולאה זו

עבור (i = 0; i <NUMDEVICES; i ++) {

sprintf (ידידותי , "Socket %d", i + 1);

}

// או הטבלה הידנית הבאה לאכלוס שמות מכשירים

/*

strcpy (ידידותי [0], "טלוויזיה בחדר שינה");

strcpy (ידידותי [1], "שמיכה חשמלית");

strcpy (ידידותי [2], "מנורת שינה");

strcpy (ידידותי [3], "שקע 4");

strcpy (ידידותי [4], "שקע 5");

strcpy (ידידותי [5], "שקע 6");

strcpy (ידידותי [6], "שקע 7");

strcpy (ידידותי [7], "שקע 8");

*/

החזר i;

}

השתמשתי בלולאה בכדי לקרוא לכל אחד מהמכשירים 'Socket n' אך תוכל למחוק את הלולאה הזו ולהוסיף שמות ידידותיים משלך (רק וודא שאתה מוסיף את אותו מספר כמו NUMDEVICES) אם תמחק את / * * /

זכור לאסוף מחדש את הקוד אם אתה מבצע שינויים כלשהם.

מוּמלָץ: