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

מוניטור CLOUD עם AWS & ARDUINO - ילד חשמלי: 6 שלבים
מוניטור CLOUD עם AWS & ARDUINO - ילד חשמלי: 6 שלבים

וִידֵאוֹ: מוניטור CLOUD עם AWS & ARDUINO - ילד חשמלי: 6 שלבים

וִידֵאוֹ: מוניטור CLOUD עם AWS & ARDUINO - ילד חשמלי: 6 שלבים
וִידֵאוֹ: Zigbee реле для подрозетника с энергомониторингом MatSeePlus, обзор и тестирование 2024, דֵצֶמבֶּר
Anonim
מוניטור CLOUD עם AWS & ARDUINO - ילד חשמלי
מוניטור CLOUD עם AWS & ARDUINO - ילד חשמלי

זהו פרויקט פשוט - הדליקו אור כשמשהו משתבש … הופכים קהים יותר ויותר כלפי התראות עם כל כך הרבה לוחות מחוונים במחשבים שלנו בימינו, כיצד נוכל לוודא שלא נפספס את החשובים באמת. התשובה היא אינדיקטור מצב פיזי. או ספציפית יותר למשימה, צג ענן שיכול לשבת על שולחן העבודה שלך - תמיד בעיניים. כפי שהשם מרמז, המסך יעזור לפקוח עין על בריאות שירותי הענן שלך (… או כל דבר אחר באמת, השמיים הם הגבול, סליחה על משחק המילים). אפילו אתה, כמוני, צריך להכין אחד? גם אם לא, אולי יש לך רעיון לפרויקט IoT העתידי שלך.

ובכן, אם אתה מוכן, נתחיל!

שלב 1: רכיבים, חומרים מתכלים, כלים הדרושים, אפליקציות ושירות מקוון

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

_ Arduino Micro e Genuino Micro (יחידה אחת) … או כל תואם Arduino קטן ביותר - במקרה שלי LeoStick freetronics (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - נורית RGB נשלטת I2C (יחידה אחת)

_ אור ענן מיני (יחידה אחת) … או כל כלי שקוף אחר לבחירתך

_ כבל USB-A ל- B (יחידה אחת) … או כל כבל USB ישן עם תקע מסוג A

דרושים כלים

_ מלחם (גנרי)

שירות אפליקציות ושירות מקוון

_ Amazon Web Services AWS Lambda (https://aws.amazon.com/it/lambda/)

_ Amazon Web Services AWS IoT (https://aws.amazon.com/it/iot/)

שלב 2: חומרה

חוּמרָה
חוּמרָה
חוּמרָה
חוּמרָה

מנורת הלילה כבר מגיעה עם LED מובנה - לבן קר במקרה שלי. חשבתי שיהיה נחמד לציין סטטוס שונה בצבעים שונים. אז שמרתי רק את מעטפת בצורת הענן. למוח הפעולה בחרתי את התואם הקטן ביותר של Arduino שהיה לי: Freetronics LeoStick הייתה פלטפורמת האב טיפוס המועדפת עלי במשך שנים ויש לי הרבה חלפים. הוא עמוס בדברים טובים: רמקול פיזו, שני נוריות RGB (אחד קשור לחשמל, RX ו- TX) והכי טוב, אתה יכול פשוט לחבר אותו ליציאת USB - אין צורך ב- FTDI חיצוני או בכבל חיצוני. זה גם זעיר ועם זאת תואם קרש לחם.

מדוע לא בחרתי ב- ESP8266? כדי להיות אלחוטי באמת, אתה יכול גם לחתוך את כבל החשמל - מה שהופך את המצב קצת יותר מסובך להוספת סוללה ואי נוחות של טעינה. מכיוון שצג הענן יושב ליד המחשב שלי הרבה יותר קל להשתמש בחשמל USB. גם הגדרת חיבור ה- Wi-Fi אינה תמיד קדימה. בהתבסס על ה- ATmega32u4, Arduino Micro ו- LeoStick חולקים את המוזרות שיש נתוני I2C ב- D2 ושעון ב- D3. זה הופך להיות רלוונטי בעת חיבור LED BlinkM RGB. בניגוד ללוחות Atmega328 המקובלים שבהם אתה יכול פשוט לחבר את מגן BlinkM לכותרות A2.. A5, זה לא יעבוד כאן (לא טרחתי עם ספריית I2C הרכה).

על ידי הרחקת כותרות הזכר VCC ו- GND ב- BlinkM, לאחר מכן אוכל להרחיב את אלה עם חוט ולשמור הכל באריזה קטנה הניתנת לחיבור. ל- BlinkM יש בקר מיקרו משלו ומאפשר יישומים מתקדמים: למשל לשחק דפוסי צבע תסריטיים ללא חיבור ארדואינו. אני כמעט מרגיש ש- WS2812 (Adafruits NeoPixels מעולים) היה משרת אותי טוב יותר - אבוי לא היה לי אף אחד זמין. לסיום מעט החומרה, חתכתי את הקצה הנגדי של תקע USB מסוג זכר A, השחלתי אותו דרך חור קדוח מראש ליד בסיס נורת הענן והלחמתי את החוטים ל- LeoStick (אדום: 5V, לבן: נתונים-, ירוק: Data+, שחור: קרקע).

שלב 3: אדריכלות הפתרון

אדריכלות הפתרון
אדריכלות הפתרון
אדריכלות הפתרון
אדריכלות הפתרון

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

הפתרון נמצא ב- WebSockets המספקים תקשורת דו-צדדית מלאה. שירות IoT של Amazons מספק מתווך הודעות התומך ב- MQTT באמצעות WebSockets. כפי שמתברר, ניתן לקרוא לשירות מבלי שתצטרך להגדיר דברים, צללים, מדיניות או כללים.

יש מכשיר SDK זמין עבור Arduino Yún ויש כמה מאמצים להעברת ה- SDK לפלטפורמות אחרות כמו ESP8266. אך מכיוון שהצג תמיד יהיה מחובר בממשק סידורי, החלטתי בשלב מוקדם להקים יישום NodeJS (המופעל במחשב השולחני) כדי ליישם את ה- API של הלקוח ולהשתמש ב- Arduino רק כדי לקבל ולהציג קודי צבע. כך ניתן לבצע שינויים בקלות ב- JavaScript, מבלי להתעסק בהעלאות קושחה. לצורך בדיקה יש צורך בתשתית דוגמא קטנה. נניח שיש לנו מאזן עומסים זמין באזורי זמינות המבצע בדיקות תקינות במופע שרת אינטרנט ומדיניות קנה מידה אוטומטי המבוססת על עומס מעבד. ניתן לצפות בתבנית CloudFormation המתאימה ▶ ️ במעצב או ליצור ▶ ️ ישירות מהמסוף. הערה: חלק מהשירותים בערימה זו עשויים לגבות חיובים.

הרחבתי את התבנית עם מאפיינים עבור פונקציית Lambda והרשאות הדרושות. מאוחר יותר יש צורך להוסיף את נקודת הסיום של IoT REST API כפרמטר. כדי להפוך את זה לאוטומטי, כתבתי סקריפט מעטפת קטן שמשתמש ב- CLI כדי לבקש את ה- ARN (> aws iot לתאר-קצה) ואז קורא ליצור-מחסנית עם הפרמטר in-line. או שאתה עדיין יכול לעשות זאת ביד:

// RETRIVE IoT REST API ENDPOINT

aws iot לתאר-נקודת קצה

// CREATE STACK> awsformation create-stack-stack-name MiniCloudMonitor-קובץ תבנית גוף: //cfn-template.json --parameters ParameterKey = IotRestApiEndpoint, ParameterValue = {IoT_REST_API_ENDPOINT}-יכולות CAPABILITY_NAMEDI

// מחיקת ערימה> aws formation cloud-delete -stack --stack-name MiniCloudMonitor

באופן אידיאלי עלי להשתמש באותם ספי אזעקה שמפעילים את קנה המידה האוטומטי, גם להתקשרות לפונקציית למבדה ובכך לעדכן את מצב הצג. נכון לעכשיו זה אפשרי רק כאשר משתמשים ב- SNS כביניים. בזמנו שכבה נוספת זו הרגישה מיותרת והחלטתי להשתמש בכללי מחזור החיים של CloudWatch EC2 כדי להתקשר ישירות ללמבדה. ובכל זאת, אני רוצה לבחון את האפשרות של SNS → Lambda בעתיד.

שלב 4: תוכנה

התחלתי לכתוב את סקיצת הארדואינו. הלולאה הראשית () היא קריאת תווים מהחיבור הטורי ובניית מחרוזת עד שהיא מקבלת תו קו חדש. לאחר מכן מניחים שנשלח קוד צבע hex והפקודה המתאימה I2C נכתבת לנורית ה- BlinkM. לא מדובר כאן ביעילות אלא בנוחות. ניתן להשיג את המקורות המלאים של סקיצה זו וקבצים אחרים ב- GitHub. להלן כמה קטעי קוד רלוונטיים:

לולאת חלל () {

while (Serial.available ()) {

char inChar = (char) Serial.read ();

אם (inChar == '\ n') {

מספר ארוך = strtol (inputString.c_str (), NULL, 16);

בייט r = מספר >> 16;

בייט g = מספר >> 8 & 0xFF;

בייט b = מספר & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} אחר {

inputString += inChar;

}

}

}

אפליקציית NodeJS צריכה ליישם ממשקים ל- AWS ו- Arduino. מאוחר יותר ניתן להשיג בכמה שורות קוד בעת שימוש בחבילה הסדרתית המעולה:

var serialport = require ('serialport'); יציאה = יציאה סדרתית חדשה (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

port.on ('open', function () {

});

port.on ('שגיאה', פונקציה (שגיאה) {

});

גם התחברות ל- AWS IoT דורשת מאמץ רב. המלכודת היחידה היא לדעת ששימוש ב- MQTT+WebSockets מעל יציאה 443 דורש אימות באמצעות מפתחות גישה. ה- SDK יקרא את אלה ממשתני הסביבה. ייתכן שיהיה צורך לייצא מפורשות AWS_ACCESS_KEY_ID ו- AWS_SECRET_ACCESS_KEY.

var awsiot = require ('aws-iot-device-sdk'); var device = awsiot.device ({

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), אזור: AWS_REGION, פרוטוקול: 'wss', נמל: 443, איתור באגים: נכון

});

device.on ('connect', function () {

device.subscribe (MQTT_TOPIC);

});

device.on ('הודעה', פונקציה (נושא, מטען) {

if (port && payload && topic == MQTT_TOPIC) {

var message = JSON.parse (מטען);

אם (message.hasOwnProperty (MQTT_JSON_KEY))

{החזרה;

}

}

});

פונקציית Lambda מקבלת קוד צבע כפרמטר קלט - לא יפה, אבל מאוד גמיש בשלב זה. כדי להיות מסוגל לפרסם בנושא MQTT, הוא מייצר אובייקט IotData, אשר אכן דורש את נקודת הסיום של IoT REST API. תבנית CloudFormation טיפלה בכך במהלך יצירת הערימה.

var AWS = require ('aws-sdk'); var mqtt = AWS. IotData חדש ({

נקודת קצה: process.env. MQTT_ENDPOINT});

exports.handler = פונקציה (אירוע, הקשר, התקשרות חוזרת) {

var params = {

נושא: process.env. MQTT_TOPIC, מטען: '{ "color \": / "' + event.colour + '\"}', שאלות: 0

};

mqtt.publish (params, function (err, data) {

התקשרות חזרה (שגיאה);

});

};

שלב 5: מסקנה

נהניתי מאוד להביא אירוע וירטואלי "שנולד" בענן לעולם הפיזי. ובתור פרויקט חיית המחמד הקטן שלי זה היה המון כיף. כדי לקחת את זה לשלב הבא הייתי שוקל …

  • שיפור החוסן והטיפול בחריגים
  • לחקור דרכים טובות יותר לשלב מדדי ענן של AWS
  • להתנסות באינדיקטורים פיזיים נוספים כמו מדידים, תרשימי עמודות, …
  • יש אפשרות לעבור לפלטפורמות אחרות כמו Azure, Google, Heroku, …
  • לעקוב אחר אירועים ספציפיים ליישומים עבור Jenkins, GitHub, …

אני מקווה שנהנית לקרוא את המדריך הזה ואולי אפילו קלטת משהו חדש בדרך. אם אתה יכול לחשוב על דרך אחרת/טובה יותר לעשות דברים אנא שתף אותה בתגובות למטה. וכמובן, אם גילית טעויות ראש יעריך מאוד. תודה על הזמן שלך.

מוּמלָץ: