資料介紹
描述
描述
介紹
該項目旨在成為以下的合乎邏輯的繼續:
作為羅馬 Sapienza 大學物聯網課程的學習項目。在本節中,我們將在前面部分開發的基于云的系統之上構建。本質上,我們將使用通用傳感器 API構建一個 HTML5 移動應用程序,以從手機的加速度傳感器收集數據。該數據將通過一個簡單的活動識別模型進行計算,該模型檢測用戶是靜止不動還是行走,并最終發送到我們的云系統(該模型將以邊緣和云方式部署)。
依賴項
在這個項目中,需要的依賴項很少,可以按照此處鏈接的官方指南輕松獲得:
執行
移動HTML5應用程序
一個非常簡單的基于 HTML5 的移動應用程序,由節點服務器托管,它的工作是通過通用傳感器 API 從集成加速度計中檢索數據,并最終將其發送到云端。該頁面將在本地計算并顯示識別模型的結果。
![pYYBAGOYHtuAI0yPAAB6UFXNz7k209.jpg](https://file.elecfans.com/web2/M00/83/B1/pYYBAGOYHtuAI0yPAAB6UFXNz7k209.jpg)
通用SensorAPI -線性加速度計
設置加速度計以達到我們想要的結果非常簡單,這是通過使用 Geneirc Sensor Api,一個以一致且可訪問的方式將傳感器數據公開到開放 Web 平臺的框架。首先,您需要定義一個線性加速度傳感器,這是加速度計的一種基本形式,不包括重力加速度,在本例中,我們將頻率設置為 1Hz。
accelerometer = new LinearAccelerationSensor({ referenceFrame: 'device', frequency: 1 });
然后,設置錯誤偵聽器后,啟動加速度計
accelerometer.start();
accelerometer.onreading = () => {
//APPLY RECOGNITION MODEL TO THE INPUT DATA
rModel(accelerometer.x, accelerometer.y, accelerometer.z)
//PUSH DATA
}
加速度計上的輸入數據將與模型一起計算,或者直接推送到云端。
用戶活動識別模型
我開發了一個非常簡單的活動識別模型,具有很好的準確性并且沒有訓練數據集(這將導致合理數量的誤報)。
從 Generic Sensor Api 測量的經典加速度考慮了在 X、Y、Z 三個軸上施加到智能手機的重力。這種影響可以通過簡單的數學運算輕松避免,但我們可以簡單地使用線性加速度傳感器,它不會不考慮重力。
![pYYBAGOYHuGACRGTAAAta1lW5Ig403.png](https://file.elecfans.com/web2/M00/83/B1/pYYBAGOYHuGACRGTAAAta1lW5Ig403.png)
模型本身依賴于向量“法線”概念的功能性,實際上我們有一個包含三個元素 v(x,y,z) 的向量,我們可以通過這個數學概念來計算該向量的長度以下等式:
||v|| = sqrt(x^2 + y^2 + z^2)
該長度在經驗研究的閾值上進行比較。
在我們的例子中,如果長度大于 0.7,則用戶應該在移動,否則它在休息。
部署模型 - 基于Edge
如前所述,我們正在測試我們模型的兩種部署。讓我們看看我們如何在應用程序的前端本地部署模型。
delta = Math.sqrt(accelerometer.x * accelerometer.x + accelerometer.y * accelerometer.y + accelerometer.z * accelerometer.z);
delta > 0.7 ? (moving = true, status.innerHTML = "Walking") : (moving = false, status.innerHTML = "Resting");
console.log("send data: " + accelerometer);
socket.emit('data',
{
x: accelerometer.x,
y: accelerometer.y,
z: accelerometer.z,
status: moving
});
線性加速度傳感器收集的數據在 html 上本地計算,并通過托管頁面的服務器上的 publishAsync 函數發送到谷歌云(我們通過使用 soket.io 檢索值,如上一教程中所示)。
const publishAsync = (
mqttTopic,
client,
data,
) => {
console.log("Edge computing");
// Function that push the sensor status on Google Cloud
var status = JSON.stringify(data.status);
var x = JSON.stringify(data.x);
var y = JSON.stringify(data.y);
var z = JSON.stringify(data.z);
console.log("x: " + x + " y: " + y + " z:" + z + " ======> " + status);
const payload = deviceId + ":" + status + ":" + "crowd_sensing";
// Publish "payload" to the MQTT topic. qos=1 means at least once delivery. (There is also qos=0)
console.log('Publishing message:', payload);
client.publish(mqttTopic, payload, { qos: 1 });
};
請注意,您需要一些個人 google 云項目數據(mqtt 主題、客戶端和 deviceId),如我們的第一個教程中所述。
部署模型 - CloudBased
另一面,現在讓我們將模型部署到云上。html是相同的,但現在我們不會使用本地計算的值,實際上數據(x,y,z)是:
1)推送到云端
const publishCloud = (
mqttTopicCloud,
clientCloud,
data,
) => {
// Function that push the sensor value on Google Cloud
var x = JSON.stringify(data.x);
var y = JSON.stringify(data.y);
var z = JSON.stringify(data.z);
console.log("Cloud computing");
console.log("x: " + x + " y: " + y + " z:" + z);
const payload = deviceIdCloud + ":" + x + ":" + y + ":" + z + ":" + "crowd_sensing";
// Publish "payload" to the MQTT topic. qos=1 means at least once delivery. (There is also qos=0)
console.log('Publishing message:', payload);
clientCloud.publish(mqttTopicCloud, payload, { qos: 1 });
};
2)通過云端模型計算,然后通過soket.io推送到dashboard。
else if (device == "accelerometer") {
//Computed at edge, receive and push the value without computing at cloud
log[5].lastValue = value;
log[5].values.push(value);
socket.emit('accelerometer', log[5].lastValue);
socket.emit('accelerometer', log[5].values);
}
else if (device == "accelerometer_cloud") {
//Compute at cloud, if delta > 0.7 then user is moving
var delta = Math.sqrt(x * x + y * y + z * z);
log[6].lastValue = delta > 0.7
socket.emit('accelerometer_cloud', log[6].lastValue);
socket.emit('accelerometer_cloud', log[6].values);
}
如您所見,我們使用兩個設備進行推送,以實現我們的雙重部署研究案例的目標。
3) 保存在數據庫中
// References an existing subscription
const subscription = pubSubClient.subscription(subscriptionName);
// Create an event handler to handle messages
let messageCount = 0;
const messageHandler = message => {
console.log(`Received message ${message.id}:`);
console.log(`\tData: ${message.data}`);
var data = `${message.data}`.split(":");
if (data != null) {
var device = data[0].toString();
var x, y, z;
var value = data[0] != "accelerometer_cloud" ? data[1].toString() : (x = data[1], y = data[2], z = data[3]);
[//Device Switch as seen in 2)]
new Data
({
device: device,
value: value,
data: Date.now() / 1000
}).save();
額外- 云功能作為后臺功能
通過使用云功能也可以達到同樣的目標。可以在“./crowd_sensing_client/background_function”下的我的個人存儲庫中找到一個示例。我認為這是實現這個目標的一種很好的平衡方法,流程非常簡單,本質上傳遞給特定主題的數據將通過定義的后臺函數進行分析,然后推送到另一個主題(或您喜歡的同一個主題) )。讓我們看看它是如何工作的:
1)在google cloud IoT core上點擊云函數,然后新建一個函數。
![poYBAGOYHuiAUfWxAABSkjdzmlQ926.png](https://file.elecfans.com/web2/M00/83/29/poYBAGOYHuiAUfWxAABSkjdzmlQ926.png)
為函數插入一個名稱,選擇分配的內存(256MiB 就足夠了),選擇 Cloud Pub/Sub 作為觸發方法,然后選擇一個關聯的主題(或者創建一個新的無論如何)。
2)編碼你的功能。
![poYBAGOYHuqAeH4lAACdmTFAW38462.png](https://file.elecfans.com/web2/M00/83/29/poYBAGOYHuqAeH4lAACdmTFAW38462.png)
注意在這部分中,正確設置package.json至關重要,因為 pubsub 的版本彼此非常不同(在這種情況下,我使用的是 0.21.1)。請記住更改已執行函數的名稱。
3)只需將值推送到特定主題即可。
我真的很喜歡這個實現,但是使用的那個對所有其他教程來說更加線性和一致。我希望您喜歡本教程,您可以測試運行服務器 (node./app.js) 并使用部署在 heroku 上的移動應用程序的整體應用程序。
- 使用谷歌云物聯網和MQTT的環境站
- 物聯網感知技術及系統應用 1次下載
- 物聯網人類活動識別網絡應用
- 物聯網云平臺說明書 0次下載
- 分布式工業物聯網云平臺 0次下載
- 探究機械工程物聯網系統遠程解決方案 15次下載
- 論物聯網與大數據、云計算、工業物聯網、區塊鏈的關系 4次下載
- 基于ZigBee和物聯網的智能草莓大棚控制系統 38次下載
- 基于流量指紋的物聯網設備識別方法 13次下載
- 基于區塊鏈的物聯網訪問控制系統 45次下載
- 基于深度信念網絡的實體識別算法 16次下載
- 物聯網到底是什么物聯網的簡介和三項關鍵技術詳細說明 16次下載
- 物聯網的體系架構的詳細資料概述 16次下載
- 阿里云物聯網平臺的用戶指南資料免費下載 15次下載
- 基于諸智云的工業物聯網解決方案詳細資料免費下載 24次下載
- 基于機智云物聯網平臺的停車場管理系統設計 870次閱讀
- 中易云物聯網系統一體機的主要應用場景 666次閱讀
- 基于機智云物聯網平臺的4G智能開窗器控制系統設計 1634次閱讀
- 基于阿里云物聯網平臺的智能燈光控制系統設計 4365次閱讀
- 陀螺儀在人體活動識別系統中的應用 2285次閱讀
- 云計算、大數據與物聯網有什么聯系呢? 8560次閱讀
- 如何成功實現物聯網用戶體驗設計 1773次閱讀
- 科普:物聯網、云計算和大數據的原理和區別 5108次閱讀
- 物聯網系統評價的模型如何去構建實現 1570次閱讀
- 分布式工業物聯網云平臺是怎樣的 1743次閱讀
- 你知道水泵物聯網監控系統嗎 2186次閱讀
- 物聯網有哪些操作系統?物聯網操作系統匯總 5.5w次閱讀
- 物聯網嵌入式系統的應用及特征 5339次閱讀
- 云計算與物聯網的關系_云計算和物聯網的優勢 1.3w次閱讀
- 物聯網環境下的云存儲安全技術研究 725次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論