自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)

物聯(lián)網(wǎng)
MQTT (Message Queuing Telemetry Transport)是一種輕量級(jí)的、基于發(fā)布/訂閱的消息傳輸協(xié)議,它可以在客戶端和服務(wù)器之間進(jìn)行雙向通信。MQTT被設(shè)計(jì)為適用于低帶寬、不穩(wěn)定網(wǎng)絡(luò)連接的物聯(lián)網(wǎng)設(shè)備通信。

??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

一、項(xiàng)目功能介紹

當(dāng)前基于MQTT協(xié)議設(shè)計(jì)了一個(gè)實(shí)時(shí)圖傳系統(tǒng),通過這個(gè)項(xiàng)目來演示,兩個(gè)MQTT設(shè)備如何互相訂閱,進(jìn)行消息流轉(zhuǎn)。 在阿里云服務(wù)器上創(chuàng)建2個(gè)設(shè)備,分為為設(shè)備A和設(shè)備B;設(shè)備A負(fù)責(zé)采集本地?cái)z像頭畫面上傳,設(shè)備B負(fù)責(zé)接收設(shè)備A上傳的數(shù)據(jù)然后解析顯示出來。在阿里云服務(wù)器上需要配置云產(chǎn)品流轉(zhuǎn),讓設(shè)備A的數(shù)據(jù)上傳后自動(dòng)發(fā)送給設(shè)備B。這樣就完成了視頻畫面數(shù)據(jù)的流轉(zhuǎn)。不過因?yàn)榘⒗镌频淖畲髷?shù)據(jù)限制,每次最大發(fā)送10240字節(jié)的數(shù)據(jù)。

當(dāng)前的項(xiàng)目是采用MQTT協(xié)議實(shí)現(xiàn),那么先來了解一下什么是MQTT協(xié)議。

軟件采用Qt設(shè)計(jì),QT版本是5.12.6

設(shè)備A的功能:獲取攝像頭的數(shù)據(jù)—》縮放成240*320—》編碼成JPEG格式—》轉(zhuǎn)碼成base64—》組合成MQTT報(bào)文—》上傳到服務(wù)器。

設(shè)備B的功能:訂閱設(shè)備A上傳的數(shù)據(jù),得到數(shù)據(jù)后解析出源格式數(shù)據(jù)—》將圖像畫面渲染顯示出來。

軟件運(yùn)行效果:

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

總結(jié)軟件運(yùn)行的體驗(yàn)效果:

(1) 非常流暢。兩個(gè)窗口肉眼感覺不到延遲。

(2)服務(wù)器不要錢。

這個(gè)方案驗(yàn)證之后,可以衍生出很多實(shí)際的例子了:
比如, 單片機(jī)+攝像頭+MQTT協(xié)議 也可以做為圖傳發(fā)送端。 聯(lián)網(wǎng)可以使用:WIFI或者4G模塊、5G模塊。

1、MQTT協(xié)議

MQTT (Message Queuing Telemetry Transport)是一種輕量級(jí)的、基于發(fā)布/訂閱的消息傳輸協(xié)議,它可以在客戶端和服務(wù)器之間進(jìn)行雙向通信。MQTT被設(shè)計(jì)為適用于低帶寬、不穩(wěn)定網(wǎng)絡(luò)連接的物聯(lián)網(wǎng)設(shè)備通信。

MQTT具有以下主要特點(diǎn):

(1)發(fā)布/訂閱模型:客戶端可以選擇訂閱一個(gè)或多個(gè)主題(topic),并接收與這些主題相關(guān)的消息;同時(shí),客戶端也可以發(fā)布消息到一個(gè)或多個(gè)主題上。

(2)輕量級(jí):MQTT的協(xié)議頭非常小,最小只有2字節(jié),這使得它非常適合于傳輸數(shù)據(jù)量較小的IoT設(shè)備。

(3)QoS(服務(wù)質(zhì)量)支持:MQTT支持三種不同的QoS級(jí)別,分別是“至多一次”、“至少一次”和“恰好一次”,可以根據(jù)應(yīng)用場(chǎng)景的需要進(jìn)行選擇。

(4)保留消息:MQTT服務(wù)器可以將最新的消息保留在主題中,并讓新的訂閱者能夠讀取先前發(fā)布的消息。

(5)遺囑消息:當(dāng)客戶端與服務(wù)器連接異常斷開時(shí),服務(wù)器可以向其他訂閱了該主題的客戶端發(fā)送遺囑消息,以實(shí)現(xiàn)更可靠的消息傳輸。

總之,MQTT是一種非常適合物聯(lián)網(wǎng)設(shè)備通信的協(xié)議,它具有輕量級(jí)、靈活性高、易于實(shí)現(xiàn)、可靠性強(qiáng)等優(yōu)點(diǎn),已經(jīng)被廣泛地應(yīng)用于各種物聯(lián)網(wǎng)場(chǎng)景中。

2、MQTT協(xié)議載體

MQTT協(xié)議是基于TCP協(xié)議傳輸報(bào)文的。MQTT使用TCP/IP協(xié)議棧來實(shí)現(xiàn)通信,因此它具有TCP協(xié)議的一些特性,如可靠性、流控制和建立持久連接等特點(diǎn)。

在MQTT連接建立時(shí),客戶端需要通過TCP連接到MQTT服務(wù)器,并進(jìn)行握手協(xié)商,包括協(xié)議版本、客戶端標(biāo)識(shí)符、遺囑消息、QoS級(jí)別等信息,以確保雙方能夠正確地交換數(shù)據(jù)。一旦握手成功,客戶端和服務(wù)器之間就建立了一個(gè)持久化的TCP連接,可以隨時(shí)進(jìn)行消息傳輸。

由于TCP協(xié)議本身已經(jīng)提供了一定程度的可靠性保證,因此MQTT協(xié)議只需要在TCP的基礎(chǔ)上實(shí)現(xiàn)發(fā)布/訂閱機(jī)制、QoS級(jí)別控制、保留消息等特性即可,從而使得它成為一種輕量級(jí)且高效的物聯(lián)網(wǎng)通信協(xié)議。

3、JSON里如何保存圖片數(shù)據(jù)?

在JSON中保存圖片數(shù)據(jù)通常需要將圖片轉(zhuǎn)換為二進(jìn)制數(shù)據(jù),并將其編碼成Base64字符串,然后將該字符串作為JSON對(duì)象的屬性值進(jìn)行傳輸。

Base64編碼是一種將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為ASCII字符的方法,它使用64個(gè)字符來表示任意序列的二進(jìn)制數(shù)據(jù)。Base64編碼后的數(shù)據(jù)長(zhǎng)度會(huì)比原始二進(jìn)制數(shù)據(jù)略長(zhǎng),但可以方便地被轉(zhuǎn)換為文本格式并在網(wǎng)絡(luò)上進(jìn)行傳輸。

以下是一個(gè)示例JSON對(duì)象,其中包含了一個(gè)Base64編碼后的圖片數(shù)據(jù):

{
"imageData": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBD...",
"imageName": "my_image.png"
}

在這個(gè)示例中,imageData屬性表示圖片數(shù)據(jù)的Base64編碼字符串,imageName屬性表示圖片文件名。在接收到JSON對(duì)象后,可以通過解碼Base64字符串并將其保存為二進(jìn)制數(shù)據(jù),再將其寫入磁盤或者顯示在應(yīng)用程序中。

需要注意的是,由于Base64編碼后的數(shù)據(jù)量相對(duì)較大,因此在實(shí)際應(yīng)用中,如果需要傳輸大量的圖片數(shù)據(jù),建議使用其他更適合的數(shù)據(jù)傳輸方式,如MQTT協(xié)議、WebSocket等。

4、MQTT協(xié)議最大能傳多少有效字節(jié)的數(shù)據(jù)?

MQTT協(xié)議本身沒有限制數(shù)據(jù)包的大小,但是它需要遵循底層傳輸協(xié)議(TCP/IP)的限制和約束。在實(shí)際應(yīng)用中,MQTT協(xié)議能夠傳輸?shù)挠行?shù)據(jù)量是受多種因素影響的,如網(wǎng)絡(luò)帶寬、QoS級(jí)別、MQTT消息頭部信息等。

一般來說,在默認(rèn)情況下,MQTT協(xié)議對(duì)于單個(gè)消息的有效載荷有一個(gè)限制,即不超過256MB。這個(gè)限制主要由MQTT協(xié)議的消息長(zhǎng)度字段決定,該字段的最大值是4字節(jié),因此最大能表示2^32-1個(gè)字節(jié)的消息長(zhǎng)度,即約為4GB。然而,在實(shí)際應(yīng)用中,由于網(wǎng)絡(luò)帶寬和設(shè)備性能等方面的限制,很難實(shí)現(xiàn)傳輸如此巨大的消息。

另外,需要注意的是,如果使用較高級(jí)別的QoS,如“至少一次”或“恰好一次”,則MQTT協(xié)議會(huì)對(duì)每條消息進(jìn)行確認(rèn)和重傳,這可能會(huì)導(dǎo)致更多的網(wǎng)絡(luò)流量和延遲。因此,在選擇QoS級(jí)別時(shí),需要根據(jù)應(yīng)用場(chǎng)景和網(wǎng)絡(luò)環(huán)境的實(shí)際情況進(jìn)行優(yōu)化和調(diào)整,以充分利用MQTT協(xié)議的特點(diǎn)和優(yōu)勢(shì)。

三、阿里云服務(wù)器創(chuàng)建

官網(wǎng)地址: ??https://iot.console.aliyun.com/lk/summary/new??

1、創(chuàng)建產(chǎn)品

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

2、添加設(shè)備

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

{
"ProductKey": "a12qAqNZg3i",
"DeviceName": "video_de1",
"DeviceSecret": "206a4bc03642930542a9bcb8925b9a0f"
}

創(chuàng)建完成。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

3、創(chuàng)建自定義屬性

在產(chǎn)品頁面的,找到功能定義。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

最大一次只能傳遞10KB。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

4、MQTT服務(wù)器地址和端口

關(guān)于MQTT協(xié)議登錄所需要的參數(shù)官方說明文檔: https://help.aliyun.com/document_detail/140507.html?spm=a2c4g.11186623.6.571.1e417544OGPj2y。

阿里云物聯(lián)網(wǎng)服務(wù)器的域名規(guī)則如下:

物聯(lián)網(wǎng)平臺(tái)的域名格式為:productKey.iot-as-mqtt.cn-shanghai.aliyuncs.com,其中productKey是您在物聯(lián)網(wǎng)平臺(tái)上創(chuàng)建的產(chǎn)品的標(biāo)識(shí)符,cn-shanghai表示物聯(lián)網(wǎng)服務(wù)器所在的地區(qū)。

MQTT協(xié)議的域名格式為:productKey.iot-as-mqtt.cn-shanghai.aliyuncs.com,其中productKey是您在物聯(lián)網(wǎng)平臺(tái)上創(chuàng)建的產(chǎn)品的標(biāo)識(shí)符,cn-shanghai表示物聯(lián)網(wǎng)服務(wù)器所在的地區(qū)。

HTTPS協(xié)議的域名格式為:productKey.iot-as-http.cn-shanghai.aliyuncs.com,其中productKey是您在物聯(lián)網(wǎng)平臺(tái)上創(chuàng)建的產(chǎn)品的標(biāo)識(shí)符,cn-shanghai表示物聯(lián)網(wǎng)服務(wù)器所在的地區(qū)。

需要注意的是,以上的域名規(guī)則中,productKey需要替換成你在物聯(lián)網(wǎng)平臺(tái)上創(chuàng)建產(chǎn)品時(shí)生成的實(shí)際productKey。
下面是阿里云國(guó)內(nèi)的服務(wù)器地域和可用區(qū)詳情:

地域名稱 所在城市 Region ID 可用區(qū)數(shù)量
華北 1 青島 cn-qingdao 2
華北 2 北京 cn-beijing 10
華北 3 張家口 cn-zhangjiakou 3
華北 5 呼和浩特 cn-huhehaote 2
華北 6 烏蘭察布 cn-wulanchabu 3
華東 1 杭州 cn-hangzhou 8
華東 2 上海 cn-shanghai 8
華南 1 深圳 cn-shenzhen 6
華南 2 河源 cn-heyuan 2
華南 3 廣州 cn-guangzhou 2
西南 1 成都 cn-chengdu 2
端口號(hào)是:1883
我的設(shè)備參數(shù):
{
"ProductKey": "a12qAqNZg3i",
"DeviceName": "video_de1",
"DeviceSecret": "206a4bc03642930542a9bcb8925b9a0f"
}
經(jīng)過上面的格式解釋,我的阿里云服務(wù)器登錄的域名就是(選擇的是上海服務(wù)器)
a12qAqNZg3i.iot-as-mqtt.cn-shanghai.aliyuncs.com

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

解析域名對(duì)應(yīng)的IP地址:

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

Microsoft Windows [版本 10.0.19044.2604]
(c) Microsoft Corporation。保留所有權(quán)利。

C:\Users\11266>ping a12qAqNZg3i.iot-as-mqtt.cn-shanghai.aliyuncs.com

正在 Ping vpc-sh-prod.mqtt.iotgds.aliyuncs.com.gds.alibabadns.com [47.103.191.238] 具有 32 字節(jié)的數(shù)據(jù):
來自 47.103.191.238 的回復(fù): 字節(jié)=32 時(shí)間=40ms TTL=88
來自 47.103.191.238 的回復(fù): 字節(jié)=32 時(shí)間=40ms TTL=88
來自 47.103.191.238 的回復(fù): 字節(jié)=32 時(shí)間=40ms TTL=88
來自 47.103.191.238 的回復(fù): 字節(jié)=32 時(shí)間=40ms TTL=88

47.103.191.238 Ping 統(tǒng)計(jì)信息:
數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計(jì)時(shí)間(以毫秒為單位):
最短 = 40ms,最長(zhǎng) = 40ms,平均 = 40ms

C:\Users\11266>

5、MQTT三元組格式

下載三元組生成小工具:https://help.aliyun.com/document_detail/292635.htm?spm=a2c4g.11186623.0.0.5aaf635b3zgveM#section-jx3-u57-pmm。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

打開生成工具:

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

生成MQTT登錄的密匙: 填入的參數(shù)就是前面創(chuàng)建設(shè)備得到信息。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

mqttClientId: 
video_de1|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|

username:
video_de1&a12qAqNZg3i

password:
02F7190BE8C33C1A8009EDBAF824BFDC6784FC67

6、主題發(fā)布與訂閱的格式

在產(chǎn)品頁面可以看到主題格式: https://iot.console.aliyun.com/product/productDetail/a1cMlEwEwjg/func?current=2。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

總結(jié):

發(fā)布主題:
/sys/a12qAqNZg3i/video_de1/thing/event/property/post
上報(bào)屬性消息的格式:
{"method":"thing.event.property.post","params":{"image":"1234567890"}}

訂閱主題:
/sys/a12qAqNZg3i/video_de1/thing/service/property/set

7、MQTT設(shè)備登錄

利用MQTT客戶端完成設(shè)備登錄測(cè)試。

IP地址:47.103.191.238
端口號(hào):1883
mqttClientId: video_de1|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|
username: video_de1&a12qAqNZg3i
password: 02F7190BE8C33C1A8009EDBAF824BFDC6784FC67
發(fā)布主題:
/sys/a12qAqNZg3i/video_de1/thing/event/property/post
上報(bào)屬性消息的格式:
{"method":"thing.event.property.post","params":{"image":"1234567890"}}

訂閱主題:
/sys/a12qAqNZg3i/video_de1/thing/service/property/set

對(duì)號(hào)入座填入?yún)?shù),測(cè)試主題訂閱,主題發(fā)布:

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

數(shù)據(jù)接收成功:

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

到此服務(wù)器創(chuàng)建成功。

8、繼續(xù)創(chuàng)建設(shè)備2

監(jiān)控設(shè)備有兩個(gè),1個(gè)設(shè)備為攝像頭圖片發(fā)送端,一個(gè)設(shè)備是圖片接收顯示端。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

{
"ProductKey": "a12qAqNZg3i",
"DeviceName": "video_dev2",
"DeviceSecret": "30ebb8ffc4316fbe957fcfb13bdaec01"
}

創(chuàng)建成功。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

接下來生成設(shè)備2的MQTT三元組密匙,和前面一樣的方法。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

mqttClientId: 
video_dev2|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|

username:
video_dev2&a12qAqNZg3i

password:
15D2C020586E165E6A35BB2FA4DEB9DD59F3E73E

參數(shù)總結(jié):

IP地址:47.103.191.238
端口號(hào):1883
mqttClientId: video_dev2|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|
username: video_dev2&a12qAqNZg3i
password: 15D2C020586E165E6A35BB2FA4DEB9DD59F3E73E
發(fā)布主題:
/sys/a12qAqNZg3i/video_dev2/thing/event/property/post
上報(bào)屬性消息的格式:
{"method":"thing.event.property.post","params":{"image":"abcdefg"}}
訂閱主題:
/sys/a12qAqNZg3i/video_dev2/thing/service/property/set

四、云產(chǎn)品流轉(zhuǎn)

1、創(chuàng)建解析器

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

創(chuàng)建完成。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

2、創(chuàng)建規(guī)則

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

添加主題:

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

設(shè)置數(shù)據(jù)目的:

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

編寫解析器腳本:

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

幫助文檔地址:https://help.aliyun.com/document_detail/270937.html。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

下面編寫代碼,獲取設(shè)備1上傳的數(shù)據(jù),轉(zhuǎn)發(fā)給設(shè)備2。

//通過payload函數(shù),獲取設(shè)備上報(bào)的消息內(nèi)容,并按照J(rèn)SON格式轉(zhuǎn)換。
var data = payload("json");
//直接流轉(zhuǎn)物模型上報(bào)數(shù)據(jù)。
writeIotTopic(1000, "/a12qAqNZg3i/video_dev2/user/get", data)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

寫好解析器就發(fā)布。

在云產(chǎn)品流轉(zhuǎn)的首頁啟動(dòng)解析器。

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

3、測(cè)試兩個(gè)設(shè)備的訂閱

設(shè)備1的參數(shù):

IP地址:47.103.191.238
端口號(hào):1883
mqttClientId: video_de1|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|
username: video_de1&a12qAqNZg3i
password: 02F7190BE8C33C1A8009EDBAF824BFDC6784FC67

設(shè)備1發(fā)布主題:
主題格式:/a12qAqNZg3i/video_de1/user/update
數(shù)據(jù)內(nèi)容:{"method":"thing.event.property.post","params":{"image":"1234567890"}}

設(shè)備2的參數(shù):

IP地址:47.103.191.238
端口號(hào):1883
mqttClientId: video_dev2|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|
username: video_dev2&a12qAqNZg3i
password: 15D2C020586E165E6A35BB2FA4DEB9DD59F3E73E

設(shè)備2訂閱主題:
主題格式:/a12qAqNZg3i/video_dev2/user/get

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

五、項(xiàng)目開發(fā)

1、base64轉(zhuǎn)碼實(shí)現(xiàn)

攝像頭采集圖像數(shù)據(jù)之后會(huì)編碼 成base64格式的字符串,再通過MQTT協(xié)議上傳到物聯(lián)網(wǎng)服務(wù)器。 下面就是base64的實(shí)現(xiàn)代碼。

const char * base64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

//進(jìn)行base64編碼
//bindata:進(jìn)行編碼的圖片數(shù)據(jù)
//base64:轉(zhuǎn)換后的base64編碼
//binlength:圖片大小
char * base64_encode( u8 * bindata, char * base64, u32 binlength )
{
u32 i, j;
u8 current;

for ( i = 0, j = 0 ; i < binlength ; i += 3 )
{
current = (bindata[i] >> 2) ;
current &= (u8)0x3F;
base64[j++] = base64char[(int)current];

current = ( (u8)(bindata[i] << 4 ) ) & ( (u8)0x30 ) ;
if ( i + 1 >= binlength )
{
base64[j++] = base64char[(int)current];
base64[j++] = '=';
base64[j++] = '=';
break;
}
current |= ( (u8)(bindata[i+1] >> 4) ) & ( (u8) 0x0F );
base64[j++] = base64char[(int)current];

current = ( (u8)(bindata[i+1] << 2) ) & ( (u8)0x3C ) ;
if ( i + 2 >= binlength )
{
base64[j++] = base64char[(int)current];
base64[j++] = '=';
break;
}
current |= ( (u8)(bindata[i+2] >> 6) ) & ( (u8) 0x03 );
base64[j++] = base64char[(int)current];

current = ( (u8)bindata[i+2] ) & ( (u8)0x3F ) ;
base64[j++] = base64char[(int)current];
}
base64[j] = '\0';
return base64;
}

//解碼base64
//base64:base64編碼
//bindata:圖片數(shù)據(jù)
int base64_decode( const char * base64, u8 * bindata )
{
u32 i, j;
u8 k;
u8 temp[4];
for ( i = 0, j = 0; base64[i] != '\0' ; i += 4 )
{
memset( temp, 0xFF, sizeof(temp) );
for ( k = 0 ; k < 64 ; k ++ )
{
if ( base64char[k] == base64[i] )
temp[0]= k;
}
for ( k = 0 ; k < 64 ; k ++ )
{
if ( base64char[k] == base64[i+1] )
temp[1]= k;
}
for ( k = 0 ; k < 64 ; k ++ )
{
if ( base64char[k] == base64[i+2] )
temp[2]= k;
}
for ( k = 0 ; k < 64 ; k ++ )
{
if ( base64char[k] == base64[i+3] )
temp[3]= k;
}

bindata[j++] = ((u8)(((u8)(temp[0] << 2))&0xFC)) |
((u8)((u8)(temp[1]>>4)&0x03));
if ( base64[i+2] == '=' )
break;

bindata[j++] = ((u8)(((u8)(temp[1] << 4))&0xF0)) |
((u8)((u8)(temp[2]>>2)&0x0F));
if ( base64[i+3] == '=' )
break;

bindata[j++] = ((u8)(((u8)(temp[2] << 6))&0xF0)) |
((u8)(temp[3]&0x3F));
}
return j;
}

2、軟件設(shè)計(jì)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

3、運(yùn)行效果

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

 #創(chuàng)作者激勵(lì)#采用MQTT協(xié)議設(shè)計(jì)的實(shí)時(shí)圖傳系統(tǒng)(阿里云)-開源基礎(chǔ)軟件社區(qū)

文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載:

 https://ost.51cto.com/resource/2571

??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

責(zé)任編輯:jianghua 來源: 51CTO 開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2020-11-18 11:36:35

鴻蒙系統(tǒng)

2020-12-07 12:47:22

MQTT鴻蒙hi3861

2022-09-26 11:30:40

MQTT協(xié)議客戶端協(xié)議

2024-03-26 11:52:13

2022-06-27 10:41:45

MQTT物聯(lián)網(wǎng)協(xié)議

2022-02-09 19:45:41

MQTTOpenHarmon鴻蒙

2023-04-03 13:13:13

2022-05-17 11:06:52

車聯(lián)網(wǎng)通信協(xié)議MQTT

2020-11-17 08:59:28

MQTT

2018-08-17 06:13:16

物聯(lián)網(wǎng)協(xié)議MQTTMQTT-SN

2015-05-27 11:05:46

阿里云陌陌CDN

2019-07-30 09:02:45

工業(yè)物聯(lián)網(wǎng)MQTTSSL

2013-01-04 11:07:25

馬云阿里云OS手機(jī)硬件

2010-09-26 11:03:37

雙向圖傳通信系統(tǒng)

2024-01-12 07:46:07

MQTT協(xié)議物聯(lián)網(wǎng)應(yīng)用.NET

2022-02-25 07:34:36

MQTT協(xié)議RabbitMQ

2023-03-20 16:16:40

MQTT傳輸協(xié)議

2023-10-12 19:37:50

通信協(xié)議HTTP

2015-06-24 14:14:49

阿里云金融云浙江網(wǎng)商銀行

2023-10-08 07:33:24

Presto數(shù)據(jù)分析
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)