{"id":135755,"date":"2018-10-12T12:50:00","date_gmt":"2018-10-12T09:50:00","guid":{"rendered":"https:\/\/ruuvi.com\/ruuvi-firmware-teil-12-bootloader\/"},"modified":"2026-06-11T07:39:34","modified_gmt":"2026-06-11T04:39:34","slug":"ruuvi-firmware-teil-12-bootloader","status":"publish","type":"post","link":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/","title":{"rendered":"Ruuvi Firmware \u2013 Teil 12: Bootloader"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"536\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12-1024x536.jpeg\" alt=\"Einleitungsbild der Ruuvi Firmware-Serie Teil 12\" class=\"wp-image-3730\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12-1024x536.jpeg 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12-450x236.jpeg 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12-768x402.jpeg 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12-600x314.jpeg 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12.jpeg 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\" id=\"989a\">In diesem Teil des Tutorials f\u00fcgen wir Unterst\u00fctzung f\u00fcr das Timing von Aufgaben und die Planung von Aufgaben hinzu, die in der Zukunft ausgef\u00fchrt werden sollen. Den fertigen Code dieses Blog-Beitrags kannst du bei <a href=\"https:\/\/github.com\/ruuvi\/ruuvi.nrf5_sdk15_bootloader.c\">Ruuvi GitHub<\/a> herunterladen. <\/p>\n\n<p class=\"wp-block-paragraph\" id=\"1517\">Bitte folge <a href=\"https:\/\/ruuvi.com\/ruuvi-firmware-part-1-sleep\/\">Teil 1 der Serie<\/a> f\u00fcr Details dazu, wie du das Repository klonst und den Code kompilierst, wobei du das Repository als https:\/\/github.com\/ruuvi\/ruuvi.nrf5_sdk15_bootloader.c.git anpasst. Die finale Hex-Datei dieses Tutorials kann von der Releases-Seite im GitHub-Repository heruntergeladen werden.<\/p>\n\n<h2 class=\"wp-block-heading\">Bootloader<\/h2>\n\n<p class=\"wp-block-paragraph\">Bisher haben wir die Tags mit dem Ruuvi <a href=\"https:\/\/ruuvi.com\/de\/products\/ruuvitag-development-kit\/\">DevKit<\/a> programmiert, was v\u00f6llig in Ordnung ist, solange man tats\u00e4chlich ein DevKit hat. Die \u00fcberwiegende Mehrheit der Nutzer hat jedoch keines, w\u00fcrde aber dennoch gerne ihre Tags aktualisieren k\u00f6nnen. <\/p>\n\n<p class=\"wp-block-paragraph\">Es liegt nahe, die Bluetooth-Verbindung zu nutzen, um neue Firmware auf die Tags zu \u00fcbertragen, da jeder, der den Bluetooth-Sensor-Beacon nutzt, ein Bluetooth-f\u00e4higes Ger\u00e4t besitzt. Es gibt jedoch ein gro\u00dfes Problem: Was passiert, wenn die neue Anwendung besch\u00e4digt ist, der Strom ausf\u00e4llt oder w\u00e4hrend des Updates ein anderes Problem auftritt? <\/p>\n\n<p class=\"wp-block-paragraph\">Der Bootloader ist die Antwort auf diese Probleme. Wenn das Ger\u00e4t eingeschaltet wird, ist der Bootloader das erste Programm, das auf dem RuuviTag ausgef\u00fchrt wird. Der Bootloader pr\u00fcft die Integrit\u00e4t unserer Anwendung, und wenn die Anwendung korrekt installiert ist, l\u00e4sst der Bootloader die Anwendung laufen. Wenn die Anwendung nicht ordnungsgem\u00e4\u00df installiert ist oder der Nutzer signalisiert hat, dass er die Anwendung aktualisieren m\u00f6chte, l\u00e4sst der Bootloader die Anwendung nicht laufen, sondern bietet dem Nutzer eine Methode zur Aktualisierung der Anwendung an.   <\/p>\n\n<p class=\"wp-block-paragraph\">Einen ordentlichen Bootloader zu schreiben, ist eine Aufgabe, die eine eigene Blog-Serie verdient h\u00e4tte. Daher nehmen wir hier eine Abk\u00fcrzung und verwenden den Bootloader von Nordic Semiconductor. Nordic hat seine <em>Software Development Kit<\/em> (<strong>SDK<\/strong>) Version auf <a href=\"https:\/\/developer.nordicsemi.com\/nRF5_SDK\/nRF5_SDK_v15.x.x\/\">15.2<\/a> aktualisiert, also aktualisieren wir bei dieser Gelegenheit auch gleich das <strong>SDK<\/strong> 15.0, das wir bisher verwendet haben. <\/p>\n\n<h2 class=\"wp-block-heading\">Einrichten des Nordic Bootloader-Projekts<\/h2>\n\n<p class=\"wp-block-paragraph\">Als Erstes ben\u00f6tigen wir die <a href=\"https:\/\/github.com\/kmackay\/micro-ecc.git\">Micro elliptic curve cryptography library<\/a>, die nicht als vorkompilierte Bin\u00e4rdatei im Nordic <strong>SDK<\/strong> enthalten ist. Gehe in das <strong>SDK<\/strong>-Verzeichnis <em>external\/micro-ecc<\/em> und f\u00fchre den Befehl aus: <\/p>\n\n<pre class=\"wp-block-code\"><code>git clone https:\/\/github.com\/kmackay\/micro-ecc.git\ncd nrf52hf_armgcc\/armgcc\nmake<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Als N\u00e4chstes kopieren wir das debug-bootloader-Beispiel unter <em>SDK\/examples\/dfu\/secure_bootloader\/pca10040_ble_debug<\/em> in unser Projekt, entfernen alle au\u00dfer den <a href=\"https:\/\/www.segger.com\/products\/development-tools\/embedded-studio\/\"><em>Segger Embedded Studio<\/em><\/a> (<strong>SES<\/strong>) Kompilierungsumgebungen und passen die Dateipfade in der emProject-Datei so an, dass sie auf das <strong>SDK<\/strong>-Root und das Projekt-Root zeigen, wo dies erforderlich ist.<\/p>\n\n<p class=\"wp-block-paragraph\">Lass uns ein paar Konfigurationsparameter in <em>sdk_config.h<\/em> \u00e4ndern. Das Booten ist ein seltenes Ereignis, daher k\u00f6nnen wir die CRC nach dem System-Off pr\u00fcfen. Wir wollen sp\u00e4ter buttonless DFU unterst\u00fctzen. Nennen wir den DFU-Dienst \u201eRuuviBoot\u201c, um den aktuellen Namen des Bootloaders beizubehalten. Wir wollen Downgrades auf fr\u00fchere Versionen zulassen. Und schlie\u00dflich w\u00e4hlen wir als HW-Version 0x0b, wie in \u201eRuuviTag B\u201c.     <\/p>\n\n<pre class=\"wp-block-code\"><code>#define NRF_BL_APP_CRC_CHECK_SKIPPED_ON_SYSTEMOFF_RESET 0\n#define NRF_BL_DFU_ENTER_METHOD_BUTTONLESS 1\n#define NRF_DFU_BLE_ADV_NAME \"RuuviBoot\"\n#define NRF_DFU_APP_DOWNGRADE_PREVENTION 0\n#define NRF_DFU_HW_VERSION 0x0b<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Der SDK12 Ruuvi-Bootloader ist eine Debug-Variante und hat seine Flash-Startadresse bei 0x75000. Unser Bootloader wird dieselbe Startadresse haben, da eine \u00c4nderung der Bootloader-Startadresse im Allgemeinen zu Problemen f\u00fchrt, wenn man Softdevice + Bootloader von SDK12 auf SDK15 \u00fcber BLE aktualisiert. Der Debug-Bootloader passt jedoch standardm\u00e4\u00dfig nicht in den vorgegebenen Platz; wir m\u00fcssen einiges an Logging deaktivieren, um in den verf\u00fcgbaren Platz zu passen. Am einfachsten l\u00e4sst sich Platz sparen, indem man das Standard-Log-Level von \u201eDebug\u201c auf \u201eInfo\u201c erh\u00f6ht. Die n\u00e4chsten paar Bytes werden gespart, indem der Error-Code-to-String-Konverter und NRF_SDH_BLE_LOG, der die Konvertierungsfunktion nutzt, deaktiviert werden. Schlie\u00dflich deaktivieren wir die Float-Formatierung in printf.     <\/p>\n\n<pre class=\"wp-block-code\"><code>#define NRF_LOG_DEFAULT_LEVEL 3\n#define NRF_STRERROR_ENABLED 0\n#define NRF_SDH_BLE_LOG_ENABLED 0<\/code><\/pre>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"790\" height=\"659\" src=\"https:\/\/ruuvi.com\/i\/u\/segger-embedded-studio-for-arm.png\" alt=\"SEGGER Embedded Studio f&#xFC;r ARM\" class=\"wp-image-3731\" srcset=\"https:\/\/ruuvi.com\/i\/u\/segger-embedded-studio-for-arm.png 790w, https:\/\/ruuvi.com\/i\/u\/segger-embedded-studio-for-arm-450x375.png 450w, https:\/\/ruuvi.com\/i\/u\/segger-embedded-studio-for-arm-768x641.png 768w, https:\/\/ruuvi.com\/i\/u\/segger-embedded-studio-for-arm-600x501.png 600w\" sizes=\"auto, (max-width: 790px) 100vw, 790px\" \/><figcaption>Wir k\u00f6nnen auf die printf-Float-Formatierung verzichten, um diese paar wertvollen Bytes im Flash zu gewinnen.<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Wir wollen auch das ruuvi.boards.c-Repository verwenden, das wir haben, um die Pflege von zwei Board-Konfigurations-Repositories zu vermeiden. Lass uns ruuvi.boards.c als Submodul hinzuf\u00fcgen. <\/p>\n\n<p class=\"wp-block-paragraph\">Nachdem wir etwas Glue-Logik in custom_board.h hinzugef\u00fcgt und Board-Definitionen zu den SES-Pr\u00e4prozessor-Direktiven hinzugef\u00fcgt haben, k\u00f6nnen wir den Pin zum Aufrufen des Bootloaders als <strong>RUUVI_BOARD_BUTTON_1<\/strong> definieren.<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"674\" src=\"https:\/\/ruuvi.com\/i\/u\/adding-preprocessor-definitions-1024x674.png\" alt=\"Pr&#xE4;prozessor-Definitionen hinzuf&#xFC;gen\" class=\"wp-image-3732\" srcset=\"https:\/\/ruuvi.com\/i\/u\/adding-preprocessor-definitions-1024x674.png 1024w, https:\/\/ruuvi.com\/i\/u\/adding-preprocessor-definitions-450x296.png 450w, https:\/\/ruuvi.com\/i\/u\/adding-preprocessor-definitions-768x505.png 768w, https:\/\/ruuvi.com\/i\/u\/adding-preprocessor-definitions-1536x1011.png 1536w, https:\/\/ruuvi.com\/i\/u\/adding-preprocessor-definitions-600x395.png 600w, https:\/\/ruuvi.com\/i\/u\/adding-preprocessor-definitions.png 2006w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Pr\u00e4prozessor-Definitionen hinzuf\u00fcgen<\/figcaption><\/figure><\/div>\n\n<pre class=\"wp-block-code\"><code>#include \"ruuvi_boards.h\"\n\n#define NRF_BL_DFU_ENTER_METHOD_BUTTON_PIN RUUVI_BOARD_BUTTON_1<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Als letzten Schliff benennen wir die Projektdateien von pca10040 in ruuvitag_b um. Unser Entwicklungsverzeichnis sieht nun so aus: <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"928\" src=\"https:\/\/ruuvi.com\/i\/u\/project-structure-at-the-end.png\" alt=\"Projektstruktur am Ende\" class=\"wp-image-3733\" srcset=\"https:\/\/ruuvi.com\/i\/u\/project-structure-at-the-end.png 1000w, https:\/\/ruuvi.com\/i\/u\/project-structure-at-the-end-450x418.png 450w, https:\/\/ruuvi.com\/i\/u\/project-structure-at-the-end-768x713.png 768w, https:\/\/ruuvi.com\/i\/u\/project-structure-at-the-end-600x557.png 600w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption>Projektstruktur am Ende<\/figcaption><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\">Verwendung des Bootloaders<\/h2>\n\n<p class=\"wp-block-paragraph\">Wir k\u00f6nnen den Bootloader innerhalb von <strong>SES<\/strong> wie gewohnt auf unseren RuuviTag flashen. Wie man sich denken kann, bricht der Code beim ersten Durchlauf sofort mit einem Assert ab. Das liegt daran, dass der Beispielcode versucht, eine dritte LED zu verwenden, die wir am RuuviTag nicht haben. Ein schneller Fix in <em>main.c<\/em> \u2013 das Entfernen aller Aktionen mit <strong>BSP_BOARD_LED_2<\/strong> \u2013 und schon kann es losgehen.   <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"240\" src=\"https:\/\/ruuvi.com\/i\/u\/debug-terminal-inside-main-1024x240.png\" alt=\"Debug-Terminal &#x2013; innerhalb von main\" class=\"wp-image-3734\" srcset=\"https:\/\/ruuvi.com\/i\/u\/debug-terminal-inside-main-1024x240.png 1024w, https:\/\/ruuvi.com\/i\/u\/debug-terminal-inside-main-450x105.png 450w, https:\/\/ruuvi.com\/i\/u\/debug-terminal-inside-main-768x180.png 768w, https:\/\/ruuvi.com\/i\/u\/debug-terminal-inside-main-600x140.png 600w, https:\/\/ruuvi.com\/i\/u\/debug-terminal-inside-main.png 1128w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Unsere App wartet auf neue Firmware<\/figcaption><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\">Erstellen eines Device Firmware Update-Pakets<\/h2>\n\n<p class=\"wp-block-paragraph\">Das Erstellen eines <strong>DFU<\/strong>-Pakets f\u00fcr unseren Bootloader ist ein Kinderspiel: Wir laden die finale Hex-Datei aus unserem vorherigen Tutorial herunter:<\/p>\n\n<pre class=\"wp-block-code\"><code>wget http:\/\/jenkins.ruuvi.com\/job\/ruuvi.firmware.c\/lastSuccessfulBuild\/artifact\/targets\/ruuvitag_b\/armgcc\/_build\/nrf52832_xxaa.hex<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">und f\u00fchren den <a href=\"https:\/\/github.com\/NordicSemiconductor\/pc-nrfutil\">nrfutil<\/a>-Befehl zur Paketerstellung darauf aus:<\/p>\n\n<pre class=\"wp-block-code\"><code>nrfutil pkg generate --application nrf52832_xxaa.hex --application-version 1 --application-version-string \"3.11.0\" --hw-version 0x0b --sd-req 0xAF --key-file ~\/git\/ruuvi.nrf5_sdk15_bootloader.c\/ruuvi_open_private.pem RuuviTagB_RuuviFW_3.12.0_dfu.zip<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Wenn du ein anderes Softdevice anstrebst, kannst du die <strong>sd-req<\/strong>-Codes im <a href=\"https:\/\/github.com\/NordicSemiconductor\/pc-nrfutil\">nrfutil-Repository<\/a> nachschlagen.<\/p>\n\n<h2 class=\"wp-block-heading\">Hochladen des Pakets<\/h2>\n\n<p class=\"wp-block-paragraph\">Das Hochladen eines <strong>DFU<\/strong>-Pakets mit <a href=\"http:\/\/nrf connect gatt server\">nRF Connect<\/a> ist ein vertrauter Prozess, der bei <a href=\"https:\/\/lab.ruuvi.com\/dfu\/\">RuuviLab<\/a> gut beschrieben ist. Wir k\u00f6nnen die Info-Logs von unserem Tag w\u00e4hrend des Paket-Uploads \u00fcberpr\u00fcfen. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"558\" src=\"https:\/\/ruuvi.com\/i\/u\/debug-terminal-during-upload-1024x558.png\" alt=\"Unsere Logs w&#xE4;hrend des Uploads.\" class=\"wp-image-3735\" srcset=\"https:\/\/ruuvi.com\/i\/u\/debug-terminal-during-upload-1024x558.png 1024w, https:\/\/ruuvi.com\/i\/u\/debug-terminal-during-upload-450x245.png 450w, https:\/\/ruuvi.com\/i\/u\/debug-terminal-during-upload-768x419.png 768w, https:\/\/ruuvi.com\/i\/u\/debug-terminal-during-upload-600x327.png 600w, https:\/\/ruuvi.com\/i\/u\/debug-terminal-during-upload.png 1126w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Unsere Logs w\u00e4hrend des Uploads.<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Die rote LED am Tag blinkt mit 1 Hz, und ein kurzer Blick in die <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.ruuvi.station&amp;hl=en\">Ruuvi Station<\/a> App zeigt, dass die Daten vom Tag ankommen. Wir haben unsere Firmware erfolgreich \u00fcber Bluetooth aktualisiert. <\/p>\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n<p class=\"wp-block-paragraph\">Dieser Beitrag war ein kleiner Exkurs von der eigentlichen Anwendung, aber ich denke, er ist als Teil des gesamten Stacks, den wir aufbauen, gerechtfertigt. Wir k\u00f6nnen die Anwendung nun \u00fcber Bluetooth hochladen und k\u00f6nnten bei Bedarf auch ein neues Softdevice und einen neuen Bootloader hochladen, um den gesamten Stack zu aktualisieren. <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Bleib dran und folge <\/strong><a href=\"https:\/\/twitter.com\/ojousima\"><strong>@ojousima<\/strong><\/a><strong> und <\/strong><a href=\"https:\/\/twitter.com\/ruuvicom\"><strong>@ruuvicom<\/strong><\/a><strong> auf Twitter f\u00fcr #FirmwareFriday-Beitr\u00e4ge!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Teil des Tutorials f\u00fcgen wir Unterst\u00fctzung f\u00fcr das Timing von Aufgaben und die Planung von Aufgaben hinzu, die in der Zukunft ausgef\u00fchrt werden sollen. Den fertigen Code dieses Blog-Beitrags kannst du bei Ruuvi GitHub herunterladen. Bitte folge Teil 1 der Serie f\u00fcr Details dazu, wie du das Repository klonst und den Code kompilierst, [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":135756,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[324],"tags":[],"class_list":["post-135755","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ruuvi-software-artikel"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ruuvi Firmware \u2013 Teil 12: Bootloader \u2013 Ruuvi<\/title>\n<meta name=\"description\" content=\"Wie du Sensor-Updates f\u00fcr Nutzer erm\u00f6glichst, die kein Ruuvi Development Kit besitzen, indem du den Bootloader zur Firmware hinzuf\u00fcgst.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruuvi Firmware \u2013 Teil 12: Bootloader \u2013 Ruuvi\" \/>\n<meta property=\"og:description\" content=\"Wie du Sensor-Updates f\u00fcr Nutzer erm\u00f6glichst, die kein Ruuvi Development Kit besitzen, indem du den Bootloader zur Firmware hinzuf\u00fcgst.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/\" \/>\n<meta property=\"og:site_name\" content=\"Ruuvi\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ruuvi.cc\" \/>\n<meta property=\"article:published_time\" content=\"2018-10-12T09:50:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-11T04:39:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"733\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Otso Jousimaa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ruuvicom\" \/>\n<meta name=\"twitter:site\" content=\"@ruuvicom\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Otso Jousimaa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\u00a0Minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/\"},\"author\":{\"name\":\"Otso Jousimaa\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"headline\":\"Ruuvi Firmware \u2013 Teil 12: Bootloader\",\"datePublished\":\"2018-10-12T09:50:00+00:00\",\"dateModified\":\"2026-06-11T04:39:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/\"},\"wordCount\":968,\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-12.jpeg\",\"articleSection\":[\"Ruuvi-Software-Artikel\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/\",\"name\":\"Ruuvi Firmware \u2013 Teil 12: Bootloader \u2013 Ruuvi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-12.jpeg\",\"datePublished\":\"2018-10-12T09:50:00+00:00\",\"dateModified\":\"2026-06-11T04:39:34+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"description\":\"Wie du Sensor-Updates f\u00fcr Nutzer erm\u00f6glichst, die kein Ruuvi Development Kit besitzen, indem du den Bootloader zur Firmware hinzuf\u00fcgst.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-12.jpeg\",\"contentUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-12.jpeg\",\"width\":1400,\"height\":733,\"caption\":\"Einleitungsbild der Ruuvi Firmware-Serie Teil 12\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-12-bootloader\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/front\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruuvi Firmware \u2013 Teil 12: Bootloader\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/\",\"name\":\"Ruuvi\",\"description\":\"Measure Your World\",\"potentialAction\":[],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\",\"name\":\"Otso Jousimaa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"caption\":\"Otso Jousimaa\"},\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/author\\\/ojousima\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ruuvi Firmware \u2013 Teil 12: Bootloader \u2013 Ruuvi","description":"Wie du Sensor-Updates f\u00fcr Nutzer erm\u00f6glichst, die kein Ruuvi Development Kit besitzen, indem du den Bootloader zur Firmware hinzuf\u00fcgst.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/","og_locale":"de_DE","og_type":"article","og_title":"Ruuvi Firmware \u2013 Teil 12: Bootloader \u2013 Ruuvi","og_description":"Wie du Sensor-Updates f\u00fcr Nutzer erm\u00f6glichst, die kein Ruuvi Development Kit besitzen, indem du den Bootloader zur Firmware hinzuf\u00fcgst.","og_url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/","og_site_name":"Ruuvi","article_publisher":"https:\/\/www.facebook.com\/ruuvi.cc","article_published_time":"2018-10-12T09:50:00+00:00","article_modified_time":"2026-06-11T04:39:34+00:00","og_image":[{"width":1400,"height":733,"url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12.jpeg","type":"image\/jpeg"}],"author":"Otso Jousimaa","twitter_card":"summary_large_image","twitter_creator":"@ruuvicom","twitter_site":"@ruuvicom","twitter_misc":{"Verfasst von":"Otso Jousimaa","Gesch\u00e4tzte Lesezeit":"5\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/#article","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/"},"author":{"name":"Otso Jousimaa","@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"headline":"Ruuvi Firmware \u2013 Teil 12: Bootloader","datePublished":"2018-10-12T09:50:00+00:00","dateModified":"2026-06-11T04:39:34+00:00","mainEntityOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/"},"wordCount":968,"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12.jpeg","articleSection":["Ruuvi-Software-Artikel"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/","url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/","name":"Ruuvi Firmware \u2013 Teil 12: Bootloader \u2013 Ruuvi","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/#primaryimage"},"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12.jpeg","datePublished":"2018-10-12T09:50:00+00:00","dateModified":"2026-06-11T04:39:34+00:00","author":{"@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"description":"Wie du Sensor-Updates f\u00fcr Nutzer erm\u00f6glichst, die kein Ruuvi Development Kit besitzen, indem du den Bootloader zur Firmware hinzuf\u00fcgst.","breadcrumb":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/#primaryimage","url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12.jpeg","contentUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-12.jpeg","width":1400,"height":733,"caption":"Einleitungsbild der Ruuvi Firmware-Serie Teil 12"},{"@type":"BreadcrumbList","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-12-bootloader\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ruuvi.com\/de\/front\/"},{"@type":"ListItem","position":2,"name":"Ruuvi Firmware \u2013 Teil 12: Bootloader"}]},{"@type":"WebSite","@id":"https:\/\/ruuvi.com\/de\/#website","url":"https:\/\/ruuvi.com\/de\/","name":"Ruuvi","description":"Measure Your World","potentialAction":[],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00","name":"Otso Jousimaa","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","caption":"Otso Jousimaa"},"url":"https:\/\/ruuvi.com\/de\/author\/ojousima\/"}]}},"_links":{"self":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/comments?post=135755"}],"version-history":[{"count":1,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135755\/revisions"}],"predecessor-version":[{"id":135760,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135755\/revisions\/135760"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media\/135756"}],"wp:attachment":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media?parent=135755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/categories?post=135755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/tags?post=135755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}