Microchip RN487x Bluetooth-modules beheersen voor low-power perferieën
Leer hoe u Microchip's RN487x-familie Bluetooth-modules configureert voor uw low-power perferie-projecten.
Als u een compact, energie-efficiënt apparaat bouwt, is Bluetooth bijna altijd de communicatiekeuze van record. De standaard is de afgelopen jaren gerijpt, en vandaag biedt een wijd bereik aan kant-en-klaar modules een complete system-on-chip (SoC) die aan de behoeften van veel perferieën voldoet. Een populair voorbeeld is Nordic's nrf52840, die een 32-bit processor, een multi-protocol Bluetooth-radio en een volledige complement aan I/O-interfaces combineert zoals GPIO, PWM, USB, SPI en I²S.
Hoewel krachtig, kunnen deze SoCs intimiderend zijn: de leercurve en ontwikkeltijd vereist om de embedded firmware te integreren, zijn significant. Voor veel veelvoorkomende use cases – remote sensing of besturing met slechts een handvol analoge of digitale kanalen – is een simpeler, meer gefocuste oplossing vaak te prefereren.
Hier komen de RN487x-familie van Microchip. De twee modules in deze familie – RN4870 en RN4871 – bieden meerdere gelijktijdige bi-directionele digitale en analoge kanalen terwijl het ontwerp-footprint en firmware-inspanning minimaal blijft. Elke module slaat een compacte configuratie op in zijn non-volatile RAM, wat u in staat stelt de functionaliteit van de perferie af te stemmen op uw exacte vereisten. Belangrijk is dat de modules volledig compliant blijven met de Bluetooth Low Energy (BLE)-standaard, wat naadloze pairing met moderne smartphones en andere BLE-clients garandeert.
In deze driedelige serie lopen we door het maken van een volledig functionele Bluetooth-ingeschakelde perferie voor vier typische taken: een digitale sensor, een digitale besturing, een analoge sensor en een analoge besturing. Elk voorbeeld bevat een referentie-circuit, de precieze RN487x-configuratiestappen en een eenvoudig Python-script dat demonstreert hoe u met de perferie kunt interacteren vanaf een Linux-host. De scripts zijn grondig gedocumenteerd zodat u de perferie eenvoudig als subsysteem in grotere ontwerpen kunt embedden.
Ontwerp-overzicht
Hieronder is een grafische illustratie van het "analoge sensor" voorbeeld, met de belangrijkste interfaces in rood gemarkeerd.

Een representatie van een Linux-systeem dat communiceert met een perferie
We bouwen drie kerncomponenten voor dit voorbeeld:
- De perferie-hardware die het sensor-signaal levert – een analoge transducer in dit geval, die een varierende spanning genereert.
- De host-applicatie die de data aan de gebruiker presenteert – ons Python-script.
- RN487x-configuratie die het fysieke signaal mapt naar de GATT-database die door de host gebruikt wordt.
Componentselectie
De RN487x-familie biedt twee varianten: RN4870 en RN4871. Ze verschillen voornamelijk in pincount en beschikbare I/O-typen. Hieronder is een gereorganiseerde pin-budget-tabel om u te helpen bepalen welke chip het beste bij uw project past.
Er zijn drie I/O-pincategorieën op de modules:
| Type | Beschrijving |
| ADC | Analoge input: converteert een spanning naar een numerieke waarde. |
| PWM | Analoge output: genereert een blokgolf wiens frequentie en duty-cycle ingesteld worden door twee getallen. |
| DIO | Digitale input of output: een hoog of laag niveau stelt logica 1 of 0 voor. |
RN4870

Afbeelding uit de RN487x-datasheet
| Pin Naam/Capability | P1_0 | P1_1 | P1_2 | P1_3 | P2_2 | P2_3 | P2_4 | P2_5 |
| ADC | x | x | x | x | ||||
| PWM | x | x | ||||||
| DIO | x | x | x | x | x |
RN4871

Afbeelding uit de RN487x-datasheet
| Pin Naam/Capability | P1_2 | P1_3 |
| ADC | x | |
| PWM | ||
| DIO | x | x |
Deze tabellen verduidelijken dat als uw ontwerp slechts een enkele analoge input en geen PWM-outputs nodig heeft, de RN4871 de meest zuinige keuze is. Voor projecten die meerdere signalen of PWM vereisen, is de RN4870 de geschikte selectie. In het analoge-sensor-voorbeeld gebruiken we de RN4871 en verbinden de sensor met pin P1_2.
GATT (Generic Attribute) Profiel-laag van de BLE-protocolstack
Voordat u de host-applicatie schrijft, is het essentieel om de GATT-API te begrijpen die de communicatie tussen de host en de perferie medieert.
Alle BLE-apparaten blootstellen een GATT-database die de perferie (server) vult. De host (client) gebruikt GATT-calls om waarden te lezen of te schrijven geïdentificeerd door handles of namen. Typische Python GATT-operaties zien er zo uit:
gatt_rq.connect() # Waarde schrijven naar een karakteristiek-handle gatt_rq.write_by_handle(vh_light, str(bytearray([8])))
De eerste call stelt een verbinding vast; de tweede schrijft data die direct gereflecteerd wordt op de perferie's outputs. De GATT-API wordt ondersteund door iOS, Android, Windows en Linux. Onze voorbeelden gebruiken Python op Linux voor brede compatibiliteit.
Module-configuratie
Om het fysieke signaal te bruggen naar de GATT-database, moet u de RN487x's NVRAM programmeren met twee cruciale configuratieblokken:
- Karakteristiek-definitie: Wijst databasesruimte toe en kent unieke identificatoren toe voor elke waarde.
- Pin-binding: Map fysieke I/O-pins naar database-karakteristieken, wat automatische dataconversie mogelijk maakt.
De RN487x gebruikt een lichtgewicht commandotaal voor configuratie. Verwijs naar de appendix voor details over het vestigen van een console-verbinding en het uitgeven van configuratie-commando's. Na programmeren, kan de module's NVRAM er zo uitzien:

Alle configuratiewaarden bevinden zich binnen een twee-niveau hiërarchie van services en karakteristieken – nuttig bij het schalen naar multi-sensor of multi-besturing ontwerpen.
Dit concludeert deel één van onze driedelige RN487x-tutorialserie. Delen 2 en 3 zullen digitale input, digitale besturing, analoge sensor en analoge besturing implementaties dekken. Deel 4 zal geavanceerde onderwerpen bespreken toepasbaar op alle voorbeelden.
Hieronder volgt een appendix die uitlegt hoe u de modules configureert voordat we in de gedetailleerde projecten duiken.
Een console-verbinding gebruiken om de RN487x te configureren
Voed de module en vestig een seriële link naar uw workstation. Elk demo-circuit bevat een 3-pin "prog" jumper die RX, TX en GND blootstelt. Als u begeleiding nodig heeft, is een uitstekende gids beschikbaar hier.
Start een terminal-emulator. De miniterm utility (gebundeld met veel Python-distributies) is een goede keuze. In een shell, start het als volgt:
python -m serial.tools.miniterm --eol LF /dev/ttyUSB0 115200
De standaard baudrate van 115200 is geschikt voor de RN487x.
Schakel van DATA naar COMMAND-mode door drie dollartekens ("$$$") te typen – u ziet de karakters niet, maar de prompt verandert in:
CMD>
Probeer d te drukken gevolgd door Enter; de module echo't zijn status:
CMD> BTA=D88039F80080 Name=RN_BLE Connected=no Authen=2 Features=0000 Services=00 CMD>
Schakel echo in als u de getypte toets wilt zien: druk + en Enter:
CMD> ECHO ON CMD>
Een nieuwe GATT-service aanmaken is zo simpel als een enkel PS-commando uitgeven, bijvoorbeeld:
CMD> PS,59c88760536411e7b114b2f933d5fe66 AOK
Projectconfiguraties vereisen ook multi-line scripts. Begin een script met WW, voer elke regel in, en eindig met Esc om te committen:
CMD> ww @CONN |O,08,72 AOK CMD>
Algemene initialisatie van de module
Bij hergebruik van een RN487x-module over projecten, kan eerdere configuratie interfereren met nieuwe uses. Voer de volgende cleanup-stappen uit voor elk voorbeeld:
- Wis elk bestaand script.
- Schakel script-verwerking in.
- Wis bestaande service/karakteristiek-definities.
- Verwijder speciale functies van de pin die u gaat gebruiken (bijv. P1_2).
- Herstart de module.
Voer de onderstaande commando-sequentie uit:
CMD> WC AOK CMD> SR,0040 AOK CMD> PZ AOK CMD> SW,0A,00 AOK CMD> R,1 Rebooting
Linux-setup vereist voor het draaien van voorbeeld-Python-scripts
Hardware
Zorg dat uw host-systeem BLE-hardware heeft (Bluetooth 4.0 of nieuwer). Als u een USB-adapter nodig heeft, raden we een aan gebaseerd op de Qualcomm CSR8510, beschikbaar hier.
Software
De voorbeeldscripts zijn getest op Debian 10 en zouden moeten werken op andere Debian-gebaseerde distributies zoals Ubuntu. Twee Python-pakketten zijn vereist die niet standaard geïnstalleerd zijn:
python-bluez– biedt toegang tot de Bluetooth-stack.gattlib– biedt Python-bindings voor GATT-operaties (installeer viapip).
Het installeren van gattlib bouwt een ELF-bibliotheek, dus u hebt build-tools en bibliotheken nodig. Een helper-script dat alle dependencies installeert, is beschikbaar hier. Na downloaden, maak het script uitvoerbaar en draai het.
Referenties
- RN487x Datasheet
- RN487x User Guide
- GATT API in Windows
- GATT API in iOS
- GATT API in Python
Blijf op de hoogte voor de volgende delen van deze serie, waar we de complete digitale input en digitale besturing voorbeelden bouwen.
Spring naar projecten 1 en 2: een digitale input en digitale besturing bouwen.
Internet of Things-technologie
- Analoge Sensoren Meten op Raspberry Pi Zonder Native ADC
- Analoge Sensoren Uitlezen met Raspberry Pi en Zabbix: Een Stapsgewijze Handleiding
- Bluetooth Mesh-ontwerpkeuzes: Module vs. discreet apparaat
- Contrinex 2020: cloud-klaar sensoren & Bluetooth lichtgordijnen voor veiligheid
- ADLINK implementeert AI van edge naar cloud met NVIDIA EGX-platform: versnelde edge-computing-oplossingen
- Cellulaire IoT en Bluetooth LE combineren: een synergistische benadering voor next-gen connectiviteit
- Data benutten in het Internet of Reliability: Strategieën voor effectief beheer
- Van Edge Naar Cloud: IoT Datapijplijnen Beheersen
- Digitalisering in Voedsel & Dranken: Veiligheid, traceerbaarheid en efficiëntie verbeteren
- Edge Computing & IoT Strategie Inzichten van IoT World 2019
- Hoe Een Geünificeerd IIoT-platform Digitale Productiesucces Drijft