So bauen Sie einen digitalen Eingang und eine digitale Steuerung mit dem Bluetooth-Modul RN487x von Microchip
Erfahren Sie, wie Sie mit einem Microchip-Modul Prototypen für digitale Eingänge und digitale Steuerungsperipheriegeräte verwenden.
In diesem Artikel, dem zweiten einer dreiteiligen Serie zu Microchips RN487x Bluetooth-Modulen, zeige ich Ihnen, wie Sie einen digitalen Eingang (einen Schalter) und eine digitale Steuerung (einer LED) erstellen.
Bitte lesen Sie meinen ersten Artikel für Hintergrundinformationen und Anweisungen zur Konfiguration des RN487x-Moduls.
Projekt 1:RN478x Digitaler Eingangsschalter
Unser Designmuster besteht aus drei Komponenten, die wir bereitstellen müssen:
- Hardware: Aufgabenspezifische Hardware zur Generierung des digitalen Signals
- Konfiguration: RN487x-Modulbefehle, um eine Variable in einer Datenbank zuzuweisen und das Signal der Variablen zuzuordnen
- Bewerbung: Skript auf einer Workstation, um den Datenbankwert zu akzeptieren
Was folgt, ist die Komponentenaufschlüsselung.
Digitale Eingangshardware
Die Rolle des „digitalen Eingangs“ wird einfach durch einen Schalter bereitgestellt; SW1.
Das RN487x-Modul hat interne Pullups an den Pins, so dass ein beim Schließen mit Masse verbundener Schließerschalter uns die notwendige 2-Zustands-Steuerung gibt.
Da wir nur ein Signal verwalten und kein PWM verwenden, haben wir uns für den RN4871 entschieden. Die Schaltung kann mit einem Paar AAA-Batterien oder sogar einer Knopfzelle betrieben werden.
Die restlichen Schaltungselemente sind;
- C1: Ein Bypass-Kondensator zur Leistungsstabilisierung
- R1,C2: Eine Verzögerung für das Zurücksetzen des Prozessors beim Einschalten
- J1: Ein serieller Port zur Konfiguration
Digitaleingangskonfiguration
Stellen Sie vor dem Erstellen der Konfiguration für dieses Beispiel sicher, dass sich das Modul in einem bekannten Zustand befindet. Dies wird im Anhangsabschnitt zur allgemeinen Initialisierung beschrieben. Überspringe diesen Schritt nicht!
Wir brauchen nur ein Merkmal in der Datenbank, um unseren Sensorzustand darzustellen. Also erstellen wir einen Dienst und ein Merkmal in diesem Dienst. Die beiden entsprechenden Befehle sind:
PS,59c88760536411e7b114b2f933d5fe66 PC,59c889e0536411e7b114b2f933d5fe66,10,01
Der erste Befehl, PS, erstellt den Dienst. Der zweite Befehl PC erstellt das Merkmal. In beiden Befehlen ist der erste Parameter die Kennung, die es unserem Peripheriegerät ermöglicht, im Universum anderer Bluetooth-Peripheriegeräte zu existieren und dennoch eindeutig darauf zuzugreifen. Dieser Parameter muss dem UUID-Standard entsprechen. Sie können die gezeigten Beispielwerte verwenden. Es ist auch einfach, eine beliebige Anzahl von Standard-UUIDs zu erstellen.
Im PC-Befehl teilt der zweite Parameter der Bluetooth-Schicht mit, wie Änderungen des Wertes zum Client gelangen sollen. In diesem Fall sagt der Parameter (10), dass Änderungen des Wertes zu einer sofortigen Benachrichtigung an Clients führen können. Dies ist ein wichtiger Teil unserer Absicht für dieses Beispiel. Im PC-Befehl schließlich definiert der dritte Parameter die Größe des Wertes in Bytes; nur eine in diesem Fall (01).
Der Skriptteil unserer Konfiguration sieht so aus:
@PW_ON SW,0A,09 @PIO1H SHW,0072,01 @PIO1L SHW,0072,00
In diesem Skript gibt es drei Methoden, denen jeweils ein „@“ vorangestellt ist. Jede Methode wird auf einem bestimmten Systemereignis ausgeführt.
- PW_ON: Läuft beim Einschalten. Die Methode konfiguriert unseren interessierenden Pin (P1_2) als „getriggertes“ digitales Eingangssignal.
- PIO1H: Wird ausgeführt, wenn das Triggersignal auf High übergeht. Die Methode schreibt eine „1“ in die Datenbank.
- PIO1L: Wird ausgeführt, wenn das Triggersignal auf Low übergeht. Die Methode schreibt eine ‚0‘ in die Datenbank.
Digitaleingangsanwendung
Das Python-Skript ist switch.py und kann hier gefunden werden. Bearbeiten Sie das Skript und ersetzen Sie die Beispiel-MAC-Adresse durch die MAC-Adresse Ihres Geräts. Um das Beispiel zu üben, schalten Sie dann einfach das Peripheriegerät ein und führen das Skript dann auf einem System mit den entsprechenden Bluetooth-Funktionen aus. Hilfe zu diesem Setup unter Linux finden Sie im Anhang. Das Skript gibt Meldungen aus, um den Fortschritt beim Verbinden mit dem Peripheriegerät anzuzeigen. Nachdem das Peripheriegerät angeschlossen ist, drücken Sie den Schalter einige Male und lassen Sie ihn wieder los. Jedes Öffnen/Schließen-Ereignis des Schalters wird mit einer Meldung des laufenden Skripts vermerkt.
Das Skript ist kurz und enthält Kommentare für alle Funktionsblöcke und GATT-API-Aufrufe.
Die in diesem Beispiel verwendete BLE-Funktion ist die Benachrichtigung.
- Wir verwenden eine Callback-Methode, um eine Signaländerung vom Peripheriegerät zu verarbeiten, wenn es passiert. Wir müssen das Peripheriegerät nicht abfragen, um den Status des Signals zu erfahren.
- Wir müssen dem Peripheriegerät mitteilen, dass wir diese Benachrichtigungen wünschen, indem wir in ein Systemmerkmal schreiben.
Projekt 2:RN487x Digital Control
Unser Designmuster besteht aus drei Komponenten, die wir bereitstellen müssen:
- Hardware: Aufgabenspezifische Hardware zum Ausdrucken einer digitalen Ausgabe
- Konfiguration: RN487x-Modulbefehle, um eine Variable in einer Datenbank zuzuweisen und die Variable dem Signal zuzuordnen
- Bewerbung: Skript auf einer Workstation, um den Datenbankwert zu schreiben
Was folgt, ist die Komponentenaufschlüsselung.
Digitale Steuerungshardware
Die Rolle des „digitalen Ausgangs“ wird einfach von einer LED übernommen; D1.
Die Referenzschaltungen des RN487x-Moduls schlagen Open-Collector-GPIO vor, sodass wir die LED entsprechend beleuchten, indem wir Strom abziehen.
Da wir nur ein Signal verwalten und kein PWM verwenden, haben wir uns für den RN4871 entschieden. Die Schaltung kann mit einem Paar AAA-Batterien oder sogar einer Knopfzelle betrieben werden.
Die restlichen Schaltungselemente sind:
- C1: Ein Bypass-Kondensator zur Leistungsstabilisierung
- R1,C2: Eine Verzögerung für das Zurücksetzen des Prozessors beim Einschalten
- J1: Ein serieller Port zur Konfiguration
Konfiguration der digitalen Steuerung
Stellen Sie vor dem Erstellen der Konfiguration für dieses Beispiel sicher, dass sich das Modul in einem bekannten Zustand befindet. Dies wird im Anhangsabschnitt zur allgemeinen Initialisierung beschrieben.
Überspringe diesen Schritt nicht!
Wir brauchen nur ein Merkmal in der Datenbank, um unseren Sensorzustand darzustellen. Also erstellen wir einen Service und ein Merkmal in diesem Service.
Die beiden entsprechenden Befehle sind:
PS,59c88760536411e7b114b2f933d5fe66 PC,59c889e0536411e7b114b2f933d5fe66,08,01
Der erste Befehl, PS, erstellt den Dienst. Der zweite Befehl PC erstellt das Merkmal. In beiden Befehlen ist der erste Parameter die Kennung, die es unserem Peripheriegerät ermöglicht, im Universum anderer Bluetooth-Peripheriegeräte zu existieren und dennoch eindeutig darauf zuzugreifen. Dieser Parameter muss dem UUID-Standard entsprechen. Sie können die gezeigten Beispielwerte verwenden. Es ist auch einfach, eine beliebige Anzahl von Standard-UUIDs zu erstellen.
Im PC-Befehl teilt der zweite Parameter der Bluetooth-Schicht mit, wie Wertänderungen an das Peripheriegerät gelangen sollen. In diesem Fall sagt der Parameter (08), dass das Peripheriegerät eine Bestätigung an den Client senden muss, wenn ein Wert geändert wird. Im PC-Befehl schließlich definiert der dritte Parameter die Größe des Wertes in Bytes; nur einer in diesem Fall (01).
Der Skriptteil unserer Konfiguration sieht so aus:
@CONN |O,08,72
Es gibt nur eine Methode in diesem Skript ‚@CONN‘. Es wird jedes Mal ausgeführt, wenn ein Client eine Verbindung zum Peripheriegerät herstellt.
Die einzelne Skriptzeile ist ein „Handle-Assoziation“-Befehl mit einem sehr mächtigen Ergebnis. Es verknüpft die Datenbankvariable mit einem digitalen Pin-Ausgabebefehl. Der Parameter ‚08‘ ist eine Bitmaske, die den Pin angibt, mit dem unsere LED verbunden ist. Der Parameter „72“ ist ein eindeutiger und dauerhafter Handle für das Merkmal, das wir in der Datenbank erstellt haben. Nachdem sich ein Client verbunden hat, geht unsere LED jedes Mal, wenn der Client einen neuen Wert in die Datenbankvariable schreibt, entsprechend ein oder aus.
Digitale Steuerungsanwendung
Das Python-Skript ist light.py und kann hier gefunden werden. Bearbeiten Sie das Skript und ersetzen Sie die Beispiel-MAC-Adresse durch die MAC-Adresse Ihres Geräts. Um das Beispiel zu üben, schalten Sie dann einfach das Peripheriegerät ein und führen das Skript dann auf einem System mit den entsprechenden Bluetooth-Funktionen aus. Hilfe zu diesem Setup unter Linux finden Sie im Anhang. Das Skript gibt Meldungen aus, um den Fortschritt beim Verbinden mit dem Peripheriegerät anzuzeigen. Nachdem das Peripheriegerät angeschlossen ist, sendet das Skript jede Sekunde einen neuen Befehl an das Peripheriegerät. Die Befehle schalten die LED ein und aus.
Das Skript ist kurz und enthält Kommentare für alle Funktionsblöcke und GATT-API-Aufrufe. Die in diesem Beispiel einzigartige BLE-Funktion ist die Handle-Zuordnung.
Dieses ganze Beispiel können Sie im begleitenden Projektvideo in Aktion sehen.
Nächste Schritte
Damit ist Teil 2 unserer dreiteiligen Serie zum RN487x-Modul abgeschlossen.
Teil 3 folgt demselben Entwurfsmuster, um einen analogen Sensor und eine analoge Steuerung zu erstellen. Es wird auch einige Themen für weitere Studien enthalten, die für alle Beispielprojekte gelten.
Internet der Dinge-Technologie
- Frei wie in Freiheit oder Freibier? ... wie wäre es mit:kostenlos nutzen, bauen und forschen!
- C# Grundlegende Ein- und Ausgabe
- Zusammenfassung:Wie Bluetooth LE und XLE die Zukunft des Asset-Trackings und -Monitorings sind
- Wie Bluetooth + Ultraschall =Bessere RTLS-Genauigkeit und geringere Kosten
- So erstellen und optimieren Sie einen vorbeugenden Wartungsplan
- Sensoren und Steuerungen mit dem RN487x Bluetooth-Modul von Microchip
- So entwickeln Sie Lösungen, die Ihre Kunden wünschen (und bereit sind zu zahlen)
- So bauen Sie mit der IoT-Technologie zur Tanküberwachung einen intelligenteren Betrieb auf
- So verstehen Sie Big Data:RTUs und Prozesssteuerungsanwendungen
- Was ist Lean Digital und wie wird es integriert?