資料介紹
描述
動(dòng)機(jī)
(極客直接跳到挑戰(zhàn)和現(xiàn)有解決方案部分)
用于監(jiān)控各種環(huán)境和天氣條件(溫度、濕度、壓力、光線、雨水、氣體、運(yùn)動(dòng))的(自制)物聯(lián)網(wǎng)系統(tǒng)的設(shè)計(jì)和部署已成為每個(gè)(初級(jí))愛(ài)好者所做的最受歡迎的項(xiàng)目之一一生至少一次。來(lái)自 OEM 和 DIY 套件供應(yīng)商的硬件構(gòu)建塊的可用性,以及大量的免費(fèi)軟件(開源、現(xiàn)成的解決方案、庫(kù)、驅(qū)動(dòng)程序、IDE、應(yīng)用程序、操作系統(tǒng)、云中間件等)已經(jīng)使項(xiàng)目純粹是明智的。設(shè)計(jì)師的角色通常被簡(jiǎn)化為只選擇正確的傳感器模塊,這些模塊連接到“強(qiáng)大”的 MCU 板(ESP32 、Raspberry 、Arduino),將現(xiàn)有軟件(驅(qū)動(dòng)程序、庫(kù))粘合在一起,并編寫簡(jiǎn)單的應(yīng)用程序邏輯。更不用說(shuō)無(wú)數(shù)的指南、博客和 YouTube 教程了。
這種方法具有許多優(yōu)點(diǎn),例如快速原型制作、不需要深入的知識(shí)和經(jīng)驗(yàn)、非常有趣、大量支持以及沒(méi)有(或顯著減少)挫折感。對(duì)于那些決定進(jìn)一步推進(jìn)該項(xiàng)目并希望在其財(cái)產(chǎn)中/周圍構(gòu)建和部署大量傳感器,甚至商業(yè)化(至少將解決方案出售給您的朋友或家人)的少數(shù)人來(lái)說(shuō),這種方法有幾個(gè)缺點(diǎn)。最重要的是解決方案的整體價(jià)格(如果你賣掉它,利潤(rùn)會(huì)更低)。事實(shí)上,它可能比知名品牌的高價(jià)產(chǎn)品便宜。但是,使用ESP32 (雙核 32 位 @ 160 或 240MHz、320 KiB RAM、448 KiB ROM CPU 以及大量 IO 和總線)從臭名昭著的傳感器(例如DHT11, DHT22 , DS18B20 , AM2320 , BMP280 ) 通過(guò) SPI/I2C/單線總線。除此之外,使用 Wi-Fi 將幾個(gè)字節(jié)轉(zhuǎn)發(fā)到中央集線器(另一個(gè) ESP32 或 Raspberry)與(能源)效率無(wú)關(guān)。藍(lán)牙低功耗 (BTE) 配置文件可能會(huì)有所改進(jìn),但是,模塊(例如HC-05)的價(jià)格比 MCU 本身(包括一些傳感器)貴數(shù)倍。
綜上所述,小型物聯(lián)網(wǎng)傳感器主要有兩個(gè)非功能性需求:
- 成本優(yōu)化:由于數(shù)量大,生產(chǎn)要經(jīng)濟(jì)。因此,物聯(lián)網(wǎng)傳感器應(yīng)該體積?。?a href='http://hljzzgx.com/v/tag/82/' target='_blank' class='arckwlink_none'>PCB),基于低端和低成本的 MCU (以最大限度地利用資源),并使用廉價(jià)的連接進(jìn)行遠(yuǎn)程訪問(wèn)。低端 MCU 的引腳數(shù)較少,有利于 PCB 優(yōu)化,但它限制了連接的 IO 設(shè)備/傳感器的數(shù)量。此外,低端 MCU資源稀缺(閃存、RAM、IO、總線),這限制了整體功能(應(yīng)用程序并需要 IO 協(xié)議的 SW bit-banging)。然而,物聯(lián)網(wǎng)傳感器通常只收集少數(shù)環(huán)境屬性(2 個(gè),也許 3 個(gè))。這不需要使用大量的引腳和 MCU 資源。
- 易于部署和自主:傳感器應(yīng)易于重新部署(連接),無(wú)需改變其周圍和環(huán)境。不需要額外安裝電線來(lái)為傳感器提供電源和通信,即傳感器應(yīng)該是無(wú)線的和電池供電的(或能夠從環(huán)境中提取能量)。因此,此類傳感器(包括通信模塊)需要超低功耗(納至微安范圍)以避免頻繁更換電池。
對(duì)于通信模塊,有多種 COTS 選項(xiàng)可以同時(shí)滿足低成本和超低功耗的需求。其中之一是收發(fā)器nRF24L01+,特別受創(chuàng)客和愛(ài)好者的歡迎。它價(jià)格低廉(中國(guó)網(wǎng)上商店的分線板從 0.8 美元起)和超低功耗(掉電模式下為 990nA,待機(jī)模式下為 22uA,最大功率下 TX/RX 期間為 12mA)。此外,它具有簡(jiǎn)單的接口(盡管是 3.3V 供電設(shè)備,但具有 5V 容限邏輯引腳的 SPI)、許多有利的特性(例如 ISM 頻帶 2.4GHz,范圍從 100 到 1000m、0.5-1-2 Mbps 帶寬、自動(dòng)-retransmit、auto CRC check、multiciever)、大量廉價(jià)(突破)模塊(見下文)和幾個(gè) SW 庫(kù)(nRF24 用于 Arduino/Raspberry Linux )。
受愛(ài)好者歡迎的典型低端(成本)MCU 是8 位 AVR子系列,帶有稱為ATtiny的有限外設(shè)集,特別是 8 針25/45/85和 14 針24/44/84版本(第一個(gè)數(shù)字是以 KiB 為單位的閃存大?。?。Arduino 的 28 針ATmega328P屬于 ATmega 系列,具有廣泛的外設(shè)和指令集。它提供 32KiB 閃存、4 倍更大的 RAM、更多 IO 設(shè)備,而且價(jià)格更高。在 (PCB) 尺寸、低引腳數(shù)和成本非常重要的情況下,ATtiny 系列 25/45/85 和 24/44/84 可能比 328P 更可取。
另一個(gè)有趣的低端 MCU 是帶有 1KiB 閃存和 64B SRAM的 8 針ATtiny13A 。它比 25/45/85 和 24/44/84 ATtiny 系列便宜 2-4 倍(< 1 美元)并且消耗更少的能量。因此,它在小型、簡(jiǎn)單、電池供電的低成本設(shè)計(jì)(大多數(shù)無(wú)線傳感器都是如此)中特別受歡迎。
將 ATtiny13A 與低功耗無(wú)線模塊 nRF24L01+ 相結(jié)合,對(duì)于滿足上述非功能性要求的物聯(lián)網(wǎng)傳感器來(lái)說(shuō),似乎是一個(gè)可行的選擇。
為什么有人會(huì)費(fèi)心將 nRF24L01+ 安裝在 8 針微型 ATtiny13A 和 1 KiB 閃存上的另一個(gè)原因,該閃存已經(jīng)有 3 個(gè)針腳被超低功耗設(shè)備中的傳感器占用,這是……只是為了玩得開心,大笑,很棒有趣,因?yàn)椋?/font>
“在 2K 中,你幾乎沒(méi)有刷牙的空間。”
-喬·德庫(kù)爾
挑戰(zhàn)和現(xiàn)有解決方案
由于硬件和軟件的挑戰(zhàn),低端 8 針 ATtiny13A 與 nRF24L01 的組合并非易事。在我們對(duì)通用 8 引腳 MCU 的評(píng)論中,我們更詳細(xì)地描述了這種結(jié)合所面臨的硬件和軟件挑戰(zhàn)。回想一下,硬件挑戰(zhàn)如下圖所示:
ATtiny13A 實(shí)際上有 5 個(gè)引腳。如果我們將 PB5 從其主要功能(RESET/dWIRE)重新編程到 IO 端口,我們有 6 個(gè)引腳。但是,所有 6 引腳的使用都需要高壓編程。這對(duì)于在線串行編程 (ICSP) 并不總是可行的。此外,我們沒(méi)有任何備用引腳用于連接傳感器或連接到現(xiàn)場(chǎng)總線。從審查的現(xiàn)有解決方案來(lái)看,所有硬件提案原則上都適用于 ATtiny13A ,但每個(gè)都有相關(guān)的“成本”:
- Ralph 的 2 和 3 引腳解決方案需要幾個(gè)額外的無(wú)源元件。將 CE 永久拉高將無(wú)法充分利用 nRF24 模塊的節(jié)能功能。因此,它不是超低功耗應(yīng)用的理想解決方案。
- 不使用 IRQ 信號(hào)將釋放 1 針(例如 PB5),可用于其主要功能(RST/dWIRE),但我們?nèi)匀粺o(wú)法連接其他設(shè)備。
- 共享 CE 引腳不是通用解決方案。CSN 低時(shí)不會(huì)干擾模塊。但是,當(dāng)用于控制 nRF24 時(shí),它可能與任何連接的設(shè)備或現(xiàn)場(chǎng)總線不兼容。
- 單向 SPI 適用于與主網(wǎng)關(guān)具有單向(單工)通信的無(wú)線傳感器網(wǎng)絡(luò) (WSN)。因此,這不是通用解決方案,而是適用于特定類型的 WSN。
不幸的是,并非所有經(jīng)過(guò)審查的軟件解決方案都具有足夠低的內(nèi)存占用和/或支持所有功能:
- 用于 Arduino 和 RPi 的 nRF 驅(qū)動(dòng)程序具有針對(duì)ATtiny 子系列的優(yōu)化分支。前叉仍然很大,甚至無(wú)法容納內(nèi)存是 t13a 兩倍的 ATtiny2313A。
- Nerd Ralp將針對(duì) ATtiny84 (8KiB 閃存,14 針)定制的 tinkerer.eu 庫(kù)移植到他的 ATtiny85(8KiB 閃存)。目前尚不清楚總體占用空間是多少以及它是否適合 1KiB 閃存。此外,該庫(kù)依賴于 t13a 系列中未提供的通用串行接口 (USI) 外圍設(shè)備。這可以通過(guò)bit-banging來(lái)解決。
- 這個(gè)特定的共享 CE 引腳解決方案在 t13a 上運(yùn)行,nRF24 的 SW 驅(qū)動(dòng)程序是一個(gè)精簡(jiǎn)的Mirf 庫(kù),它只支持傳輸(盡管它需要具有 MOSI 和 MISO 信號(hào)的雙向 SPI)。
總而言之:所有列出的硬件解決方案都只優(yōu)化了一個(gè)參數(shù)——引腳數(shù)。它們都沒(méi)有同時(shí)優(yōu)化 1)能耗、2) 引腳數(shù)和3) 代碼占用空間。這對(duì)于超低功耗應(yīng)用至關(guān)重要。此外,還缺少一個(gè)合適的 SW 驅(qū)動(dòng)程序來(lái)支持半雙工無(wú)線通信,該驅(qū)動(dòng)程序可以適合 t13a 以及支持一些引腳數(shù)優(yōu)化解決方案。我們認(rèn)為還有進(jìn)一步提升的空間。出于這個(gè)原因,我們?cè)O(shè)計(jì)了一個(gè)全新的 SW 庫(kù),將在本文的其余部分進(jìn)行描述。該庫(kù)支持以下分別描述的三種硬件配置:
- 共享 CE 和 CSN 信號(hào) - 它可以獨(dú)立使用,也可以與其余兩種配置組合使用。
- 3線SPI(合并MISO和MOSI),
- 可選單向 SPI(無(wú) MISO)。
配置 1:共享 CE 和 CSN
CE 和 CSN 都是輸入引腳,根據(jù)nRF24 產(chǎn)品規(guī)范:
- CSN 是片選,低電平有效。需要至少 50ns的脈沖(低-高-低)持續(xù)時(shí)間來(lái)指示 SPI 上新事務(wù)的開始(規(guī)范中的第 49 頁(yè),圖 25 和參數(shù) Tcwh,表 18-25)。如果我們保持 CSN 關(guān)閉但不提供時(shí)鐘信號(hào) (CSK),則不會(huì)有數(shù)據(jù)流過(guò),模塊也不會(huì)收到任何命令。因此,nRF24 將保持其當(dāng)前狀態(tài),內(nèi)部寄存器不會(huì)受到影響。
- CE 用于在 RX 或 TX 模式下激活芯片,高電平有效。要將模塊的無(wú)線電切換到 TX 或 RX 模式,需要至少 10us的脈沖(第 22 頁(yè)的第 6.1.5 節(jié)和第 40 頁(yè)的圖 13)。
由此我們可以識(shí)別出共享 CE/CSN 信號(hào)的以下情況:
1) CE/CSN 為低電平,SCK 上無(wú)脈沖:默認(rèn)情況,未啟用無(wú)線電,nRF24 不受影響。
2) CE/CSN 為低電平,SCK 上的時(shí)鐘信號(hào):MCU 和 nRF 模塊之間通過(guò) SPI 傳輸數(shù)據(jù)。
3) CE/CSN 上的脈沖大于 50ns 且小于 10us :復(fù)位 SPI 接口并指示新事務(wù)的開始。
4) CE/CSN 上的10us脈沖:如果模塊之前處于StandBy-1模式(通過(guò) SPI 接口設(shè)置配置寄存器中的 PWR_UP 位激活),則啟用無(wú)線電模式(TX 或 RX)。
5) 將 CE/CSN 拉高 10us 以上:在 RX 模式下用于等待新消息。
我們將使用條件 (1) CE/CSN 低作為信號(hào)的默認(rèn)狀態(tài)。我們是否要啟用/禁用無(wú)線電(通常由 CE 控制)或通過(guò) SPI 讀/寫寄存器(通常由 CSN 控制)的選擇將使用不同的脈沖持續(xù)時(shí)間“編碼”。
如果我們想在 SPI 上執(zhí)行事務(wù)(訪問(wèn)控制/狀態(tài)寄存器和 TX/RX 數(shù)據(jù)緩沖區(qū)),該過(guò)程將采取以下步驟:
- 1 -> 3 -> 2 -> 1 。
要啟用收音機(jī),讓我們首先看看 TX 模式。在我們切換到 TX 模式之前,我們必須正確配置 nRF24 模塊(上電,進(jìn)入StandBy-1模式)并將數(shù)據(jù)上傳到 TX 緩沖區(qū)。這是通過(guò)上述常規(guī) SPI 事務(wù)和步驟完成的。之后,觸發(fā)傳輸?shù)倪^(guò)程將采取以下步驟:
- 1 -> 4 -> 1
模塊將切換到 TX 模式,將執(zhí)行所有操作(傳輸、等待確認(rèn)、重傳、超時(shí)),并且在所有 TX 緩沖區(qū)為空后將切換回StandBy-1模式,因?yàn)?CE 為低電平。如果我們一直保持 CE 為高電平,即使緩沖區(qū)為空,模塊也會(huì)進(jìn)入StandBy-2狀態(tài)。不同之處在于功耗:22uA 與 320uA,即StandBy-2 的15 倍。這樣的功耗等于完全激活狀態(tài)下 1MHz 的 ATtiny13A。模塊將停留在StandBy-1直到 MCU 將 nRF24 池化為狀態(tài)并最終關(guān)閉無(wú)線電(PWR_UP=0 位),即切換到PowerDown僅消耗 990nA 的狀態(tài)。CE 上的這個(gè)短脈沖節(jié)省了一些能量,這在超低功耗應(yīng)用中確實(shí)很重要。
接收(RX模式)的情況略有不同,因?yàn)槲覀円却容^長(zhǎng)的一段時(shí)間才能接收到一些數(shù)據(jù)。在 CE/CSN 上執(zhí)行 10us 的短脈沖是不夠的。一種選擇是將 CE/CSN 保持高電平一段所需的時(shí)間。在此期間,我們無(wú)法使用 SPI 訪問(wèn) nRF24。這個(gè)問(wèn)題可以通過(guò)在發(fā)送端設(shè)置足夠多的重傳、超時(shí)和消息確認(rèn)屬性來(lái)緩解。應(yīng)配置 SPI 事務(wù)讀取狀態(tài)寄存器的持續(xù)時(shí)間短于整個(gè)傳輸會(huì)話(包括重新傳輸)。該程序?qū)⒉扇∫韵虏襟E:
- 1 -> 5 -> 1
此解決方案適用于主要用于傳輸?shù)脑O(shè)備,但對(duì)于預(yù)期設(shè)備永久處于接收器模式的情況效果較差。對(duì)于這種情況,不合并 CE 和 CSN 可能更有效。相反,將 CE 拉至 Vcc(高電平)將使 ATtiny13A 無(wú)需關(guān)閉無(wú)線電即可匯集新消息。
配置 2:3 線 SPI
這個(gè)想法是通過(guò)一個(gè)電阻將 SPI 數(shù)據(jù)信號(hào) MOSI 和 MISO 合并為一個(gè),如下圖所示:
這不是一個(gè)新想法,在各種設(shè)計(jì)中相對(duì)常見,以減少信號(hào)的數(shù)量。nRF24 模塊會(huì)在這樣的信號(hào)合并下正常工作嗎?此圖中顯示了 SPI 與文檔中的 nRF24 模塊的通信:
我們看到nRF24使用MISO發(fā)送狀態(tài)字節(jié),而主控(MCU)向模塊發(fā)送命令,即全雙工通信。之后,MISO 線下降,僅在主 (MCU) 請(qǐng)求讀取操作時(shí)使用。兩個(gè)信號(hào)之間唯一可能的干擾是在開始時(shí)可能會(huì)破壞命令字節(jié)(在 MOSI 線上)。幸運(yùn)的是,這種“沖突”是通過(guò)電阻解決的。其值應(yīng)保證信號(hào)源/漏極不跨越 MCU 和模塊的引腳特性。在我們的案例中,從 4.7k 到 10k 的值運(yùn)行良好。
合并的 MISO/MOSI 節(jié)省了一個(gè)可用于直接控制 CE 的引腳。如果需要,可以將此配置與第一個(gè)配置混合使用 - 共享 CE/CSN,如下圖所示:
配置 3:?jiǎn)蜗?SPI
這種配置降低了 MISO(主輸入,從輸出)線,使其成為 3 線 SPI,即減少了一個(gè)引腳數(shù)。我們可以將數(shù)據(jù)寫入 nRF24 模塊,但我們將無(wú)法讀取它們:
它可能非常嚴(yán)格,但適用于某種類型的無(wú)線應(yīng)用程序 - 設(shè)備專門用作數(shù)據(jù)源(測(cè)量),它不接收來(lái)自其他設(shè)備或網(wǎng)關(guān)(中央集線器)的數(shù)據(jù)。如果我們可以有一個(gè) 3 線 SPI 來(lái)節(jié)省相同數(shù)量的引腳,為什么我們還需要單向 SPI?有兩個(gè)原因:
- 我們還希望最大限度地減少組件數(shù)量/成本和/或 PCB 尺寸和復(fù)雜性。
- 減少驅(qū)動(dòng)程序的內(nèi)存占用,從而為傳感器驅(qū)動(dòng)程序和應(yīng)用程序邏輯留下一些寶貴的空間。ATtiny13A 只有 1KiB 的閃存。
我們可以將此配置與第一個(gè)配置(共享 CE/CSN)相結(jié)合,以進(jìn)一步優(yōu)化 MCU 所需的引腳數(shù),如下圖所示:
庫(kù)配置
代碼在 C ( nRF24L01.c
) 和匯編程序 ( nRF24L01_asm.S
) 中都實(shí)現(xiàn)。頭文件nRF24L01.h
包含重要的常量和 API 函數(shù)的聲明。默認(rèn)情況下,該庫(kù)使用全 4 線 SPI 和獨(dú)立的 CE 和 CSN 信號(hào)。通過(guò)在文件中定義相應(yīng)的宏來(lái)配置庫(kù)以使用上述硬件選項(xiàng)之一。projdefs.h
#define NRF24L01_SHARED_CE_CSN // For shared CE/CSN configuration
此宏可以與以下任一(或無(wú))組合:
#define NRF24L01_3WIRE_SPI // If used 3-wire SPI (with resistor)
#define NRF24L01_DO_NOT_USE_MISO // Uni-directional configuration
如果上述三個(gè)宏均未定義,則假定為默認(rèn)配置。
定義連接到哪些端口 nRF24 信號(hào)也通過(guò)projdefs.h
標(biāo)頭中的宏完成。引腳配置宏是:
// MANDATORY macros for port output, port direction and pin reading:
#define NRF24L01_PORT PORTB
#define NRF24L01_DDR DDRB
#define NRF24L01_INPORT PINB
為特定的引腳配置定義以下宏(如果適用 - 請(qǐng)參閱上面的功能):
#define NRF24L01_CE PB0 // Optional. Do not define if shared CE/SCN is enabled
#define NRF24L01_CSN PB2 // Mandatory
#define NRF24L01_SCK PB1 // Mandatory
#define NRF24L01_MOSI PB3 // Mandatory
#define NRF24L01_MISO PB4 // Optional. Define only if 4-wire SPI is used.
API
API 只有 8 個(gè)(或 6 個(gè),如果是單向的)方法。必須調(diào)用的第一個(gè)函數(shù)是初始化:
void nrf24_init(void);
其余功能根據(jù) SPI 事務(wù)的長(zhǎng)度進(jìn)行拆分。零字節(jié)命令通過(guò)以下方式調(diào)用:
void nrf24_cmd(uint8_t cmd);
參數(shù)是文檔表 16 中的“命令字” ,例如:FLUSH_TX
, FLUSH_RX
, REUSE_TX_PL
. 為方便起見,頭文件包含所有命令代碼的定義。
使用一個(gè)數(shù)據(jù)字節(jié)調(diào)用命令(通常寫入寄存器):
void nrf24_writeReg(uint8_t cmd, uint8_t value);
如果我們沒(méi)有單向 SPI 配置,我們也可以讀取寄存器:
uint8_t nrf24_readReg(uint8_t cmd);
參數(shù) cmd 包含作為單個(gè)字節(jié)的復(fù)合寄存器地址:如果讀取,則為 1 并且00wAAAAA
是寄存器地址(第 9 章 - 寄存器映射)。w
AAAAA
寫入 TX 緩沖區(qū)和多字節(jié)寄存器:
void nrf24_writeRegs(uint8_t cmd, const uint8_t *buff, uint8_t size);
如果我們不使用單向 SPI 配置,讀取緩沖區(qū)的函數(shù):
void nrf24_readRegs(uint8_t cmd, uint8_t *buff, uint8_t size);
參數(shù)列表是不言自明的。最后一組 API 函數(shù)用于在一段時(shí)間內(nèi)“切換”CE 信號(hào):
void nrf24_pulseCE(void);
這將在 CE 上產(chǎn)生大約 15us 的脈沖。該功能用于在無(wú)線電通電且 TX 緩沖區(qū)充滿數(shù)據(jù)后切換到 TX 模式。
為了使 CE 保持較高的持續(xù)時(shí)間(通常在使用共享 CE/CSN 配置時(shí)用于 RX 模式),應(yīng)使用以下函數(shù):
void nrf24_pulseCE_ms(uint16_t milliseconds);
如果我們不與 CSN 共享 CE(單獨(dú)連接),則由應(yīng)用程序邏輯來(lái)控制 CE 引腳。
例子
該庫(kù)的存儲(chǔ)庫(kù)在main.c
文件中包含一個(gè)工作示例,用于通過(guò) nRF24L01 驅(qū)動(dòng)程序發(fā)送和接收 32 位序列號(hào)。
帶 ATtiny13A 的發(fā)射器
發(fā)射器結(jié)合了第一個(gè)(共享 CE/CSN)和第三個(gè)(單向)硬件配置。這占用了 MCU 上的 3 個(gè)引腳,剩下 2 個(gè)(如果沒(méi)有 RST,則為 +1)用于其他設(shè)備/傳感器/應(yīng)用程序。在我們的例子中,我們將一個(gè)紅色 LED 連接到 PB3:
應(yīng)用程序每 2 秒遞增一次,并向通道 120 上的管道 0 發(fā)送一個(gè) 32 位無(wú)符號(hào)整數(shù)。LED 亮起 800 毫秒以指示周期的開始。源代碼展示了從對(duì)講機(jī)上電、配置模塊、將數(shù)據(jù)移入緩沖區(qū)、傳輸和對(duì)講機(jī)電源的整個(gè)過(guò)程。
包括為 nRF24 設(shè)計(jì)的庫(kù)在內(nèi)的發(fā)射器應(yīng)用程序的總體占用空間為372 字節(jié)(可用 1KiB)和 6 字節(jié) SRAM(共 64 字節(jié))。
帶 ATtiny13A 的接收器
接收器應(yīng)用程序不使用共享 CE/CSN,因?yàn)樵撃K僅在 RX 模式下工作并且不傳輸數(shù)據(jù)(確認(rèn)數(shù)據(jù)包除外)。為了優(yōu)化引腳數(shù),我們應(yīng)用了總共占用 3 個(gè) MCU 引腳的 3 線 SPI:
應(yīng)用軟件每 100 毫秒?yún)R集一次狀態(tài)寄存器以獲取新數(shù)據(jù)包。如果數(shù)據(jù)包到達(dá),則將其讀入 MCU,并清除狀態(tài)。如果接收到的序列號(hào)與前一個(gè)序列號(hào)的增量相同,則綠色 LED 亮 1 秒。
包括為 nRF24 設(shè)計(jì)的庫(kù)在內(nèi)的接收器應(yīng)用程序的總體占用空間為420字節(jié)(可用 1KiB)和 6 字節(jié) SRAM(共 64 字節(jié))。
運(yùn)行演示應(yīng)用程序
同時(shí)運(yùn)行發(fā)射器和接收器:
如果接收器接收到預(yù)期的序列號(hào),接收器的 LED(綠色)將亮起 1 秒。紅色 (TX) 和綠色 (RX) LED 之間的最大延遲約為 100 毫秒,這是由 RX 側(cè)的池化引起的。
概括
提議的 nRF24 庫(kù)的主要目標(biāo)和成就是:
- 最小化管腳數(shù):它支持三種通用管腳優(yōu)化硬件配置(與此共享 CE 不同),不需要或單個(gè)電阻器(與Nerd Ralph 的解決方案不同)。nRF24 模塊在 MCU 上僅占用 3 個(gè)引腳而不是 6 個(gè)。這留下了其他 2 個(gè)引腳(如果 RST 用作 IO,則為 +1)用于連接傳感器或現(xiàn)場(chǎng)總線。
- 最小化功耗:專為超低功耗應(yīng)用而設(shè)計(jì)。通過(guò)極少指令的優(yōu)化庫(kù)實(shí)現(xiàn)節(jié)能。這減少了整體執(zhí)行時(shí)間。與其他類似方法(共享 CE/CSN 與 CE 永久激活)相比,引腳數(shù)最小化的方式為 nRF24 模塊提供更好的能量管理。
- 最小化庫(kù)的占用空間:非常低的占用空間 - 演示應(yīng)用程序有372 字節(jié)(發(fā)送器)和 420 字節(jié)(接收器),包括應(yīng)用程序的邏輯。它可以輕松裝入 ATtiny13A 并為其他應(yīng)用程序和連接的設(shè)備和現(xiàn)場(chǎng)總線留出足夠的空間。它可配置為半雙工或單工無(wú)線電通信,以進(jìn)一步最小化占用空間。與其他通用庫(kù)不同,它還可以部署在 ATtiny 子系列中具有相同或更大內(nèi)存的任何其他 MCU 上。SPI 接口實(shí)現(xiàn)為bit-banging,因此不依賴于通用串行接口 (USI)等外圍設(shè)備。
然而,實(shí)現(xiàn)給定的目標(biāo)需要付出一定的代價(jià)。API 提供的低粒度方法不如RF24 庫(kù)或類似庫(kù)中的高級(jí)方法方便。
- 使用NRF24L01和Arduino構(gòu)建無(wú)線傳感器網(wǎng)絡(luò)
- nRF24L01帶ATtiny85 3針開源分享
- 使用nrf24l01和傳感器的WSN技術(shù)發(fā)送數(shù)據(jù)
- 帶有ATTINY13A微控制器的PCB
- nRF24L01無(wú)線通信模塊使用簡(jiǎn)介
- 單片無(wú)線收發(fā)器芯片NRF24L01 PCB原理圖下載 0次下載
- nRF24L01單芯片2.4GHz收發(fā)器產(chǎn)品規(guī)格書 25次下載
- NRF24L01的模塊資料和C語(yǔ)言程序和使用與開發(fā)攻略合集免費(fèi)下載 41次下載
- NRF24L01和單片機(jī)2.4GHz收發(fā)器產(chǎn)品規(guī)范免費(fèi)下載 6次下載
- nRF24L01無(wú)線模塊使用教程之經(jīng)典使用程序詳細(xì)資料合集免費(fèi)下載 153次下載
- nRF24L01相關(guān)知識(shí)詳述 27次下載
- NRF24L01程序 25次下載
- NRF24l01 程序 34次下載
- NRF24L01編程心得 0次下載
- nRF24L01 pdf datasheet (Single
- stm32 24l01按鍵 改 發(fā)射頻率 3242次閱讀
- 微雪電子NRF24L01 RF Board 2.4G無(wú)線模塊簡(jiǎn)介 2827次閱讀
- 如何通過(guò)STM32驅(qū)動(dòng)nRF24L01發(fā)送數(shù)據(jù) 7654次閱讀
- 如何將芯片設(shè)置為發(fā)射模式(NRF24L01為例) 3682次閱讀
- 基于nRF24L01的無(wú)線USB控制系統(tǒng) 4684次閱讀
- 基于STM32F103和nRF24L01的近程無(wú)線數(shù)傳系統(tǒng)設(shè)計(jì) 2622次閱讀
- 基于STC89C52和nRF24L01的智能小車設(shè)計(jì) 8250次閱讀
- 一種DSP和nRF24L01的無(wú)線環(huán)境監(jiān)測(cè)系統(tǒng)的設(shè)計(jì) 2356次閱讀
- nrf24l01無(wú)線模塊傳輸距離分析 3.4w次閱讀
- 基于BOA和nRF24L01的智能家居系統(tǒng) 2676次閱讀
- 無(wú)線模塊nrf24l01中文資料_引腳圖及引腳定義_電路原理及實(shí)例 18.6w次閱讀
- 基于STM32F103和nRF24L01的近程無(wú)線數(shù)傳系統(tǒng)設(shè)計(jì) 3146次閱讀
- nRF24L01無(wú)線模塊的傳輸速度及距離 3.6w次閱讀
- nRF24L01寄存器地址與說(shuō)明 1.1w次閱讀
- nRF24L01主要參數(shù)及電路圖 2.4w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多