Über den Baukasten Kontrollstrukturen und das Blöckchen für C-Code lassen sich eigene Komponenten einfach in die Ardublock-Umgebung integrieren.
So ist ein neuer Sensor oder ein spezielles Display schnell eingebunden. Einfach die entsprechende Bibliothek auswählen und den C-Code aus dem jeweils mitgelieferten Beispiel nutzen. Alternativ die Lib in den Ordner \IoTW\arduino\portable\sketchbook\libraries\ kopieren.

Selbst neue grafische Blöckchen für Ardublock zu bauen ist leider ein komplexes Unterfangen. Ein kurzes Tutorial findet sich hier.
Unser aktueller Source befindet sich im Zip-File, Ordner "resources".
Hier am Beispiel http(s) GET
(bei uns ardublock_ESP32.xml für Makey bzw. ardublock_ESP8266.xml für Octopus):
<BlockGenus name="sendHTTPSGet" kind="data" color="30 30 255" initlabel="bg.sendHTTPSGet" editable-label="no" is-label-value="no">
<description>
<text>REST Get</text>
</description>
<BlockConnectors>
<BlockConnector connector-type="string" connector-kind="socket" label="bc.host">
<DefaultArg genus-name="host" label="https://jsonplaceholder.typicode.com"/>
</BlockConnector>
<BlockConnector connector-type="string" connector-kind="socket" label="bc.URI">
<DefaultArg genus-name="URI" label="/posts/1"/>
</BlockConnector>
<BlockConnector connector-type="string" connector-kind="socket" label="Fingerprint">
</BlockConnector>
<BlockConnector connector-type="string" connector-kind="plug"/>
</BlockConnectors>
</BlockGenus>
auf der linken Seite der Ardublockoberfläche (am Ende der Datei ardublock.xml).
<BlockDrawer button-color="37 79 140" name="bd.HTTP_communication" type="factory">
<BlockGenusMember>sendHTTPSGet</BlockGenusMember>
</BlockDrawer>
ardublock.properties (International) bzw. ardublock_de.properties (Deutsch). Definiert den angezeigten Text im Block.
bg.sendHTTPSGet=http(s) GET
bg.sendHTTPSGet.description=REST Protocol GET
bg.URI=URI
bc.URI=URI
bg.URI.description=Kommando
bg.port=Port
bc.port=Port
bg.port.description=Port Nummer (80, 8080)
(möglichst unter Eclipse per Cut&Paste aus seiner ähnlichen Vorlage holen, dann passen alle Bezüge).
Hier ein Ausschnitt aus der Datei IoTHTTPGet.java
Am einfachsten vorher getestete C-Files aus dem Arduino per Cut&Paste in
den Java-Quelltext übernehmen. Wenn im Quelltext vorher mit String BlaBla =“
ein String begonnen wird, vervollständigt Eclipse die notwendigen
Steuerzeichen \n ,\“ usw. selbständig. Hier am Beispiel der httpGET Funktion:
String httpGET ="//--------------------------------------- HTTP-Get\n"
+ "int httpGET(String host, String cmd, String &antwort,int Port) {\n"
+ Client
+ " String text = \"GET \"+ host + cmd + \" HTTP/1.1\\r\\n\";\n"
+ " text = text + \"Host:\" + host + \"\\r\\n\";\n"
+ " text = text + \"Connection:close\\r\\n\\r\\n\";\n"
+ Check
+ " if (ok) { // Netzwerkzugang vorhanden \n"
+ " ok = client.connect(host.c_str(),Port);// verbinde mit Client\n"
+ " if (ok) {\n"
+ " client.print(text); // sende an Client \n"
+ " for (int tout=1000;tout>0 && client.available()==0; tout--)\n"
+ " delay(10); // und warte auf Antwort\n"
+ " if (client.available() > 0) // Anwort gesehen \n"
+ " while (client.available()) // und ausgewertet\n"
+" antwort = antwort + client.readStringUntil('\\r');\n"
+" else ok = 0;\n"
+" client.stop(); \n"
+" Serial.println(antwort);\n"
+ " } \n"
+ " } \n"
+ " if (!ok) Serial.print(\" no connection\"); // Fehlermeldung\n"
+ " return ok;\n"
+ "}\n";
Sollte der httpGET von mehreren Blöcken genutzt werden, ist zwingend immer genau derselbe Quelltext erforderlich. Nur dann erkennt der Codegenerator die Dublette und erzeugt die Funktionsdefinition auch nur einmal.
Unser httpGET wird z.B. auch vom Thingspeak und yahoo-Block verwendet. Änderungen müssen also immer an mehreren Stellen nachgeführt werde – die man kennen muss… Das ist die größte Hürde für ein verteiltes Arbeiten mit Ardublock.
translator.addDefinitionCommand(httpGET);
Variable Informationen aus dem Ardublock werden über die folgenden Befehlszeilen
aus den Eingängen im Ardublock geholt. Diese ändern sich ja jedesmal
entsprechend der Programmierung durch den Anwender:
String host,cmd,port;
TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0);
host = translatorBlock.toCode();
translatorBlock = this.getRequiredTranslatorBlockAtSocket(1);
port = translatorBlock.toCode();
translatorBlock = this.getRequiredTranslatorBlockAtSocket(2);
cmd = translatorBlock.toCode();
Damit haben wir jetzt alle Informationen, um im Arduinoprogramm unseren Block an
der richtigen Stelle einzubauen:
String ret = "httpRESTGET("+host+","+cmd+","+port+")";
return codePrefix + ret + codeSuffix;
Als letztes noch in der Datei block-mapping.properties den Bezug zwischen
Ardublock-Puzzleteil und dem java Quelltextgenerator herstellen:
sendHTTPGet=com.ardublock.translator.block.IoT.IoTHTTPGet
Sie verlassen die offizielle Website der Hochschule Trier