今天小編給大家?guī)淼氖莵碜阅鞲绲腗aker Victor Altamirano為了解決寵物寄送過程中可能遇到的安全問題,而制作的“Follow My Paws”項目,該項目可以在遠程實時向用戶發(fā)送寵物航空倉的各種信息。
材料清單
硬件:
SeeedStudioWioLTE
適用于英特爾 Edison 的 Seeed Studio Grove 入門套件 plus
DHT11溫濕度傳感器
軟件:
arduinoIDE
SORACOM Funnel
Amazon Web Services AWS IoT
Amazon Web Services AWS Lambda
Amazon Web Services AWS SNS
Amazon Web Services AWS S3
背景
Follow My Paws:
有時我們需要通過包裹服務(wù)發(fā)送寵物。我們怎么能確保他們出現(xiàn)意外時即使處理呢?。因此,主要問題是:寵物在物流寄送服務(wù)中運輸時會出現(xiàn)意外情況。但是通常又不得不使用該服務(wù),我們怎么能確保他們在任何時候都沒事呢?
解決方案
我將制作一個完整的物聯(lián)網(wǎng)解決方案來監(jiān)控寵物的環(huán)境,以確保它們在整個旅程中的健康。所有這些都與云平臺集成,該平臺除了實時顯示包裹的狀態(tài)外,還以固定的頻率發(fā)送通知。
目前的監(jiān)控解決方案僅限于無生命的包裝,這使得對寵物的連續(xù)監(jiān)控成為一種新奇事物。它很有用,因為多虧了這個系統(tǒng),寵物主人可以 100% 確定他們的寵物會很好,并且可以在整個旅程中監(jiān)控和跟蹤它們。
硬件介紹
要將傳感器連接到 WIO,傳感器必須具有 Grove 型輸入,如以下鏈接中所示的輸入。
https://www.seeedstudio.com/catalogsearch/result/index/?cat=890&q=Grove
對于這個項目,我已經(jīng)有了“Grove Starter Kit Plus”包,如下圖所示。
內(nèi)容:
建立的連接如下:
Grove 軟件包中包含的加速度計在連接到 WIO 時沒有問題,因為它已經(jīng)有了它的 Grove 適配器,我不得不破解它是 DHT,因為我們沒有 Grove 的 DHT。
加速度計 Grove 版本:
DHT No-Grove 版本:
以下是將模塊連接到 grove 電纜的方法:
Wio設(shè)置
我們將通過將SIM卡連接到適當(dāng)?shù)牟宀壑衼頊蕚鋀IO LTE。
找到SIM卡的插槽后,將SIM卡插入插槽(是的,保護您的IMEI和其他數(shù)據(jù))。
一旦卡完全插入,就會看到這一點。
由于我們在WIO LTE中安裝了SIM卡,因此我們將天線連接到下圖所示的插槽。
完成此操作后,我們將準備好將模塊與Arduino IDE一起使用。
Wio Arduino設(shè)置:
這是在Arduino IDE上安裝WIO LTE的官方指南。非常清晰簡潔,強烈建議試用它。
https://github.com/Seeed-Studio/Wio_LTE_Arduino_Library
Arduino軟件在Github上。
Soracom平臺設(shè)置:
檢查您的SIM卡是否已經(jīng)連接到一個組非常重要,就我而言,我稱之為Harvest Group。
如果我們沒有創(chuàng)建組,我們將創(chuàng)建一個組,如下圖所示,如果我們不這樣做,我們將無法執(zhí)行 AWS IoT 配置。
自從創(chuàng)建了小組以來,就我而言,我們通過按“Harvest Group”進入小組菜單,一旦進入,我們將看到以下內(nèi)容。
在組菜單中,我們將輸入選項“SORACOM Funnel”,此選項將允許我們訪問與AWS服務(wù)的連接,所有憑證將在稍后的AWS配置中獲得,因此請勿關(guān)閉此選項卡(請遵循)。
AWS IoT 設(shè)置
要與 AWS IoT 通信,我們需要在 IAM 控制臺中創(chuàng)建一個角色,以便授權(quán) Soracom 訪問我們的控制臺。
第一步是創(chuàng)建一個允許我們與 AWS 通信的角色。
在角色配置中,我們需要授予對 AWS IoT 的訪問權(quán)限。
在這里,我們可以看到可以與此角色一起使用的服務(wù),在本例中,此策略只是一個示例。注意:如果您不確定要獲取角色的策略,請選擇策略 (AWSIoTFullAccess)。
我們給新角色起了個名字。
我們進入 AWS IoT 控制臺并轉(zhuǎn)到“設(shè)置”部分。
進入“設(shè)置”部分后,我們將復(fù)制“端點”,這將在 Soracom 控制臺選項卡中使用。
下一步是在 AWS IoT 和其他 AWS 服務(wù)(如 Lambda、SNS 和 DynamoDB)之間創(chuàng)建連接。因此,為此,我們必須創(chuàng)建一個“規(guī)則”,該規(guī)則將用于在此服務(wù)和上述服務(wù)之間建立橋梁。
一旦我們有了規(guī)則,我們將如圖所示對其進行配置。
在此選項卡中,我們將配置數(shù)據(jù)到達后要激活的 lambda(在完成配置其他服務(wù)之前不要關(guān)閉)
AWS Lambda 設(shè)置
我們創(chuàng)建一個 Lambda,如屏幕上所示(它非常直觀,應(yīng)該沒有問題)。
lambda 應(yīng)該以這種方式看待,使用 lambda 的原因是因為我們需要處理從模塊獲取的數(shù)據(jù),以通過消息和我們的 Web 平臺給出響應(yīng)(執(zhí)行此過程 2 次,因為我們將配置 2 個 lambda 以連接到 SNS 和 DynamoDB 的服務(wù))
第一個 Lambda SNS 服務(wù):
這是向 SNS 發(fā)送通知的代碼,稍后將在 SNS 配置中獲取 TopicARN。
console.log('Loading function'); // Load the AWS SDK var AWS = require("aws-sdk"); // Set up the code to call when the Lambda function is invoked exports.handler = (event, context, callback) => { // Load the message passed into the Lambda function into a JSON object var eventText = JSON.parse(JSON.stringify(event, null, 2)); // Log a message to the console; you can view this text in the Monitoring tab in the Lambda console or in the CloudWatch Logs console // Create a string, extracting the click type and serial number from the message sent by the AWS IoT button // Write the string to the console var temp=parseInt(eventText.temperature) var acc=parseInt(eventText.accelerometer) var moi=parseInt(eventText.moisture) var air=parseInt(eventText.air) var id=eventText.ID var myarray=[0,0,0,0] if(temp<15) { myarray[0]=4 } else if(temp >= 15 && temp < 18) { myarray[0]=3 } else if(temp >= 18 && temp < 19) { myarray[0]=2 } else if(temp >= 21 && temp < 24) { myarray[0]=1 } else if(temp >= 24 && temp < 26) { myarray[0]=2 } else if(temp >= 26 && temp < 28) { myarray[0]=3 } else if(temp >= 28) { myarray[0]=4 } temp=temp*1.8+32 if(acc<3) { myarray[1]=1 } else if(acc >= 3 && acc < 6) { myarray[1]=2 } else if(acc >= 6 && acc < 10) { myarray[1]=3 } else if(acc >= 10) { myarray[1]=4 } if(moi<20) { myarray[3]=4 } else if(moi >= 20 && moi < 30) { myarray[3]=3 } else if(moi >= 30 && moi < 40) { myarray[3]=2 } else if(moi >= 40 && moi < 50) { myarray[3]=1 } else if(moi >= 50 && moi < 65) { myarray[3]=2 } else if(moi >= 65 && moi < 80) { myarray[3]=3 } else if(moi >= 80) { myarray[3]=4 } air=0.5 * (temp + 61.0 + ((temp-68.0)*1.2) + (moi*0.094)) if(air<90) { myarray[2]=1 } else if(air >= 90 && air < 102) { myarray[2]=2 } else if(air >= 102 && air < 122) { myarray[2]=3 } else if(air >= 122) { myarray[2]=4 } var mess=""; if(myarray[3]==1 || myarray[2]==1 || myarray[1]==1 || myarray[0]==1) { mess="Your dog goes in perfect travel conditions" } if(myarray[3]==2 || myarray[2]==2 || myarray[1]==2 || myarray[0]==2) { mess="Your dog is in good condition" } if(myarray[3]==3 || myarray[2]==3 || myarray[1]==3 || myarray[0]==3) { mess="Your dog is fine but the travel conditions are not the best." } if(myarray[3]==4 || myarray[2]==4 || myarray[1]==4 || myarray[0]==4) { mess="Your dog is fine but travel conditions should improve" } // Create an SNS object var sns = new AWS.SNS(); console.log("Received event:",JSON.stringify(myarray, null, 2),air); var params = { Message: mess, TopicArn: "YOURSNSENDPOINT" }; sns.publish(params, context.done); };
第二個 Lambda DynamoDB 服務(wù):
這是將數(shù)據(jù)發(fā)送到 DynamoDB 的代碼。
console.log('Loading function'); var AWS = require("aws-sdk"); exports.handler = (event, context, callback) => { var eventText = JSON.parse(JSON.stringify(event, null, 2)); var temp=parseInt(eventText.temperature) var acc=parseInt(eventText.accelerometer) var moi=parseInt(eventText.moisture) var air=0 var id=eventText.ID var myarray=[0,0,0,0] if(temp<15) { myarray[0]=4 } else if(temp >= 15 && temp < 18) { myarray[0]=3 } else if(temp >= 18 && temp < 19) { myarray[0]=2 } else if(temp >= 21 && temp < 24) { myarray[0]=1 } else if(temp >= 24 && temp < 26) { myarray[0]=2 } else if(temp >= 26 && temp < 28) { myarray[0]=3 } else if(temp >= 28) { myarray[0]=4 } temp=temp*1.8+32 if(acc<3) { myarray[1]=1 } else if(acc >= 3 && acc < 6) { myarray[1]=2 } else if(acc >= 6 && acc < 10) { myarray[1]=3 } else if(acc >= 10) { myarray[1]=4 } if(moi<20) { myarray[3]=4 } else if(moi >= 20 && moi < 30) { myarray[3]=3 } else if(moi >= 30 && moi < 40) { myarray[3]=2 } else if(moi >= 40 && moi < 50) { myarray[3]=1 } else if(moi >= 50 && moi < 65) { myarray[3]=2 } else if(moi >= 65 && moi < 80) { myarray[3]=3 } else if(moi >= 80) { myarray[3]=4 } air=0.5 * (temp + 61.0 + ((temp-68.0)*1.2) + (moi*0.094)) if(air<90) { myarray[2]=1 } else if(air >= 90 && air < 102) { myarray[2]=2 } else if(air >= 102 && air < 122) { myarray[2]=3 } else if(air >= 122) { myarray[2]=4 } // Set the region AWS.config.update({region: 'ap-northeast-1'}); // Create the DynamoDB service object var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'}); var params = { TableName: 'FMPtemp', Item: { 'ID' : {S: id}, 'Array' : {S: JSON.stringify(myarray, null, 2)} } }; // Call DynamoDB to add the item to the table ddb.putItem(params, function(err, data) {if (err) {} else {}}); };
AWSSNS設(shè)置
在SNS服務(wù)中,我們創(chuàng)建了一個主題
在 SNS 服務(wù)中,我們創(chuàng)建了一個主題。
由于我們創(chuàng)建了主題,因此我們可以在希望通知到達的位置創(chuàng)建訂閱。
這是我們可以發(fā)送通知的所有方面的一個示例。
為您的第一個 Lambda 保存此 ARN:
AWS DynamoDB 設(shè)置:
對于這個項目和我們的 WEB 實現(xiàn),我們需要在 DynamoDB 中創(chuàng)建 2 個表,因為一個表將用作數(shù)據(jù)存儲,另一個表將用于可以在 WEB 平臺中使用的臨時變量。
對于此步驟,僅創(chuàng)建了兩個表,如圖所示:
WEB界面設(shè)置
Web 平臺可能看起來很簡單,但它在與 AWS 交互的方式上有一個非常有趣的實現(xiàn)。
使用網(wǎng)頁時最大的問題之一是具有臨時變量,因為每次更新頁面時,我們都會丟失變量存儲的所有信息,但是在我的實現(xiàn)中,我直接從 DynamoDB 中提取數(shù)據(jù),這要歸功于提供 AWS 的 javascript 開發(fā)工具包,因此我可以將信息存儲在數(shù)據(jù)庫中, 如上圖所示,在名為“FMP”的數(shù)據(jù)庫中,并保存臨時變量和快速訪問,以便部署和更新網(wǎng)頁“FMPtemp”。
在顯示網(wǎng)頁時,調(diào)用FMPtemp數(shù)據(jù)庫實時獲取寵物的狀態(tài),并根據(jù)我們的算法確定寵物的一般狀態(tài),將通過顏色通知,如下圖所示。
每圖標代表以下內(nèi)容:
溫度:環(huán)境溫度
加速度:最大加速度
空氣Q:空氣質(zhì)量
濕潤:空氣濕氣
顏色范圍:
空氣質(zhì)量是使用以下公式計算的,使用簡化版本來計算空氣的露點,根據(jù)書籍,它必須小于 90:
空氣 Q=0.5 * (溫度 + 61.0 + ((溫度-68.0)1.2) + (濕潤0.094))
最終產(chǎn)品
我們將溫度傳感器組裝在外殼中。
---end---
-
LTE
+關(guān)注
關(guān)注
15文章
1367瀏覽量
179150 -
SIM卡
+關(guān)注
關(guān)注
6文章
290瀏覽量
29621 -
DHT11
+關(guān)注
關(guān)注
19文章
277瀏覽量
58472
原文標題:創(chuàng)客項目秀|基于 Wio LTE的寵物物流安全衛(wèi)士
文章出處:【微信號:ChaiHuoMakerSpace,微信公眾號:柴火創(chuàng)客空間】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
保險絲-電路里的“安全衛(wèi)士”,選錯它真會“火”!
[原創(chuàng)]求高級騙子當(dāng)師傅!共同對抗貸款安全衛(wèi)士的攻擊!
【云智易申請】家庭安全衛(wèi)士
近電防觸碰報警器,給工作人員安排了一位“安全衛(wèi)士”
360安全衛(wèi)士5.0綠色版免費下載

360安全衛(wèi)士7.7下載_官網(wǎng)最新

360安全衛(wèi)士v7.5 Beta版
AVR單片機居家安全衛(wèi)士系統(tǒng)軟硬件架構(gòu)分析

360安全衛(wèi)士宣布,區(qū)塊鏈平臺EOS的一系列存在高危安全漏洞
電梯智能安全衛(wèi)士,為安全出行保駕護航
辦公樓園區(qū)雙屏電梯安全衛(wèi)士:守護高效與安全的智慧新篇章
GNSS位移監(jiān)測站:橋梁、大壩等大型工程的安全衛(wèi)士
無人機電力巡檢系統(tǒng):高空作業(yè)的“安全衛(wèi)士”

保險絲 - 電路里的“安全衛(wèi)士”,選錯它真會“火”

評論