Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Internet der Dinge-Technologie

Sensoren und Steuerungen mit dem RN487x Bluetooth-Modul von Microchip

Erfahren Sie mehr über die RN487x-Familie von Bluetooth-Modulen und wie Sie sie für Ihre stromsparenden Peripherieprojekte konfigurieren.

Wenn Sie ein kleines Peripheriegerät mit geringem Stromverbrauch entwickeln, stehen die Chancen gut, dass Sie Bluetooth als Ihre Kommunikationsschicht in Betracht ziehen.

Mit der Weiterentwicklung des Standards haben sich Bluetooth-verbundene Geräte vermehrt. Es wurden Hardwaremodule eingeführt, die ein vollständiges SoC (System on Chip) für fast jedes Peripheriedesign bereitstellen. Die nordische nrf52840 ist ein gutes Beispiel. Der Systemkern ist ein 32-Bit-Prozessor und ein Multiprotokoll-Bluetooth-Funk. Dieser Kern ist von jeder Schnittstelle umgeben, die Sie möglicherweise benötigen; GPIO, PWM, USB, SPI, I 2 S und viele mehr.

Der Nachteil dieses und anderer leistungsstarker SoCs ist die Komplexität. Es ist eine beträchtliche Lernkurve und Entwicklungszeit erforderlich, um die erforderliche eingebettete Software für diese SoCs zu erstellen und zu integrieren.

Für einige der gängigsten Peripheriegerätetypen gibt es jedoch einfachere Alternativen. Wenn Ihr Peripheriegerät in erster Linie ein Fernbedienungssensor oder eine Fernbedienung mit einer begrenzten Anzahl von Kanälen (analog und digital) ist, können Sie Ihre Ziele wahrscheinlich mit dem RN487x-Modul von Microchip erreichen.

Diese Familie von zwei Bluetooth-Modulen bietet mehrere gleichzeitige bidirektionale digitale und analoge Kanäle. Das Modul wird auf spezifische Designs zugeschnitten, indem nur ein wenig Konfiguration im Modul-NVRAM gespeichert wird. Trotz der Einfachheit entspricht das Modul dennoch dem BLE-Standard (Bluetooth Low Energy), sodass es mit den neuesten Bluetooth-Clients, wie beispielsweise modernen Smartphones, kompatibel ist.

In dieser Serie demonstrieren wir die Verwendung des RN487x-Moduls. Wir werden für jede der vier Aufgaben ein funktionsfähiges, per Bluetooth verbundenes Peripheriegerät erstellen; einen digitalen Sensor, eine digitale Steuerung, einen analogen Sensor und eine analoge Steuerung. Jedes Beispiel enthält eine Nennschaltung und die erforderliche Konfiguration auf dem RN487x. Ein einfaches Anwendungsskript zum Trainieren des Peripheriegeräts wird ebenfalls bereitgestellt. Die Schnittstellenpunkte im Anwendungsskript sind gut dokumentiert; Maximierung des Potenzials, diese Peripheriegeräte als Subsysteme in größere Designs zu integrieren.

Designübersicht

Sehen wir uns eine grafische Aufschlüsselung für das Beispiel „Analogsensor“ an, mit den wichtigsten Schnittstellen in Rot.

Eine Darstellung eines Linux-Systems, das mit einem Peripheriegerät kommuniziert

Es gibt drei Systemelemente, die wir erstellen werden. Für das Peripheriegerät müssen wir Hardware erstellen, die unser Sensorsignal bereitstellt; der Wandler in diesem Beispiel. Er erzeugt eine variierende analoge Spannung. Für den Nutzer erstellen wir eine Anwendung zur Darstellung der Daten; das Python-Skript in diesem Beispiel.

Das Skript muss die GATT-API verwenden, um Informationen zum und vom Peripheriegerät zu übertragen. Wir müssen auch einige Konfigurationen im RN487x-Modul erstellen. Diese Konfiguration steuert den Datenfluss zwischen der Anwendung und der Hardware.

Komponentenauswahl

Es gibt zwei Module in der RN487x-Familie; die RN4870 und die RN4871. Sie unterscheiden sich in der Anzahl und Art der Pins, die für I/O vorgesehen sind. Sie finden diese Einschränkungen im Datenblatt und im Benutzerhandbuch, aber sie sind etwas verstreut. Unten sehen Sie eine Neuordnung des Pin-Budgets für die beiden Chips. Diese Anordnung sollte es einfacher machen, zu erkennen, welchen Chip Sie für Ihr Peripheriegerät benötigen.

Auf den c-Modulen stehen drei I/O-Pin-Typen zur Verfügung:

Typ Beschreibung
ADC Analoger Eingang:Ein Eingangssignalpegel wird in einen numerischen Bereich umgewandelt.
PWM Analoge Ausgabe:Ein Zahlenpaar wird in eine Rechteckwelle umgewandelt. Die Zahlen steuern die Frequenz und das Tastverhältnis der Rechteckwelle.
DIO Digitaler Eingang oder Ausgang:Beim digitalen Eingang steht der hohe bzw. niedrige Signalpegel für 1 bzw. 0. Umgekehrt für Digitalausgang.

Und hier sind die Pin-Budgets für die beiden Module:

RN4870

Bild aus dem RN487x-Datenblatt

Pin-Name/Funktion 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

Bild aus dem RN487x-Datenblatt

Pin-Name/Funktion P1_2 P1_3
ADC x
PWM
DIO x x

Diese Tabellen sollten deutlich machen, dass Sie den 4871 verwenden, wenn Sie PWM nicht benötigen und nur ein oder zwei Signale verwalten müssen. Dies spart Ressourcen. Wenn Sie PWM benötigen oder mehr als zwei Signale verwalten möchten, dann brauchen Sie den 4870. Für unseren analogen Sensor haben wir nur einen analogen Eingang, daher würde der 4871 ausreichen. Wir würden das Signal an den P1_2 Pin des Moduls anschließen.

GATT-Profilschicht (Generic Attribute) des BLE-Protokollstapels

Wir sind fast bereit, einige echte Beispiele zu implementieren. Um die Benutzeranwendung zu schreiben, benötigen wir jedoch ein genaueres Verständnis der API, die wir verwenden, wenn wir mit dem Peripheriegerät sprechen.

Alle Bluetooth Low Energy-Geräte verwenden das Generic Attribute (GATT)-Profil für den Austausch strukturierter Daten. In diesem Modell ist das Peripheriegerät als Server organisiert, der eine einfache Datenbank enthält. Die Datenbank wiederum enthält eine Reihe von Variablen, die die Nutzdaten darstellen. Anwendungen wie unser Python-Skript sind als Clients organisiert, die die GATT-API verwenden, um namensbasierte Abfragen in die Datenbank zu stellen. Die API kann verwendet werden, um Werte aus der Datenbank zu lesen und Werte in die Datenbank zu schreiben.

Als Vorschau sind hier zwei nützliche GATT-API-Methodenaufrufe in Python:

gatt_rq.connect() gatt_rq.write_by_handle(vh_light, str(bytearray([8]))

Der erste wird verwendet, um eine Verbindung zum Peripheriegerät herzustellen. Der zweite schreibt einige Werte in die Datenbank; diese Werte werden sofort als digitale Ausgänge am Peripheriegerät ausgegeben. Das erste Argument der Methode „write“ ist ein Handle, das für den oder die digitalen Ausgänge spezifisch ist, die wir steuern möchten. Für ein funktional vollständiges Beispiel sind nur noch wenige Zeilen erforderlich.

Diese API wird als Teil von Bluetooth-Diensten in iOS, Android, Windows und Linux bereitgestellt. Die Beispiele in diesem Artikel sind in Python geschrieben und werden in vielen gängigen Linux-Distributionen ausgeführt.

Modulkonfiguration

Der Parameter ‚vh_handle‘ in der obigen Skriptmethode führt uns zum letzten Element in diesem Entwurfsmuster. Der Parameter ist eine Referenz in der Software für ein bestimmtes Signal auf physikalischer Ebene am Peripheriegerät. Aber wie wird dieser Datenpfad vervollständigt? Es gibt zwei Konfigurationselemente im NVRAM des RN487x, die dies tun; charakteristische Definition und Pinbindung.

Die RN487x-Konfiguration wird mit einer benutzerdefinierten Befehlssprache in das Modul geladen. Im Anhang finden Sie eine allgemeine Anleitung zum Herstellen einer Konsolenverbindung zum Modul und zum Ausgeben von Konfigurationsbefehlen.

Nachdem wir diese Befehle ausgegeben haben, sieht die nichtflüchtige Konfiguration im RN487x etwa so aus:

Beachten Sie, dass alle Datenwerte innerhalb einer zweistufigen Hierarchie von „Diensten“ und „Eigenschaften“ existieren. Diese Organisation ist mehr als wir brauchen, wird aber für komplexe Systeme nützlich, in denen mehrere Sensoren und Steuerungen in logisch getrennten Diensten vorhanden wären.


Damit ist Teil eins unserer dreiteiligen Serie zum RN487x-Modul abgeschlossen. Die Teile 2 und 3 verwenden dasselbe Designmuster, um einen digitalen Eingang, eine digitale Steuerung, einen analogen Sensor und eine analoge Steuerung zu erstellen.

Teil 4 enthält auch einige Themen für weitere Studien, die für alle Beispiele gelten.

Im Folgenden finden Sie vor jeder Projektbeschreibung, die in anderen Artikeln folgt, einen Anhang mit Informationen zur Konfiguration Ihrer Module und deren Verwendung.

Verwenden einer Konsolenverbindung zum Konfigurieren des RN487x

Um das RN487x zu konfigurieren, versorgen Sie zuerst das Modul mit Spannung und stellen Sie eine serielle Verbindung zwischen dem Modul und einer Workstation her. Jede unserer Demonstrationsschaltungen verfügt über einen 3-poligen „Prog“-Jumper, der die erforderlichen RX-, TX- und GND-Signale freigibt. Wenn Sie sich nicht sicher sind, wie Sie diese Verbindung zu Ihrer Workstation herstellen, finden Sie ​hier​ eine hervorragende Anleitung.

Starten Sie einen Terminalemulator auf Ihrer Workstation. Ein besonders gut geeigneter und weit verbreiteter Emulator ist das Dienstprogramm „miniterm“, das in den meisten Python-Umgebungen enthalten ist. In einer Workstation-Shell kann es wie folgt gestartet werden:

python -m serial.tools.miniterm --eol LF /dev/ttyUSB0 115200

Dieses Beispiel zeigt einen Portnamen (/dev/ttyUSB0), der für ein Linux-System geeignet ist. Die Form des Portnamens unterscheidet sich für andere Betriebssysteme. Die Standardbaudrate für das Modul ist 115200 und es gibt wenig Grund, sie zu ändern.

Das RN487x-Modul befindet sich standardmäßig im DATA-Modus. Wir brauchen den COMMAND-Modus. Dieser Modus wird durch die Eingabe von drei Dollarzeichen („$$$“) in die Terminalemulatoranwendung aktiviert. Sie werden die Zeichen im Terminalfenster nicht sehen, aber das Ergebnis sollte eine Eingabeaufforderung sein, die vom RN4871 zurückgegeben wird:

CMD>

Versuchen Sie, die 'd'-Taste gefolgt von der 'Enter'-Taste zu drücken. Als Ergebnis sollten Sie Folgendes sehen:

CMD> BTA=D88039F80080 Name=RN_BLE Verbunden=nein Authen=2 Funktionen=0000 Dienstleistungen=00 CMD>

Dies ist eine minimale Beschreibung des Modulstatus. Beachten Sie, dass der Befehlsinterpreter das von Ihnen eingegebene Zeichen ('d') nicht anzeigt. Sie sollten 'Echo' aktivieren, um dies zu beheben. Drücken Sie dazu die '+'-Taste gefolgt von der 'Enter'-Taste. Das Gerät sollte wie folgt reagieren:

CMD> ECHO EIN CMD>

Sie befinden sich jetzt an einem Punkt, an dem Sie verschiedene Konfigurationsaufgaben ausführen können, die im Rest dieses Projekts beschrieben werden. So erstellen Sie beispielsweise einen Dienst, indem Sie einfach einen vollständigen „PS“-Befehl in eine Zeile eingeben, gefolgt von der „Enter“-Taste. Beispiel:

CMD> PS,59c88760536411e7b114b2f933d5fe66 AOK

Jede der Projektkonfigurationen erfordert außerdem, dass ein mehrzeiliges Skript an den Modul-NVRAM übergeben wird. Diese Art von mehrzeiligen Befehlen erfordert etwas mehr Erklärung. Sie beginnen die Skripteingabe mit einem ‚WW‘-Befehl, gefolgt von ‚Enter‘. Geben Sie dann jede Skriptzeile ein. Jede Skriptzeile, auch die letzte Zeile, wird ebenfalls mit der Eingabetaste abgeschlossen.

Schließlich übergeben Sie das Skript, indem Sie die Taste ‚esc‘ drücken. Beispiel:

CMD> ww @CONN |0,08,72 AOK CMD>

Gemeinsame Initialisierung des Moduls

Wenn Sie ein RN487x-Modul für eines der Beispiele in diesem Projekt verwendet haben oder das Modul für einen ganz anderen Zweck verwendet haben und das Modul für ein anderes Beispiel konfigurieren möchten, ist es möglich, dass das Modul eine Konfiguration hat die in Konflikt mit der nächsten beabsichtigten Verwendung stehen.

​Die folgenden Schritte sollten vor jedem Beispiel in diesem Projekt durchgeführt werden:

  • Löschen Sie alle vorhandenen Skripte.
  • Aktiviere die Skriptverarbeitung.
  • Löschen Sie alle vorhandenen Dienst-/Merkmalsdefinitionen.
  • Entfernen Sie alle Sonderfunktionen von dem von uns verwendeten Pin (P1_2, Index 0A).
  • Starten Sie das Modul neu.

Verwenden Sie den vorherigen Anhangsabschnitt, um auf die Befehlsshell des Moduls zuzugreifen. Verwenden Sie dann die folgende Befehlsfolge, um die erforderliche Initialisierung durchzuführen:

CMD> WC AOK CMD> SR,0040 AOK CMD> PZ AOK CMD> SW,0A,00 AOK CMD> R,1 Neustart

Linux-Setup zum Ausführen von Python-Beispielskripten erforderlich

Hardware

Das System, auf dem diese Skripte ausgeführt werden, benötigt natürlich Hardware, die Bluetooth Low Energy (BLE) unterstützt. BLE wurde in Version 4 eingeführt. Wenn Ihre Bluetooth-Hardware also eine niedrigere Version angibt, wird es für diese Beispiele wahrscheinlich nicht funktionieren.

Wenn Sie einen USB-Adapter für eine Workstation kaufen möchten, um diese Beispiele auszuprobieren, empfehle ich jeden Adapter, der den ​Qualcomm CSR8510​ verwendet. Eine Instanz kann ​hier​ erworben werden.

Software

Dieses Setup wurde für Debian 10 verifiziert. Es sollte für Debian-basierte Distributionen wie Ubuntu anwendbar sein. Es gibt zwei Komponenten, auf die von diesen Beispielen direkt zugegriffen wird, die nicht standardmäßig in Debian 10 installiert sind;

  • Das Python-Modul für den Zugriff auf den Bluetooth-Stack. Diese Komponente ist über das Paketverwaltungssystem verfügbar und heißt ‚python-bluez‘.
  • Das Python-Modul speziell für Bluetooth-GATT-Aufrufe; ‚gattlib‘. Diese Komponente ist im offiziellen Python-Paketindex verfügbar (über das Dienstprogramm 'pip').

Die ‚pip‘-Installation von ‚gattlib‘ erstellt eine ELF-Bibliothek. Dieser Vorgang erfordert auch einige Tools und Bibliotheken.

Zusammenfassend muss eine Liste von Paketen vom Systempaketmanager angefordert werden, gefolgt von einer einzelnen Modulanfrage an „pip“. Ein Skript zum Ausführen dieser Aktionen wurde hier bereitgestellt. Wenn Sie sich entscheiden, das Skript auszuführen, müssen Sie ihm nach dem Download die Berechtigung zum Ausführen erteilen.

Referenzen

  • RN487x-Datenblatt
  • RN487x-Benutzerhandbuch
  • GATT-API in Windows
  • GATT-API in iOS
  • GATT-API in Python

Schauen Sie zurück für die nächsten Teile dieser Projektserie, in denen wir die vollständigen Beispiele erstellen werden.

Springe zu den Projekten 1 und 2:Aufbau eines digitalen Eingangs und einer digitalen Steuerung.


Internet der Dinge-Technologie

  1. Die Synergie von mobilem IoT und Bluetooth LE
  2. Entwerfen mit Bluetooth Mesh:Chip oder Modul?
  3. Contrinex:Cloud-fähige intelligente Sensoren und Sicherheits-Lichtvorhänge mit Bluetooth-Schnittstelle
  4. ADLINK:Bereitstellung von KI vom Edge bis zur Cloud mit Edge AI Solutions und der NVIDIA EGX-Plattform
  5. Analoge Sensoren ohne analoge Eingänge auf dem Raspberry Pi
  6. Auslesen von analogen Sensoren mit Raspberry Pi und Zabbix Supervisor
  7. Was mache ich mit den Daten?!
  8. Nutzung von IoT-Daten vom Edge in die Cloud und zurück
  9. Digitalisierung und Lebensmittel- und Getränkeindustrie
  10. The Edge und IoT:Einblicke aus der IoT World 2019