日韩偷拍一区二区,国产香蕉久久精品综合网,亚洲激情五月婷婷,欧美日韩国产不卡

在線客服
用Arduino打造物聯(lián)網(wǎng)圖書
人氣:26

用Arduino打造物聯(lián)網(wǎng)

Arduino中文暢銷書作者全新力作!

內(nèi)容簡介

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

編輯推薦

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

作者簡介

孫駿榮,具有六年多Arduino專案開發(fā)與相關(guān)研究經(jīng)驗,曾使用Arduino進行數(shù)字藝術(shù)、自主運動載體工具的實現(xiàn),也在機電整合應(yīng)用的項目中使用過其他單片機,目前從事工業(yè)自動化領(lǐng)域開發(fā)。近年來,也常受邀擔(dān)任Arduino課程講師,在學(xué)校與相關(guān)機構(gòu)講解整合應(yīng)用與軟件開發(fā)。

目錄

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

02 感知的聯(lián)網(wǎng)節(jié)點點是構(gòu)成平面最重要也是最基本的單位。它的結(jié)構(gòu)看似簡單,卻必須擔(dān)負起、承、轉(zhuǎn)、結(jié)尾等不同的角色。借助數(shù)以百計、數(shù)以千計的點,可以變化出無窮盡的網(wǎng)絡(luò)世界。2-1 基礎(chǔ)節(jié)點的組成 122-2 控制核心的選擇 142-3 介紹 Arduino 222-4 Arduino 的軟件介紹與及時次下載 272-5 如何感知信號 312-6 系統(tǒng)規(guī)劃與優(yōu)化 45

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

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

05家庭自動化物聯(lián)系統(tǒng)本章以3種無線技術(shù)為引子,分別引入不同的應(yīng)用到家庭自動化的開發(fā)中,通過前面學(xué)習(xí)的傳感與控制方式,完成一個完整的解決方案。

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

06愛上云計算物聯(lián)網(wǎng)的一公里,數(shù)據(jù)的集成與應(yīng)用,才是發(fā)揮物聯(lián)網(wǎng)價值的所在。為山九仞豈能功虧一簣。

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

APPENDIX A?如何破壞 Arduino APPENDIX B?如何進行除錯 APPENDIX C?ASCII字元碼 APPENDIX D?物聯(lián)網(wǎng)套件組合包

在線預(yù)覽

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

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

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

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

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

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

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

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

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

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

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

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

圖 3-11 OSI的7層通信架構(gòu)

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

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

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

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

RS-232 接口的主要功能是為數(shù)據(jù)終端設(shè)備(Data Terminal Equipment,DTE)和數(shù)據(jù)通信設(shè)備(Data Communication Equipment,DCE)提供實體連接,也就是我們前面講的物理層。例如計算機就是 DTE,而打印機則是DCE。當初設(shè)計RS-232是用來連接調(diào)制解調(diào)器進行數(shù)據(jù)傳輸,也因此它的引腳的定義通常也和調(diào)制解調(diào)器傳輸有關(guān)。通過硬件引腳的方式來判斷數(shù)據(jù)的流向,稱為硬件握手。引腳 含義 英文說明 中文說明Pin1 DCD Data Carrier Detect DCE 通知 DTE 有載波被檢測到Pin2 RXD Received Data 接收數(shù)據(jù)Pin3 TXD Transmitted Data 傳送數(shù)據(jù)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 將數(shù)據(jù)送出Pin8 CTS Clear To Send DCE 通知 DTE 可以傳數(shù)據(jù)過來Pin9 RI Ring Indicator DCE 通知 DTE 有電話進來

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

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

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

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

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

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

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

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

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

稍微調(diào)整一下程序,在 print 后面加上 ln:

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

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

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

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

免責(zé)聲明

更多出版社
主站蜘蛛池模板: 波密县| 许昌县| 迁安市| 长海县| 斗六市| 临西县| 咸宁市| 涿鹿县| 林州市| 新和县| 灵川县| 栖霞市| 新沂市| 罗源县| 岑巩县| 界首市| 通河县| 门头沟区| 五峰| 顺昌县| 南郑县| 晋江市| 建阳市| 雷州市| 荔浦县| 广水市| 巢湖市| 诏安县| 安泽县| 九江县| 张掖市| 肥西县| 鄂托克旗| 凯里市| 达孜县| 利津县| 信阳市| 肃宁县| 宁武县| 垫江县| 闽清县|