Inhaltsverzeichnis:

Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: 7 Schritte (mit Bildern)
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: 7 Schritte (mit Bildern)

Video: Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: 7 Schritte (mit Bildern)

Video: Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: 7 Schritte (mit Bildern)
Video: Arduino Uno vs STM32 Nucleo - Wird dieses Board den Arduino Uno ablösen? | Hardware Review 2024, Kann
Anonim
Easy Very Low Power BLE in Arduino Teil 3 - Nano V2 Ersatz - Rev 3
Easy Very Low Power BLE in Arduino Teil 3 - Nano V2 Ersatz - Rev 3
Easy Very Low Power BLE in Arduino Teil 3 - Nano V2 Ersatz - Rev 3
Easy Very Low Power BLE in Arduino Teil 3 - Nano V2 Ersatz - Rev 3
Easy Very Low Power BLE in Arduino Teil 3 - Nano V2 Ersatz - Rev 3
Easy Very Low Power BLE in Arduino Teil 3 - Nano V2 Ersatz - Rev 3

Update: 7. April 2019 – Rev 3 von lp_BLE_TempHumidity, fügt Datum/Uhrzeit-Plots hinzu, verwendet pfodApp V3.0.362+ und automatische Drosselung beim Senden von Daten

Update: 24. März 2019 – Rev 2 von lp_BLE_TempHumidity, fügt weitere Plotoptionen hinzu und i2c_ClearBus, fügt GT832E_01-Unterstützung hinzu

Einführung

Dieses Tutorial, A Redbear Nano V2 Replacement, ist Teil 3 von 3. Dies ist Revision 2 dieses Projekts. Die Platine der Revision 2 beinhaltet die Montage der Knopfzelle und des Sensors, vereinfacht die Konstruktion und verbessert die Luftzirkulation um den Sensor herum, während er ihn vor direkter Sonneneinstrahlung schützt. Revision 1 ist da.

Teil 1 – Mit Arduino leicht gemachte BLE-Geräte mit sehr geringem Stromverbrauch erstellen: Das Einrichten von Arduino für die Codierung von nRF52-Geräten mit geringem Stromverbrauch, das Programmiermodul und das Messen des Versorgungsstroms. Es umfasst auch spezialisierte Low-Power-Timer und Komparatoren sowie entprellte Eingänge und die Verwendung von pfodApp zum Verbinden und Steuern des nRF52-Geräts.

Teil 2 – Ein Temperatur-Feuchtigkeitsmonitor mit sehr geringer Leistung umfasst die Verwendung eines Redbear Nano V2-Moduls und eines Si7021-Temperatur-/Feuchtigkeitssensors, um einen Batterie-/Solarmonitor mit niedrigem Stromverbrauch zu bauen. Es umfasst auch die Anpassung der Si7021-Bibliothek auf einen niedrigen Stromverbrauch, die Abstimmung des BLE-Geräts, um seinen Stromverbrauch auf <29uA zu reduzieren, und das Entwerfen einer benutzerdefinierten Temperatur-/Feuchtigkeitsanzeige für Ihr Mobiltelefon.

Teil 3 – Ein Redbear Nano V2-Ersatz, dieser hier behandelt die Verwendung anderer nRF52-basierter Module anstelle des Nano V2. Es umfasst die Auswahl von Versorgungskomponenten, den Aufbau, das Entfernen des nRF52-Chip-Programmierschutzes, die Verwendung von NFC-Pins als normalen GPIO und die Definition einer neuen nRF52-Platine in Arduino.

Dieses anweisbare ist eine praktische Anwendung von Teil 1 Bau von BLE-Geräten mit sehr geringem Stromverbrauch, die mit Arduino einfach gemacht werden, indem ein BLE-Temperatur- und Feuchtigkeitsmonitor mit sehr geringem Stromverbrauch mit einer SKYLAB SBK369-Platine als Nano V2-Ersatz konstruiert wird. In diesem Tutorial wird beschrieben, wie Sie eine neue Kartendefinition erstellen und den nRF52-Programmierungsschutz entfernen, damit er neu programmiert werden kann. Dieses Tutorial verwendet dieselbe Skizze wie Teil 2 mit denselben abgestimmten BLE-Parametern für geringen Stromverbrauch und kann nur mit Batterie ODER Batterie + Solar ODER Solar betrieben werden. Die Abstimmung von BLE-Parametern für niedrige Leistung wurde in Teil 2 behandelt

Rev 3 von lp_BLE_TempHumidity zeichnet die Daten gegen Datum und Uhrzeit nur mit Arduino millis () auf. Siehe Arduino Datum und Uhrzeit mit millis() und pfodApp mit der neuesten Version von pfodApp (V3.0.362+).

Rev 4 von pfod_lp_nrf52.zip unterstützt auch das GT832E_01-Modul und dieses Tutorial behandelt die Verwendung der NFC nRF52-Pins als Standard-GPIOs.

Der hier gebaute Monitor läuft jahrelang mit einer Knopfzelle oder 2 x AAA-Batterien, noch länger mit Solarunterstützung. Der Monitor zeigt nicht nur die aktuelle Temperatur und Luftfeuchtigkeit an, sondern speichert auch die letzten 36 Stunden von 10 Minuten-Messwerten und die letzten 10 Tage von stündlichen Messwerten. Diese können auf Ihrem Android-Handy grafisch dargestellt und die Werte in einer Protokolldatei gespeichert werden. Es ist keine Android-Programmierung erforderlich, pfodApp übernimmt all das. Die Android-Anzeige und -Diagramme werden vollständig von Ihrer Arduino-Skizze gesteuert, sodass Sie sie nach Bedarf anpassen können.

Teil 2 verwendete ein Redbear Nano V2-Board für die nRF52832 BLE-Komponente. Dieses Projekt ersetzt das durch ein billigeres SKYLAB SKB369 Board. Wie in Teil 2 wird ein Sparkfun Si7021 Breakout Board für den Temperatur-/Feuchtigkeitssensor verwendet. Beim Si7021 wird eine modifizierte Low-Power-Bibliothek verwendet.

Schritt 1: Warum ein Nano V2-Ersatz?

i) Der Nano V2 war einige Monate außer Produktion und scheint nicht in die Particle.io-Reihe zu passen, daher ist nicht klar, wie lange er verfügbar sein wird.

ii) Der Nano V2 ist teurer. Es hat jedoch auch zusätzliche Funktionen. Siehe unten.

iii) Der Nano V2 hat auf beiden Seiten Komponenten, die ihm ein höheres Profil verleihen und die Montage erschweren.

iv) Der Nano V2 hat begrenzte I/O-Pins zur Verfügung und die Verwendung von D6 bis D10 erfordert offene Kabel.

Obwohl das Nano V2-Board teurer ist als das SKYLAB SKB369-Board, ~US17 gegenüber ~US5, hat das Nano V2 mehr Funktionen. Der Nano V2 enthält einen 3,3-V-Regler und Versorgungskondensatoren, zusätzliche Komponenten für die Verwendung der DC/DC-Wandleroption nRF52, eine Chipantenne und einen uFL-SMT-Antennenanschluss.

Eine weitere Alternative ist das Modul GT832E_01, das von www.homesmartmesh.com verwendet wird. Rev 4 von pfod_lp_nrf52.zip unterstützt auch die Programmierung des GT832E_01-Moduls. Der SKYLAB SKB369 und der GT832E_01 sind erhältlich unter

Redbear (Particle.io) hat auch ein nacktes Modul ohne 3V3-Regler, DC/DC-Komponenten oder 32Khz-Quarzkomponenten.

Umriss

Dieses Projekt besteht aus 4 relativ unabhängigen Teilen:-

Komponentenauswahl und Konstruktion Entfernen des nRF52-Codierungsschutz-Flags und Programmieren der Skizze Erstellen einer neuen Arduino nRF52-Board-DefinitionRekonfigurieren von nRF52-NFC-Pins als GPIOs

Schritt 2: Komponentenauswahl und Konstruktion

Komponentenauswahl

Zusätzlich zu den in Teil 2 ausgewählten Komponenten nRF52832 und Si7021 fügt dieses Projekt einen 3,3-V-Regler und Versorgungskondensatoren hinzu.

Die Spannungsregler-Komponente

Der hier verwendete Regler ist MC87LC33-NRT. Er kann bis zu 12V Eingänge verarbeiten und hat einen Ruhestrom von <3,6uA, typischerweise 1,1uA. Der Nano V2 verwendet einen TLV704-Regler, hat einen etwas höheren Ruhestrom, typischerweise 3,4uA und kann höhere Eingangsspannungen bis zu 24V verarbeiten. Stattdessen wurde der MC87LC33-NRT gewählt, da im Datenblatt angegeben ist, wie er reagiert, wenn die Eingangsspannung unter 3,3 V fällt, während dies im Datenblatt des TLV704 nicht der Fall ist.

Der TLV704 gibt eine Eingangsspannung von mindestens 2,5 V an und aus dem Datenblatt ist nicht ersichtlich, was darunter passiert. Der nRF52832 wird auf 1,7 V heruntergefahren und der Si7023 wird auf 1,9 V heruntergefahren. Der MC87LC33-NRT hingegen spezifiziert Eingangs-/Ausgangsspannungsdifferenzen bis zu 0V für niedrige Ströme (Abb. 18 des Datenblatts). Angesichts der Wahl der Komponenten wurde der MC87LC33-NRT gewählt, weil er die angegebene Leistung hat.

Versorgungskondensatoren

Der MC87LC33-NRT-Regler benötigt einige Versorgungskondensatoren für Stabilität und Reaktion. Im Datenblatt wird ein Ausgangskondensator > 0,1uF empfohlen. Der SKYLAB SBK369 spezifiziert auch 10uF/0.1uF Kondensatoren auf der Versorgung nahe der Platine. Größere Kondensatoren unterstützen die Versorgung der nRF52 TX-Stromspitzen. Hier wurden 4 x 22uF 25V und 3 x 0.1uF 50V Keramikkondensatoren verwendet. Ein 22uF- und ein 0,1uF-Kondensator wurden in der Nähe des SKYLAB SBK369 platziert, ein 0,1uF wurde in der Nähe des Ausgangs des MC87LC33-NRT platziert, um die Stabilität zu gewährleisten, und ein 22uF und 0,1uF wurden am Eingang des MC87LC33-NRT und a. platziert weitere 2 x 22uF Kondensatoren wurden als weiterer Stromspeicher über die Vin/GND Pins gelötet. Zum Vergleich hat das NanoV2-Board 22uF / 0,1uF am Eingang des TLV704-Reglers und 0,1uF am Ausgang.

Die zusätzlichen Stromspeicherkondensatoren wurden am Eingang des 3,3-V-Reglers installiert, damit sie beim Betrieb mit Solarzellen auf eine höhere Spannung aufgeladen werden. Das Aufladen auf eine höhere Spannung entspricht dem Speichern von mehr Strom, um die Tx-Spitzen zu liefern.

Keramische X5R-Kondensatoren werden verwendet, weil sie einen niedrigen Serienwiderstand und einen geringen Leckstrom haben. Der Widerstand beträgt typischerweise 100, 000 MΩ oder 1000 MΩ – µF, je nachdem, welcher Wert kleiner ist. Für 22uF haben wir also 22000MΩ, d.h. 0,15nA Leckage bei 3,3V oder 0,6nA für die vier 22uF Kondensatoren. Das ist vernachlässigbar. Zum Vergleich Low ESR, Low Leakage Panasonic Elektrolytkondensatoren haben Leckströme von < 0,01 CV. Für einen 22uF 16V Kondensator beträgt die Leckage also <10uA. Hinweis: Dies ist der Leckstrom bei der Nennspannung, in diesem Fall 16 V. Der Leckstrom ist bei niedrigeren Spannungen geringer, d. h. < 2,2 uA bei 3,3 V.

Liste der Einzelteile

Ungefähre Kosten pro Einheit, Stand Dezember 2018, ~61 US-Dollar, ohne Versand und den Programmierer aus Teil 1

  • SKYLAB SKB369 ~ US $ 5 zB Aliexpress
  • Sparkfun Si7021 Breakout-Board ~8 US$
  • 2 x 53mm x 30mm 0,15W 5V Solarzellen z. B. Überfliegen ~1,10 $
  • 1 x PCB SKYLAB_TempHumiditySensor_R2.zip ~ US $ 25 für 5 Rabatt auf www.pcbcart.com
  • 1 x MC78LC33 3.3V Regler, z. B. Digikey MC78LC33NTRGOSCT-ND ~€1
  • 2 x 0,1uF 50V Keramik C1608X5R1H104K080A z. B. Digikey 445-7456-1-ND ~0,3 $
  • 4 x 22uF 16V Keramik GRM21BR61C226ME44L z. B. Digikey 490-10747-1-ND ~€2
  • 1 x BAT54CW, z. B. Digikey 497-12749-1-ND ~0,5 €
  • 1 x 470R 0,5W 1% Widerstand z. B. Digikey 541-470TCT-ND ~0,25 $
  • 1 x 10V 1W Zener SMAZ10-13-F z. B. Digikey SMAZ10-FDICT-ND ~€0.5
  • 3mm x 12mm Nylonschrauben, z. B. Jaycar HP0140 ~AUD$3
  • 3mm x 12mm Nylonmuttern, z. B. Jaycar HP0146 ~AUD$3
  • Scotch Permanent-Montageband Cat 4010 z. B. von Amazon ~6,6 $
  • CR2032 Batteriehalter, z. B. HU2032-LF ~1,5 USD
  • CR2032-Batterie ~US$1
  • Plexiglasplatte, 3,5 mm und 8 mm
  • pfodApp ~€10
  • Lötpaste z. B. Jaycar NS-3046 ~13€

Schritt 3: Konstruktion

Konstruktion
Konstruktion
Konstruktion
Konstruktion
Konstruktion
Konstruktion

Das Projekt ist auf einer kleinen Leiterplatte aufgebaut. Die Platine wurde von pcbcart.com aus diesen Gerber-Dateien hergestellt, SKYLAB_TempHumiditySensor_R2.zip Die Platine ahmt die Nano V2-Pinbelegung nach und ist universell genug, um für andere BLE-Projekte verwendet zu werden.

Dies ist der Schaltplan (pdf-Version)

Zuerst die SMD-Komponenten verlöten, dann die SKYLAB SKB369-Platine montieren

Fast alle Komponenten sind Surface Mount Devices (SMD). Die Kondensatoren und ICs können von Hand schwer zu löten sein. Die empfohlene Methode besteht darin, die Leiterplatte in einem Schraubstock zu halten und eine kleine Menge Lötpaste auf die Pads aufzutragen und die SMD-Komponenten, mit Ausnahme der SKB369-Platine, auf der Leiterplatte zu platzieren. Dann mit einer Heißluftpistole Hitze auf die Unterseite der Platine auftragen, bis die Lötpaste schmilzt, und dann schnell über die Oberseite der Platine streichen, wobei darauf geachtet wird, dass die Komponenten nicht weggeblasen werden. Abschließend die Bauteile mit einem kleinen Spitzenlötkolben ausbessern. Seien Sie vorsichtig mit den Kondensatoren und dem Widerstand, da es leicht ist, beide Enden zu schmelzen und das Bauteil beim Löten eines Endes zu lösen.

Diese Revision fügt zusätzliche 22uF 16V Keramikkondensatoren hinzu. Diese zusätzlichen Kondensatoren reduzieren die Stromspitzen aus der Batterie und reduzieren auch die Spannungseinbrüche, wenn sie von den Solarzellen gespeist werden. Solange die Spannung der Solarzellen über der Batteriespannung bleibt, wird der Batterie kein Strom entnommen.

Nachdem die SMD-Bauteile montiert wurden, können Sie das SKYLAB SKB369 Board einlöten. Auf einer Seite der SKB369-Laschen befinden sich zwei Testpunktlöcher. Verwenden Sie zwei Stifte in einer Kartonbasis, um die SKB369-Platine zu positionieren und die Stifte sorgfältig auszurichten. (Siehe das Beispielfoto oben mit der Revision 1-Platine) Löten Sie dann einen Stift der gegenüberliegenden Seite, um die Platine an Ort und Stelle zu halten, bevor Sie die anderen Stifte löten.

Beachten Sie die Gnd-Verbindungsleitung vom CLK zu GND im fertigen Teil. Dies wird NACH der Programmierung installiert, um zu verhindern, dass Rauschen am CLK-Eingang den nRF52-Chip in einen Hochstrom-Debug-Modus auslöst

Montagekoffer

Das Montagegehäuse wurde aus zwei Stück Plexiglas hergestellt, 110 mm x 35 mm, 3 mm dick. Das 3,5-mm-Stück unter den Solarzellen wurde angezapft, um die 3 mm-Nylonschrauben aufzunehmen. Diese überarbeitete Konstruktion ist einfacher als Rev 1 und verbessert die Luftströmung um den Sensor. Die zusätzlichen Löcher an jedem Ende dienen der Befestigung, zum Beispiel mit Kabelbindern.

Schritt 4: Entfernen des NRF52-Codierungsschutz-Flags

Entfernen des NRF52-Kodierungsschutz-Flags
Entfernen des NRF52-Kodierungsschutz-Flags
Entfernen des NRF52-Codierungsschutz-Flags
Entfernen des NRF52-Codierungsschutz-Flags
Entfernen des NRF52-Codierungsschutz-Flags
Entfernen des NRF52-Codierungsschutz-Flags

Verbinden Sie die Temperatur-/Feuchtigkeitsplatine wie oben gezeigt mit dem in Teil 1 beschriebenen Programmiergerät.

Wenn die Solarzellen und Batterien nicht angeschlossen sind, werden Vin und Gnd mit den Vdd und Gnd des Programmiergeräts (die gelben und grünen Leitungen) verbunden und die SWCLK und SWDIO werden mit den Clk und SIO der Kopfplatine des Programmiergeräts (die weißen und grauen Leitungen) verbunden.

Entfernen des nRF52-Programmschutzes

Von Nordic Semi – Debug and Trace Seite DAP - Debug Access Port. Ein externer Debugger kann über den DAP auf das Gerät zugreifen. Der DAP implementiert einen standardmäßigen ARM® CoreSight™ Serial Wire Debug Port (SW-DP). Der SW-DP implementiert das Serial Wire Debug Protocol (SWD), das eine zweipolige serielle Schnittstelle ist, SWDCLK und SWDIO

Wichtig: Die SWDIO-Leitung hat einen internen Pull-Up-Widerstand. Die SWDCLK-Leitung hat einen internen Pull-Down-Widerstand.

STRG-AP - Zugriffsport steuern. Der Control Access Port (CTRL-AP) ist ein benutzerdefinierter Zugangsport, der die Steuerung des Geräts ermöglicht, auch wenn die anderen Zugangsports im DAP durch den Zugangsportschutz deaktiviert werden. Der Zugriffsportschutz blockiert den Debugger vom Lese- und Schreibzugriff auf alle CPU-Register und speicherabgebildeten Adressen. Deaktivieren Sie den Zugriffsportschutz. Der Zugriffsportschutz kann nur durch einen ERASEALL-Befehl über CTRL-AP deaktiviert werden. Dieser Befehl löscht Flash, UICR und RAM.

Wählen Sie CMSIS-DAP als Programmierer für den Debugger von Particle und wählen Sie nRF5 Flash SoftDevice

Wenn der Flash funktioniert, ist das in Ordnung, aber oft wurden Module gegen Neuprogrammierung geschützt und Sie erhalten diese Fehlerausgabe im Arduino-Fenster

Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13)Lizenziert unter GNU GPL v2 Fehlerberichte finden Sie unter https://openocd.org/doc/doxygen/bugs.html debug_level: 2 Info: nur eine Transportoption; autoselect 'swd' Adaptergeschwindigkeit: 10000 kHz cortex_m reset_config sysresetreq Info: CMSIS-DAP: SWD Supported Info: CMSIS-DAP: Interface Initialised (SWD) Info: CMSIS-DAP: FW Version = 1.10 Info: SWCLK/TCK = 1 SWDIO/ TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1 Info: CMSIS-DAP: Schnittstelle bereit Info: Geschwindigkeitsanforderung reduzieren: 10000kHz auf 5000kHz maximal Info: Taktfrequenz 10000 kHz Info: SWD IDCODE 0x2ba01477 Fehler: MEM nicht gefunden -AP zur Kontrolle des Kerns Fehler: Ziel noch nicht untersucht Fehler beim Flashen von SoftDevice.

In diesem Fall müssen Sie das ERASEALL-Befehlsregister im nRF52 setzen, um den Speicher zu löschen und das Gerät wieder programmierbar zu machen. Die mit sandeepmistry nRF52 gelieferte Version von openOCD enthält nicht den apreg-Befehl, der zum Schreiben in das ERASEALL-Befehlsregister erforderlich ist, sodass Sie eine neuere Version installieren müssen.

Installieren Sie OpenOCD-Version OpenOCD-2081130 oder höher. Die vorkompilierte Windows-Version ist unter https://gnutoolchains.com/arm-eabi/openocd/ verfügbar. Der neueste Code ist unter https://gnutoolchains.com/arm-eabi/openocd/ verfügbar.

Öffnen Sie eine Eingabeaufforderung und ändern Sie das Verzeichnis in das OpenOCD-Installationsverzeichnis und geben Sie den Befehl ein

bin\openocd.exe -d2 -f interface/cmsis-dap.cfg -f target/nrf52.cfg

Die Antwort ist

Open On-Chip Debugger 0.10.0 (2018-11-30) [https://github.com/sysprogs/openocd]Lizenziert unter GNU GPL v2 Fehlerberichte finden Sie unter https://openocd.org/doc/doxygen/ bugs.html debug_level: 2 Info: Automatische Auswahl des ersten verfügbaren Sitzungstransports "swd". Verwenden Sie zum Überschreiben 'Transportauswahl'. Adaptergeschwindigkeit: 1000 kHz cortex_m reset_config sysresetreq Info: Überwachung von Port 6666 auf Tcl-Verbindungen Info: Überwachung von Port 4444 auf Telnet-Verbindungen Info: CMSIS-DAP: SWD Unterstützte Info: CMSIS-DAP: FW Version = 1.10 Info: CMSIS-DAP: Interface Initialised (SWD) Info: SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1 Info: CMSIS-DAP: Interface bereit Info: Taktfrequenz 1000 kHz Info: SWD DPIDR 0x2ba01477 Fehler: MEM-AP konnte nicht gefunden werden, um den Kern zu steuern Info: Auf Port 3333 auf gdb-Verbindungen lauschen

Öffnen Sie dann ein Terminalfenster z. B. TeraTerm (Windows) oder CoolTerm (Mac) und verbinden Sie sich mit 127.0.0.1 Port 4444

Das Telnet-Fenster zeigt ein > und die Eingabeaufforderung zeigt Info: Akzeptieren der 'telnet'-Verbindung auf tcp/4444

Im Telnet-Fenster (d. h. TeraTerm) gibt typenrf52.dap apreg 1 0x04this 0x00000000 zurück und zeigt an, dass der Chip geschützt ist. Dann typenrf52.dap apreg 1 0x04 0x01and thennrf52.dap apreg 1 0x04this gibt 0x00000001 zurück und zeigt an, dass der Chip jetzt beim nächsten Neustart auf ERASEALL gesetzt ist.

Schließen Sie die Telnet-Verbindung und verwenden Sie auch Strg-C, um das openOCD-Programm in der Eingabeaufforderung zu beenden und dann das nRF52-Modul aus- und wieder einzuschalten, und es ist jetzt programmierbereit.

Versuchen Sie nun erneut, das Softdevice zu flashen.

Sie können nun das nRF52-Modul von Arduino programmieren.

Schritt 5: Programmierung des SKYLAB SKB369

Programmierung des SKYLAB SKB369
Programmierung des SKYLAB SKB369
Programmierung des SKYLAB SKB369
Programmierung des SKYLAB SKB369
Programmierung des SKYLAB SKB369
Programmierung des SKYLAB SKB369

Schließen Sie Arduino und installieren Sie die neueste Version der pfod_lp_nrf52-Unterstützung erneut, indem Sie den Anweisungen zum Installieren der pfod_lp_nrf52-Hardwareunterstützung folgen. Das neueste pfod_lp_nrf52 enthält das SKYLAB SKB369 Nano2-Ersatzboard. Wählen Sie das als Board aus und Sie können es dann mit der Revision 3 von lp_BLE_TempHumidity, lp_BLE_TempHumidity_R3.zip, wie in Teil 2 beschrieben, programmieren.

Wenn die Programmierung fehlschlägt. Schließen Sie alle Arduino-Fenster, entfernen Sie die USB-Kabel, starten Sie Arduino neu und stecken Sie das USB-Kabel des Programmiergeräts wieder ein und stecken Sie die USB-Versorgung des nRF52-Moduls wieder ein und versuchen Sie es erneut.

Verbinden Sie sich dann über pfodApp, um die aktuelle und historische Temperatur und Luftfeuchtigkeit anzuzeigen. Nachdem Sie den historischen Plot angezeigt haben, werden die Messwerte mit Millisekunden-Zeitstempeln in der Protokolldatei auf Ihrem Mobiltelefon gespeichert und stehen auch im Rohdatenbildschirm zur Verfügung.

Die Protokolldatei enthält auch die zusätzlichen Daten, die erforderlich sind, um die Datums- und Zeitdiagramme in einer Kalkulationstabelle neu zu erstellen. Siehe Arduino Datum und Uhrzeit mit millis() und pfodApp für die Details

Schritt 6: Erstellen einer neuen Arduino NRF52-Board-Definition

Erstellen einer neuen Arduino NRF52-Board-Definition
Erstellen einer neuen Arduino NRF52-Board-Definition
Erstellen einer neuen Arduino NRF52-Board-Definition
Erstellen einer neuen Arduino NRF52-Board-Definition
Erstellen einer neuen Arduino NRF52-Board-Definition
Erstellen einer neuen Arduino NRF52-Board-Definition
Erstellen einer neuen Arduino NRF52-Board-Definition
Erstellen einer neuen Arduino NRF52-Board-Definition

Um ein neues nRF52-Board zu unterstützen, müssen Sie a) ein neues Verzeichnis im Variantenverzeichnis mit den Board-Dateien hinzufügen und b) die Datei board.txt bearbeiten, um das neue Board zu Arduino hinzuzufügen.

Hinzufügen einer neuen nRF52-Board-Variante

Suchen Sie, wie in Teil 1 beschrieben, Installieren der pfod_lp_nrf52-Hardwareunterstützung, das Hardware-Unterverzeichnis des sandeepmistry-Pakets, das Sie mit der pfod_lp_nrf52-Unterstützung aktualisiert haben. Öffnen Sie das Unterverzeichnis \hardware\nRF5\0.6.0\variants und erstellen Sie ein neues Verzeichnis für Ihr neues Board, z. Variant.cpp und Pins_arduino.h Sie können sie aus einem der anderen Board-Varianten-Verzeichnisse kopieren. Für das SKYLAB_SKB369_Nano2replacement habe ich zunächst die Dateien aus der RedBear_BLENano2-Variante kopiert.

pins_arduino.h-Datei

Die Datei pins_arduino.h muss nicht geändert werden. Es enthält nur die Datei Variant.h

variante.h-Datei

Bearbeiten Sie die Datei Variant.h, um die Gesamtzahl der Pins Ihres Boards zu definieren, PINS_COUNT

HINWEIS: Im Sandeepmistry-Paket werden die Einstellungen NUM_DIGITAL_PINS, NUM_ANALOG_INPUTS und NUM_ANALOG_OUTPUTS ignoriert

Wenn Ihr Board mehr oder weniger analoge Pins zur Verfügung stellt, aktualisieren Sie den Abschnitt /* Analog Pins */ der Datei variables.h.

HINWEIS: Für die NanoV2- und SKYLAB-Boards werden die analogen Pins den digitalen Pins A0 == D0 usw. zugeordnet

Dies ist nicht unbedingt erforderlich. Sie können die analogen Eingänge jedem beliebigen Arduino-Pin zuweisen. Ein Beispiel finden Sie in den Dateien blue/variant.h und blue/variant.cpp.

Der nRF52832 Chip hat 8 analoge Eingangspins, aber das SKYLAB_SKB369_Nano2Replacement Board stellt nur 6 davon passend zum Nano2 zur Verfügung.

Alle Pin-Nummern, außer RESET_PIN, in der Datei Variant.h sind Arduino-Pin-Nummern. Das heißt #define PIN_A0 (0) impliziert, dass D0 in der Arduino-Skizze der gleiche Pin wie A0 ist. Die RESET_PIN ist die Ausnahme. Diese Nummer ist die nRF52823-Chip-Pinnummer und 21 ist die einzig gültige Wahl. Die Unterstützung von pfod_lp_nrf52 aktiviert jedoch den Reset-Pin auf dem nRF52832 nicht

Variante.cpp-Datei

Es gibt nur einen Eintrag in der Datei Variant.cpp, das g_ADigitalPinMap-Array, das die Arduino-Pin-Nummern den P0..-Pins des nRF52832-Chips zuordnet

HINWEIS: In den NanoV2- und SKYLAB-Boards sind die analogen Arduino-Pins A0, A1 … die gleichen wie die digitalen Arduino-Pins D0, D1 … daher MÜSSEN die ersten Einträge in g_ADigitalPinMap den AINx-Pin-Nummern auf dem nRF52832-Chip zugeordnet werden

Für die analogen Eingänge, die Ihr Board zur Verfügung stellt, müssen diese Einträge in g_ADigitalPinMap die Pinnummern von nRF52832 AIN0, AIN1, AIN2 usw. abbilden. d.h. AIN0 ist Chip-Pin P0.02, AIN1 ist Chip-Pin P0.03 usw. Siehe das nRF52832-Pin-Layout oben.

Verwenden Sie (uint32_t)-1 für ungültige Zuordnungen. Zum Beispiel hat die SKYLAB_SKB369_Nano2Ersatzplatine keine eingebaute LED, D13, daher wird ihre Position auf (uint32_t)-1. abgebildet

In pfod_lp_nrf52.zip befinden sich in den Unterverzeichnissen der Varianten Redbear NanoV2, SKYLAB SKB369 und GT832E_01 Bilder, die die von der Variant.cpp eingerichteten Zuordnungen zeigen. (Siehe die Bilder oben)

Beim SKYLAB SKB369 stehen viele Pins zur Auswahl. Es werden nur genug abgebildet, die dem NanoV2 entsprechen. Beim GT832E_01 müssen alle verfügbaren Pins gemappt werden. Selbst dann stehen statt der sechs (6) beim NanoV2 nur drei (3) analoge Eingänge zur Verfügung. Außerdem müssen die beiden NFC-Pins P0.09 und P0.10 als GPIOs neu konfiguriert werden. Siehe Neukonfigurieren von nRF52-NFC-Pins als GPIOs unten.

Aktualisieren der Datei "boards.txt"

Hier ist der Eintrag SKYLAB_SKB369_Nano2replacement in der Datei board.txt.

##SKYLAB_SKB369 Nano2-ErsatzSKYLAB_SKB369_NANO2_REPLACEMENT.name=*SKYLAB SKB369 Nano2-Ersatz

SKYLAB_SKB369_NANO2_REPLACEMENT.upload.tool=sandeepmistry:openocd

SKYLAB_SKB369_NANO2_REPLACEMENT.upload.protocol=cmsis-dap SKYLAB_SKB369_NANO2_REPLACEMENT.upload.target=nrf52 SKYLAB_SKB369_NANO2_REPLACEMENT.upload.maximum_size=524288 SKYLAB_SKB369_NupMENTup. SKYLAB_SKB369_NANO2_REPLACEMENT.upload.use_1200bps_touch=false SKYLAB_SKB369_NANO2_REPLACEMENT.upload.wait_for_upload_port=false SKYLAB_SKB369_NANO2_REPLACEMENT.upload.native_usb=false

SKYLAB_SKB369_NANO2_REPLACEMENT.bootloader.tool=sandeepmistry:openocd

SKYLAB_SKB369_NANO2_REPLACEMENT.build.mcu=cortex-m4

SKYLAB_SKB369_NANO2_REPLACEMENT.build.f_cpu = 16000000 SKYLAB_SKB369_NANO2_REPLACEMENT.build.board = SKYLAB_SKB369_Nano2replacement SKYLAB_SKB369_NANO2_REPLACEMENT.build.core = nRF5 SKYLAB_SKB369_NANO2_REPLACEMENT.build.variant = SKYLAB_SKB369_Nano2replacement SKYLAB_SKB369_NANO2_REPLACEMENT.build.variant_system_lib = SKYLAB_SKB369_NANO2_REPLACEMENT.build.extra_flags = -DNRF52 SKYLAB_SKB369_NANO2_REPLACEMENT.build.float_flags = -mfloat -abi=hard -mfpu=fpv4-sp-d16 SKYLAB_SKB369_NANO2_REPLACEMENT.build.ldscript=nrf52_xxaa.ld

SKYLAB_SKB369_NANO2_REPLACEMENT.menu.lfclk.lfrc.build.lfclk_flags=-DUSE_LFXO

SKYLAB_SKB369_NANO2_REPLACEMENT.menu.softdevice.s132=S132

SKYLAB_SKB369_NANO2_REPLACEMENT.menu.softdevice.s132.softdevice = s132 SKYLAB_SKB369_NANO2_REPLACEMENT.menu.softdevice.s132.softdeviceversion = 2.0.1 SKYLAB_SKB369_NANO2_REPLACEMENT.menu.softdevice.s132.upload.maximum_size = 409600 SKYLAB_SKB369_NANO2_REPLACEMENT.menu.softdevice.s132.build.extra_flags = - DNRF52 -DS132 -DNRF51_S132 SKYLAB_SKB369_NANO2_REPLACEMENT.menu.softdevice.s132.build.ldscript=armgcc_s132_nrf52832_xxaa.ld

board.txt-Einstellungen

Kommentare – Zeilen, die mit # beginnen, sind Kommentare.

Präfix – Jedes Board benötigt ein eindeutiges Präfix, um seine Werte zu identifizieren. Hier lautet das Präfix SKYLAB_SKB369_NANO2_REPLACEMENT.

Name – Die Zeile SKYLAB_SKB369_NANO2_REPLACEMENT.name gibt den Namen dieses Boards an, das im Board-Menü von Arduino angezeigt werden soll.

Upload-Tool – Der Block SKYLAB_SKB369_NANO2_REPLACEMENT.upload gibt an, welches Tool zum Hochladen verwendet werden soll. Wenn Sie den Particle Debugger verwenden, verwenden Sie protocol=cmsis-dap wie oben gezeigt.

Bootloader – Diese Zeile ist für alle Boards in dieser board.txt gleich

Build – In diesem Block müssen nur zwei Zeilen aktualisiert werden. Die Zeile SKYLAB_SKB369_NANO2_REPLACEMENT.build.variant gibt den Verzeichnisnamen dieses Boards im Varianten-Unterverzeichnis an. Das SKYLAB_SKB369_NANO2_REPLACEMENT.build.board ist der Wert, der an ARDUINO_ angehängt und dann beim Kompilieren des Codes definiert wird. z. B. -DARDUINO_SKYLAB_SKB369_Nano2replacement Damit können Sie Teile des Codes für bestimmte Boards aktivieren/deaktivieren.

Low Freq Clock – Diese Zeile, SKYLAB_SKB369_NANO2_REPLACEMENT.menu.lfclk.lfrc.build.lfclk_flags, gibt die Quelle des niederfrequenten Takts an, der für den lp_timer verwendet wird. Es gibt drei Optionen, -DUSE_LFXO, -DUSE_LFRC und -DUSE_LFSYNT. Die beste Wahl ist -DUSE_LFXO, wenn das Board über einen externen 32Khz Quarz verfügt. Wenn nicht, verwenden Sie -DUSE_LFRC, das einen internen RC-Oszillator verwendet und etwas mehr Strom zieht, ~ 10uA mehr und viel weniger genau ist. Verwenden Sie nicht -DUSE_LFSYNT, da dies den Chip die ganze Zeit in Betrieb hält, was zu einer Stromaufnahme von mAs führt.

Softdevice – pfod_lp_nrf52 unterstützt nur nRF52-Chips und Softdevice s132, sodass für diesen Block außer dem Präfix keine Änderungen erforderlich sind.

Umkonfigurieren von nRF52 NFC-Pins als GPIOs

Als Vorgabe für die nRF52-Pins sind P0.09 und P0.10 für die Verwendung als NFC konfiguriert und erwarten, dass sie mit einer NFC-Antenne verbunden sind. Wenn Sie diese als Allzweck-I/O-Pins (GPIOs) verwenden müssen, müssen Sie den Kompilierungseinstellungen …menu.softdevice.s132.build.extra_flags dieses Boards in der Datei „boards.txt“ein Define -DCONFIG_NFCT_PINS_AS_GPIOS hinzufügen.

Zum Beispiel pfod_lp_nrf52.zip, konfiguriert die GT832E_01-Pins für die Verwendung als E/A neu. Der Abschnitt GT832E_01 für dieses Board in der Datei "boards.txt" hat die folgende Definition hinzugefügt

GT832E_01.menu.softdevice.s132.build.extra_flags=-DNRF52 -DS132 -DNRF51_S132 -DCONFIG_NFCT_PINS_AS_GPIOS

Das Linker-Skript in pfod_lp_nrf52.zip wurde ebenfalls geändert, um diese Einstellung beizubehalten und muss nicht geändert werden.

Schritt 7: Fazit

In diesem Tutorial wurde ein Ersatz für den Redbear NanoV2 mit einem SKYLAB SKB369-Modul vorgestellt. Ein batterie-/solarbetriebener Temperatur-Feuchtigkeitsmonitor wurde als Beispiel für ein BLE-Projekt mit sehr geringem Stromverbrauch in Arduino für das SKYLAB-Modul verwendet. Versorgungsströme von ~29uA wurden durch Abstimmung der Verbindungsparameter erreicht. Dies führte zu einer Lebensdauer der CR2032-Knopfzellenbatterie von ~10 Monaten. Länger für Knopfzellen und Batterien mit höherer Kapazität. Das Hinzufügen von zwei billigen Solarzellen verlängerte die Batterielebensdauer leicht um 50% oder mehr. Ein helles Raumlicht oder eine Schreibtischlampe reicht aus, um den Monitor aus den Solarzellen zu versorgen.

In diesem Tutorial wurde auch das Entfernen des Chipschutzes von einem vorprogrammierten nRF52 und das Einrichten einer neuen Platinendefinition für Ihre eigene Leiterplatte/Schaltung behandelt

Es ist keine Android-Programmierung erforderlich. pfodApp übernimmt all das.

Empfohlen: