當前位置: 華文星空 > 知識

物聯網技術到底是什麽技術?物聯網工程到底是學什麽的啊?

2016-08-29知識

物聯網技術到底是什麽技術?物聯網工程到底是學什麽的啊?

最近聽到一句話「只要有人的地方,就有物聯網技術」。據說有開設這個專業的大學,就想知道這個專業到底是學什麽的?

==================================================================

「只要有人的地方,就有物聯網技術。」我不清楚這句話的出處,我只知道有人的地方就有江湖~哈哈。我想說的是,「物聯網技術」這個名詞是一個很大很泛的概念,我可以說不存在這種技術,我也可以說這技術實際上就是當今電子、通訊、電腦三大領域的基礎技術。

我在這問題下的回答「

物聯網和互聯網的區別和聯系?

」簡單闡明了物聯網和互聯網之間的關系。請問,1994年中國接入互聯網以來,我們作為互聯網原著居民的90後,認為 互聯網技術又是一種怎樣的技術呢 ?

我就奇了怪了,當初教育局怎麽不開一個互聯網技術專業?實際上現在也沒必要開設互聯網專業了,當今大學的 電腦系 本科所學的大部份內容,就是互聯網會用到的技術。其中之一是 Web建站技術

Web 建站技術中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什麽? - 張秋怡的回答

什麽?你們電腦系不是學這些?來來來,我電腦壞了,過來幫我修一下電腦吧~

總之,互聯網是一個時代,物聯網,也是一個時代。物聯網技術是當今電子、通訊、電腦、IT行業技術的大融合。如圖,物聯網技術的技術組成(簡單版)。



# 物聯網技術之一: 微控制器/嵌入式開發

智能硬件,哎,不就是微控制器嗎?說到底就是一個微控制器,現在出現的智能手錶,調光LED燈,藍芽開鎖,WiFi插座等等,說到底不就是微控制器開發嘛?微控制器,電子和通訊專業一般都會教51或AVR、電腦系接觸不到。現在流行的Arduino也是微控制器開發的一種。

但是要做一款智能硬件,技術上 只會微控制器編程還是不行的 。哎呀嘛什麽智能硬件,本質上就是一個 電子產品 !。所以你要開發一款能拿得出手的智能硬件, 電子系統設計 必須要會的!

電子系統設計(

電子系統設計與實踐 (豆瓣)

),我不是指【電子系統設計】這本書裏的內容,而是一個動手實驗過程。要做智能硬件,廣看書沒用,只會微控制器編程也不夠的! 真正有用的是一個實打實的課程設計,或者一個專案經歷。 一個電子系統設計流程一般是這樣的:

硬件設計階段:

  • MCU選擇
  • 電路設計(電路圖)
  • 驗證電路(麪包板、萬用板)
  • 電路板設計(PCB圖)
  • 送工廠打板或自己做板
  • 元器件、物料管理(采購等)
  • 拿到電路板後
  • 焊接芯片和元器件
  • 上電測試
  • 燒寫最後版本的程式碼到芯片裏
  • 如果你熟悉以上硬件設計階段,並知道要做什麽事情,已經是一個合格的微控制器硬件工程師了哈~接下來就是微控制器軟件工程師的事情了,微控制器軟件一般都不會太復雜,有的還是不用上作業系統的裸機開發,做過微控制器課程設計的學生都懂。

    軟件設計流程:

  • 確定軟件架構(主迴圈?狀態機輪詢?)
  • 編寫軟件
  • 偵錯程式碼(開發板或自己搭建好的電路)
  • 燒寫最終版本的程式碼到電路裏
  • 這些都不算復雜了,如果你用的芯片高級一點,不是微控制器而是微處理器的話,那麽就是 嵌入式開發 了。

    如圖是ARM芯片架構系列。

    一般網上STM32開發板的芯片是STM32F103,也就是Cortex-M3核,還算是微控制器開發,如果外設沒有太多功能,微控制器想用更小巧一點的,可以選用M0核的芯片,名副其實的微控制器了。如果使用Cortex-A9開發,你這是要開發手機還是機頂盒(黑人問號)?

    Cortex-A系列芯片的開發,或者說這類產品,一般一個人不可能獨立完成所有工作,這種嵌入式開發的技術最少分為四個層次: 硬件層 驅動層 系統層 套用層 。每一層次都需要有人去設計。驅動和系統可以移植,硬件電路板肯定要專門的硬件工程師去做的,套用層可以交給套用工程師, 只要上了Linux系統,不也就是Linux套用開發嘛? 如果去網上買回來的嵌入式開發板,能拿得出手的專案只能套用層開發,比如什麽「數碼相框系統」、「影片點播系統」。別告訴我學會移植uboot或Linux就可以找工作了。



    # 物聯網技術之二: 網絡通訊協定

    智能硬件與傳統的電子產品最大的差別,就是智能硬件連上了網絡。要連上網絡,就需要用到網絡通訊模組及學習網絡通訊協定—— 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

    Flask

    Tornado Web Server

    ,TCP伺服器可以用

    Twisted

    ,等等。MQTT有已經做好的伺服器,像這樣的伺服器不用自己開發,直接部署即可。

    如圖,這是我開發一個智能硬件的伺服器端的框架圖。使用

    Redis

    作為HTTP和TCP伺服器的數據共享記憶體,TCP Server收到的硬件端Client數據都存放到Redis裏,使用者端透過HTTP Server伺服器,從Redis裏獲取硬件端的數據,然後展示到Web端或手機端上;如果使用者端需要控制硬件,給HTTP伺服器發送請求,然後Flask發送指令到Redis,Twisted從Redis收到指令後,就會給對應的硬件端發送指令,最後硬件執行響應的操作。

    在這個專案開發中,最少需要開發使用者端的 HTTP伺服端 和硬件端的 TCP伺服器 。Flask和Twisted都可以說是互聯網技術裏的伺服端開發技術,現在我把這兩個技術框架拿過來一用,是不是也算物聯網技術? 物聯網技術本身就是在現有成熟的技術上發展而來的。

    到了這裏,伺服端開發和前面兩個技術可以作為一個分層,前面的微控制器/嵌入式和網絡通訊的開發可以算作是一個電子器材的開發,後台工程師只要拿到了這個電子器材, 知道這個器材提供了哪些 介面 (API),就可以進行後台開發了 ——把器材連上網絡,分配給它一個IP或者什麽的,配置好介面及相關操作,剩下的事情就交給前端了。

    ## 關於前端技術

    關於前端技術,我這裏不好單獨寫一個主題,其一,我對前端技術沒有那麽熟悉,還處於前端技術=HTML+JavaScript+CCS的概念,以及手機端的APP開發;其二,前端技術與電子硬件技術間隔相差太遠,前端更多的是和美工溝通,和後台協調,和設計師交流,甚至可能還需要有一定的美感;其三,大部份專案的最重要的是實作 器材的穩定性、聯網、數據的獲取和控制 。如果器材不穩定,數據出現差錯,沒法控制,再漂亮的前端頁面也沒用。其四,如果是做智能家居,做消費電子領域的專案,針對廣大普通消費者,比如WiFi插座,一個漂亮的界面是很重要,但是大多數的物聯網專案,只需要一個後台管理界面就行了。

    所以,沒有前端的設計,界面都是很醜咯!



    # 物聯網技術之四: 無線自組網

    無線自組網,或稱無線傳感網絡,這肯定是物聯網專業的學生要學的一門學科,屬於通訊領域,電子、電腦出身的人對這沒有太多的概念。無線自組網最典型的技術之一是, ZigBee

    什麽是自組網?做個對比,比如我們的WiFi,我們要用手機去連一個SSID,輸入密碼才能連上WiFi,而且你的手機,一般來說也不可能再發射Wifi出去讓其他手機連線,WiFi網絡拓撲成 星型網

    而自組網不一樣,不需要使用者輸入使用者名稱和密碼,直接連到最近的一個自組網器材,最後自組網器材也可以作為一個中間節點,讓下一級的器材連線進來,網絡拓撲可以成 星型網 簇型網 網型網 。那麽無線自組網的數據怎麽流動呢?流去哪?無線自組網一般都會有一個數據匯聚的地方,這個地方就是 閘道器

    但是ZigBee並沒有連上互聯網啊,它最多只是一個區域網路!——這還不簡單?這是就是閘道器要處理的事情了。而且,ZigBee協定棧 Z-Stack 是有Linux閘道器版本的。

    Z-Stack - ZigBee 協定棧

    不過呢,由於各種原因,ZigBee開始走下坡路了,最新的 6LoWPAN 會逐漸替代。6LoWPAN,是一種低功耗的無線網狀網絡,其中每個節點都有自己的 IPv6 地址,允許其使用開放標準直接連線到互聯網。Zigbee使用網內專用地址,互聯網主機無法存取。整合 Ipv6/6LoWPAN 堆疊的開源作業系統

    Contiki

    也會逐步取代Z-Stack。

    如果大學開設了無線自組網的課程,不是學習ZigBee的Z-Stack就是Contiki。使用無線自組網也並不是一個單獨的開發過程,其技術需要結合微控制器/嵌入式開發。

    ## 電源問題

    是的,如果要用無線自組網,電池續航的能力是一個問題。如果是類似與WiFi插座、智能飲水機、智能風扇等等,接上市電就能用,這些電源都不是問題。而對於無線自組網,往大的方向說就是所有的便攜式智能器材,都受限於電池續航能力,比如智能手錶,運動手環。不過呢,突破電池技術並不是物聯網開發者所需要做的工作,我們能做的, 只能是挑選更低功耗的芯片,設計電路功耗更低一點,讓微控制器休眠並使用中斷喚醒機制 。

    圖,用水果電池供電的某430微控制器系統。



    # 物聯網技術之五: RFID

    仔細觀察上面那張無線技術的圖,最右邊,NFC/RFID。嗯,對,RFID, 非接觸射頻辨識 ,也是物聯網技術重中之重的技術,很多物聯網書籍都會介紹RFID,搞得很多人以為RFID就是物聯網。

    介紹RFID前先簡單說一下條形碼。去超市購物的時候,收銀員把掃描槍對準上面的條形碼掃一掃,商品資訊和價格就錄入到電腦裏了。條形碼替代了收銀員手動輸入數據,工作效率提高了幾倍。

    可是,進入21世紀後,條形碼已經不能滿足人們的需求,儲存能力小、工作距離近、穿透能力弱、不能寫操作等等都是條形碼的缺點。這個時候就出現了RFID技術。典型套用如下圖:

    (。。。好像沒有什麽奇怪的啊?)

    一二線城市早已實作了的公交卡,以及校園一卡通,用的就是RFID技術。RFID可讀可寫,所以公交卡、校園卡的錢能存在卡裏面。

    NFC,也是RFID的技術一種,目前大部份手機都支持的NFC功能,手機取代公交卡真的是遲早的事。要是手機沒有NFC功能,也可以這麽裝逼:

    上班,在地鐵裏碰到同事。
    我看他用手機刷卡出入站挺方便,就問他怎麽弄的,是不是要下載什麽軟件。
    他告訴我:「這個很簡單,只要把公交卡藏在手機套裏就行了。」

    同樣,RFID開發也是離不開微控制器開發,網上也有相關的RFID開發套件出售。



    # 結語

    當然,物聯網技術絕對不止以上五種,物聯網本身就是所有技術的大融合,做電子產品的還要考慮產品外殼,不過這是結構工程師的事情;做伺服器後台的還要考慮使用者帳號數據庫讀寫等,前端也要考慮如何把器材數據和操作方式優雅的展現給使用者看,這些是IT程式設計師的事情;電池技術也需要單方面突破,超小體積、超大容量,這個還得等待多時。

    與其說物聯網是一種技術吧,不如說它是一個時代,物聯網透過對相關技術進行整合,形成一個時代的概念,是一個建立在技術基礎之上的時代。

    ==================================================================

    其他答案:

    大學學習物聯網工程專業怎麽樣?

    擴充套件資料:

    實戰解讀:物聯網開發中意想不到的那些「坑」