mqttc語言
㈠ 如何使用JMeter測試基於MQTT協議的系統
首先你要知道什麼是b/s和c/s,他們中的s都是伺服器的意思,b是指瀏覽器,c是客戶端的意思,所以關於你說的web開發一般是指b/s的開發。如果是ajax則需要注意使用的瀏覽器
㈡ 學嵌入式linux需要先學什麼
韋東山:6000字長文告訴你如何學習嵌入式linux
鏈接:網頁鏈接
第1章 單片機和Linux的區別
1.1 有哪些產品使用單片機或Linux
所有的電子產品,所用技術都可以認為要麼是單片機,要麼是Linux;GUI方面主要是QT/Android,它們都是運行於Linux之上的。
下面我們用類比和邏輯推導出嵌入式Linux系統的組成,沒錯,「推導」。
從上圖可以知道:
① 組成:
嵌入式Linux系統
= bootloader + linux內核 + 根文件系統(裡面含有APP)。
② bootloader:
它的目的是啟動內核,去哪等讀內核?讀到哪裡?去Flash等外設讀內核,存到內存里去。所以需要有Flash里外設的驅動能力,為了調試方便還會有網路功能。
所以,可以認為 booloader = 裸機集合,它就是一個復雜的單片機程序。
③ Linux內核
Linux內核的最主要目的是去啟動APP,APP保存在哪裡?保存在「根文件系統」里。「根文件系統」又保存在哪裡?在Flash、SD卡等設備里,甚至可能在網路上。所以Linux內核要有這些Flash、SD卡里設備的驅動能力。
不僅如此,Linux內核還有進程調度能力、內存管理等功能。
所以:Linux內核 = 驅動集合 + 進程調度 + 內存管理等。
2.3 要學習bootloader嗎
Bootloader有很多種,常用的叫作u-boot。
在實際工作中,對於u-boot基本上是修修改改,甚至不改。但是u-boot本身是很復雜的,比如為了便於調試,它支持網路功能;有些內核是保存在FAT32分區里,於是它要能解析FAT32分區,讀FAT32分區的文件。
花那麼多精力去學習u-boot,但是工作中基本用不到,這對初學者很不友善。
所以,對於初學者,我建議:理解u-boot的作用、會使用u-boot的命令,這就可以了。
如果你的工作就是修改、完善bootloader,那麼再去研究它吧。
2.4 要學習Linux內核、要學習驅動程序嗎
之前我們說過Linux內核 = 驅動集合 + 進程調度 + 內存管理等,如果要學習Linux內核,從驅動程序入手是一個好辦法。
但是人人都要學習Linux內核、人人都要學習Linux驅動嗎?顯然不是。
作為初學者,懂幾個簡單的驅動程序,有利於工作交流;理解中斷、進程、線程的概念,無論是對驅動開發、應用程序開發,都是很有好處的。
所以對於初學者,建議前期只學習這幾個驅動:LED、按鍵、中斷。
① LED驅動程序:
這是最簡單的驅動程序。
② 按鍵驅動程序:
它也比較簡單,從它引入「中斷」。
③ 中斷:
從「中斷」它可以引入:休眠-喚醒、進程/線程、POLL機制、非同步通知等概念。這些概念無論是對驅動開發,還是對應用開發,都很重要。
所以,對於初學者,我建議必須學習這幾個驅動:LED、按鍵、中斷。
入門之後,如果你想從事內核開發、驅動開發,那麼可以去鑽研幾個驅動程序(輸入系統、I2C匯流排、SPI匯流排等),掌握若干個大型驅動程序後,你對內核的套路就有所了解了,再去研究其他部分(比如進程管理、文件系統)時你會發現套路是如此通用。
攝像頭(VL42)、音效卡ALSA驅動是Linux中比較復雜的2類驅動,它們是很難的,如果工作與此相關再去研究。
2.5,要學習Linux應用程序嗎?先學一些基礎技能
要學,即使以後你只想研究內核,一些基本的應用開發編寫能力也是需要的:
① 基本設備的訪問,比如LCD、輸入設備
② 進程、線程、進程通信、線程同步與互斥
③ 休眠-喚醒、POLL機制、信號
④ 網路編程
①②③部分的知識,跟驅動有密切的關系,它們是相輔相承的。
掌握了基本驅動開發能力、基本應用開發能力之後,在工作中你就可以跟別人友好溝通了,不至於一臉懵逼。
2.6,應用程序是怎麼啟動的?要了解一下根文件系統
你辛辛苦苦寫出了應用程序,怎麼把它放到板子上,讓它開機就自動啟動?
你寫的程序,它依賴於哪些庫,這些庫放到板子上哪個目錄?
怎麼做一個可升級的系統?即使升級中途斷電了,也要保證程序至少還可以運行老的版本?
這些都需要我們了解一下根文件系統。
先了解一下init進程:它要讀取配置文件,根據配置文件啟動各個APP。
了解了init進程,你就了解了根文件系統的組成,就可以隨心所欲裁剪系統,為你的項目製作出最精簡的系統。
第3章 學習方法
3.1,先不要打破砂鍋問到底
嵌入式涉及的東西太多太雜了,如果心裡沒有主線,碰到什麼都要去研究個透徹,最終反而忘記自己要學什麼了。
嵌入式涉及硬體知識、軟體知識,軟體里涉及匯編、ARM架構、c語言、Makefile、Shell;又分為bootloader、內核、驅動、基本的APP、GUI。
比如我們會用到Makefile,了解它的基本規則,會用我們提供的Makefile就可以。
不需要深入研究那些make函數,因為在工作中都有現成的Makefile給你使用,不需要自己去編寫一套Makefile。何必花上好幾天去深入研究它呢?
比如我們會用到bootloader,難道又要花上幾個月來深入研究u-boot嗎?工作中基本不需要改u-boot,會用那幾個命令就可以。
甚至有些學員先去買本shell的書來學習shell命令,何必?我們在視頻中用到什麼命令,你不懂時再去網路一下這些命令就可以了。
不要脫離初學者的主線:應用基礎、驅動基礎。有了這2個基礎後,你想深入研究某部分時,再去花時間吧。
3.2,思路要清晰,不怕抄代碼
視頻里的代碼,請你一定要自己去寫一次、寫多次。為什麼我現在寫驅動那麼熟?我2009年在華清遠見上課時,
每次上課我都要給學生寫一次那些驅動,十幾次下來閉著眼睛都知道內核的套路了。
記不住那些函數?我也記不住,我都是去參考同類的驅動程序,這又不是閉卷考試。
但是要理清楚思路,你寫這個程序要完成什麼功能、怎麼實現這些功能?這個要弄清楚。
有了思路後再寫代碼,不知道怎麼寫?沒關系,看看視頻,看看示例,然後關閉視頻看看能否自己寫出來。
3.3,對自己的方向很了解,我只能帶你到這里了
我的專長是操作系統,是快速地帶領大家掌握一些項目開發的基礎知識。
如果你決定深入研究某方面時,我並不能帶你多久。你要去看源碼,去看這方面的專業書籍。
比如想深入鑽研內核的內存管理時,它有頁表映射(你需要閱讀ARM架構的手冊)、SLAB分配器、vmalloc/malloc實現、mmap實現、缺頁中斷、父進程子進程之間的頁面管理等等,內容非常多。有時候連書籍都沒有,你需要直接啃代碼。
當你想從事某個行業時,就需要深入研究行業相關的知識。
比如CAN匯流排,它可以寫成一本書:CAN協議、CAN報文、Socket CAN、車身網路拓撲結構,CAN應用報文,CAN網路管理報文,CAN診斷報文。
想做物聯網網關,需要深入研究MQTT,MQTT協議相對簡單,但是MQTT英文原版協議有130多頁,中文版有近100頁,是一本小書了。
每個行業都有自己的業務邏輯,在掌握基本的編程能力之一,你需要結合具體的業務去深入學習。
-☆ END ☆-
㈢ 物聯網開發需要什麼技術呢
物聯網開發需要的技術
一:單片機/嵌入式開發
智能硬體,哎,不就是單片機嗎?說到底就是一個微控制器,現在出現的智能手錶,調光LED燈,藍牙開鎖,WiFi插座等等,說到底不就是單片機開發嘛?單片機,電子和通信專業一般都會教51或AVR、計算機系接觸不到。現在流行的Arino也是單片機開發的一種。
但是要做一款智能硬體,技術上只會單片機編程還是不行的。哎呀嘛什麼智能硬體,本質上就是一個電子產品!。所以你要開發一款能拿得出手的智能硬體,電子系統設計必須要會的!
二:網路通信協議
智能硬體與傳統的電子產品最大的差別,就是智能硬體連上了網路。要連上網路,就需要用到網路通信模塊及學習網路通信協議——TCP/IP。
TCP/IP是一個技術的總稱,裡麵包含兩種協議TCP、UDP,位於網路通信分層模型的傳輸層,同時也是由操作系統管理。而HTTP、DNS、URI等這些技術,屬於應用層,位於TCP/UDP之上。同樣,最近物聯網比較流行的,針對計算能力有限的通訊設備而出的MQTT協議,也屬於TCP之上。
為了讓電子產品有聯網的能力,只要在電路設計上給主控晶元連接一個通信模塊,寫好收發網路指令的代碼,剩下的就是電子產品設計了。
三:服務端開發框架
Client/Server架構,即客戶端/伺服器架構。智能硬體連上後台伺服器後,其就是一個客戶端,一個終端。由於單片機中資源受限,實際上是不太可能用HTTP協議的,所以互聯網中通用的Web伺服器開發並不適合這里。有的廠家會在TCP之上自定義協議,有的就移植別人做好的協議比如MQTT,CoAP等等。
服務端開發就比較復雜了。單片機/嵌入式軟體開發還好,只要學習好C語言即可打遍天下無敵手,而服務端開發,用Java呢還是python還是PHP?反正Java和Python選一個就好了,嵌入式出身的工程師,一般都會學Python。
Python伺服器端的開發框架種類繁多,Web開發的有Django、FlaskTornado WebServer,TCP伺服器可以用Twisted,等等。MQTT有已經做好的伺服器,像這樣的伺服器不用自己開發,直接部署即可。
㈣ 關於mosquitto怎麼用c語言實現消息的訂閱和發送(mqtt)
1.目標:測試Mosquitto使用MQTT協議發消息的相關性能指標,包含發送速度,並發負載能力,資源佔用,消息到達率。
2.MQTT協議簡介:
1).建立長連接。客戶端發起請求和服務端建立長連接,建立成功後,服務端會返回ACK(CONNACK)
2).客戶端訂閱:客戶端發起訂閱,訂閱成功後,服務端會返回ACK(SUBACK)
3).發消息:發布者會給服務端發消息,服務端在把消息給合適的客戶端。
Qos=0(服務質量):客戶端消息收到後,不會發出ACK給服務端(PUBACK)。
Qos =1:服務端會發ACK給發布者,客戶端收到消息後會發ACK給服務端。
4).取消訂閱:客戶端發起取消訂閱,服務端返回ACK(UNSUBACK)
5)Pingreq&Pingresp:客戶端和服務端會保持心跳。
3.存在問題:
1. 如何模擬出40W的用戶
2. 如何長連接,訂閱,發消息,取消訂閱,Pingreq行為如何實現。
4. python開源庫 Mosquitto.py,解決所有問題
1. 模擬40W用戶
a)可以使用虛擬機和Mosquitto.py實現,具體為:一般一台虛擬機最多是6W+的模擬數據(需要修改句柄數,我使用5W),方法是Client_id可以簡單的做出5W個來,然後調用Mosquitto裡面的connect方法,建立長連接。准備8台虛擬機就可以實現40W客戶端的模擬
2.行為的模擬
a)訂閱:Mosquitto.subscribe / 發消息:Mosquitto.publish / 取消訂閱:Mosquitto.unsubscribe。 簡單一句話 Mosquitto庫實現所有的行為.
5. 指標:發送速度,到達率,並發負載,資源佔用。
a. 發送速度:服務端日誌記錄,分析解決
b. 到達率: 1.客戶端記錄下收到消息,分析計算。2.計算服務端收到的PUBACK(客戶端收到消息返回的ACK),進行計算
c. 並發負載:5W 用戶不斷增加,注意觀察服務端的負載情況。
e.資源佔用:其實主要是cpu/mem/帶寬:cpu多核的話需要觀察top命令下的_id欄位, mem可以觀察free -h命令的剩餘mem, 帶寬可以使用mpstat進行觀察
6. 可以遇見問題:
a. 模擬客戶端的虛擬機需要修改句柄數才能支持5W的客戶端模擬數量
b. 要先吃透MQTT協議的流程,吃透了進行測試會非常的方便
c. Clear session,設置為true則不為客戶端保留休息,設置為false保留消息。其實就是客戶端離線後在連接上可以收到之前推出的消息。
㈤ 台達的PLC轉MQTT
台達的PLC一般是modbus的數據。可以用多比網關, 聯一下線就可以用了。也可以自行開發:市面上有支持MQTT協議的WIFI模塊,可以嵌到你們現在設置上,再做一些C語言的工作,就可以接入現有的IOT雲平台了。
㈥ 如何在windows上用C語言實現MQTT協議
C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言制定了一套完整的美國國家標准語法,稱為ANSI C,作為C語言最初的標准。 目前2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。
其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
㈦ apollo伺服器mqtt單片機怎麼往上發報文
MQTT+Mina的路過,我的思路是上行走http,下行接收走mqtt,以此實現A->B。 Publish包的消息體payload要進行擴展,你說的topic拓展我覺得意義不大
㈧ 掌握物聯網開發技術,未來究竟有多吃香
「只要有人的地方,就有物聯網技術。」我不清楚這句話的出處,我只知道有人的地方就有江湖~哈哈。我想說的是,「物聯網技術」這個名詞是一個很大很泛的概念,我可以說不存在這種技術,我也可以說這技術實際上就是當今電子、通信、計算機三大領域的基礎技術。
我在這問題下的回答「物聯網和互聯網的區別和聯系?」簡單闡明了物聯網和互聯網之間的關系。請問,1994年中國接入互聯網以來,我們作為互聯網原著居民的90後,認為互聯網技術又是一種怎樣的技術呢?
我就奇了怪了,當初教育局怎麼不開一個互聯網技術專業?實際上現在也沒必要開設互聯網專業了,當今大學的計算機系本科所學的大部分內容,就是互聯網會用到的技術。其中之一是Web建站技術。
Web 建站技術中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什麼? - 張秋怡的回答
什麼?你們計算機系不是學這些?來來來,我電腦壞了,過來幫我修一下電腦吧~
總之,互聯網是一個時代,物聯網,也是一個時代。物聯網技術是當今電子、通信、計算機、IT行業技術的大融合。如圖,物聯網技術的技術組成(簡單版)。
(。。。好像沒有什麼奇怪的啊?)
一二線城市早已實現了的公交卡,以及校園一卡通,用的就是RFID技術。RFID可讀可寫,所以公交卡、校園卡的錢能存在卡裡面。
NFC,也是RFID的技術一種,目前大部分手機都支持的NFC功能,手機取代公交卡真的是遲早的事。要是手機沒有NFC功能,也可以這么裝逼:
同樣,RFID開發也是離不開單片機開發,網上也有相關的RFID開發套件出售。
# 結語
當然,物聯網技術絕對不止以上五種,物聯網本身就是所有技術的大融合,做電子產品的還要考慮產品外殼,不過這是結構工程師的事情;做伺服器後台的還要考慮用戶帳號資料庫讀寫等,前端也要考慮如何把設備數據和操作方式優雅的展現給用戶看,這些是IT程序員的事情;電池技術也需要單方面突破,超小體積、超大容量,這個還得等待多時。
與其說物聯網是一種技術吧,不如說它是一個時代,物聯網通過對相關技術進行整合,形成一個時代的概念,是一個建立在技術基礎之上的時代。
㈨ MQTT和Websocket的區別是什麼
MQTT跟WebSocket關系不大。他們不是在一個層級的。
WebSocket很多網站使用輪詢實現推送技術。輪詢是在特定的的時間間隔(比如1秒),由瀏覽器對伺服器發出HTTP request,然後由伺服器返回最新的數據給瀏覽器。輪詢的缺點很明顯,瀏覽器需要不斷的向伺服器發出請求,然而HTTP請求的header是非常長的,而實際傳輸的數據可能很小,這就造成了帶寬和伺服器資源的浪費。
Comet使用了AJAX改進了輪詢,可以實現雙向通信。但是Comet依然需要發出請求,而且在Comet中,普遍採用了長鏈接,這也會大量消耗伺服器帶寬和資源。
於是,WebSocket協議應運而生。 瀏覽器通過 JavaScript 向伺服器發出建立 WebSocket 連接的請求,連接建立以後,客戶端和伺服器通過 TCP 連接直接交換數據。WebSocket 連接本質上是一個 TCP 連接。
WebSocket在數據傳輸的穩定性和數據傳輸量的大小方面,具有很大的性能優勢。Websocket.org 比較了輪詢和WebSocket的性能優勢:
HTTP 輪訓每次需要返回871個位元組,websocket每次只需要2個位元組
Use Case A: 1,000個客戶端每秒接受一個message,網路吞吐量 (2*1,000)=2,000 bytes = 16,000 每秒bits
Use Case B: 10,000個客戶端每秒接受一個message,網路吞吐量 (2*10,000)=20,000 bytes = 160,000 每秒bits
Use Case C: 100,000個客戶端每秒接受一個message,網路吞吐量 (2*100,000)=200,000 bytes = 1,600,000 每秒bits
MQTT 協議是為大量計算能力有限,且工作在低帶寬、不可靠的網路的遠程感測器和控制設備通訊而設計的協議,它具有以下主要的幾項特性:
非常小的通信開銷(最小的消息大小為 2 位元組),小型傳輸,開銷很小(固定長度的頭部是 2 位元組),協議交換最小化,以降低網路流量。
支持各種流行編程語言(包括 C,Java,Ruby,Python 等等)且易於使用的客戶端;
使用發布 / 訂閱消息模式,提供一對多的消息發布,解除應用程序耦合。
對負載內容屏蔽的消息傳輸。
使用 TCP/IP 提供網路連接。
有三種消息發布服務質量,讓消息能按需到達目的地,適應在不穩定工作的網路傳輸需求 :
"至多一次",消息發布完全依賴底層 TCP/IP 網路。會發生消息丟失或重復。這一級別可用於如下情況,環境感測器數據,丟失一次讀記錄無所謂,因為不久後還會有第二次發送。
"至少一次",確保消息到達,但消息重復可能會發生。
"只有一次",確保消息到達一次。這一級別可用於如下情況,在計費系統中,消息重復或丟失會導致不正確的結果。