Microchip RN487x Bluetooth Module für Low-Power Peripherie meistern
Lernen Sie, Microchips RN487x Familie von Bluetooth Modulen für Ihre Low-Power Peripheral Projekte zu konfigurieren.
Wenn Sie ein kompaktes, energieeffizientes Gerät bauen, ist Bluetooth fast immer die Kommunikationswahl Nummer eins. Über die Jahre hat sich der Standard gereift, und heute bietet eine breite Palette ready-to-use Module ein komplettes System-on-Chip (SoC), das die Bedürfnisse vieler Peripherien trifft. Ein populäres Beispiel ist Nordics nRF52840, der einen 32-Bit-Prozessor, ein Multi-Protokoll Bluetooth Radio und ein volles Komplement an I/O Interfaces wie GPIO, PWM, USB, SPI und I²S kombiniert.
Während mächtig, können diese SoCs einschüchternd sein: Die Lernkurve und Entwicklungszeit, um die eingebettete Firmware zu integrieren, sind signifikant. Für viele gängige Use Cases – Remote Sensing oder Control mit nur einer Handvoll analoger oder digitaler Kanäle – ist oft eine einfachere, fokussiertere Lösung vorzuziehen.
Hier kommt die RN487x Familie von Microchip ins Spiel. Die zwei Module in dieser Familie – RN4870 und RN4871 – bieten multiple gleichzeitige bi-direktionale digitale und analoge Kanäle, während Design Footprint und Firmware-Aufwand minimal bleiben. Jedes Modul speichert eine kompakte Konfiguration in seinem Non-Volatile RAM, was Ihnen erlaubt, die Peripheral-Funktionalität exakt auf Ihre Anforderungen zuzuschneiden. Wichtig: Die Module bleiben vollständig konform zum Bluetooth Low Energy (BLE) Standard, was nahtloses Pairing mit modernen Smartphones und anderen BLE Clients sichert.
In dieser dreiteiligen Serie gehen wir durch die Erstellung eines voll funktionalen Bluetooth-fähigen Peripherals für vier typische Aufgaben: einen digitalen Sensor, eine digitale Steuerung, einen analogen Sensor und eine analoge Steuerung. Jedes Beispiel beinhaltet einen Referenzschaltplan, die präzisen RN487x Konfigurationsschritte und ein einfaches Python Script, das demonstriert, wie man vom Linux Host mit dem Peripheral interagiert. Die Scripts sind gründlich dokumentiert, sodass Sie die Peripherals einfach als Subsysteme in größere Designs einbetten können.
Design Overview
Unten ist eine grafische Illustration des „Analog Sensor“ Beispiels, die die Key Interfaces in Rot hervorhebt.
Wir bauen drei Kernkomponenten für dieses Beispiel:
- Die Peripheral Hardware, die das Sensor Signal liefert – ein analoger Transducer in diesem Fall, der eine variable Spannung generiert.
- Die Host Applikation, die die Daten dem Nutzer präsentiert – unser Python Script.
- RN487x Konfiguration, die das physische Signal auf die GATT Datenbank mapt, die vom Host genutzt wird.
Komponentenauswahl
Die RN487x Familie bietet zwei Varianten: RN4870 und RN4871. Sie unterscheiden sich hauptsächlich in Pin Count und verfügbaren I/O Typen. Unten ist eine reorganisierte Pin-Budget Tabelle, um Ihnen zu helfen, zu entscheiden, welcher Chip Ihr Projekt am besten bedient.
Es gibt drei I/O Pin Kategorien auf den Modulen:
| Typ | Beschreibung |
|---|---|
| ADC | Analoger Input: wandelt Spannung in numerischen Wert um. |
| PWM | Analoger Output: generiert Square Wave, dessen Frequenz und Duty Cycle durch zwei Zahlen gesetzt werden. |
| DIO | Digitaler Input oder Output: High oder Low Level repräsentiert Logic 1 oder 0. |
RN4870
| Pin Name/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
| Pin Name/Capability | P1_2 | P1_3 |
|---|---|---|
| ADC | x | |
| PWM | ||
| DIO | x | x |
Diese Tabellen klären: Wenn Ihr Design nur einen einzelnen analogen Input und kein PWM braucht, ist der RN4871 die leaneste Wahl. Für Projekte, die multiple Signale oder PWM benötigen, ist der RN4870 die passende Selektion. Im Analog Sensor Beispiel nutzen wir den RN4871 und verbinden den Sensor an Pin P1_2.
GATT (Generic Attribute) Profile Layer des BLE Protocol Stacks
Bevor Sie die Host Applikation schreiben, ist es essenziell, die GATT API zu verstehen, die die Kommunikation zwischen Host und Peripheral vermittelt.
Alle BLE Devices exponieren eine GATT Datenbank, die das Peripheral (Server) populiert. Der Host (Client) nutzt GATT Calls, um Werte zu lesen oder zu schreiben, identifiziert durch Handles oder Names. Typische Python GATT Operationen sehen so aus:
gatt_rq.connect() # Write a value to a characteristic handle gatt_rq.write_by_handle(vh_light, str(bytearray([8])))
Der erste Call etabliert eine Verbindung; der zweite schreibt Daten, die sofort auf den Peripheral Outputs reflektiert werden. Die GATT API wird von iOS, Android, Windows und Linux unterstützt. Unsere Beispiele nutzen Python auf Linux für breite Kompatibilität.
Modul Konfiguration
Um das physische Signal zur GATT Datenbank zu bridgen, müssen Sie den RN487x NVRAM mit zwei Key Konfigurationsblöcken programmieren:
- Characteristic Definition: Alloziert Datenbankplatz und assigniert einzigartige Identifikatoren für jeden Wert.
- Pin Binding: Mapt physische I/O Pins auf Datenbank Characteristics, was automatische Datenkonvertierung ermöglicht.
Der RN487x nutzt eine leichte Command Language für Konfiguration. Referenzieren Sie den Anhang für Details zum Etablieren einer Console Connection und Ausführen von Konfigurationscommands. Nach Programmierung könnte der NVRAM des Moduls so aussehen:
Alle Konfigurationswerte residieren in einer zwei-Level Hierarchie von Services und Characteristics – nützlich beim Skalieren zu Multi-Sensor oder Multi-Control Designs.
Das schließt Teil 1 unseres dreiteiligen RN487x Tutorials ab. Teile 2 und 3 werden Digital Input, Digital Control, Analog Sensor und Analog Control Implementierungen abdecken. Teil 4 wird Advanced Topics diskutieren, anwendbar auf alle Beispiele.
Unten ist ein Anhang, der beschreibt, wie man die Module konfiguriert, bevor man in die detaillierten Projekte eintaucht.
Console Connection nutzen, um den RN487x zu konfigurieren
Versorgen Sie das Modul mit Strom und etablieren Sie einen Serial Link zu Ihrer Workstation. Jeder Demo Schaltkreis beinhaltet einen 3-Pin „prog“ Jumper, der RX, TX und GND exponiert. Falls Sie Guidance benötigen, ist ein exzellenter Guide hier verfügbar.
Starten Sie einen Terminal Emulator. Das miniterm Utility (gebündelt mit vielen Python Distributionen) ist eine gute Wahl. In einer Shell starten Sie es so:
python -m serial.tools.miniterm --eol LF /dev/ttyUSB0 115200
Die Default Baudrate von 115200 ist geeignet für den RN487x.
Wechseln Sie von DATA zu COMMAND Mode, indem Sie drei Dollar-Zeichen tippen („$$$“) – Sie sehen die Zeichen nicht, aber der Prompt wechselt zu:
CMD>
Drücken Sie d gefolgt von Enter; das Modul echoed seinen Status:
CMD> BTA=D88039F80080 Name=RN_BLE Connected=no Authen=2 Features=0000 Services=00 CMD>
Echo aktivieren, wenn Sie die getippte Taste sehen wollen: Drücken Sie + und Enter:
CMD> ECHO ON CMD>
Einen neuen GATT Service zu erstellen ist so simpel wie ein einzelner PS Command, zum Beispiel:
CMD> PS,59c88760536411e7b114b2f933d5fe66 AOK
Projekt-Konfigurationen erfordern auch Multi-Line Scripts. Beginnen Sie ein Script mit WW, geben Sie jede Zeile ein, und beenden Sie mit Esc zum Commit:
CMD> ww @CONN |O,08,72 AOK CMD>
Gängige Initialisierung des Moduls
Bei Wiederverwendung eines RN487x Moduls über Projekte kann vorherige Konfiguration neue Uses interferieren. Führen Sie folgende Cleanup Steps vor jedem Beispiel aus:
- Existierendes Script löschen.
- Script Processing aktivieren.
- Existierende Service/Characteristic Definitionen löschen.
- Special Functions vom Pin, den Sie nutzen werden, entfernen (z. B. P1_2).
- Modul rebooten.
Führen Sie die Command Sequenz unten aus:
CMD> WC AOK CMD> SR,0040 AOK CMD> PZ AOK CMD> SW,0A,00 AOK CMD> R,1 Rebooting
Linux Setup Required für Example Python Scripts
Hardware
Stellen Sie sicher, dass Ihr Host System BLE Hardware hat (Bluetooth 4.0 oder neuer). Falls Sie einen USB Adapter brauchen, empfehlen wir einen basierend auf Qualcomm CSR8510, verfügbar hier.
Software
Die Example Scripts wurden auf Debian 10 getestet und sollten auf anderen Debian-basierten Distributionen wie Ubuntu laufen. Zwei Python Packages sind erforderlich, die nicht standardmäßig installiert sind:
python-bluez– bietet Zugriff auf den Bluetooth Stack.gattlib– bietet Python Bindings für GATT Operationen (install viapip).
gattlib zu installieren baut eine ELF Library, also brauchen Sie Build Tools und Libraries. Ein Helper Script, das alle Dependencies installiert, ist hier verfügbar. Nach Download, Script executable machen und ausführen.
Referenzen
- RN487x Datasheet
- RN487x User Guide
- GATT API in Windows
- GATT API in iOS
- GATT API in Python
Bleiben Sie dran für die nächsten Teile dieser Serie, wo wir die kompletten Digital Input und Digital Control Beispiele bauen.
Springen Sie zu Projekten 1 und 2: Digital Input und Digital Control bauen.
Internet der Dinge-Technologie
- Zelluläres IoT und Bluetooth LE: Synergistischer Ansatz für Konnektivität der nächsten Generation
- Bluetooth Mesh Design Entscheidungen: Module vs. Diskrete Devices
- Contrinex 2020: Cloud-Ready Sensoren & Bluetooth Light Curtains für Safety
- ADLINK deployed KI von Edge zu Cloud mit NVIDIA EGX Platform: Beschleunigte Edge Computing Lösungen
- Analoge Sensoren am Raspberry Pi ohne nativen ADC auslesen – Step-Response Methode
- Analoge Sensoren mit Raspberry Pi und Zabbix auslesen – Schritt-für-Schritt-Anleitung
- Daten im Internet of Reliability nutzen: Strategien für effektives Management
- Vom Edge zur Cloud: IoT Data Pipelines meistern
- Digitalisierung in Food & Beverage: Sicherheit, Rückverfolgbarkeit und Effizienz steigern
- Edge Computing & IoT-Strategie: Insights vom IoT World 2019