為何寫作本書幾年前我作為一名嵌入式工程師參與了一個關于低功耗車載終端的研發(fā)項目,該低功耗車載終端中包含一個GPS模塊和一個GPRS(2G)模塊,工程師們希望通過最少的能量消耗把終端的GPS坐標上傳至Web服務器中。雖然需求直截了當,但是在開發(fā)的過程中卻出現(xiàn)了各種各樣的分歧。例如傳輸協(xié)議采用UDP還是TCP,有的工程師認為UDP沒有連接過程,傳輸時間更短,有的工程師認為TCP更加可靠而UDP也許會出現(xiàn)“丟包”現(xiàn)象。經(jīng)過多次爭論最終選擇了UDP傳輸加自定義重傳的方式。所謂自定義重傳,就是車載終端把相同的數(shù)據(jù)包按照一定的時間間隔連續(xù)傳輸三次,每個數(shù)據(jù)包都包含一個遞增的子序號,服務器通過子序號來剔除重復內(nèi)容。通過增加這種容錯機制似乎解決了UDP的“缺陷”,但是由于終端設備采用單向傳輸方式,并不要求服務器返回響應,所以終端根本不知道它上傳的數(shù)據(jù)是否被正確處理。
在項目開發(fā)的過程中,工程師們在終端設備與Web平臺的銜接方式的選擇上也出現(xiàn)了不少分歧。在定制應用層協(xié)議時嵌入式工程師更喜歡二進制協(xié)議,但對于Web開發(fā)工程師來說JSON和XML才是他們所擅長的內(nèi)容。因此,Web開發(fā)工程師單獨做了一個UDP套接字服務,使終端設備可以把二進制內(nèi)容轉(zhuǎn)化為JSON格式的數(shù)據(jù)包,再把這個JSON數(shù)據(jù)包“POST”到一個HTTP服務器。此時對于Web開發(fā)工程師來說,設備其實是在提交表單。
經(jīng)過工程師們的不斷努力,這個低功耗車載終端如期完成。但是項目完成之后我不禁思考:這個項目是不是可以做得更好一點,是不是可以打破嵌入式工程師和Web開發(fā)工程師的技術鴻溝,是不是有更好的應用協(xié)議可以滿足項目需求,是不是低功耗終端也可以提交表單?查閱了眾多資料之后,我找到了CoAP。
回想碩士畢業(yè)之后我“執(zhí)著”地成為一名專注于物聯(lián)網(wǎng)的軟件工程師,而我本科和碩士的專業(yè)都與機械工程相關。與其他計算機或電子專業(yè)不同,機械工程特別強調(diào)規(guī)范和標準,所以設計過程必須嚴格遵守規(guī)范。雖然表面上這顯得異常死板,但是這種規(guī)范卻大大提高了系統(tǒng)的互換性,節(jié)約了開發(fā)成本。在這種理念的指導下,我總是先尋找標準解決方案而不是隨時隨地準備“造輪子”。CoAP是一個由IETF(Internet Engineering Task Force,互聯(lián)網(wǎng)工程任務組)組織編寫的面向低功耗設備的物聯(lián)網(wǎng)應用層協(xié)議,協(xié)議編號為RFC 7252。我非常高興找到了應用“標準”,而不是又找到了一組“輪子”。
CoAP有很多優(yōu)點,而這些優(yōu)點正好可以解決上文提到的低功耗車載終端所遇到的問題:1)CoAP傳輸層協(xié)議采用UDP,對于終端來說UDP的確可以減少一部分能耗。
2)CoAP采用請求/響應工作模式,當終端設備發(fā)送CoAP請求之后,服務器將返回響應碼,終端通過響應碼可以判斷服務器的處理結(jié)果。
3)CoAP包含重傳機制,不用再重新設計重傳方法。
4)CoAP參考了HTTP的大量成功經(jīng)驗,如CoAP請求方法、CoAP選項定義和CoAP響應碼等,所以Web開發(fā)工程師也可以非常容易地掌握CoAP。
CoAP可以幫助低功耗智能終端接入網(wǎng)絡,通過這種標準協(xié)議也可以降低物聯(lián)網(wǎng)系統(tǒng)的開發(fā)難度,尤其可降低物聯(lián)網(wǎng)Web平臺的開發(fā)難度。對于應用CoAP的終端設備來說,同樣會遵守REST標準,使用類似的資源描述方法,使用相同的請求方法,應用相同的JSON數(shù)據(jù)包。對于物聯(lián)網(wǎng)Web平臺來說,處理一次終端設備的數(shù)據(jù)上傳和處理一次Ajax表單提交同樣容易。
我個人喜歡閱讀技術圖書,通過閱讀圖書可以系統(tǒng)地掌握一門新技術,我也希望本書可以幫助讀者熟練掌握CoAP,并把它應用于物聯(lián)網(wǎng)系統(tǒng)中。
目標讀者本書適合物聯(lián)網(wǎng)愛好者、嵌入式工程師和Web開發(fā)工程師。
對于物聯(lián)網(wǎng)愛好者而言,本書的示例可以讓你更快地熟悉物聯(lián)網(wǎng)系統(tǒng)。本書包括很多與物聯(lián)網(wǎng)系統(tǒng)相關的基礎知識,通過這些基礎知識的學習可以加深你對物聯(lián)網(wǎng)系統(tǒng)的理解。通過本書中的多個動手示例,你可以掌握物聯(lián)網(wǎng)系統(tǒng)的調(diào)試方法。
對于嵌入式工程師而言,本書可以幫助你從不同角度了解低功耗設備如何連接網(wǎng)絡。通過CoAP的學習可以從另一個角度熟悉HTTP。CoAP和HTTP都是設備連接網(wǎng)絡的常見手段。
對于Web開發(fā)工程師而言,可以從另一個角度了解設備如何提交“表單”,通過學習CoAP你會發(fā)現(xiàn)低功耗終端設備也可以很流暢地接入系統(tǒng),而不需要做多余的協(xié)議轉(zhuǎn)換。
如何閱讀本書本書的主要內(nèi)容大致分為三部分:第一部分:第1~3章。第1章介紹與物聯(lián)網(wǎng)應用直接相關的各種協(xié)議,這些協(xié)議包括IP、6LoWPAN協(xié)議、IEEE 802.15.4協(xié)議、HTTP、MQTT協(xié)議和CoAP等;第2章介紹與物聯(lián)網(wǎng)應用相關的開源硬件Arduino和樹莓派,無論是Arduino還是樹莓派都是開源硬件領域的“明星產(chǎn)品”,在這些硬件平臺上可以快速實現(xiàn)CoAP;第3章與前面兩章不同,該章通過多個示例詳細介紹與CoAP息息相關的網(wǎng)絡協(xié)議—IP、UDP、TCP和HTTP,掌握這些協(xié)議是學習CoAP的基礎。
第二部分:第4~8章。在第4章中先通過一個簡潔示例讓讀者對CoAP有一個大致的了解,該示例包含CoAP客戶端和CoAP服務器兩個部分,CoAP服務器使用Arduino UNO實現(xiàn),通過一個安裝了Copper插件的Firefox瀏覽器便可訪問該CoAP服
徐凱,感知科技動產(chǎn)管理(上海)有限公司嵌入式軟件工程師研發(fā)主管。專注于物聯(lián)網(wǎng)領域,擅長低功耗無線傳感網(wǎng)、6LoWPAN、物聯(lián)網(wǎng)應用層協(xié)議CoAP、MQTT、對物聯(lián)網(wǎng)操作系統(tǒng)contiki有深入理解。