日本免费精品视频,男人的天堂在线免费视频,成人久久久精品乱码一区二区三区,高清成人爽a毛片免费网站

在線客服
用Arduino打造物聯網圖書
人氣:25

用Arduino打造物聯網

Arduino中文暢銷書作者全新力作!
  • 所屬分類:圖書 >計算機/網絡>人工智能  
  • 作者:[孫駿榮]、[蘇海永]
  • 產品參數:
  • 叢書名:--
  • 國際刊號:9787302451976
  • 出版社:清華大學出版社
  • 出版時間:2016-12
  • 印刷時間:2016-10-01
  • 版次:1
  • 開本:16開
  • 頁數:--
  • 紙張:膠版紙
  • 包裝:平裝
  • 套裝:

內容簡介

本書以Arduino 這個著名的開放式軟硬件平臺為工具,結合豐富的范例,系統地介紹了物聯網的三大要素“物”“聯”和“網”的產品開發和具體實現。書中涵蓋了物聯網的概念與技術,主控端、傳感端、通信和聯網等模塊的硬件集成、軟件開發和軟硬件整合等。另外,云下載資源中還提供了范例程序、電路圖等資源,以配合本書的學習和實踐。 本書適合物聯網產品開發從業者與技術人員使用,也可以用作高校學生學習硬件設計的實踐教程。

編輯推薦

本書提供了3個壓縮文件供讀者下載,以配合本書的學習和實踐。下載網址為pan.baidu.com/s/1i43qtfB本書以Arduino這個著名的開放式軟硬件平臺為工具,結合豐富的范例,系統地介紹了物聯網的三大要素“物”“聯”和“網”的產品開發和具體實現。書中涵蓋了主控端、傳感端、通信和聯網等模塊的硬件集成、軟件開發和軟硬件整合。Arduino 設計平臺的“開放”已不只是“軟件開源”意義上的開放了,它的硬件設計也“開源”了——即硬件的設計電路也開放了,是一個徹頭徹尾的開放式軟硬件開發和設計的平臺。

作者簡介

孫駿榮,具有六年多Arduino專案開發與相關研究經驗,曾使用Arduino進行數字藝術、自主運動載體工具的實現,也在機電整合應用的項目中使用過其他單片機,目前從事工業自動化領域開發。近年來,也常受邀擔任Arduino課程講師,在學校與相關機構講解整合應用與軟件開發。

目錄

01 淺談物聯網物聯網 (Internet of Things,IoT)這個名詞可以解釋得很簡單,物品能夠連上網絡就算是物聯網。1-1 物聯網的起源與發展 21-2 新時代新思維 61-3 關于本書 9

02 感知的聯網節點點是構成平面最重要也是最基本的單位。它的結構看似簡單,卻必須擔負起、承、轉、結尾等不同的角色。借助數以百計、數以千計的點,可以變化出無窮盡的網絡世界。2-1 基礎節點的組成 122-2 控制核心的選擇 142-3 介紹 Arduino 222-4 Arduino 的軟件介紹與及時次下載 272-5 如何感知信號 312-6 系統規劃與優化 45

03 物物相連的關鍵數以萬計的點灑落在空間中,彼此之間有著默契的相連,幾個之間組成一個網絡。這樣的網絡連接非常有價值,點與點、網絡與網絡間共享著信息與數據,帶給空間無窮無盡的變化。3-1 淺談物聯網通信 563-2 通信種類介紹 603-3 串行通信 643-4 I2C通信 813-5 SPI通信 903-6 網絡通信 923-7 小結 105

04 無所不在的連接在物聯網中,無所不在的通信占有大部分的版圖,其中又以無線通信被視為物聯網設置的基本配備。所有感測到的數據要能夠不受限制地往上傳遞,靠的就是部署完善的通信網絡,目前在大都市中,移動通信網絡(Cellular communication)和Wi-Fi無線網絡覆蓋范圍最為廣泛,有許多的應用因此孕育而生。4-1 初入無線通信 1084-2 RF通信 1154-3 2.4G RF 通信(nRF24L01) 1224-4 藍牙通信 1304-5 XBee 1434-6 Wi-Fi 無線網絡 1564-7 小結 164

05家庭自動化物聯系統本章以3種無線技術為引子,分別引入不同的應用到家庭自動化的開發中,通過前面學習的傳感與控制方式,完成一個完整的解決方案。

5-1 事前準備 1665-2 RFID 1685-3 NFC 2025-4 GPRS 2085-5 小結 217

06愛上云計算物聯網的一公里,數據的集成與應用,才是發揮物聯網價值的所在。為山九仞豈能功虧一簣。

6-1 通往云計算的道路 2206-2 RESTful 2226-3 MQTT 2266-4 MQTT to Cloud 230

APPENDIX A?如何破壞 Arduino APPENDIX B?如何進行除錯 APPENDIX C?ASCII字元碼 APPENDIX D?物聯網套件組合包

在線預覽

03 物物相連的關鍵數以萬計的點灑落在空間中,彼此之間有著默契的相連,幾個之間組成一個網絡。這樣的網絡連接非常有價值,點與點、網絡與網絡間共享著信息與數據,帶給空間無窮無盡的變化。

3-1 淺談物聯網通信通信在物聯網中可以說是相當重要的一環,畢竟物聯網三個字中,“聯網”指的就是通信。早期的物聯網可以是指任何物品或設備能夠連接到因特網,后來談到所謂的機器對機器(Machine to Machine, M2M)的溝通,又把物聯網提升到物物相連的境界。云計算機應用的興起使整個物聯網的架構也隨之完整。所以要搞懂物聯網,首先一定要搞清楚各種通信接口和架構,從通信的角度出發,就能很快理解整個物聯網運行和工作的原理。通信就像人們在對話一樣,要有發話或信息給接收對方的方式,例如嘴巴就是一種發話的接口,或比手畫腳,也算是一種。無論采用怎樣的方式,重點是要能夠讓對方(也就是接收信息的人)可以明白你的意思,這就是一種通信。如果兩個人同時說話,可能會無法百分之百了解對方的意思,因為接收信息的同時你也在發送信息,所以通信當中會有各種順序規則,讓兩個人的對話能夠很順暢地一來一往繼續下去。如果同時有很多人呢?例如在會議時,又該怎樣讓每條信息都順利地給接收方知道,并且正確地發送給想要的人呢?這就包含更多的學問了。下面我們將逐一介紹通信相關的知識,并通過 Arduino 逐一演示。通信架構最簡單的通信就是兩個人直接的對話,也就是兩個設備之間能夠通過相同的方式來傳送信息,什么叫做相同的方式呢?我們晚一點再細說,不過想想如果有一個人只會說中文,另一個人只會說英文,溝通上就困難許多了。我們把這樣的兩個設備相互交換數據的架構(見圖3-1)稱為網絡。

圖3-1 一對一的通信架構雖然這樣的網絡非常簡單,但是在許多時候我們都要從這樣的基礎架構開始來建立起穩定的通信。因為這兩個設備既可能只相距 1 米,也可能相隔 100 千米,要選擇哪種通信方式就要考驗我們的系統設計了。接著,我們再加入3個設備。一瞬間通信的架構就變得復雜許多了,如圖3-2所示。你會看到一個設備除要跟其他4個設備發送信息外,同時也會接收它們回傳的數據。這樣就像沒有老師在的教室,大家一定是各聊各的,整個教室亂哄哄的。 圖3-2 5 個通信節點

這樣的混亂情況,我們可以利用主從(Master-Slave)架構來解決,如圖3-3所示。主從架構的意思就是網絡中同一時間只有一個人可以發號施令,由他進行命令的,其他人則必須等待接收到正確信號后才可以有所動作,因此通信網絡就會變成如圖3-4所示的樣子。 圖3-3 主從(Master-Slave)架構(紅色為主站)

這樣主站和從站的系統設計通常見于數據比較單一或網絡內設備不多的情況下,因為同一時間內只會有一個設備(無論主站或從站)進行信息發送,而其他站都會接收到這個信息。因此主從架構的硬件通常采用總線(Bus)的方式,例如 RS-485或 SPI等,而每個站也一定會有獨立的站號(ID)配置,方便辨識是否需要按照信息來做出響應。

圖3-4 主從架構的通信總線示意圖(紅色為主站)

不過到了現在的因特網時代,數據存取的方式又復雜了許多,很多數據放置在遠程的主機內,而用戶可以通過各種設備來進行存取,甚至可以同時進行,這種通信方式也算是主從架構的一種,不過我們把它定義為 Server-Client(見圖3-5)。這里的數據端 (Server)是數據所在的位置。客戶端 (Client)則是會連接到數據端發送存取數據的請求的一端。同一時間數據端可以允許多個客戶端進行連接與數據存取。例如,我們現在常用的云硬盤或實時軟件,可以通過不同設備進行數據讀取,甚至還可以分享給好友。因此在物聯網時代,服務器主機的機房需求也在持續升溫中。

圖3-5主從 (Server-Client) 架構(黃色為數據端)數據端無法預測隨時被客戶端請求連接的數量,它是被動等待連接的建立。因此,從系統設計的角度上,數據服務端的硬件需求較高,不過因為數據可以被集中管理,所以擁有較高的安全性。你可能會問,如果網絡當中突然加入一個設備,或其中一個設備出現了故障,對整個網絡會造成什么影響呢?以主從式的架構來說,建議要有重試(Re-try)的架構,這樣對于突然少了一個從站的情況,主站能夠嘗試再與從站聯系。如果是多了一個從站,因為主站本來就不知道新增設備的編號,主站不會去跟它進行溝通。但是如果突然加入的設備設置成主站,問題就大了!因為兩個主站可能會同時發送命令,造成通信連接的格式混亂,而從站便無法順利正確地收到預定的數據分組(稱為數據包或者分組)。服務架構的網絡管理都集中于主機上,因此不管新增還是減少網絡中的設備,主機端都可以執行相對應的操作。當然也有力求平等的架構,比如Ad-hoc網絡就是一種點對點的通信模式(見圖3-6),整個網絡中各個設備并沒有地位的區分,所有的設備都可以互相傳送數據,網絡中也可以隨時新增或刪除設備,不過整個網絡的通信效率和設備的耗能規劃反而是這種網絡的關鍵,因為單一設備不只是要負責自己的數據傳送,也需要隨時幫忙轉發其他設備的數據。

圖3-6 Ad-hoc 點對點網絡架構示意圖從物聯網的系統來看,由于應用不同、網絡內的設備數量多寡不同,因此誰也說不準哪種通信架構更合適。不過可以知道的是,大家都在持續為物聯網通信的優化而不懈努力。前面談的通信架構不一定都是以硬件來實現的,有的還必須搭配軟件才能完整實現整個功能。下面我們單從系統硬件的角度來整理一下常見的網絡拓撲結構。線性拓撲(見圖3-7)每個設備所需要處理的數據源與目標都已固定,網絡系統的彈性不 大,但是功能實現起來比較簡單。 圖 3-7 線性拓撲

星形拓撲(見圖3-8)整個網絡環繞一個核心設備,所有周圍的設備都把數據往此中心傳送,若此核心突然出現問題,則整個網絡將會失去功能。 圖3-8 星形拓撲樹狀拓撲(見圖3-9)當網絡節點數量越來越多時,我們可以將所有設備分成數個小團體和幾個層級,這樣可以有效管理整個網絡內的數據流。不過當層級拉得越多越厚時,數據傳送的時間也會越來越長。

網狀拓撲(見圖3-10)這大概是物聯網中被最多人研究的拓撲之一,點與點之間如何尋找到路徑進行數據傳送,每個節點如何能在有限的電力來源下保持最長久的運行。有太多太多好玩的主題可以在這里深入、挑戰。

3-2 通信種類介紹在介紹各種常見的通信方式之前,我們要先來談談通信接口(Interface)和通信協議(Protocol)的不同。通信接口是指所定義好的電纜接線、電器特性和信號等,基于相同的定義讓兩個以上的設備可以相互連接。而通信協議是基于前述的接口上所共通的數據格式。舉例來說,人類負責說話的嘴巴是一種接口,而中文、英文等則是溝通的協議。當我們使用相同的接口和協議時,才能讓對方了解我們想傳達的意思。通信上最熟為人知的架構:OSI(Open System Interconnection)模型,就是由 ISO 組織提出讓計算機間的通信網絡能有固定的標準結構。該架構共有7層:應用層(Application Layer)、表示層(Presentation Layer)、會話層(Session Layer)、傳輸層(Transport Layer)、網絡層(Network Layer)、數據鏈路層(Data link Layer)和物理層(Physical Layer),如圖3-11所示。

圖 3-11 OSI的7層通信架構

最底層就是我們所謂的實體接口,以計算機間的有線網絡來說,就是由銅線組成的實體網絡線。每一層都有它特定的功能,用來橋接其下面一層與上面一層的服務。整個 OSI 帶給用戶的優點是降低網絡的復雜程度、標準化、加速各層的開發、確保通信質量。至于本書要提到的通信架構,大約可以簡化成應用層、協議層、傳輸層和物理層。應用層指的是我們系統中產生數據的執行程序所在的層。協議層指的是數據以特定的數據分組整理成固定格式。傳輸層指的是通信的方式,例如尋址、握手等。物理層指的是整個網絡的拓撲及使用到的電氣信號、接口接頭等。后續的介紹中大家可以通過這樣的分層,清楚了解每種通信方式的優缺點以及適用的場合與范圍。本節先介紹物理層中我們常用的通信種類。最簡單的分類方式是以有線 (wired)和無線(wireless)作為基礎進行區分。不過,這里我們談的是物聯網,所以從覆蓋范圍的大小談起。大家常常聽到的局域網(Local Area Network,LAN),其范圍定義成數百米內,通常一棟建筑或一間工廠都在同一個局域網的范圍內。范圍再小的就是個人網絡(Personal Area Network,PAN),顧名思義就是以個人為單位的網絡架構,像藍牙網絡就是一個非常典型的個人網絡。而比局域網更大的則是廣域網(Wide Area Network,WAN),這個范圍大概是以國家為單位的網絡。在這3個網絡中,由于覆蓋的范圍不同、應用的差異及其特性條件,因此通信的速度也有所不同,大致上是 PAN < WAN < LAN(見圖3-12)。 圖 3-12 各種網絡的大小比較

所以當前常聽到的通信技術會根據其屬性與其應用,朝通信速度或通信距離兩個方向進行發展,目前還沒有同時又快又遠的通信技術被研發出來,并且這樣的技術是不是真的有其應用也還是未知數。傳輸方式至于傳輸的方式,可以從方向、方式等進行分類。所謂的方向,指的是兩 者之間傳遞的方向性,大致可分為單向(廣播)、半雙工和全雙工(見圖3-13)。單向傳輸就像是收音機的廣播一樣,從一個主要設備進行數據信號的發送,其余設備只要能擁有相同的接收配備就可以接收到信息,但是不能反向將數據傳回去。半雙工則是兩個設備雙方都可以互相發送數據,但是因為設備能力有限,同一時間內只能作為發送方或接收方,無法同時發送與接收,所以必須通過額外的硬件信號或特定的協議來辨識何時需要作為發送方、何時可以轉換為接收方。例如,無線步話機就是一種半雙工的通信方式。當按下通話鍵后,就只有自己可以發出信息,其他人必須輪流等待。全雙工則是設備硬件在同一時間既可以發送信息,也可以接收數據。這樣的方式必須將發送與接收規劃成各自獨立的信道,比如打電話,麥克風與耳機就是分開的兩組硬件,以處理不同的信息。 圖 3-13 各種通信技術的比較

另外,信號的傳輸方式則可以分成并行與串行兩種。早期的打印機就是并行傳輸,想要傳送的數據以數條數據線路同時進行傳輸,傳輸速度較快,由于需要的硬件線路比較多,因此線路上的成本較高,所占體積也比較大。現在的設備都越做越小,芯片處理能力也越來越強,在這種情況下,并行傳輸已經比較少見了。串行傳輸不同于并行傳輸的地方在于數據是通過固定的引腳按序將數據傳送出去的,比如RS-232、USB 和網絡等,當前主流的通信方式以串行傳輸為主。 硬件線路 單位傳輸數據 距離 圖示 舉例 并行傳輸 多、成本高 多個位 短 早期打印機IDE 硬盤串行傳輸 少、成本低 一個位 長 USB網絡

3-3 串行通信從前面的介紹可以知道,現今的通信方式以串行通信(Serial Communication)為主流。主要的原因就是硬件越做越小,芯片的能力也越來越強,因此無論芯片間的通信或設備間的數據交換,都以串行通信為主要方式,例如 SPI 和網絡通信都是。RS-232(見圖3-14)則是串行通信的經典之一,被廣泛用于計算機與其他設備間的通信,甚至延伸到設備與設備間 的數據交換。RS-232 對電氣特性、邏輯電位和各種信號線功能都做了規定。在標準主板上看到的9個引腳的接頭(DB-9)就是 RS-232的接口。所謂的 RS 就是 Recommended Standard,即“推薦標準”的意思,其他類似的還有 RS-485 和 RS-422。這些都是EIA 聯盟所制定出來的,會再標注RS-232-C 表示不同版本。 圖 3-14 計算機上 RS-232 的接口

RS-232 接口的主要功能是為數據終端設備(Data Terminal Equipment,DTE)和數據通信設備(Data Communication Equipment,DCE)提供實體連接,也就是我們前面講的物理層。例如計算機就是 DTE,而打印機則是DCE。當初設計RS-232是用來連接調制解調器進行數據傳輸,也因此它的引腳的定義通常也和調制解調器傳輸有關。通過硬件引腳的方式來判斷數據的流向,稱為硬件握手。引腳 含義 英文說明 中文說明Pin1 DCD Data Carrier Detect DCE 通知 DTE 有載波被檢測到Pin2 RXD Received Data 接收數據Pin3 TXD Transmitted Data 傳送數據Pin4 DTR Data Terminal Ready DTE 告訴 DCE 可以進行傳輸Pin5 GND Common Ground 接地Pin6 DSR Data Set Ready DCE 告訴 DTE 一切準備就緒Pin7 RTS Request To Send DTE 要求 DCE 將數據送出Pin8 CTS Clear To Send DCE 通知 DTE 可以傳數據過來Pin9 RI Ring Indicator DCE 通知 DTE 有電話進來

從上面的表格可以知道,RS-232 的9個引腳的信號方向是固定的,借助這些引腳的順序變化才可以順利完成 DTE 和 DCE 之間的數據傳送。說到這里,大家有沒有猜到,RS-232 若在半雙工的通信模式,兩個設備間必須通過其他的硬件引腳來確認現在誰負責傳送、誰負責接收。RS-232 的信號基準電壓是以正負 15V 來作為邏輯電位的變化,其中負電位的部分為邏輯信號 1,正電位的部分為邏輯信號 0。從圖 3-15 可以清楚看出這樣的電位變化與信號的對比。從圖 3-15 中可以發現信號的時間長度是固定的,我們稱為波特率(Baud rate),單位是 bit per second(bps)。常見的所謂9600,也就是1秒內會有 9600個二進制位(bit)。從這里還可以看到,RS-232 的通信中,會有起始位(START BIT)和停止符(STOP BIT),起始位就是將電位拉到正 15V(邏輯 0),停止位則是將電位信號拉回負 15V(邏輯 1)。中間的數據則有 8 個位,在某些情況下則會有 7 個位的選擇。另外,有校驗機制來確保 RS-232 的通信沒有受到干擾,稱為奇偶校驗(PARITY),方式是如果我們設置成偶校驗,表示 8 個數據位加上奇偶校驗位必須要有偶數個邏輯 1,反之奇校驗就是要有奇數個邏輯 1。

圖3-15 RS-232 的信號電位變化整個 RS-232 通信中的設置整理如下:項項目 可設置參數波特率(Baud rate, bps) 2400, 4800, 9600, 19200, 38400, 57600, 115200奇偶校驗 無(N)、奇(Odd)、偶(Even)數據位 7, 8(不會大于 8)停止位 1,1.5,2

在 RS-232 的通信中,雙方必須針對以上參數具有相同的設置,接收方才可以正確判斷數據的邏輯信號,正確解析出數據的內容。例如,最常見的“9600,8N1”表示的就是波特率為 9600bps,8 個數據位,沒有奇偶校驗,有1個停止位。在使用 RS-232 跟其他設備通信時,必定要先確認設置。RS-232 在計算機與其他設備的溝通基準電壓是正負 15V,但是在微控制器中,因為多半以 5V 或 3.3V 來作為系統電源,所以RS-232 的基準電壓也隨之降至 5V 或 3.3V,習慣將其稱為TTL (Transistor-Transistor Logic) 基準。例如,Arduino 的 Pin0 和 Pin1 就是 RS-232 的 TTL 基準,微控制器的信號還需要通過另一個轉換芯片來提升基準電壓至正負 15V。接著我們就來看看 Arduino是如何進行串行通信的。首先從 RS-232 開始。Arduino 和計算機都是通過 RS-232 的信號來進行程序上傳與數據傳送的,剛才提到 Arduino 板子上的 Pin0 和 Pin1 就是串行通信的引腳,如圖3-16所示。 圖圖3-16 Arduino 板子上的 TX 和 RX

在板子上也有通信專用的 LED 指示燈(見圖3-17),我們可以利用指示燈清楚地了解當前 Arduino 是否在進行傳輸或接收數據。

圖3-17 Arduino 的傳送 LED 指示燈先通過及時個程序了解一下如何啟動 Arduino 的串行通信及如何傳送數據。程序 3-1 很簡單,我們只在setup() 中放置了兩個函數:Serial.begin()Serial.print()及時個函數負責啟動 Arduino 的串行通信,從函數的名稱可以很直觀地看出它的功能。它需要輸入一個參數,也就是我們說的波特率,在范例程序中先以9600作為設置值。第二個函數則是要打印(輸出)的字符串,范例中我們是從 Arduino 發送一串字符給計算機,參數中要輸出的字符串必須使用 " "括起來。

我們將范例程序上傳到 Arduino 后,Arduino 的開發軟件不止可以用來開發項目,還可以幫忙觀察通信數據。請單擊右上角的串口監視器窗口,如圖3-18所示。

圖3-18 串口監視器窗口打開后應該會看到我們剛才想要顯示的信息已經顯示出來了。這時看一下右下方是否也是9600,如圖3-19所示。 圖3-19 在計算機顯示的字符串

前面提到串行通信的前提必須是兩邊的設備都有同樣的設置,因為 Arduino 默認為 8 個二進制位,沒有奇偶校驗,有1個停止位。因此我們只有從設置波特率的不同來觀察這個現象。我們將串口監視器窗口右下角的參數改為其他速率,就會發現結果跟剛才不一樣了(見圖3-20)。這是因為此時計算機判定數據的格式與Arduino 發出的并不相同。 圖3-20 范例 3-1 在計算機顯示的字符串(計算機端波特率為38400bps)

接著我們把字符串顯示的部分移到 loop() 中,其余不做任何修改。上傳后會發現每次輸出的字符串全部都連在一起了,無法很清楚地分辨出該斷行的位置,如圖3-21所示。 圖3-21 連續輸出字符串(沒有換行)

稍微調整一下程序,在 print 后面加上 ln:

編譯后再次上傳,得到的結果就會非常清楚易 懂,如圖3-22所示。 圖3-22 連續輸出字符串(有換行)

會有這樣差異的原因是println 這個函數會在字符串加上回車(carriage return, CR)及換行(line feed, LF)字符。這兩個字符屬于不可見字符,即為有文字操作功能但是不顯示出來。可以參閱附錄 C 的 ASCII 表了解還有哪些字符也屬于不可見字符。回車(CR)符的十進制值為 10,十六進制值為 0x0A。換行(LF)符的十進制值是 13,十六進制值是 0x0D。我們可以分別用 "\r" 和 "\n" 來表示它們。因此,在 print 后面加上 ln 也可以用 print("\n\ r") 來實現相同的功能:

剛才提到十進制和十六進制,在串行通信上是否可以表現出它們的不同 呢?在 Arduino 里,當然可以。只要我們在函數中加上要表示格式的設置即可。

網友評論(不代表本站觀點)

免責聲明

更多出版社