      {"id":607,"date":"2021-01-08T19:43:37","date_gmt":"2021-01-08T18:43:37","guid":{"rendered":"https:\/\/www.konnekting.de\/?page_id=607"},"modified":"2022-05-21T19:53:33","modified_gmt":"2022-05-21T17:53:33","slug":"lektion-5-nun-mit-konnekting","status":"publish","type":"page","link":"https:\/\/www.konnekting.de\/en\/konnekting-lernen\/lektion-5-nun-mit-konnekting\/","title":{"rendered":"Lektion 5: Nun mit Konnekting"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Erweitern des Temperatursensors<\/h3>\n\n\n\n<p>Wir haben nun einen Temperatursensor mit einer Taste und einer LED, verbunden mit einer BCU. Bislang kamen wir ohne ein EEPROM aus. Konnekting ben\u00f6tigt es aber zum Speichern der Konfigurationsdaten. N\u00e4heres dazu findest du im n\u00e4chsten Kapitel.<\/p>\n\n\n\n<p>Nun m\u00fcssen wir die Konnekting-Bibliothek und unsere Header-Datei in unseren Sketch einbauen.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; auto-links: false; first-line: 15; title: ; quick-code: false; notranslate\" title=\"\">\n\/\/includes f\u00fcr KNX\n#include &lt;KonnektingDevice.h&gt;\n#include &quot;kdevice_SimpleSensor.h&quot;\n<\/pre><\/div>\n\n\n<p>Als n\u00e4chstes definieren wir Schnittstelle, ProgLED und ProgButton. Die Definitionen passen f\u00fcr den XIAO und m\u00fcssen an das jeweilige Board angepasst werden.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; auto-links: false; first-line: 19; title: ; quick-code: false; notranslate\" title=\"\">\n#define KNX_SERIAL Serial1\t\t\t\/\/ D7=RX\/D6=TX \/ Seeeduino XIAO\n#define PROG_LED_PIN LED_BUILTIN\n#define PROG_BUTTON_PIN 10\t\t\t\/\/ pin with interrupt\n<\/pre><\/div>\n\n\n<p>In der Setup-Funktion muss nun KNX initialisiert werden.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; auto-links: false; first-line: 37; title: ; quick-code: false; notranslate\" title=\"\">\nKonnekting.init(KNX_SERIAL,\n                  PROG_BUTTON_PIN,\n                  PROG_LED_PIN,\n                  MANUFACTURER_ID,\n                  DEVICE_ID,\n                  REVISION);\n<\/pre><\/div>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>An dieser Stelle wird die BCU initialisiert. Wenn du den Sketch ausprobierst muss die BCU mit dem KNX-Bus verbunden sein. Da die BCU ihre Betriebsspannung aus dem Bus bezieht, schl\u00e4gt die Initialisierung sonst fehl und das Ger\u00e4t verharrt in einer Dauer-Resetschleife. Pr\u00fcfe in dem Fall bitte auch die serielle Verbindung von Arduino zur BCU.<\/p><\/blockquote>\n\n\n\n<p>Anschlie\u00dfend werden die Parameter eingelesen, sofern vorhanden. Ansonsten wird direkt der Programmiermodus gestartet.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; auto-links: false; first-line: 46; title: ; quick-code: false; notranslate\" title=\"\">\nif (!Konnekting.isFactorySetting()) {\n    sendDelay = 1000 * (uint32_t)Konnekting.getUINT32Param(PARAM_tempPollingTime);\n  }\n  else{\n    Konnekting.toggleProgState();\n  }\n<\/pre><\/div>\n\n\n<p>Beim XIAO ist die LED genau anders herum gepolt wie \u00fcblich. Deshalb leuchtet sie, wenn der Programmiermodus <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-bright-red-color\">deaktiviert<\/mark> ist. Im Programmiermodus ist sie aus.<\/p>\n\n\n\n<p>In der Hauptschleife muss der KNX.task regelm\u00e4\u00dfig und m\u00f6glichst oft aufgerufen werden. Dort darf also nicht z.B. auf einen Tastendruck gewartet werden.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; auto-links: false; first-line: 61; title: ; quick-code: false; notranslate\" title=\"\">\nKnx.task();\n<\/pre><\/div>\n\n\n<p>Nun m\u00fcssen wir abfragen, ob das Ger\u00e4t bereit ist, die Applikation auszuf\u00fchren oder ob das Ger\u00e4t gerade programmiert wird.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; auto-links: false; first-line: 62; title: ; quick-code: false; notranslate\" title=\"\">\n if (Konnekting.isReadyForApplication()) {\n<\/pre><\/div>\n\n\n<p>Und nat\u00fcrlich muss die aktuelle Temperatur noch auf den Bus gelegt werden.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; auto-links: false; first-line: 65; highlight: [66]; title: ; quick-code: false; notranslate\" title=\"\">\naktTemp = temperature.readTemperatureC(); \/\/aktuelle Temperatur einlesen\n    Knx.write(COMOBJ_tempValue, aktTemp);     \/\/und auf den Bus\n    DEBUGSERIAL.print(&quot;Aktuelle Temperatur &quot;);\n    DEBUGSERIAL.print(aktTemp);               \/\/und zum Monitor\n    DEBUGSERIAL.println(&quot; \u00baC&quot;);\n    lastmillis = currentmillis;\n<\/pre><\/div>\n\n\n<p>Nun noch die Callback-Funktion f\u00fcr kommende Daten (bleibt in unserem Fall leer).<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; auto-links: false; first-line: 79; title: ; quick-code: false; notranslate\" title=\"\">\nvoid knxEvents(byte index) {\n  \n}\n<\/pre><\/div>\n\n\n<p>Der komplette Sketch sollte nun so aussehen.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; auto-links: false; title: ; quick-code: false; notranslate\" title=\"\">\n\/**********************************************************************\n * Einfacher Temperatursensor als Beispiel f\u00fcr Konnekting\n * \n * schickt alle 5 Sekunden die aktuelle Temperatur\n * \n * Temperatursensor: LM 75\n * Benutzt die LM75-Library von Jeremy Cole aus der Bibliothekverwaltung\n * \n * Prozessor ist ein SAMD21G18 (Seeeduino XIAO, Arduino Zero)\n * \n **********************************************************************\/\n \n#define DEBUGSERIAL Serial   \/\/ USB port\n\n\/\/includes f\u00fcr KNX\n#include &lt;KonnektingDevice.h&gt;\n#include &quot;kdevice_SimpleSensor.h&quot;\n#include &quot;EEPROM_24AA256.h&quot;\n\n#include &lt;Adafruit_SleepyDog.h&gt;\n\n\n#define KNX_SERIAL Serial1\t\t\t\/\/ D7=RX\/D6=TX \/ Seeeduino XIAO\n#define PROG_LED_PIN LED_BUILTIN\n#define PROG_BUTTON_PIN 10\t\t\t\/\/ pin with interrupt\n\n#include &lt;Temperature_LM75_Derived.h&gt;\n\n\/\/ The Generic_LM75 class will provide 9-bit (\u00b10.5\u00b0C) temperature for any\n\/\/ LM75-derived sensor. More specific classes may provide better resolution.\nGeneric_LM75 temperature;\n \nunsigned long lastmillis = millis();\nuint32_t sendDelay = 5000;\n \nvoid setup()\n{\n  DEBUGSERIAL.begin(9600);\n  Wire.begin();\n\n  Konnekting.setMemoryReadFunc(&amp;readMemory);\n  Konnekting.setMemoryWriteFunc(&amp;writeMemory);\n  Konnekting.setMemoryUpdateFunc(&amp;updateMemory);\n  Konnekting.setMemoryCommitFunc(&amp;commitMemory);\n\n  \/\/ Initialize KNX enabled Arduino Board\n  Konnekting.init(KNX_SERIAL,\n                  PROG_BUTTON_PIN,\n                  PROG_LED_PIN,\n                  MANUFACTURER_ID,\n                  DEVICE_ID,\n                  REVISION);\n\n \n\n  \/\/ If device has been parametrized with KONNEKTING Suite, read params from EEPROM\n  \/\/ Otherwise start programming mode\n  if (!Konnekting.isFactorySetting()) {\n    sendDelay = 1000 * (uint32_t)Konnekting.getUINT32Param(PARAM_tempPollingTime);\n  }\n  else{\n    Konnekting.toggleProgState();\n  }\n\n  lastmillis = millis();\n  Watchdog.enable(4000);\n}\n \nvoid loop()\n{\n  float aktTemp;\n  unsigned long currentmillis = millis();\n\n  Knx.task();\n  Watchdog.reset();\n  \n  if (Konnekting.isReadyForApplication()) {\n    if (currentmillis - lastmillis &gt;= sendDelay)\n    {\n      aktTemp = temperature.readTemperatureC(); \/\/aktuelle Temperatur einlesen\n      Knx.write(COMOBJ_tempValue, aktTemp);     \/\/und auf den Bus\n      DEBUGSERIAL.print(&quot;Aktuelle Temperatur &quot;);\n      DEBUGSERIAL.print(aktTemp);               \/\/und zum Monitor\n      DEBUGSERIAL.println(&quot; \u00baC&quot;);\n      lastmillis = currentmillis;\n    }\n  }\n}\n\n\/\/ ################################################\n\/\/ ### KNX EVENT CALLBACK\n\/\/ ################################################\n\nvoid knxEvents(byte index) {\n  \n}\n<\/pre><\/div>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Beim Programmieren werden die \u00fcbertragenen Daten (Parameter und Gruppenadressen) im EEPROM gespeichert. Nach dem Programmieren wird das Ger\u00e4t neu gestartet und die Daten eingelesen.<\/p><\/blockquote>\n\n\n\n<p><\/p>\n\n\n<p><a href=\"https:\/\/www.konnekting.de\/konnekting-lernen\/lektion-4-es-geht-in-die-praxis\/\">&lt;&#8211; Lektion 4: Es geht in die Praxis<\/a><a class=\"alignright\" href=\"https:\/\/www.konnekting.de\/konnekting-lernen\/lektion-6-eeprom-co\/\">Lektion 6: EEPROM &amp; Co. &#8211;&gt;<\/a><\/p>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Erweitern des Temperatursensors Wir haben nun einen Temperatursensor mit einer Taste und einer LED, verbunden mit einer BCU. Bislang kamen wir ohne ein EEPROM aus. Konnekting ben\u00f6tigt es aber zum Speichern der Konfigurationsdaten. N\u00e4heres dazu findest du im n\u00e4chsten Kapitel. Nun m\u00fcssen wir die Konnekting-Bibliothek und unsere Header-Datei in unseren Sketch einbauen. Als n\u00e4chstes definieren &hellip; <a href=\"https:\/\/www.konnekting.de\/en\/konnekting-lernen\/lektion-5-nun-mit-konnekting\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Lektion 5: Nun mit Konnekting&#8221;<\/span><\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"parent":163,"menu_order":5,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-607","page","type-page","status-publish","hentry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"en","enabled_languages":["de","en"],"languages":{"de":{"title":true,"content":true,"excerpt":false},"en":{"title":false,"content":false,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/pages\/607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/comments?post=607"}],"version-history":[{"count":22,"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/pages\/607\/revisions"}],"predecessor-version":[{"id":735,"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/pages\/607\/revisions\/735"}],"up":[{"embeddable":true,"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/pages\/163"}],"wp:attachment":[{"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/media?parent=607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}