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
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.
Hi liege ich richtig dass es deutlich leichter ist in SM32 BLE Welt einzusteigen als nordic?
> 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
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.
> 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
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.
> 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
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 / ...
> 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
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
> 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
> 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
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).
> 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
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?
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.