• <noframes id="6fok0"><bdo id="6fok0"><listing id="6fok0"></listing></bdo>
    <ruby id="6fok0"></ruby>

    <progress id="6fok0"></progress>
  • <progress id="6fok0"></progress>
    <ruby id="6fok0"><table id="6fok0"></table></ruby>
  • <progress id="6fok0"><u id="6fok0"><form id="6fok0"></form></u></progress>

    24小時(shí)聯(lián)系電話(huà):18217114652、13661815404

    中文

    您當前的位置:
    首頁(yè)>
    電子資訊>
    技術(shù)專(zhuān)題>
    了解物聯(lián)網(wǎng)解決方案的...

    技術(shù)專(zhuān)題

    了解物聯(lián)網(wǎng)解決方案的藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)


    了解物聯(lián)網(wǎng)解決方案的藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)

    根據研究機構 ABI 的數據,藍牙技術(shù)在所有物聯(lián)網(wǎng)設備中的占比為 38%,而 Wi-Fi 和蜂窩分別為 32% 19%。由于它們具有不同的優(yōu)勢和劣勢,因此它們不一定是相互排斥的技術(shù),并且通常在物聯(lián)網(wǎng)解決方案中一起使用。

    但有個(gè)問(wèn)題!藍牙和 TCP/IP 不兼容。(物聯(lián)網(wǎng)意味著(zhù)使用 TCP/IP 等協(xié)議。)

    可以看出,TCP/IP 僅跨越藍牙堆棧的兩層。其他協(xié)議也用于堆棧 TCP/IP Friends(圖 1)。但是,藍牙 LE 不能直接與 TCP/IP 通信,反之亦然。

    1:藍牙 LE TCP/IP

    廣泛的標準范圍

    盡管藍牙 SIG 和其他組織已經(jīng)定義了一些與 IoT 和藍牙相關(guān)的標準,但單獨使用它們不太可能涵蓋 IoT 的所有方面。目前,定義了以下標準:

    RFC7668

    用于通信的互聯(lián)網(wǎng)工程任務(wù)組 (IETF) 標準,它定義了如何調整 IPv6 6LoWPAN 數據包以通過(guò)藍牙 LE 堆棧的較低層發(fā)送。并非 TCP/IP 的所有方面都受支持,但使用它的藍牙 LE 設備可以擁有 IP 地址,并且可以使用 6LoWPAN IPv6 數據包相互通信。

    Internet 協(xié)議支持配置文件 (IPSP)

    這是一個(gè)低功耗藍牙 (LE) 配置文件,允許發(fā)現支持 IP over Bluetooth 的設備。它在 RFC7668 中定義了藍牙 LE 堆棧如何用于發(fā)送和接收 IPv6 數據包。

    HTTP 代理服務(wù) (HPS)

    這對于傳感器等設備很有用,并允許藍牙傳感器或類(lèi)似設備與支持藍牙 LE TCP/IP 并可以充當 HTTP 客戶(hù)端的網(wǎng)關(guān)設備一起使用。因此,網(wǎng)關(guān)代表藍牙設備并在其請求時(shí)向遠程 Web 服務(wù)器發(fā)送 HTTP 請求。從 Web 應用程序服務(wù)器接收到的任何數據都會(huì )被發(fā)送回藍牙設備。

    存在一些有用的標準

    但是,如果您想在一般 IoT 用例中驅動(dòng)與 Internet 上的藍牙設備的交互,那么您需要一個(gè)網(wǎng)關(guān),該網(wǎng)關(guān)具有某種適配方案(API),以便可以使用基于 TCP/IP 的協(xié)議和然后由網(wǎng)關(guān)轉換為適當的藍牙請求并發(fā)送到連接的藍牙設備。

    要在 IoT 環(huán)境中使用藍牙,您通常需要可以在某些通過(guò) TCP/IP 運行的應用程序協(xié)議和藍牙協(xié)議之間進(jìn)行轉換的東西。這通常稱(chēng)為藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)(圖 2)(BIG),屬于中間件。

    2:藍牙和物聯(lián)網(wǎng)解決方案架構

    藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)要求

    現在,我們有舊的藍牙 BR/EDR 和新的藍牙 LE 可供選擇(圖 3)。藍牙 LE 可以以多種方式使用,包括面向連接的通信和無(wú)連接,還可以用于創(chuàng )建藍牙設備的大型網(wǎng)狀網(wǎng)絡(luò )。因此,首先要考慮需要支持什么類(lèi)型的藍牙技術(shù)。

    3:藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)要求

    對于這個(gè)項目,使用了藍牙 LE,因為對藍牙網(wǎng)狀網(wǎng)絡(luò )的支持不是優(yōu)先事項,也無(wú)意支持舊的藍牙 BR/EDR。
    藍牙 LE 設備可以以多種方式工作。無(wú)連接通信涉及稱(chēng)為廣告的過(guò)程,其中小數據包被范圍內的設備廣播和接收(掃描)。該機制用于促進(jìn)設備發(fā)現。

    通常,智能手機等掃描設備會(huì )在用戶(hù)的幫助下找到并選擇設備,然后建立連接。此后,通過(guò)連接進(jìn)行通信。這需要網(wǎng)關(guān)代表某種 TCP/IP 客戶(hù)端來(lái)完成。

    做廣告的可連接設備稱(chēng)為外圍設備。而那些掃描和請求連接的設備稱(chēng)為中央設備。

    因此,決定支持可連接的 LE 設備作為外圍設備,藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)作為中央設備進(jìn)行掃描和連接。

    4:藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)要求

    藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)架構

    適配器組件處理以 TCP/IP 協(xié)議編碼的請求。藍牙 LE API 有助于驅動(dòng)藍牙堆棧實(shí)現的請求藍牙程序。

    決定在 Raspberry Pi 上使用 Linux 作為具有網(wǎng)關(guān)所需的 TCP/IP 和藍牙支持的平臺。還決定將 HTTP WebSockets 用于 TCP/IP 協(xié)議,HTTP 請求和響應用于所有操作,但藍牙特征通知流的傳遞(通過(guò) WebSocket 傳遞)除外。

    5:網(wǎng)關(guān)邏輯架構

    對于 HTTP 支持,選擇了 Apache Web 服務(wù)器,因為它具有廣泛的模塊集合,并且開(kāi)源 websocketd 用于 Web 套接字支持。一個(gè)網(wǎng)絡(luò )攝像頭也被插入網(wǎng)關(guān)以觀(guān)察遠程操作。

    適配器代碼是用 Python 編寫(xiě)的。為了將 Python 腳本與 HTTP 中的 Web 服務(wù)器集成,使用了通用網(wǎng)關(guān)接口 (CGI)。

    BlueZ 是您將在 Linux 上找到的藍牙堆棧的名稱(chēng)。它提供了一個(gè)與語(yǔ)言無(wú)關(guān)的 API,它使用 Linux d-bus 服務(wù),允許進(jìn)行進(jìn)程間通信。

    6:網(wǎng)關(guān)物理架構

    藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)實(shí)現

    獲取

    不使用用于傳遞關(guān)聯(lián)參數的 HTTP 查詢(xún)字符串更改遠程對象狀態(tài)的請求。

    HTTP PUT

    使用 HTTP 請求正文中的 JSON 對象更改遠程對象狀態(tài)的請求,用于編碼和傳輸相關(guān)參數。
    回應。HTTP 狀態(tài)和 JSON 對象。

    這是一個(gè)涉及設備發(fā)現的示例(圖 7):

    上面顯示了由名為 do_discover_devices.py 的適配器腳本生成的響應。它是使用 HTTP GET 調用的,并且將掃描時(shí)間參數傳遞到查詢(xún)字符串中。這表示網(wǎng)關(guān)應該花費多長(cháng)時(shí)間執行藍牙掃描(以毫秒為單位)。響應是一個(gè)對象數組,表示以 JSON 格式發(fā)現的設備。

    7:設備發(fā)現

    在此示例中,使用 HTTP PUT(圖 8)寫(xiě)入藍牙特性。在這里,藍牙設備地址被分配為第一個(gè)參數,用于標識要與之交互的設備。

    handle 參數是藍牙特性的特定實(shí)例的唯一標識符,屬于特定的藍牙服務(wù)。

    8:寫(xiě)入藍牙特性


    9:適配器代碼

    10API 代碼

    藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)安全

    允許通過(guò) Internet 訪(fǎng)問(wèn)您的設備的任何內容都必須是安全的。對初始網(wǎng)關(guān)設計和實(shí)施的安全性(圖 11)的審查發(fā)現了許多安全問(wèn)題。

    11:安全分析

    例如,沒(méi)有身份驗證機制,因此無(wú)法控制誰(shuí)可以或不可以訪(fǎng)問(wèn)網(wǎng)關(guān)。

    此階段的網(wǎng)關(guān)使用了三個(gè)不同的 TCP/IP 端口:用于 HTTP 的端口 80、用于網(wǎng)絡(luò )攝像頭流服務(wù)的端口 8081 和用于 websocketd 8082。直接暴露在 Internet 上的端口越多,安全風(fēng)險就越大。

    TCP/IP 上的數據在此階段也未加密,藍牙上的數據也不一定加密。

    12:保護網(wǎng)關(guān)的步驟

    人們還認為有一些方法可以?xún)H授予對特定藍牙設備的訪(fǎng)問(wèn)權限,而不是授予對碰巧在網(wǎng)關(guān)范圍內的所有設備的訪(fǎng)問(wèn)權限。此外,能夠僅授予對特定設備功能的訪(fǎng)問(wèn)權限,而不是設備可以通過(guò)藍牙執行的所有操作,這將是有利的。

    反向代理

    網(wǎng)關(guān)上運行著(zhù)三個(gè)服務(wù),每個(gè)服務(wù)偵聽(tīng)不同的端口。但是安裝的 IP 防火墻被配置為只允許端口 443 訪(fǎng)問(wèn)。Apache Web 服務(wù)器被設置為充當反向代理,并將端口 443 數據包轉發(fā)到由 URL 模式定向的另一個(gè)端口(圖 13)。這限制了暴露給 Internet 的端口數量。

    13:反向代理

    此外,為該項目發(fā)明了藍牙防火墻的概念。這允許控制可以通過(guò)網(wǎng)關(guān)與哪些藍牙設備交互以及可以訪(fǎng)問(wèn)哪些服務(wù)、特性和描述符。藍牙防火墻的配置文件如圖 14 所示。

    14:藍牙防火墻配置

    藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)可擴展性

    雖然藍牙規范沒(méi)有規定中央設備可以與外圍設備建立的并發(fā)連接數量的限制,但在實(shí)踐中總是有一個(gè)限制,而且可能很低。

    因此,如果您想支持同時(shí)連接到藍牙互聯(lián)網(wǎng)網(wǎng)關(guān)并受其控制的大量設備,這里有一些選項。

    添加多個(gè)適配器。您可以向網(wǎng)關(guān)添加多個(gè)藍牙適配器(圖 16)。一些適配器以 USB 加密狗的形式出現,因此在物理上很容易實(shí)現;需要對您的代碼進(jìn)行一些調整,但這并不難。

    水平縮放。這是本項目中采用的方法。網(wǎng)關(guān)服務(wù)的多個(gè)實(shí)例(圖 17)在多個(gè) Raspberry Pi 設備上運行,請求由軟件負載平衡器分布在它們之間。所有客戶(hù)端請求都發(fā)送到運行負載均衡器的節點(diǎn)。

    15:可擴展性

    16:使用適配器進(jìn)行能力建設

    17:通過(guò)添加網(wǎng)關(guān)節點(diǎn)進(jìn)行能力建設

    使用水平擴展,理論上可以將大量 Raspberry Pi 節點(diǎn)添加到網(wǎng)關(guān)集群中,并實(shí)現非常高并發(fā)的藍牙設備支持。

    這里唯一需要注意的問(wèn)題是有一個(gè)負載平衡器概念,稱(chēng)為粘性。一旦建立了從網(wǎng)關(guān)節點(diǎn)之一到特定藍牙設備的藍牙連接,來(lái)自與該藍牙設備相關(guān)的客戶(hù)端的所有后續請求都必須由同一網(wǎng)關(guān)節點(diǎn)處理,因為它持有藍牙連接。

    18:作者制作的機架式樹(shù)莓派零瓦多節點(diǎn)解決方案

    HAProxy 負載均衡器對粘性有很好的支持,允許用戶(hù)配置行為。

    請輸入搜索關(guān)鍵字

    確定
    色鲁99热99re超碰精品_91精品一区二区三区无码吞精_亚洲国产欧洲综合997久久_一级a性色生活片久久无
  • <noframes id="6fok0"><bdo id="6fok0"><listing id="6fok0"></listing></bdo>
    <ruby id="6fok0"></ruby>

    <progress id="6fok0"></progress>
  • <progress id="6fok0"></progress>
    <ruby id="6fok0"><table id="6fok0"></table></ruby>
  • <progress id="6fok0"><u id="6fok0"><form id="6fok0"></form></u></progress>