牙:無(wú)線通信入門原理與實(shí)戰(zhàn)選型)
搞硬件的人大概都有過(guò)這樣的經(jīng)歷面包板上插了一堆線明明只需要把數(shù)據(jù)從A點(diǎn)送到B點(diǎn)卻要在地板上拉出長(zhǎng)長(zhǎng)的一串杜邦線稍微一動(dòng)就松脫最后干脆被線纜絆得沒(méi)脾氣。直到你給兩個(gè)單片機(jī)都裝上無(wú)線模塊數(shù)據(jù)憑空從一端跳到另一端那種魔法成真的感覺(jué)會(huì)讓很多初學(xué)者瞬間對(duì)無(wú)線通信上癮。這篇電子世界的奇妙冒險(xiǎn)16要聊的正是從紅外到Wi-Fi、藍(lán)牙的無(wú)線通信入門。我會(huì)從最基礎(chǔ)的無(wú)線原理講起再分別拆解紅外、Wi-Fi、藍(lán)牙這三種最常見(jiàn)的方案最后補(bǔ)充一些其他無(wú)線技術(shù)和選型思路。無(wú)論你是大一剛接觸單片機(jī)還是自己鼓搗小項(xiàng)目的愛(ài)好者只要按照這個(gè)順序走一遍你就能在動(dòng)手實(shí)驗(yàn)中搞清楚無(wú)線這件事到底是怎么發(fā)生的。1. 先搞清楚一件事無(wú)線通信到底是怎么憑空傳數(shù)據(jù)的很多初學(xué)者對(duì)無(wú)線通信的第一反應(yīng)是這太玄了因?yàn)榭床灰?jiàn)摸不著。但往深了說(shuō)無(wú)線通信的本質(zhì)和有線通信沒(méi)有區(qū)別——都是把信息編碼成信號(hào)然后讓信號(hào)從發(fā)送端到達(dá)接收端。有線靠銅線里的電流光纖靠玻璃里的光無(wú)線則靠電磁波在空氣中的傳播。1.1 電磁波和頻率到底意味著什么電磁波是一層層電場(chǎng)和磁場(chǎng)交替變化的波動(dòng)它在真空中也能傳播。日常說(shuō)的無(wú)線電、紅外、藍(lán)牙、Wi-Fi本質(zhì)上都是電磁波只不過(guò)頻率不同。頻率的單位是赫茲Hz表示一秒內(nèi)波重復(fù)了多少次。簡(jiǎn)單類比你在水面扔一塊石頭漣漪是一圈圈往外擴(kuò)散的每秒產(chǎn)生多少個(gè)波峰就是波動(dòng)的頻率。電磁波也是一樣Wi-Fi常用的2.4GHz意思是每秒鐘電磁場(chǎng)要變化24億次。頻率越高單個(gè)波攜帶的能量越集中理論上同一時(shí)間能塞進(jìn)去的數(shù)據(jù)也就越多但同時(shí)它的直射性更強(qiáng)、穿墻能力更差。這個(gè)頻率越高、數(shù)據(jù)越快但越容易受阻的關(guān)系是理解后面所有無(wú)線技術(shù)的關(guān)鍵。1.2 把數(shù)據(jù)裝到電磁波上調(diào)制和解調(diào)電磁波本身只是一段穩(wěn)定的載波要讓它攜帶數(shù)據(jù)就得改變它的某個(gè)屬性。改變振幅的叫調(diào)幅改變頻率的叫調(diào)頻改變相位的叫調(diào)相。把數(shù)據(jù)加在載波上的過(guò)程叫調(diào)制接收端再把數(shù)據(jù)提取出來(lái)叫解調(diào)。紅外遙控用的就是一種調(diào)制方案先把按鍵碼編碼成一段脈沖信號(hào)再用38kHz左右的載波背著這段脈沖發(fā)出去。Wi-Fi則復(fù)雜得多除了調(diào)制以外還要考慮多徑干擾、頻帶分配、加密等問(wèn)題。但不管多復(fù)雜前提都是一樣的發(fā)送方和接收方約定好同一套規(guī)則。所以我在做無(wú)線實(shí)驗(yàn)時(shí)最常提醒自己的一句話是無(wú)線的本質(zhì)不是憑空傳輸而是雙方在同一個(gè)頻率和同一個(gè)協(xié)議下進(jìn)行的一場(chǎng)默契對(duì)話。如果頻率不對(duì)或者協(xié)議不一致哪怕信號(hào)就在眼前你也收不到一個(gè)字。2. 紅外遙控動(dòng)手成本最低的無(wú)線通信入門課如果說(shuō)Wi-Fi是高速公路那紅外就是鄉(xiāng)間小路——窄但有獨(dú)特的存在價(jià)值。紅外的波長(zhǎng)在電磁波譜里位于可見(jiàn)光和無(wú)線電之間物理特性上具有很強(qiáng)的直線傳播傾向無(wú)法穿透墻壁但這恰恰是它的優(yōu)勢(shì)幾乎不會(huì)串到隔壁房間去。2.1 38kHz載波和NEC協(xié)議的套路市面上絕大多數(shù)紅外遙控器都工作在38kHz的載波頻率上。載波的意思是真正傳遞信息的是有無(wú)載波的一串時(shí)間間隔而不是載波本身。發(fā)送端把按鍵數(shù)據(jù)編碼成高電平持續(xù)多久、低電平持續(xù)多久的組合然后用38kHz的載波把它放大發(fā)出去。接收端只要檢測(cè)到特定時(shí)長(zhǎng)的高/低電平序列就能還原出按鍵碼。最常見(jiàn)的編碼協(xié)議是NEC協(xié)議。它規(guī)定了一段引導(dǎo)碼9ms高電平加4.5ms低電平后面跟著地址碼、地址反碼、按鍵碼和按鍵反碼。反碼是為了校驗(yàn)——如果某一位反號(hào)對(duì)不上接收端就知道數(shù)據(jù)被干擾了直接丟棄。這種正碼加反碼的校驗(yàn)思路在低速無(wú)線通信里非常實(shí)用也值得你在自己的協(xié)議設(shè)計(jì)里借鑒。提示自己做紅外發(fā)射時(shí)38kHz載波并不需要特別精確。我實(shí)測(cè)過(guò)用普通定時(shí)器產(chǎn)生36kHz到40kHz的信號(hào)接收頭都能正常解碼。但注意別偏離太遠(yuǎn)偏離到42kHz以上時(shí)靈敏度會(huì)明顯下降距離縮短一大截。2.2 用紅外模塊做一個(gè)無(wú)線按鍵的完整路徑入門實(shí)驗(yàn)可以從一個(gè)最簡(jiǎn)單的目標(biāo)開(kāi)始用紅外遙控器控制另一塊板子上的LED。你需要的材料只有三樣紅外接收頭常見(jiàn)的是三腳貼片或直插封裝、一個(gè)遙控器家里廢舊的機(jī)頂盒遙控器就行、一塊開(kāi)發(fā)板。先把接收頭接好通常一腳接地、二腳接電源、三腳接數(shù)據(jù)引腳。然后用一個(gè)紅外解碼庫(kù)讀取數(shù)據(jù)。你會(huì)發(fā)現(xiàn)按下遙控器不同的按鍵串口打印出的十六進(jìn)制碼不同。把其中某個(gè)鍵的碼記錄下來(lái)寫一段如果收到碼就翻轉(zhuǎn)LED的邏輯實(shí)驗(yàn)就通了。這個(gè)實(shí)驗(yàn)最大的價(jià)值不是控制一個(gè)LED而是讓你體會(huì)一次完整的無(wú)線數(shù)據(jù)鏈路編碼、調(diào)制、發(fā)射、接收、解調(diào)、校驗(yàn)、執(zhí)行。后來(lái)我做Wi-Fi和藍(lán)牙時(shí)發(fā)現(xiàn)雖然協(xié)議復(fù)雜得多但基本的鏈路邏輯并沒(méi)有跳出這套框架。2.3 紅外的局限和它的幸存理由紅外的缺點(diǎn)是明擺著的必須對(duì)準(zhǔn)、不能穿墻、傳輸距離短。手機(jī)紅外遙控也得把發(fā)射管對(duì)著家電才能操作。但正因?yàn)檫@些限制紅外在很多場(chǎng)合仍然好用。比如客廳里所有家電都用紅外遙控各家互不干擾不像Wi-Fi和藍(lán)牙那樣有信道沖突和配對(duì)問(wèn)題。又比如在簡(jiǎn)易機(jī)器人里紅外尋跡模塊成本和功耗都很低用電池跑很久都沒(méi)問(wèn)題。如果你想做一個(gè)不需要聯(lián)網(wǎng)的、點(diǎn)對(duì)點(diǎn)的、低成本的小裝置紅外依然是值得優(yōu)先考慮的選擇。3. Wi-Fi沒(méi)那么玄從更換手機(jī)連不上到模塊自己發(fā)包Wi-Fi是很多人第一個(gè)聽(tīng)說(shuō)過(guò)的無(wú)線技術(shù)也是做聯(lián)網(wǎng)項(xiàng)目時(shí)幾乎繞不開(kāi)的選擇。它的本質(zhì)是讓設(shè)備接入一個(gè)局域網(wǎng)并且通過(guò)路由器與互聯(lián)網(wǎng)連通。對(duì)電子愛(ài)好者來(lái)說(shuō)最有吸引力的不是連手機(jī)而是讓單片機(jī)自己說(shuō)話、自己上報(bào)數(shù)據(jù)。3.1 看懂Wi-Fi的常用概念A(yù)P、STA、SSID、信道接觸Wi-Fi模塊時(shí)你會(huì)頻繁看到這些縮寫AP接入點(diǎn)也就是發(fā)出Wi-Fi信號(hào)的路由器、STA站點(diǎn)也就是連接路由器的設(shè)備、SSIDWi-Fi名稱、信道工作頻段內(nèi)的細(xì)分通道。如果把Wi-Fi比作一個(gè)對(duì)講機(jī)組網(wǎng)AP是主臺(tái)負(fù)責(zé)管理和轉(zhuǎn)發(fā)STA是成員入網(wǎng)前得喊一聲申請(qǐng)加入每個(gè)信道相當(dāng)于不同的通話頻道相鄰設(shè)備要盡量避開(kāi)同一個(gè)頻道。常見(jiàn)的Wi-Fi模塊一般支持三種模式Station模式連路由器、AP模式自己發(fā)Wi-Fi信號(hào)讓別人連、STAAP共存模式一邊連互聯(lián)網(wǎng)一邊提供局域網(wǎng)接入。實(shí)操時(shí)我最常用的還是Station模式讓模塊連上家里的路由器再通過(guò)MQTT或HTTP把數(shù)據(jù)發(fā)到服務(wù)器。3.2 第一次讓W(xué)i-Fi模塊聯(lián)網(wǎng)最容易踩的三個(gè)坑我第一次做Wi-Fi聯(lián)網(wǎng)實(shí)驗(yàn)時(shí)用的是某款ESP系列模塊走完固件燒錄后問(wèn)題一個(gè)接一個(gè)。第一個(gè)坑是供電不足。Wi-Fi發(fā)射的瞬間電流很大模塊在發(fā)包時(shí)可能從幾十毫安跳到幾百毫安。如果用USB轉(zhuǎn)串口的小板子直接供電經(jīng)常出現(xiàn)連接正常、一發(fā)送就重啟的現(xiàn)象。解決方法是外接一個(gè)足夠穩(wěn)的穩(wěn)壓電源或者在電源旁邊并聯(lián)一顆幾百微法的電容。第二個(gè)坑是天線區(qū)域不能蓋銅。有些模塊的天線直接印在PCB上如果安裝時(shí)把它壓在金屬外殼下面信號(hào)強(qiáng)度會(huì)掉得讓你懷疑人生。最好的做法是讓天線懸空朝外至少不要貼上金屬件。第三個(gè)坑是串口亂碼。模塊出廠時(shí)的波特率可能和資料里寫的不一樣我第一次接通后發(fā)現(xiàn)全是亂碼最后逐檔試才發(fā)現(xiàn)實(shí)際波特率是74880。這種預(yù)期和實(shí)際不一致的問(wèn)題在國(guó)產(chǎn)模塊上特別常見(jiàn)遇到亂碼先別懷疑硬件壞了把波特率檔位全部試一遍再說(shuō)。3.3 從連接路由器到設(shè)備自己上報(bào)數(shù)據(jù)聯(lián)網(wǎng)只是第一步真正有用的是讓設(shè)備主動(dòng)發(fā)數(shù)據(jù)。簡(jiǎn)單方案是用HTTP GET請(qǐng)求把傳感器數(shù)值拼在URL里發(fā)給一個(gè)服務(wù)器腳本。但更穩(wěn)定的是MQTT協(xié)議它是一種基于發(fā)布/訂閱模式的輕量級(jí)消息協(xié)議適合低帶寬設(shè)備。MQTT里的核心概念是主題。一個(gè)設(shè)備可以往傳感器/溫度這個(gè)主題推送數(shù)據(jù)另一個(gè)設(shè)備訂閱這個(gè)主題就能收到。這樣的好處是耦合度低——發(fā)數(shù)據(jù)的設(shè)備不用關(guān)心誰(shuí)在收數(shù)據(jù)。我在做模擬項(xiàng)目X時(shí)用一塊Wi-Fi模塊采集溫濕度每10秒通過(guò)MQTT上報(bào)一次。設(shè)備端邏輯很簡(jiǎn)單連Wi-Fi連Broker然后循環(huán)發(fā)布數(shù)據(jù)。但真正折磨人的不是這些代碼而是網(wǎng)絡(luò)環(huán)境的不穩(wěn)定。家里路由器如果開(kāi)啟了5GHz和2.4GHz混合模式模塊可能只支持2.4GHz明明手機(jī)連得飛快模塊卻一直在找不到AP的循環(huán)里。手動(dòng)把路由器設(shè)成雙頻分開(kāi)問(wèn)題立即解決。Wi-Fi模塊最大的坑在于你以為連上了就萬(wàn)事大吉其實(shí)設(shè)備會(huì)在某個(gè)時(shí)刻無(wú)聲無(wú)息地?cái)嚅_(kāi)連接。斷線重連機(jī)制必須在做項(xiàng)目時(shí)就考慮進(jìn)去否則你的設(shè)備可能在運(yùn)行十幾個(gè)小時(shí)后突然變啞巴。4. 藍(lán)牙的真實(shí)分工經(jīng)典藍(lán)牙和BLE壓根不是一回事藍(lán)牙這個(gè)名字聽(tīng)起來(lái)比Wi-Fi親切但實(shí)際使用時(shí)的困惑一點(diǎn)不比Wi-Fi少。最大的誤區(qū)是很多人以為藍(lán)牙就是藍(lán)牙拿著只能做低功耗數(shù)據(jù)收發(fā)的BLE模塊去干低延遲音頻傳輸?shù)幕钭詈蟀l(fā)現(xiàn)完全不是那么回事。4.1 經(jīng)典藍(lán)牙和BLE的分工邏輯藍(lán)牙在早期版本里只有一套標(biāo)準(zhǔn)后來(lái)為了滿足低功耗應(yīng)用發(fā)展出了兩個(gè)分支經(jīng)典藍(lán)牙BR/EDR和低功耗藍(lán)牙BLE。經(jīng)典藍(lán)牙的特點(diǎn)是傳輸速率高、延遲低適合連續(xù)的數(shù)據(jù)流比如藍(lán)牙耳機(jī)、音箱、手柄。它的連接方式是持續(xù)保持鏈路所以功耗高不適合電池供電的小傳感器。BLE的特點(diǎn)是功耗極低設(shè)備可以大部分時(shí)間處于休眠狀態(tài)只在需要廣播或接收時(shí)醒來(lái)一小會(huì)兒。但它的數(shù)據(jù)吞吐量比經(jīng)典藍(lán)牙小得多更適合周期性傳輸小量數(shù)據(jù)比如心率計(jì)、溫濕度計(jì)、防丟器。簡(jiǎn)單記法音箱用經(jīng)典藍(lán)牙手表用BLE。4.2 BLE的廣播、掃描和連接三部曲BLE的工作方式非常有趣不是先連接再傳數(shù)據(jù)而是先廣播。設(shè)備進(jìn)入廣播狀態(tài)后會(huì)周期性地發(fā)出包含設(shè)備名、服務(wù)UUID等信息的廣播包。手機(jī)或模塊作為掃描端不停監(jiān)聽(tīng)周圍信道里的廣播包。當(dāng)掃描到目標(biāo)設(shè)備后兩邊才會(huì)發(fā)起連接進(jìn)入通信狀態(tài)。所以BLE項(xiàng)目最常見(jiàn)的流程是模塊一上電就廣播手機(jī)App去掃描掃描到后點(diǎn)擊連接連接成功后互相收發(fā)數(shù)據(jù)。這個(gè)流程和紅外、Wi-Fi都不一樣——藍(lán)牙設(shè)備要先喊一嗓子讓周圍知道自己存在再和感興趣的一方建立穩(wěn)定連接。我做BLE實(shí)驗(yàn)時(shí)最直觀的感受是廣播包的設(shè)計(jì)很有講究。廣播包里能塞的數(shù)據(jù)很少通常只有幾十字節(jié)所以設(shè)備名不能太長(zhǎng)服務(wù)UUID也要提前規(guī)劃好。如果你拿著手機(jī)廠商提供的調(diào)試App看廣播包就會(huì)發(fā)現(xiàn)有個(gè)廠商自定義數(shù)據(jù)字段那才是真正放業(yè)務(wù)數(shù)據(jù)的地方。4.3 低功耗要省到什么程度一個(gè)實(shí)測(cè)數(shù)據(jù)很多人聽(tīng)到低功耗覺(jué)得只是比較省電實(shí)際測(cè)試后往往會(huì)驚訝。我用一塊BLE模塊配合普通紐扣電池做過(guò)一周測(cè)試模塊每秒廣播一次每次喚醒后讀取一個(gè)傳感器值并發(fā)出廣播包其余時(shí)間全部深度睡眠。一周后測(cè)電池電壓幾乎還是滿電。如果把廣播間隔從1秒改成5秒理論續(xù)航能到數(shù)月甚至一年以上。相比之下同樣用Wi-Fi模塊完成類似任務(wù)電池?fù)螏讉€(gè)小時(shí)就枯竭了。這就是為什么可穿戴設(shè)備和智能家居傳感器更愿意用BLE。注意BLE廣播間隔越長(zhǎng)設(shè)備越省電但發(fā)現(xiàn)設(shè)備需要的掃描時(shí)間也越長(zhǎng)。如果你想做到按下按鈕立刻連接廣播間隔就不要設(shè)得太長(zhǎng)。省電和響應(yīng)速度之間永遠(yuǎn)是取舍沒(méi)有又省電又秒連的白白便宜。5. 剩下那些無(wú)線方案ZigBee、433MHz、LoRa和選型思路紅外、Wi-Fi、藍(lán)牙是三種最常見(jiàn)的入門方案但做項(xiàng)目時(shí)你還會(huì)遇到一堆其他無(wú)線技術(shù)。了解它們各自的位置能幫助你在選型時(shí)不至于跑偏。5.1 四種無(wú)線技術(shù)放在一張表里看技術(shù)典型頻率傳輸距離數(shù)據(jù)速率功耗適合場(chǎng)景紅外38kHz幾米內(nèi)需對(duì)準(zhǔn)幾十kbps極低遙控、近距點(diǎn)對(duì)點(diǎn)Wi-Fi2.4/5GHz幾十米穿墻一般高M(jìn)bps級(jí)高聯(lián)網(wǎng)設(shè)備、攝像頭、交互藍(lán)牙/BLE2.4GHz10-30米BLE約1-2Mbps低可穿戴、傳感器ZigBee2.4GHz10-100米250kbps低智能家居組網(wǎng)433MHz433MHz幾百米甚至更遠(yuǎn)低kbps級(jí)低遙控開(kāi)關(guān)、門禁、傳感器LoRa幾百M(fèi)Hz幾公里到十幾公里極低kbps級(jí)極低戶外廣域物聯(lián)網(wǎng)看到這張表你會(huì)發(fā)現(xiàn)沒(méi)有任何一種方案是全能的。Wi-Fi快但耗電LoRa遠(yuǎn)但很慢紅外便宜但有方向性。選型的第一步不是哪個(gè)技術(shù)聽(tīng)起來(lái)高級(jí)而是我的數(shù)據(jù)到底需要走多遠(yuǎn)、多久、多大。5.2 433MHz和LoRa在什么時(shí)候用得上如果你只是做一個(gè)遙控開(kāi)關(guān)比如遠(yuǎn)程開(kāi)燈、控制水泵433MHz模塊是性價(jià)比之王。這種模塊的使用方式接近無(wú)線串口一端接發(fā)送腳另一端接接收腳透明傳輸連協(xié)議都不用自己組。缺點(diǎn)是速率極低、抗干擾一般不適合傳圖像或大數(shù)據(jù)。LoRa則完全是為遠(yuǎn)距離、小數(shù)據(jù)、長(zhǎng)續(xù)航而生的。它用擴(kuò)頻技術(shù)在低速率下?lián)Q來(lái)了驚人的接收靈敏度在開(kāi)闊地帶做到幾公里很輕松。不過(guò)LoRa模塊的價(jià)格和復(fù)雜度都更高通常還要配合網(wǎng)關(guān)使用。我見(jiàn)過(guò)模擬項(xiàng)目X里的戶外農(nóng)業(yè)監(jiān)測(cè)方案就是用LoRa把每個(gè)田塊的土壤濕度數(shù)據(jù)集中到網(wǎng)關(guān)再通過(guò)Wi-Fi或4G上傳云端。5.3 我的選型心法先定距離和功耗再選技術(shù)每次拿到一個(gè)新項(xiàng)目我會(huì)先問(wèn)三個(gè)問(wèn)題數(shù)據(jù)要傳多遠(yuǎn)多久傳一次設(shè)備靠什么供電如果是同一間屋子里遙控設(shè)備紅外或者433MHz就夠。如果要聯(lián)網(wǎng)云端只能選Wi-Fi或用網(wǎng)關(guān)轉(zhuǎn)網(wǎng)的其他無(wú)線方案。如果用電池且要求一年不換BLE、ZigBee、LoRa才是候選。等把這三個(gè)問(wèn)題想清楚再去比對(duì)技術(shù)參數(shù)基本不會(huì)犯方向性錯(cuò)誤。這種先約束再選型的思路比一上來(lái)就想玩最新的技術(shù)要靠譜得多。無(wú)線通信入門最大的收獲不是把每種協(xié)議都背熟而是學(xué)會(huì)根據(jù)實(shí)際場(chǎng)景做取舍。6. 做完一輪紅外、Wi-Fi、藍(lán)牙實(shí)驗(yàn)后我想提醒你幾件事文章最后我想把這段時(shí)間實(shí)驗(yàn)里最實(shí)在的幾個(gè)體會(huì)寫下來(lái)。它們不算高深理論但都是容易讓新手翻車的細(xì)節(jié)。6.1 無(wú)線實(shí)驗(yàn)的調(diào)試順序先本地后遠(yuǎn)端先單向后雙向我的紅外實(shí)驗(yàn)第一步其實(shí)是直接用開(kāi)發(fā)板讀遙控器按鍵碼而不是馬上接發(fā)射管。Wi-Fi模塊也先在串口里打印連接狀態(tài)再考慮加傳感器邏輯。無(wú)線鏈路一旦出問(wèn)題排查起來(lái)比有線麻煩得多因?yàn)槟憧床灰?jiàn)信號(hào)去哪兒了。所以調(diào)試時(shí)一定要把鏈路是否通和業(yè)務(wù)邏輯對(duì)不對(duì)分開(kāi)一層一層驗(yàn)。具體做法是先用串口或調(diào)試工具確認(rèn)設(shè)備端已經(jīng)收到了數(shù)據(jù)再確認(rèn)設(shè)備端發(fā)出的數(shù)據(jù)能被另一端收到。每一步都打印日志日志內(nèi)容要帶上時(shí)間戳和關(guān)鍵變量。無(wú)線調(diào)試最忌諱猜一定要用數(shù)據(jù)說(shuō)話。6.2 安全、功耗和天線位置都是項(xiàng)目級(jí)問(wèn)題不是代碼問(wèn)題不少初學(xué)者喜歡把無(wú)線問(wèn)題全部歸咎于代碼或模塊壞。但我見(jiàn)過(guò)很多案例最終原因其實(shí)是天線貼在了金屬外殼上、電池電壓不夠、或者設(shè)備在弱信號(hào)區(qū)反復(fù)重連導(dǎo)致功耗飆升。這些問(wèn)題在實(shí)驗(yàn)室里不常見(jiàn)一旦裝進(jìn)真實(shí)外殼、放到真實(shí)環(huán)境馬上就暴露出來(lái)。所以我建議你在做任何項(xiàng)目前先給無(wú)線模塊畫出三件事供電線路的峰值電流余量、天線擺放位置、設(shè)備睡眠時(shí)間安排。把這三件事寫進(jìn)需求而不是等出了問(wèn)題再補(bǔ)會(huì)少走很多彎路。6.3 別只學(xué)一種無(wú)線技術(shù)比較著學(xué)記得最牢紅外、Wi-Fi、藍(lán)牙這三樣?xùn)|西單獨(dú)看各有各的協(xié)議細(xì)節(jié)但放在一起對(duì)比著學(xué)會(huì)發(fā)現(xiàn)很多規(guī)律是通用的。比如紅外靠電平持續(xù)時(shí)間編碼BLE靠廣播包格式組織數(shù)據(jù)Wi-Fi靠幀和握手流程維持連接——本質(zhì)上都是在定義什么樣的波形/字段代表什么含義。我開(kāi)始時(shí)也覺(jué)得學(xué)完Wi-Fi再學(xué)藍(lán)牙很累但后來(lái)發(fā)現(xiàn)因?yàn)橛辛思t外實(shí)驗(yàn)的底子理解藍(lán)牙的廣播和連接反而快了很多。所以我的建議是入門階段不要貪多就按紅外、Wi-Fi、藍(lán)牙這個(gè)順序走一遍把三個(gè)實(shí)驗(yàn)都做通之后再看其他無(wú)線技術(shù)都會(huì)覺(jué)得似曾相識(shí)。我自己做了一輪下來(lái)最大的感受倒不是我會(huì)用三種無(wú)線模塊了而是我終于理解為什么無(wú)線通信講究協(xié)議。那些看似煩瑣的幀格式、校驗(yàn)碼、握手流程全都是為了保證在充滿噪聲的環(huán)境里雙方依然能準(zhǔn)確傳遞一個(gè)比特。把這個(gè)道理刻進(jìn)腦子里比背任何協(xié)議表格都值錢。