Forum: Mikrocontroller und Digitale Elektronik tutorial nordic nRF52840 DK


von Mat. K. (matthias_kornfield)


Lesenswert?

Hi
ich möchte auf nordic's nRF52840 DK board über BLE paar Daten hin her 
schicken können.
Weiss jemand wo das kürzeste Video Tutorial dazu ist?
Zephyr muss ich benutzen oder?
thx

von Jim M. (turboj)


Lesenswert?

Die älteren SDKs (ohne Zephyr) werden nicht mehr unterstützt - und sind 
auch nicht wirklich einfacher zu benutzen. BTDT

Die Zephyr SDKs enthalten Beispiel Code (für UART service) den man 
einfach nur auf das DK flashen muss.

Das benötigte Tooling ist nicht komplett trivial, und ein paar der 
Tutorials für 1.x SDKs funktionieren in 2.x nicht mehr ohne Änderungen. 
Nur zur Info.

von Mat. K. (matthias_kornfield)


Lesenswert?

Hi
liege ich richtig dass es deutlich leichter ist in SM32 BLE Welt 
einzusteigen als nordic?

von Vanye R. (vanye_rijan)


Lesenswert?

> liege ich richtig dass es deutlich leichter ist in SM32 BLE Welt
> einzusteigen als nordic?

Sagen wir mal so, ich einen Nordic-chip (nRF9160) aus einem
Projekt geworfen weil ich deren Toolchain als megaueberkomplexen
Murks angesehen habe nachdem ich mich da eine Woche mit beschaeftigt
habe. Da habe ich mich wirklich gefragt was die so rauchen.

Und wir kaufen viele Rollen im Jahr. Da sind andere Firmen richtig nett 
.-)

Vanye

von Michael G. (michael_g968)


Lesenswert?

Hallo,

ob stm32 welt einfacher ist, ... kann ich nicht sagen.

Das nRF Tooling hat halt schon seine complexität, besser gesagt zephyr.
Wobei Nordic den eintstieg recht einfach macht. Einfach den Tutorial von 
Nodric folgen, dann sollten sich die ersten beispiele einfach übersetzen 
und auf das bord flaschen lassen.

Das ganze geht mitlerweile über VS Code. Nordic stellt passende Plugins 
bereit, darüber kann man dann eines der Beispile clonen/bauen/flashen 
und nach herzens lust dran ändern.

Hinweis: bitte nicht hinter irgend welchen bösen firmen firewalls 
versuchen die toolchain zu installiren, das geht mit hoher 
warscheinlichkeit schief, bzw die aktuellen toolchains werden nicht 
angezeigt.


Vorteil für mich:
- toolchain läuft auch unter linux.
- Der build läst sich auch in der konsole anstossen.
- Zephyr ist nicht nur auf nRF beschränkt. das Knowhow kann man auf für 
andere Controller weiter verwenden. und es muss nicht zwingend ein BLE 
projet sein.

Nachteilig ist die einstiegshürde von Zephyr. Zu verstehen wie das ganze 
mit dem Kconfig und DeviceTrees funktioniert, ... das braucht etwas viel 
zeit. Wenn man aber verstanden hat was man damit alles anstellen kann, 
kann das durchaus von vorteil sein. (one code / mulit target)

Weiterer Nachteil ist die erschlagende fülle an Software / treiber die 
Zephyr mitliefert. Sich da zurecht zu finden, ... braucht etwas.

gruss.

von Vanye R. (vanye_rijan)


Lesenswert?

> Hinweis: bitte nicht hinter irgend welchen bösen firmen firewalls
> versuchen die toolchain zu installiren,

Ist das ein Witz? Meine Firma soll die Firewall abschalten damit
deren Zeugs laeuft? Das alleine ist doch schon ein Grund sie aus
jedem Projekt zu kicken.

> Sich da zurecht zu finden, ... braucht etwas.

Genauso schlecht. Zu Anfang ueberlegt man sich ja welche Controller
fuer ein Projekt geeignet sind und will sich SCHNELL einen
Ueberblick verschaffen. Wenn das nicht nach spaetestens einem
Tag laeuft dann schau ich aber zuerst mal was die Konkurrenz so
bietet.

Vanye

von Jim M. (turboj)


Lesenswert?

Vanye R. schrieb:
> Ist das ein Witz? Meine Firma soll die Firewall abschalten damit
> deren Zeugs laeuft?

Nö, nur korrekt konfigurieren damit das auch außerhalb des Webbrowsers 
läuft.

Das Aufsetzen der zephyr Sourcen benötigt ein paar git clone calls, die 
dan Daten via https saugen.

Schnell entwickeln und Bluetooth Low Energy verträgt sich schlecht. Da 
sollte sich vorher Gedanken über das Protokoll machen.

Beispiel Code sollte aber in einem Tag laufen auf dem DK, das hatte ich 
hier mit dem NRF53x vor ~1 Jahr mal durch. Für den µC gibt es keinen 
"legacy" SDK Support mehr, nur noch zephyr.

Dafür müssen die Hilfstools aber aufs Internet zugreifen dürfen damit 
die korrekten Tools geladen werden können. IIRC alles https heutzutage.

von Vanye R. (vanye_rijan)


Lesenswert?

> hier mit dem NRF53x vor ~1 Jahr mal durch. Für den µC gibt es keinen
> "legacy" SDK Support mehr, nur noch zephyr.

Fuer mich Privat hab ich mir einfach eine Entwicklungsumgebung fuer den
alten nRF51822 selber aufgesetzt.

make
[..]
"/usr/local/cross//bin/cross-arm4_7-size" _build/nrf51422_xxac_s110.out
   text    data     bss     dec     hex filename
  36292      28    5056   41376    a1a0 _build/nrf51422_xxac_s110.out
make[1]: Leaving directory `/home/olaf/sources/nRF51822/source/PowerLed'

In der Firma natuerlich erstmal indiskutabel. Da will ich als HW
Entwickler erstmal SCHNELL Ergebnisse sehen und ein paar Messungen
vornehmen. Wenn man sich dann fuer einen Controller entscheidet
dann wird man sowieso eine komplett eigene Buildumgebung aufsetzen.

> Dafür müssen die Hilfstools aber aufs Internet zugreifen dürfen damit
> die korrekten Tools geladen werden können. IIRC alles https heutzutage.

Du willst dir doch nicht ernsthaft so einen Quatsch ins Projekt
ziehen. Wie willst du das dann fuenf Jahre spaeter neu uebersetzen,
aber so das dasselbe Binary rauskommt?

Nee, der Nordikram ist einfach nur Bloatware die am Kunden 
vorbeientwickelt wurde. Oh...und ihr komisches Hilfe/Chatsystem war auch 
nur bizarr.

Vanye

von Michael G. (michael_g968)


Lesenswert?

Nabend,

kommt immer drauf an wie die fierwall administriert wird. Bei uns ist 
das ein schlechter witz (aus Entwickler sicht) ... ohne handstaende zu 
machen kannst du keine vernuenftige software entwickeln. Ob maven / 
yocto  nuget  ... und wie sie alle heissen oder VS Code plugins, 
wollen alle irgend was aus dem netz. und wenn die Firewall meint heute 
nicht, ... dann  faengt das trauerspiel leider an.

nRF SDK kann man entweder von hand installieren oder ueber den nRF 
Connect desktop. Bei mir hat damals mit dem nRF Connect Desktop irgend 
etwas mit den Proxy einstellungen nicht funktioniert / oder unsere FW 
hatte mal wieder ihre tage, ...

die nRF toolchain als auch das SDK liegen in GIT repos. die kannst du 
dir gerne klonen und selber hosten.

Zephyr ist halt etwas mehr als nur ein BLE stack. Und dazu dann noch die 
geschichten mit devicetree und KConfig, ... Betriebsystem, HW 
abstrahierung mit treibern / ...

von Vanye R. (vanye_rijan)


Lesenswert?

> wollen alle irgend was aus dem netz. und wenn die Firewall meint heute
> nicht, ... dann  faengt das trauerspiel leider an.

Es kann nicht der Normalfall sein das jede Software glaubt 
selbststaendig
irgendwas im Internet machen zu duerfen. Gerade und ganz besonders
auf einem Entwicklerrechner nicht wo es ja wohlmoeglich Zugriff auf
vertrauliche Dinge gibt.

Ausserdem lebt Nordic davon ICs zu verkaufen. Es ist keine Informatik-WG 
die es cool finden mag mal was mit Software zu machen. Ihre Programme 
sollen potentiellen Kunden moeglichst schnell und einfach davon 
ueberzeugen das es gut ist ihre ICs zu kaufen. Es sollen keine 
Doktorarbeiten in angewandte Komplexizitaet sein. Wenn ein Kunde 
unzufrieden ist dann liegt das nicht am Kunden! Der kauft dann woanders.

Vanye

von Marco G. (flaschenpost)


Lesenswert?

Ich bin daran gescheitert, dass

1. mein Board nicht a priori unterstützt wird (E73, Platz ist halt knapp 
in so einem Armbanduhrengehäuse) und ich zu wenig Ahnung habe, wie man 
eine komplette Bord-Definition aufbaut,

2. die Beispiele nur von Built-In Bauteilen der Boards ausgehen (LED, 
Button etc), während ich halt einfach nur einen Button anbauen und mit 
dem üblichen Pullup prüfen,

3. Der St-Link v2 zwar theoretisch geht, aber praktisch in keinem ihrer 
Tools unterstützt wird.

So ein "komplettes" Board hab ich per ST-Link und gcc geflasht und in 
Gang bekommen, als "nRF52 Dongle", aber die kleinen Teile halt nicht.

Für so ein Mini Hobby Projekt ist nRF nicht besonders 
einsteigerfreundlich, ich hab dann doch einfach einen ESP-07 genommen 
(trotz vieler schlechterer Eigenschaften). Aber für den Preis des J-Link 
kann ich so einige mehr verbrauchte Knopfzellen nachschieben.

Falls doch noch jemand einsteigerfreundliche Doku hat, wenn man NICHT 
exklusiv auf komplette Nordic-Boards und komplette Segger-Tools 
zugreifen will oder kann (Linux-System), wäre ich sehr interessiert.

VG Marco

von Vanye R. (vanye_rijan)


Lesenswert?

> 2. die Beispiele nur von Built-In Bauteilen der Boards ausgehen
> (LED, Button etc),

Also ich steh durchaus zu meiner Kritik von oben, aber wenn es daran
scheitert das du LEDs am falschen Pin hast und du sowas nicht
aendern kannst, dann muss man den Fehler vielleicht auch mal bei sich
selber suchen. Das ist ja kein Arduino Kuschelkurs. Die Aufgabe
solcher Umgebungen ist es ja eigentlich Kunden einen schnellen
Ueberblick zu geben damit die sich dafuer entscheiden es in
einem Projekt einzusetzen und da sitzen nun mal Profis.

> Falls doch noch jemand einsteigerfreundliche Doku hat, wenn
> man NICHT exklusiv auf komplette Nordic-Boards und komplette Segger-Tools

Schau mal hier:

Beitrag "JDY-31 Bluetoothmodule mit BK3432"

Klar, du hast dann einen zusatzcontroller im System, aber den kannst
du dir aussuchen, kann also der sein den du gewohnt bist.
Damit bekommst du Blutooth oder wahlweise BLE in dein System ohne
das man sich gross anstrengen muss. Und fuer 1Euro?

Vanye

von Vanye R. (vanye_rijan)


Lesenswert?

> Platz ist halt knapp in so einem Armbanduhrengehäuse)

Ganz uebersehen hab. :)

Schau dich mal bei Ambiq um. Der Entwickler der Chips sagte
mir das die aus der Armbanduhrenbranche kommen und maximal
Energieeffizient sind:

https://ambiq.com/apollo4-blue-lite/

Hinterher darfst du uns dann erzaehlen wie es war. Praktische
Erfahrungen mit den Teilen und ihrem SDK hab ich auch noch nicht,
daher waere mal ein Erfahrungsbericht ganz interessant.

Vanye

von Marco G. (flaschenpost)


Lesenswert?

Hi,

Vielleicht hab ich das falsche Framework erwischt, aber mindestens die 
einfachsten Basics sollten mit dem offiziellen nrf_sdk Framework doch zu 
machen sein.

Es ist halt deutlich mehr als einfach die Angabe eines anderen PINs.

Beispiel: das klassische Example blink. Dient normalerweise dazu, sich 
kurz die Ansteuerung eines PINs anzuschauen.

Hier hat das Example einfach den Rückgriff auf ein "led0".
1
#define LED0_NODE DT_ALIAS(led0)
led0 ist wiederum im Board definiert. In der blinky selbst gibt es keine 
Boards, nur eine sample.yaml
1
   filter: dt_enabled_alias_with_parent_compat("led0", "gpio-leds")
Das wiederum ist definiert in einer

zephyr/boards/nordic/nrf21540dk/nrf21540dk_nrf52840.dts als
1
        leds {
2
                compatible = "gpio-leds";
3
                led0: led_0 {
4
                        gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
5
                        label = "Green LED 0";
6
                };

Klar kann ich irgendwo in der zephyr/boards/nordic/ ein eigenes Board 
anlegen und dort auf ein anderes Pin umschreiben, aber der eigentliche 
Sinn des Beispiels (wie spreche ich ein Pin an) geht dabei komplett 
verloren.

Ähnlich beim Lesen eines Pins:
1
        buttons {
2
                compatible = "gpio-keys";
3
                button0: button_0 {
4
                        gpios = <&gpio0 11 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
5
                        label = "Push button switch 0";
6
                        zephyr,code = <INPUT_KEY_0>;
7
                };

Ich bekomme bald die bestellten CH32V003, in dem Example Code liest sich 
das deutlich besser:
1
void GPIO_Config(void)
2
{
3
GPIO_InitTypeDef GPIO_InitStructure = {0}; //structure variable used for the GPIO configuration
4
5
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // to Enable the clock for Port D
6
7
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; // Defines which Pin to configure
8
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // Defines Output Type
9
GPIO_Init(GPIOD, &GPIO_InitStructure);
10
11
}

Wie gesagt, mit dem ESP-07 läuft mein Bastelprojekt (minimalistische 
BLE- Multimedia- Tastatur in einer alten Armbanduhr plus Basisstation).

von Vanye R. (vanye_rijan)


Lesenswert?

> Das wiederum ist definiert in einer

Solche Sachen sind dann auch die Ursache meiner Kritik. :-)
Kannst du auch beim SDK der RP2040 sehen. Da kommen irgendwelche
Hampelmaenner frisch aus dem Informatikstudium glauben die reine
abstrakte Lehre umsetzen zu muessen nachdem sie schon angewidert
sind nun in C programmieren zu muessen, anstatt in der aktuellen
schickimicki Sprache. Das ist vermutlich eine Mischung aus
Zeitgeist, KI und abschreiben im Internet.

> Wie gesagt, mit dem ESP-07 läuft mein Bastelprojekt (minimalistische
> BLE- Multimedia- Tastatur in einer alten Armbanduhr plus Basisstation).

Tastatur in einer Armbanduhr? Und ich dachte ICH hab schon immer
fetter Armbanduhren. :-D

Aber wenn es nur fuer ein Bastelprojekt ist, es gibt ja auch noch den
nRF51822. Der ist zwar sicher veraltet, aber man bekommt den noch und 
der war ja in Bastelkreisen sehr verbreitet weil wohl einer der ersten 
mit BLE.

Vanye

von Marco G. (flaschenpost)


Lesenswert?

Vanye R. schrieb:
> Solche Sachen sind dann auch die Ursache meiner Kritik. :-)

Hast du denn irgendwo ein Beispiel gefunden, wie ohne neue 
Board-Definition einfach ein Pin gelesen oder geschrieben wird?

von Rolf (rolf22)


Lesenswert?

Mat. K. schrieb:
> ich möchte auf nordic's nRF52840 DK board über BLE paar Daten hin her
> schicken können.

Wenn es außer BLE keine besonderen Anforderungen gibt, geht es auch mit 
einem anderen Nordic-Chip und IMHO einsteigerfreundlich mit Arduino:
https://docs.arduino.cc/resources/datasheets/ABX00030-datasheet.pdf

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Marco G. schrieb:
> Ich bin daran gescheitert, dass

So wie ich das bei Dir lese und verstehe, ist das eigentliche Problem 
Zephyr. Meine Erfahrungen mit Zephyr sind auch eher gemischt. Die 
Lernkurve ist sehr steil. Zephyr nutzt viele Tools, die man nicht 
bräuchte, wenn man nicht vor hat, die selbe Software auf vielen 
unterschiedlichen Hardwaren zum Laufen zu bringen.

Kleiner Tipp: Man kann auch einfach an Zephyr vorbei direkt auf die HW 
zugreifen. Evtl. einfach ein Beispiel nehmen, dass die eigenen BLE 
Anforderungen im Wesentlichen erfüllt und dann GPIO mit direktem Zugriff 
auf die Hardware (Datenblatt ist gut lesbar) oder auf die HW Abstraktion 
von Nordic.

Oder vielleicht Bluetoe (https://github.com/TorstenRobitzki/bluetoe) 
verwenden, wenn die Zielhardware ein nRF52 ist und Bluetooth 
Qualification nicht nötig ist.

von Marco G. (flaschenpost)


Angehängte Dateien:

Lesenswert?

Torsten R. schrieb:

> Kleiner Tipp: Man kann auch einfach an Zephyr vorbei direkt auf die HW
> zugreifen. Evtl. einfach ein Beispiel nehmen, dass die eigenen BLE
> Anforderungen im Wesentlichen erfüllt und dann GPIO mit direktem Zugriff
> auf die Hardware (Datenblatt ist gut lesbar) oder auf die HW Abstraktion
> von Nordic.
>
> Oder vielleicht Bluetoe (https://github.com/TorstenRobitzki/bluetoe)
> verwenden, wenn die Zielhardware ein nRF52 ist und Bluetooth
> Qualification nicht nötig ist.

Eigentlich reicht es mir komplett aus, innerhalb von < 100 ms nach 
Knopfdruck eine minimale Botschaft an eine "Zentralstation" zu schicken. 
Ein Byte.

42=Play/Pause, 43=laut, 44=leise, 45=previous track, 46=next track.

Aber das mit minimalem Platz, also so, dass es in eine entkernte 
Armbanduhr passt. ESP-07 hab ich jetzt mit nur einem Knopf (und nur 
einer Steuermöglichkeit) umgesetzt, dem wichtigsten (Play/Pause).

Dort ist die Stromversorgung nur während des Buttondrucks an 
(Leerlaufverbrauch=0), der fährt hoch, sendet seine ESB-NOW an die 
Basistation und geht in den Tiefschlaf (bis der Knopf losgelassen wird).

ESB (Enhanced Shock Burst) heißt die Entsprechung im nRF. Beim nRF 
könnte ich auch den Chip im Tiefschlaf lassen, und bei Button-Druck 
aufwachen (falls 5 verschiedene Pins ihn aufwecken können) und dann die 
entsprechende Message an die Zentrale schicken + back to sleep.

Die Zentralstation per nRF war lustigerweise trivial, eine BLE 
Multimedia Tastatur ist halt einfacher als ein Blinky.

Der nRF bootet komischerweise ewig (~ 350 ms), zumindest die ersten 
"fetten" Module, die ich benutzt habe (~ Arduino Nano, die werden aber 
auch nicht erkannt von nRF Frameworks, sondern waren nur per uf2 nach 
Doppelreset bespielbar).

Den E73 hab ich noch nicht erfolgreich ansteuern können.

Wie gesagt: wenn es wenigstens ein ordentliches Beispielprogramm gäbe, 
wie man ein Pin an und wieder ausschaltet oder auf ein "GND auf PIN" via 
Button reagiert. Aber in dem mitgelieferten wird dann "button0" 
verwendet. Ja geil und wirklich lehrreich.

Danke für den Bluetoe Verweis, sieht spannend aus!
VG Marco

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.