33 Commits
v0.5 ... v1.0.4

Author SHA1 Message Date
8a1df057d0 release 2020-05-09 22:57:27 +02:00
f7ba556ee4 disable debug 2020-05-09 22:52:46 +02:00
77187d0d46 changes, build and test script 2019-11-24 00:15:27 +01:00
dad092c087 lets have another look 2019-06-01 00:01:16 +02:00
fbcc6f74c4 lets have a look 2019-05-31 23:26:26 +02:00
d84f426432 readme work 2019-05-31 08:02:03 +02:00
aa63589e81 v1.0.3 2019-05-30 19:35:37 +02:00
e79cda7c5e Merge branch 'master' into release 2019-05-30 19:33:13 +02:00
dc8f1dfc13 more leds 2019-05-30 19:32:08 +02:00
030311bb33 v1.0.2 2019-05-30 17:47:17 +02:00
93fa192874 move pubsubclient directly into mqtt boilerplate project 2019-05-30 17:41:17 +02:00
11c40ceba2 test except tags in CI script 2019-05-30 17:34:56 +02:00
0ba1232307 v1.0 2019-05-30 17:29:49 +02:00
9a81f29e5b release info fixed 2019-05-30 17:27:42 +02:00
aae4d97130 Merge branch 'master' into release 2019-05-30 17:24:01 +02:00
b54d2bce6e use RGB mode 2019-05-30 17:18:17 +02:00
44cb3b75f3 drop ssl and auth related options 2019-05-30 17:10:43 +02:00
7b28802780 changes in mqtt code 2019-05-30 17:04:50 +02:00
d9426bdb45 new version of pubsubclient 2019-05-30 16:55:39 +02:00
ed707fd7e7 release bin file, not elf file 2019-05-30 16:15:50 +02:00
4935163fbd fix ci script 2019-05-30 15:11:31 +02:00
c3d1b3224f fix uploader call in ci script 2019-05-30 14:10:13 +02:00
0f21b68845 prepare for use new uploader 2019-05-30 13:26:09 +02:00
13a6dac7c5 boilerplate changed 2019-05-30 11:26:05 +02:00
edd56596ce merged 2019-05-30 11:15:31 +02:00
4c8d955c9f cloning is required 2019-05-17 18:04:59 +02:00
debbfb6e3c try to upload release 2019-05-17 18:03:20 +02:00
86c8551368 drop generated files from repo 2019-05-17 17:58:09 +02:00
6e840379d4 fix path stack 2019-05-17 17:54:59 +02:00
5cc1dc8d61 call configGen in CI script 2019-05-17 17:43:53 +02:00
9997a9f715 drop some eclipse files, changes in subrepo 2019-05-17 17:41:40 +02:00
7e58659a32 Merge branch 'master' into ForArduinoCli 2019-05-09 10:31:00 +02:00
50647fd4ae use adafruit neopixel also for outdoor light controller, fastled code still to be removed 2019-05-09 10:28:32 +02:00
20 changed files with 169 additions and 1978 deletions

View File

@ -1,91 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="io.sloeber.core.toolChain.release.1704841599">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="io.sloeber.core.toolChain.release.1704841599" moduleId="org.eclipse.cdt.core.settings" name="Release">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="io.sloeber.core.toolChain.release.1704841599" name="Release" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="io.sloeber.core.toolChain.release.1704841599.673187831" name="/" resourcePath="">
<toolChain id="io.sloeber.core.toolChain.release.633523815" name="Arduino Toolchain (Sloeber edition)" superClass="io.sloeber.core.toolChain.release">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="io.sloeber.targetplatform.1503202054" name="Arduino Target" osList="all" superClass="io.sloeber.targetplatform"/>
<builder buildPath="${workspace_loc:/rgbled}/Release" id="io.sloeber.sketch.builder.24567202" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Arduino sketch builder" superClass="io.sloeber.sketch.builder"/>
<tool id="io.sloeber.tool.sketch.compiler.cpp.872032613" name="Arduino C++ Compiler" superClass="io.sloeber.tool.sketch.compiler.cpp">
<option id="io.sloeber.compiler.cpp.sketch.option.incpath.291247391" name="Include Paths (-I)" superClass="io.sloeber.compiler.cpp.sketch.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/core/core}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/core/variant}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/Adafruit_NeoPixel}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/EEPROM}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WebServer}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WebServer/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WiFi}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WiFi/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/pubsubclient}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/esp8266boilerplate}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/esp8266mqttboilerplate}&quot;"/>
</option>
<inputType id="io.sloeber.compiler.cpp.sketch.input.454285658" name="CPP source files" superClass="io.sloeber.compiler.cpp.sketch.input"/>
</tool>
<tool id="io.sloeber.tool.compiler.c.1078511554" name="Arduino C Compiler" superClass="io.sloeber.tool.compiler.c">
<option id="io.sloeber.compiler.c.sketch.option.incpath.1836263605" name="Include Paths (-I)" superClass="io.sloeber.compiler.c.sketch.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/core/core}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/core/variant}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/Adafruit_NeoPixel}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/EEPROM}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WebServer}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WebServer/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WiFi}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WiFi/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/pubsubclient}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/esp8266boilerplate}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/esp8266mqttboilerplate}&quot;"/>
</option>
<inputType id="io.sloeber.compiler.c.sketch.input.1857532110" name="C Source Files" superClass="io.sloeber.compiler.c.sketch.input"/>
</tool>
<tool id="io.sloeber.tool.sketch.compiler.s.1507960549" name="Arduino Assembler" superClass="io.sloeber.tool.sketch.compiler.s">
<option id="io.sloeber.compiler.asm.sketch.option.incpath.1158181252" name="Include Paths (-I)" superClass="io.sloeber.compiler.asm.sketch.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/core/core}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/core/variant}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/Adafruit_NeoPixel}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/EEPROM}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WebServer}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WebServer/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WiFi}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/libraries/ESP8266WiFi/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/pubsubclient}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/esp8266boilerplate}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/rgbled/esp8266mqttboilerplate}&quot;"/>
</option>
<inputType id="io.sloeber.compiler.S.sketch.input.2089597409" name="Assembly source files" superClass="io.sloeber.compiler.S.sketch.input"/>
</tool>
<tool id="io.sloeber.tool.ar.42953225" name="Arduino archiver" superClass="io.sloeber.tool.ar"/>
<tool id="io.sloeber.tool.combine.1276413068" name="Arduino combiner" superClass="io.sloeber.tool.combine"/>
<tool id="io.sloeber.tool.objcopy.eep.1194930385" name="Arduino tool Create eeprom" superClass="io.sloeber.tool.objcopy.eep"/>
<tool id="io.sloeber.tool.size.569233132" name="Arduino tool Print Size" superClass="io.sloeber.tool.size"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="libraries/?*/**/?xamples/**|libraries/?*/**/?xtras/**|libraries/?*/**/test*/**|libraries/?*/**/third-party/**|libraries/**/._*|libraries/?*/utility/*/*" flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name=""/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="rgbled.null.408725950" name="rgbled"/>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
<storageModule moduleId="refreshScope"/>
</cproject>

8
.gitignore vendored
View File

@ -1,7 +1,7 @@
/Release/
.vscode/
~*
*~
libraries/includes/configuration.cpp
libraries/includes/configuration.h
sketch.esp8266.esp8266.nodemcu.bin
sketch.esp8266.esp8266.nodemcu.elf
sketch/sketch.esp8266.esp8266.nodemcu.bin
sketch/sketch.esp8266.esp8266.nodemcu.elf

View File

@ -15,8 +15,10 @@ build:
name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
paths:
- sketch.esp8266.esp8266.nodemcu.bin
- sketch.esp8266.esp8266.nodemcu.elf
except:
- tags
script:
- pushd $CI_PROJECT_DIR/libraries/esp8266boilerplate/ConfigGenerator && ./configGen.sh && popd
- env ARDUINO_SKETCHBOOK_DIR=$CI_PROJECT_DIR arduino-cli compile --fqbn=esp8266:esp8266:nodemcu $CI_PROJECT_DIR/sketch
- cp sketch/sketch.esp8266.esp8266.nodemcu.* .
@ -30,13 +32,10 @@ release:
- docker
dependencies:
- build
variables:
GIT_STRATEGY: none
only:
refs:
- release
script:
- echo curl --request POST
--header "PRIVATE-TOKEN:$PRIVATE_TOKEN"
--header "Content-Type:application/json"
--data-raw '{ "name":"New release", "tag_name":"tag-'$CI_COMMIT_SHORT_SHA'", "ref":"'$CI_COMMIT_SHA'", "description":"Super nice release","assets":{ "links":[ { "name":"hoge", "url":"https://google.com" } ] } }'
"https://gitlab.com/api/v4/projects/10877064/releases"
- gitlabreleaseuploader.py -p $PRIVATE_TOKEN -i $CI_PROJECT_ID -u $CI_PROJECT_URL
-f sketch.esp8266.esp8266.nodemcu.bin -F releaseInfo.json -T $CI_COMMIT_REF_NAME

View File

@ -1,71 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>rgbled</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.python.pydev.PyDevBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>io.sloeber.core.inoToCpp</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
<nature>io.sloeber.arduinonature</nature>
<nature>org.python.pydev.pythonNature</nature>
</natures>
<linkedResources>
<link>
<name>core/core</name>
<type>2</type>
<locationURI>ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266</locationURI>
</link>
<link>
<name>core/variant</name>
<type>2</type>
<locationURI>ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/variants/nodemcu</locationURI>
</link>
<link>
<name>libraries/Adafruit_NeoPixel</name>
<type>2</type>
<locationURI>ECLIPSE_HOME/arduinoPlugin/libraries/Adafruit_NeoPixel/1.1.3</locationURI>
</link>
<link>
<name>libraries/EEPROM</name>
<type>2</type>
<locationURI>ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/EEPROM</locationURI>
</link>
<link>
<name>libraries/ESP8266WebServer</name>
<type>2</type>
<locationURI>ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer</locationURI>
</link>
<link>
<name>libraries/ESP8266WiFi</name>
<type>2</type>
<locationURI>ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WiFi</locationURI>
</link>
</linkedResources>
</projectDescription>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?><pydev_project>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
</pydev_project>

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<configuration id="io.sloeber.core.toolChain.release.1704841599" name="Release">
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider class="io.sloeber.core.toolchain.ArduinoLanguageProvider" console="false" env-hash="-20260262726398667" id="io.sloeber.languageSettingsProvider" keep-relative-paths="false" name="Arduino Compiler Settings" parameter="${COMMAND} -E -P -v -dD -D__IN_ECLIPSE__ &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
</extension>
</configuration>
</project>

View File

@ -1,528 +0,0 @@
eclipse.preferences.version=1
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ALT_SIZE_COMMAND/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ALT_SIZE_COMMAND/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ALT_SIZE_COMMAND/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" --format\=avr --mcu\=${A.BUILD.MCU} "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ARCHIVE_FILE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ARCHIVE_FILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ARCHIVE_FILE/value=arduino.ar
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ARCHIVE_FILE_PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ARCHIVE_FILE_PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ARCHIVE_FILE_PATH/value=${A.BUILD.PATH}/${A.ARCHIVE_FILE}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.ARCH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.ARCH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.ARCH/value=ESP8266
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.BOARD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.BOARD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.BOARD/value=ESP8266_NODEMCU
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.CORE.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.CORE.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.CORE.PATH/value=${A.RUNTIME.PLATFORM.PATH}/cores/${A.BUILD.CORE}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.CORE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.CORE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.CORE/value=esp8266
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.DEBUG_LEVEL/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.DEBUG_LEVEL/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.DEBUG_LEVEL/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.DEBUG_PORT/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.DEBUG_PORT/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.DEBUG_PORT/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.EXTRA_FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.EXTRA_FLAGS/value=-DESP8266
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_FREQ/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_FREQ/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_FREQ/value=40
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_LD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_LD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_LD/value=eagle.flash.4m1m.ld
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_MODE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_MODE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_MODE/value=dio
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_SIZE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_SIZE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.FLASH_SIZE/value=4M
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.F_CPU/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.F_CPU/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.F_CPU/value=80000000L
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.LWIP_FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.LWIP_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.LWIP_FLAGS/value=-DLWIP_OPEN_SRC
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.LWIP_LIB/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.LWIP_LIB/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.LWIP_LIB/value=-llwip_gcc
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.MCU/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.MCU/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.MCU/value=esp8266
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.PATH/value=${ProjDirPath}/${ConfigName}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.PROJECT_NAME/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.PROJECT_NAME/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.PROJECT_NAME/value=${ProjName}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_BLOCKSIZE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_BLOCKSIZE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_BLOCKSIZE/value=8192
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_END/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_END/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_END/value=0x3FB000
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_PAGESIZE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_PAGESIZE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_PAGESIZE/value=256
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_START/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_START/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SPIFFS_START/value=0x300000
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SYSTEM.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SYSTEM.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.SYSTEM.PATH/value=${A.RUNTIME.PLATFORM.PATH}/system
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.VARIANT.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.VARIANT.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.VARIANT.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/variants/nodemcu
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.VARIANT/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.VARIANT/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.BUILD.VARIANT/value=nodemcu
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AR.CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AR.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AR.CMD/value=xtensa-lx106-elf-ar
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AR.EXTRA_FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AR.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AR.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AR.FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AR.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AR.FLAGS/value=cru
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AS.CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AS.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.AS.CMD/value=xtensa-lx106-elf-as
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.CMD/value=xtensa-lx106-elf-gcc
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.CMD/value=xtensa-lx106-elf-gcc
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.EXTRA_FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.FLAGS/value=-g ${A.COMPILER.WARNING_FLAGS} -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-L${A.COMPILER.SDK.PATH}/lib" "-L${A.COMPILER.SDK.PATH}/ld" "-T${A.BUILD.FLASH_LD}" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.LIBS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.LIBS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.ELF.LIBS/value=-lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 ${A.BUILD.LWIP_LIB} -lstdc++
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.EXTRA_FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.C.FLAGS/value=-c ${A.COMPILER.WARNING_FLAGS} -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions\=4 -MMD -std\=gnu99 -ffunction-sections -fdata-sections
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPP.CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPP.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPP.CMD/value=xtensa-lx106-elf-g++
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPP.EXTRA_FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPP.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPP.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPP.FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPP.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPP.FLAGS/value=-c ${A.COMPILER.WARNING_FLAGS} -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions\=4 -std\=c++11 -MMD -ffunction-sections -fdata-sections
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPREPROCESSOR.FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPREPROCESSOR.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.CPREPROCESSOR.FLAGS/value=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I${A.COMPILER.SDK.PATH}/include" "-I${A.COMPILER.SDK.PATH}/lwip/include" "-I${A.BUILD.PATH}/core"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ELF2HEX.CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ELF2HEX.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ELF2HEX.CMD/value=esptool
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ELF2HEX.EXTRA_FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ELF2HEX.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ELF2HEX.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ELF2HEX.FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ELF2HEX.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ELF2HEX.FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ESPTOOL.CMD.WINDOWS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ESPTOOL.CMD.WINDOWS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ESPTOOL.CMD.WINDOWS/value=esptool.exe
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ESPTOOL.CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ESPTOOL.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.ESPTOOL.CMD/value=esptool
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.PATH/value=${A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH}/bin/
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.S.CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.S.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.S.CMD/value=xtensa-lx106-elf-gcc
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.S.EXTRA_FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.S.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.S.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.S.FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.S.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.S.FLAGS/value=-c -g -x assembler-with-cpp -MMD -mlongcalls
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.SDK.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.SDK.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.SDK.PATH/value=${A.RUNTIME.PLATFORM.PATH}/tools/sdk
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.SIZE.CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.SIZE.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.SIZE.CMD/value=xtensa-lx106-elf-size
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.ALL/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.ALL/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.ALL/value=-Wall -Wextra
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.DEFAULT/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.DEFAULT/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.DEFAULT/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.MORE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.MORE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.MORE/value=-Wall
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.NONE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.NONE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS.NONE/value=-w
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.COMPILER.WARNING_FLAGS/value=${A.COMPILER.WARNING_FLAGS.ALL}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ESP8266.NETWORK.UPLOAD.TOOL/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ESP8266.NETWORK.UPLOAD.TOOL/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.ESP8266.NETWORK.UPLOAD.TOOL/value=esp8266OTA
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.DTS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.DTS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.DTS/value=3600
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.LOCAL/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.LOCAL/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.LOCAL/value=1556278652
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.UTC/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.UTC/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.UTC/value=1556271452
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.ZONE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.ZONE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.EXTRA.TIME.ZONE/value=3600
environment/project/io.sloeber.core.toolChain.release.1704841599/A.JANTJE.CORE.REFERENCED.PLATFORM/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.JANTJE.CORE.REFERENCED.PLATFORM/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.JANTJE.CORE.REFERENCED.PLATFORM/value=${JANTJE.SELECTED.PLATFORM}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.JANTJE.USED.BOARDS_FILE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.JANTJE.USED.BOARDS_FILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.JANTJE.USED.BOARDS_FILE/value=${JANTJE.BOARDS_FILE}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.JANTJE.VARIANT.REFERENCED.PLATFORM/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.JANTJE.VARIANT.REFERENCED.PLATFORM/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.JANTJE.VARIANT.REFERENCED.PLATFORM/value=${JANTJE.SELECTED.PLATFORM}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.NAME/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.NAME/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.NAME/value=NodeMCU 1.0 (ESP-12E Module)
environment/project/io.sloeber.core.toolChain.release.1704841599/A.PACKAGES/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.PACKAGES/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.PACKAGES/value=${eclipse_home}/arduinoPlugin/packages
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.AR.PATTERN.1/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.AR.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.AR.PATTERN.1/value="/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-ar" cru "/home/wn/workspace-sloeber/rgbled/Release/arduino.ar"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.AR.PATTERN.2/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.AR.PATTERN.2/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.AR.PATTERN.2/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.AR.PATTERN/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.AR.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.AR.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.AR.CMD}" ${A.COMPILER.AR.FLAGS} ${A.COMPILER.AR.EXTRA_FLAGS} "${A.BUILD.PATH}/arduino.ar" "${A.OBJECT_FILE}"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.COMBINE.PATTERN.1/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.COMBINE.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.COMBINE.PATTERN.1/value="/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -g -Wall -Wextra -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-L/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lib" "-L/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/ld" "-Teagle.flash.4m1m.ld" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy -o "/home/wn/workspace-sloeber/rgbled/Release/rgbled.elf" -Wl,--start-group
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.COMBINE.PATTERN.2/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.COMBINE.PATTERN.2/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.COMBINE.PATTERN.2/value=\ "/home/wn/workspace-sloeber/rgbled/Release/arduino.ar" -lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 -llwip_gcc -lstdc++ -Wl,--end-group "-L/home/wn/workspace-sloeber/rgbled/Release"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.COMBINE.PATTERN/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.COMBINE.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.COMBINE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.ELF.CMD}" ${A.COMPILER.C.ELF.FLAGS} ${A.COMPILER.C.ELF.EXTRA_FLAGS} -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -Wl,--start-group ${A.OBJECT_FILES} "${A.BUILD.PATH}/arduino.ar" ${A.COMPILER.C.ELF.LIBS} -Wl,--end-group "-L${A.BUILD.PATH}"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN.1/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN.1/value="/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/home/wn/workspace-sloeber/rgbled/Release/core" -c -Wall -Wextra -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions\=4 -std\=gnu99 -ffunction-sections -fdata-sections -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 '-DARDUINO_BOARD\="ESP8266_NODEMCU"' -DESP8266
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN.2/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN.2/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN.2/value=\ -o
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN.3/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN.3/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN.3/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.C.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.C.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} '-DARDUINO_BOARD\="${A.BUILD.BOARD}"' ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN.1/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN.1/value="/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/home/wn/workspace-sloeber/rgbled/Release/core" -c -Wall -Wextra -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions\=4 -std\=c++11 -ffunction-sections -fdata-sections -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 '-DARDUINO_BOARD\="ESP8266_NODEMCU"' -DESP8266
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN.2/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN.2/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN.2/value=\ -o
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN.3/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN.3/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN.3/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.CPP.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.CPP.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.CPP.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} '-DARDUINO_BOARD\="${A.BUILD.BOARD}"' ${A.COMPILER.CPP.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.EEP.PATTERN.1/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.EEP.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.EEP.PATTERN.1/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.EEP.PATTERN/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.EEP.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.EEP.PATTERN/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.HEX.PATTERN.1/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.HEX.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.HEX.PATTERN.1/value="/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/tools/esptool/0.4.9/esptool" -eo "/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/bootloaders/eboot/eboot.elf" -bo "/home/wn/workspace-sloeber/rgbled/Release/rgbled.bin" -bm dio -bf 40 -bz 4M -bs .text -bp 4096 -ec -eo "/home/wn/workspace-sloeber/rgbled/Release/rgbled.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.HEX.PATTERN/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.HEX.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OBJCOPY.HEX.PATTERN/value="${A.RUNTIME.TOOLS.ESPTOOL.PATH}/${A.COMPILER.ESPTOOL.CMD}" -eo "${A.RUNTIME.PLATFORM.PATH}/bootloaders/eboot/eboot.elf" -bo "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -bm ${A.BUILD.FLASH_MODE} -bf ${A.BUILD.FLASH_FREQ} -bz ${A.BUILD.FLASH_SIZE} -bs .text -bp 4096 -ec -eo "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OUTPUT.SAVE_FILE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OUTPUT.SAVE_FILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OUTPUT.SAVE_FILE/value=${A.BUILD.PROJECT_NAME}.${A.BUILD.VARIANT}.bin
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OUTPUT.TMP_FILE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OUTPUT.TMP_FILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.OUTPUT.TMP_FILE/value=${A.BUILD.PROJECT_NAME}.bin
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN.1/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN.1/value="/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-I/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-I/home/wn/workspace-sloeber/rgbled/Release/core" -c -g -x assembler-with-cpp -mlongcalls -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 '-DARDUINO_BOARD\="ESP8266_NODEMCU"' -DESP8266
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN.2/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN.2/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN.2/value=\ -o
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN.3/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN.3/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN.3/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.S.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.S.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} '-DARDUINO_BOARD\="${A.BUILD.BOARD}"' ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.PATTERN.1/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.PATTERN.1/value="/opt/eclipse/sloeber//arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-size" -A "/home/wn/workspace-sloeber/rgbled/Release/rgbled.elf"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.PATTERN/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" -A "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.REGEX.DATA/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.REGEX.DATA/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.REGEX.DATA/value=^(?\:\\.data|\\.rodata|\\.bss)\\s+([0-9]+).*
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.REGEX/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.REGEX/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RECIPE.SIZE.REGEX/value=^(?\:\\.irom0\\.text|\\.text|\\.data|\\.rodata|)\\s+([0-9]+).*
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.HARDWARE.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.HARDWARE.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.HARDWARE.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.IDE.VERSION/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.IDE.VERSION/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.IDE.VERSION/value=10802
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.PLATFORM.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.PLATFORM.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.PLATFORM.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.REFERENCED.PLATFORM.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.REFERENCED.PLATFORM.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.REFERENCED.PLATFORM.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVR-GCC.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVR-GCC.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVR-GCC.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVRDUDE.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVRDUDE.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVRDUDE.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.9
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ESPTOOL.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ESPTOOL.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ESPTOOL.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.9
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.9
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.1.2
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.MKSPIFFS.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.MKSPIFFS.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.MKSPIFFS.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.1.2
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.1.2
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.DISABLEDTR/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.DISABLEDTR/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.DISABLEDTR/value=true
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.DISABLERTS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.DISABLERTS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.DISABLERTS/value=true
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.PORT.FILE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.PORT.FILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.PORT.FILE/value=${A.SERIAL.PORT}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.PORT/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.PORT/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SERIAL.PORT/value=${JANTJE.COM_PORT}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SOFTWARE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SOFTWARE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.SOFTWARE/value=ARDUINO
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/value=-v
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/value=${A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESP8266OTA/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESP8266OTA/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESP8266OTA/value=${A.TOOLS.ESPTOOL.NETWORK_CMD}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.CMD.WINDOWS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.CMD.WINDOWS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.CMD.WINDOWS/value=esptool.exe
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.CMD/value=esptool
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/value=${A.TOOLS.ESPTOOL.NETWORK.AUTH}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.NETWORK_CMD.WINDOWS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.NETWORK_CMD.WINDOWS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.NETWORK_CMD.WINDOWS/value=python.exe
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.NETWORK_CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.NETWORK_CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.NETWORK_CMD/value=python
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.PATH/value=${A.RUNTIME.TOOLS.ESPTOOL.PATH}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/value="${A.TOOLS.ESPTOOL.NETWORK_CMD}" "${A.RUNTIME.PLATFORM.PATH}/tools/espota.py" -i "${A.SERIAL.PORT}" -p "${A.TOOLS.ESPTOOL.NETWORK.PORT}" "--auth\=${A.TOOLS.ESPTOOL.NETWORK.PASSWORD}" -f "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/value=-vv
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/value="${A.TOOLS.ESPTOOL.PATH}/${A.TOOLS.ESPTOOL.CMD}" ${A.TOOLS.ESPTOOL.UPLOAD.VERBOSE} -cd ${A.UPLOAD.RESETMETHOD} -cb ${A.UPLOAD.SPEED} -cp "${A.SERIAL.PORT}" -ca 0x00000 -cf "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin"
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/value=esp
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.MKSPIFFS.CMD.WINDOWS/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.MKSPIFFS.CMD.WINDOWS/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.MKSPIFFS.CMD.WINDOWS/value=mkspiffs.exe
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.MKSPIFFS.CMD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.MKSPIFFS.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.MKSPIFFS.CMD/value=mkspiffs
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.MKSPIFFS.PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.MKSPIFFS.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.TOOLS.MKSPIFFS.PATH/value=${A.RUNTIME.TOOLS.MKSPIFFS.PATH}
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.ALTID/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.ALTID/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.ALTID/value=no_altID
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.MAXIMUM_DATA_SIZE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.MAXIMUM_DATA_SIZE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.MAXIMUM_DATA_SIZE/value=81920
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.MAXIMUM_SIZE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.MAXIMUM_SIZE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.MAXIMUM_SIZE/value=1044464
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.PROTOCOL/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.PROTOCOL/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.PROTOCOL/value=stk500v1
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.RESETMETHOD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.RESETMETHOD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.RESETMETHOD/value=nodemcu
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.SPEED/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.SPEED/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.SPEED/value=115200
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.TOOL/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.TOOL/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.TOOL/value=esptool
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.USBID/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.USBID/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.USBID/value=no_altID
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/value=true
environment/project/io.sloeber.core.toolChain.release.1704841599/A.VERSION/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/A.VERSION/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/A.VERSION/value=2.2.0
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.ARCHITECTURE_ID/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.ARCHITECTURE_ID/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.ARCHITECTURE_ID/value=esp8266
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.BOARDS_FILE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.BOARDS_FILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.BOARDS_FILE/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/boards.txt
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.BOARD_ID/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.BOARD_ID/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.BOARD_ID/value=nodemcuv2
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.BOARD_NAME/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.BOARD_NAME/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.BOARD_NAME/value=NodeMCU 1.0 (ESP-12E Module)
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.COM_PORT/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.COM_PORT/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.COM_PORT/value=/dev/ttyUSB0
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.ECLIPSE_LOCATION/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.ECLIPSE_LOCATION/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.ECLIPSE_LOCATION/value=${eclipse_home}/////
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.ALL/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.ALL/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.ALL/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.ARCHIVE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.ARCHIVE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.ARCHIVE/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.ASSEMBLY/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.ASSEMBLY/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.ASSEMBLY/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.C.COMPILE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.C.COMPILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.C.COMPILE/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.COMPILE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.COMPILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.COMPILE/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.CPP.COMPILE/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.CPP.COMPILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.CPP.COMPILE/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.LINK/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.LINK/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.EXTRA.LINK/value=
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.MENU/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.MENU/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.MENU/value=CpuFrequency\=80\nFlashSize\=4M1M\nUploadSpeed\=115200
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.OBJCOPY/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.OBJCOPY/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.OBJCOPY/value=${A.RECIPE.OBJCOPY.HEX.PATTERN}
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.OS_NAME/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.OS_NAME/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.OS_NAME/value=linux
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.PACKAGE_ID/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.PACKAGE_ID/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.PACKAGE_ID/value=esp8266
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.PROJECT_NAME/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.PROJECT_NAME/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.PROJECT_NAME/value=rgbled
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.SELECTED.PLATFORM/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.SELECTED.PLATFORM/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.SELECTED.PLATFORM/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.SIZE.SWITCH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.SIZE.SWITCH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.SIZE.SWITCH/value=${A.RECIPE.SIZE.PATTERN}
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.UPLOAD/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.UPLOAD/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.UPLOAD/value=Default
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.WARNING_LEVEL/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.WARNING_LEVEL/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.WARNING_LEVEL/value=true
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.WORKSPACE_LOCATION/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.WORKSPACE_LOCATION/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/JANTJE.WORKSPACE_LOCATION/value=/home/wn/workspace-sloeber
environment/project/io.sloeber.core.toolChain.release.1704841599/PATH/delimiter=\:
environment/project/io.sloeber.core.toolChain.release.1704841599/PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.1704841599/PATH/value=${A.COMPILER.PATH}${PathDelimiter}${A.BUILD.GENERIC.PATH}${PathDelimiter}${PATH}
environment/project/io.sloeber.core.toolChain.release.1704841599/append=true
environment/project/io.sloeber.core.toolChain.release.1704841599/appendContributed=true

36
build.sh Executable file
View File

@ -0,0 +1,36 @@
#!/bin/bash
if [ "$1" == "" ]; then
echo "Give one of the targets: build, clean, upload"
echo "If you want to use a project directory different"
echo "than the current directory, give it as a second"
echo "argument."
exit 1
fi
if [ "$2" != "" ]; then
PROJECT_DIR=$2
else
PROJECT_DIR=$PWD
fi
if [ "$1" == "build" ]; then
pushd $PROJECT_DIR/libraries/esp8266boilerplate/ConfigGenerator && ./configGen.sh && popd
env ARDUINO_SKETCHBOOK_DIR=$PROJECT_DIR arduino-cli compile --fqbn=esp8266:esp8266:nodemcu $PROJECT_DIR/sketch
cp sketch/sketch.esp8266.esp8266.nodemcu.* .
elif [ "$1" == "clean" ]; then
for D in libraries/includes/configuration.h libraries/includes/configuration.cpp sketch/sketch.esp8266.esp8266.nodemcu.bin sketch/sketch.esp8266.esp8266.nodemcu.elf sketch.esp8266.esp8266.nodemcu.bin sketch.esp8266.esp8266.nodemcu.elf; do
echo -n "About to delete $D ... "
rm $PROJECT_DIR/$D && echo "done"
done
elif [ "$1" == "upload" ]; then
echo "About to upload to device"
esptool.py --port /dev/ttyUSB1 write_flash 0 sketch.esp8266.esp8266.nodemcu.bin
else
echo "Unknown subcommand '$1'"
exit 1
fi

View File

@ -1,389 +0,0 @@
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
#include "defines.h"
#include "configuration.h"
tConfigBlock configBlock;
const uint32_t MAGIC = 3235774470;
const char* CONFIG_SSID = "espconfig";
extern ESP8266WebServer webServer;
bool configSaved = false;
static bool checkAuthentication() {
Serial.print("User: "); Serial.println(configBlock.confUser);
Serial.print("Pass: "); Serial.println(configBlock.confPasswd);
return webServer.authenticate(configBlock.confUser, configBlock.confPasswd);
}
void configServeIndex() {
bool configValid = (configBlock.magic == MAGIC);
if (! configValid) {
configBlock.magic = MAGIC;
strcpy(configBlock.confUser, "admin");
strcpy(configBlock.confPasswd, "geheim123");
strcpy(configBlock.wifiSsid, "test");
strcpy(configBlock.wifiKey, "geheim");
strcpy(configBlock.mqttBroker, "broker.hottis.de");
strcpy(configBlock.mqttUser, "RgbLed1");
strcpy(configBlock.mqttPass, "geheim123");
strcpy(configBlock.mqttClientId, "RgbLed1");
configBlock.mqttPort = 8883;
strcpy(configBlock.mqttTopicColorCommand, "IoT/RgbLed1/ColorCommand");
strcpy(configBlock.mqttTopicCommand, "IoT/RgbLed1/Command");
strcpy(configBlock.mqttDebugTopic, "IoT/RgbLed1/Debug");
configBlock.debugMode = 0;
}
if (! checkAuthentication()) {
return webServer.requestAuthentication();
}
String buffer =
"<!doctype html"
"<html lang=\"en\">"
" <head>"
" <title>ESP8266 based RGB-LED-Light</title>"
" </head>"
" <body>"
" <h1>ESP8266 based RGB-LED-Light - ESP8266 Configuration Page</h1>";
if (configSaved) {
configSaved = false;
buffer += "<h2>Configuration saved</h2>";
}
buffer +=
" <form action=\"/config\" method=\"GET\">"
" <table>"
" <tr>"
" <td>"
" <label for\"confUser\">Config Username</label>"
" </td><td>"
" <input type=\"text\" name=\"confUser\" id=\"confUser\" ";
buffer += " size=\"16\" ";
buffer += " value=\"";
buffer += configBlock.confUser;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"confPasswd\">Config Password</label>"
" </td><td>"
" <input type=\"text\" name=\"confPasswd\" id=\"confPasswd\" ";
buffer += " size=\"16\" ";
buffer += " value=\"";
buffer += configBlock.confPasswd;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"wifiSsid\">Wifi SSID</label>"
" </td><td>"
" <input type=\"text\" name=\"wifiSsid\" id=\"wifiSsid\" ";
buffer += " size=\"32\" ";
buffer += " value=\"";
buffer += configBlock.wifiSsid;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"wifiKey\">Wifi Key</label>"
" </td><td>"
" <input type=\"text\" name=\"wifiKey\" id=\"wifiKey\" ";
buffer += " size=\"64\" ";
buffer += " value=\"";
buffer += configBlock.wifiKey;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"mqttBroker\">MQTT Broker</label>"
" </td><td>"
" <input type=\"text\" name=\"mqttBroker\" id=\"mqttBroker\" ";
buffer += " size=\"32\" ";
buffer += " value=\"";
buffer += configBlock.mqttBroker;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"mqttUser\">MQTT Username</label>"
" </td><td>"
" <input type=\"text\" name=\"mqttUser\" id=\"mqttUser\" ";
buffer += " size=\"32\" ";
buffer += " value=\"";
buffer += configBlock.mqttUser;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"mqttPass\">MQTT Password</label>"
" </td><td>"
" <input type=\"text\" name=\"mqttPass\" id=\"mqttPass\" ";
buffer += " size=\"32\" ";
buffer += " value=\"";
buffer += configBlock.mqttPass;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"mqttClientId\">MQTT ClientId</label>"
" </td><td>"
" <input type=\"text\" name=\"mqttClientId\" id=\"mqttClientId\" ";
buffer += " size=\"32\" ";
buffer += " value=\"";
buffer += configBlock.mqttClientId;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"mqttPort\">MQTT Port</label>"
" </td><td>"
" <input type=\"text\" name=\"mqttPort\" id=\"mqttPort\" ";
buffer += " value=\"";
buffer += configBlock.mqttPort;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"mqttTopicColorCommand\">MQTT Topic Color Command</label>"
" </td><td>"
" <input type=\"text\" name=\"mqttTopicColorCommand\" id=\"mqttTopicColorCommand\" ";
buffer += " size=\"64\" ";
buffer += " value=\"";
buffer += configBlock.mqttTopicColorCommand;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"mqttTopicCommand\">MQTT Topic Command</label>"
" </td><td>"
" <input type=\"text\" name=\"mqttTopicCommand\" id=\"mqttTopicCommand\" ";
buffer += " size=\"64\" ";
buffer += " value=\"";
buffer += configBlock.mqttTopicCommand;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"mqttDebugTopic\">MQTT DebugTopic</label>"
" </td><td>"
" <input type=\"text\" name=\"mqttDebugTopic\" id=\"mqttDebugTopic\" ";
buffer += " size=\"64\" ";
buffer += " value=\"";
buffer += configBlock.mqttDebugTopic;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td>"
" <label for\"debugMode\">DebugMode</label>"
" </td><td>"
" <input type=\"text\" name=\"debugMode\" id=\"debugMode\" ";
buffer += " value=\"";
buffer += configBlock.debugMode;
buffer += "\"";
buffer +=
" />"
" </td>"
" </tr>"
" <tr>"
" <td colspan=\"2\">"
" <button type=\"submit\">Save</button>"
" </td>"
" </tr>"
" </table>"
" </form>"
" </body>"
"</html>";
webServer.send(200, "text/html", buffer);
#ifdef DEBUG
Serial.println("indexHtml request served");
#endif
}
void configServeGetConfiguration() {
if (! checkAuthentication()) {
return webServer.requestAuthentication();
}
String arg;
arg = webServer.arg("confUser");
strcpy(configBlock.confUser, arg.c_str());
arg = webServer.arg("confPasswd");
strcpy(configBlock.confPasswd, arg.c_str());
arg = webServer.arg("wifiSsid");
strcpy(configBlock.wifiSsid, arg.c_str());
arg = webServer.arg("wifiKey");
strcpy(configBlock.wifiKey, arg.c_str());
arg = webServer.arg("mqttBroker");
strcpy(configBlock.mqttBroker, arg.c_str());
arg = webServer.arg("mqttUser");
strcpy(configBlock.mqttUser, arg.c_str());
arg = webServer.arg("mqttPass");
strcpy(configBlock.mqttPass, arg.c_str());
arg = webServer.arg("mqttClientId");
strcpy(configBlock.mqttClientId, arg.c_str());
arg = webServer.arg("mqttPort");
configBlock.mqttPort = atoi(arg.c_str());
arg = webServer.arg("mqttTopicColorCommand");
strcpy(configBlock.mqttTopicColorCommand, arg.c_str());
arg = webServer.arg("mqttTopicCommand");
strcpy(configBlock.mqttTopicCommand, arg.c_str());
arg = webServer.arg("mqttDebugTopic");
strcpy(configBlock.mqttDebugTopic, arg.c_str());
arg = webServer.arg("debugMode");
configBlock.debugMode = atoi(arg.c_str());
configBlock.magic = MAGIC;
showConfiguration();
EEPROM.begin(512);
EEPROM.put(EEPROM_ADDR, configBlock);
EEPROM.commit();
Serial.println("EEPROM saved");
configSaved = true;
webServer.sendHeader("Location", String("/"), true);
webServer.send(302, "text/plain", "");
//webServer.send(200, "text/html", "configuration saved");
}
void showConfiguration() {
Serial.println("Configuration is");
Serial.print("magic = <");
Serial.print(configBlock.magic);
Serial.println(">");
Serial.print("confUser = <");
Serial.print(configBlock.confUser);
Serial.println(">");
Serial.print("confPasswd = <");
Serial.print(configBlock.confPasswd);
Serial.println(">");
Serial.print("wifiSsid = <");
Serial.print(configBlock.wifiSsid);
Serial.println(">");
Serial.print("wifiKey = <");
Serial.print(configBlock.wifiKey);
Serial.println(">");
Serial.print("mqttBroker = <");
Serial.print(configBlock.mqttBroker);
Serial.println(">");
Serial.print("mqttUser = <");
Serial.print(configBlock.mqttUser);
Serial.println(">");
Serial.print("mqttPass = <");
Serial.print(configBlock.mqttPass);
Serial.println(">");
Serial.print("mqttClientId = <");
Serial.print(configBlock.mqttClientId);
Serial.println(">");
Serial.print("mqttPort = <");
Serial.print(configBlock.mqttPort);
Serial.println(">");
Serial.print("mqttTopicColorCommand = <");
Serial.print(configBlock.mqttTopicColorCommand);
Serial.println(">");
Serial.print("mqttTopicCommand = <");
Serial.print(configBlock.mqttTopicCommand);
Serial.println(">");
Serial.print("mqttDebugTopic = <");
Serial.print(configBlock.mqttDebugTopic);
Serial.println(">");
Serial.print("debugMode = <");
Serial.print(configBlock.debugMode);
Serial.println(">");
Serial.println("---");
}

View File

@ -1,24 +0,0 @@
typedef struct {
uint32_t magic;
char confUser[16];
char confPasswd[16];
char wifiSsid[32];
char wifiKey[64];
char mqttBroker[32];
char mqttUser[32];
char mqttPass[32];
char mqttClientId[32];
uint32_t mqttPort;
char mqttTopicColorCommand[64];
char mqttTopicCommand[64];
char mqttDebugTopic[64];
uint32_t debugMode;
} tConfigBlock;
extern const uint32_t MAGIC;
extern tConfigBlock configBlock;
extern const char* CONFIG_SSID;
void configServeIndex();
void configServeGetConfiguration();
void showConfiguration();

View File

@ -8,7 +8,7 @@
#ifndef DEFINES_H_
#define DEFINES_H_
#define DEBUG
// #define DEBUG
@ -41,7 +41,7 @@
#endif
#endif
#define NUM_OF_LEDs 16
#define NUM_OF_LEDs 300
#endif /* DEFINES_H_ */

View File

@ -1,670 +0,0 @@
/*
PubSubClient.cpp - A simple client for MQTT.
Nick O'Leary
http://knolleary.net
*/
#include "PubSubClient.h"
#include "Arduino.h"
#ifdef ESP8266
#define INIT_FINGERPRINT() this->fingerprint = NULL;
#else
#define INIT_FINGERPRINT()
#endif
PubSubClient::PubSubClient() {
this->_state = MQTT_DISCONNECTED;
this->_client = NULL;
this->stream = NULL;
setCallback(NULL);
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(Client& client) {
this->_state = MQTT_DISCONNECTED;
setClient(client);
this->stream = NULL;
this->_available = 0;
INIT_FINGERPRINT()
}
#ifdef ESP8266
PubSubClient::PubSubClient(WiFiClientSecure& client, const char* fingerprint) {
this->_state = MQTT_DISCONNECTED;
setClient(client);
this->stream = NULL;
this->_available = 0;
this->fingerprint = fingerprint;
}
#endif
PubSubClient::PubSubClient(IPAddress addr, uint16_t port, Client& client) {
this->_state = MQTT_DISCONNECTED;
setServer(addr, port);
setClient(client);
this->stream = NULL;
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(IPAddress addr, uint16_t port, Client& client, Stream& stream) {
this->_state = MQTT_DISCONNECTED;
setServer(addr,port);
setClient(client);
setStream(stream);
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(IPAddress addr, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client) {
this->_state = MQTT_DISCONNECTED;
setServer(addr, port);
setCallback(callback);
setClient(client);
this->stream = NULL;
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(IPAddress addr, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client, Stream& stream) {
this->_state = MQTT_DISCONNECTED;
setServer(addr,port);
setCallback(callback);
setClient(client);
setStream(stream);
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, Client& client) {
this->_state = MQTT_DISCONNECTED;
setServer(ip, port);
setClient(client);
this->stream = NULL;
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, Client& client, Stream& stream) {
this->_state = MQTT_DISCONNECTED;
setServer(ip,port);
setClient(client);
setStream(stream);
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client) {
this->_state = MQTT_DISCONNECTED;
setServer(ip, port);
setCallback(callback);
setClient(client);
this->stream = NULL;
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client, Stream& stream) {
this->_state = MQTT_DISCONNECTED;
setServer(ip,port);
setCallback(callback);
setClient(client);
setStream(stream);
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(const char* domain, uint16_t port, Client& client) {
this->_state = MQTT_DISCONNECTED;
setServer(domain,port);
setClient(client);
this->stream = NULL;
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(const char* domain, uint16_t port, Client& client, Stream& stream) {
this->_state = MQTT_DISCONNECTED;
setServer(domain,port);
setClient(client);
setStream(stream);
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(const char* domain, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client) {
this->_state = MQTT_DISCONNECTED;
setServer(domain,port);
setCallback(callback);
setClient(client);
this->stream = NULL;
this->_available = 0;
INIT_FINGERPRINT()
}
PubSubClient::PubSubClient(const char* domain, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client, Stream& stream) {
this->_state = MQTT_DISCONNECTED;
setServer(domain,port);
setCallback(callback);
setClient(client);
setStream(stream);
this->_available = 0;
INIT_FINGERPRINT()
}
boolean PubSubClient::connect(const char *id) {
return connect(id,NULL,NULL,0,0,0,0);
}
boolean PubSubClient::connect(const char *id, const char *user, const char *pass) {
return connect(id,user,pass,0,0,0,0);
}
boolean PubSubClient::connect(const char *id, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage) {
return connect(id,NULL,NULL,willTopic,willQos,willRetain,willMessage);
}
boolean PubSubClient::connect(const char *id, const char *user, const char *pass, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage) {
if (!connected()) {
int result = 0;
if (domain != NULL) {
result = _client->connect(this->domain, this->port);
} else {
result = _client->connect(this->ip, this->port);
}
#ifdef ESP8266
if (fingerprint != NULL) {
if (domain != NULL) {
// there's only one way to set fingerprint: using the WiFiClientSecure-based constructor, so this cast is safe
if (!static_cast<WiFiClientSecure*>(_client)->verify(fingerprint, domain)) {
_state = MQTT_TLS_BAD_SERVER_CREDENTIALS;
return false;
}
}
else {
char buffer[16]; // IPv4 only (which is what IPAddress supports anyway)
ip.toString().toCharArray(buffer, 16);
if (!static_cast<WiFiClientSecure*>(_client)->verify(fingerprint, buffer)) {
_state = MQTT_TLS_BAD_SERVER_CREDENTIALS;
return false;
}
}
}
#endif
if (result == 1) {
nextMsgId = 1;
// Leave room in the buffer for header and variable length field
uint16_t length = 5;
unsigned int j;
#if MQTT_VERSION == MQTT_VERSION_3_1
uint8_t d[9] = {0x00,0x06,'M','Q','I','s','d','p', MQTT_VERSION};
#define MQTT_HEADER_VERSION_LENGTH 9
#elif MQTT_VERSION == MQTT_VERSION_3_1_1
uint8_t d[7] = {0x00,0x04,'M','Q','T','T',MQTT_VERSION};
#define MQTT_HEADER_VERSION_LENGTH 7
#endif
for (j = 0;j<MQTT_HEADER_VERSION_LENGTH;j++) {
buffer[length++] = d[j];
}
uint8_t v;
if (willTopic) {
v = 0x06|(willQos<<3)|(willRetain<<5);
} else {
v = 0x02;
}
if(user != NULL) {
v = v|0x80;
if(pass != NULL) {
v = v|(0x80>>1);
}
}
buffer[length++] = v;
buffer[length++] = ((MQTT_KEEPALIVE) >> 8);
buffer[length++] = ((MQTT_KEEPALIVE) & 0xFF);
length = writeString(id,buffer,length);
if (willTopic) {
length = writeString(willTopic,buffer,length);
length = writeString(willMessage,buffer,length);
}
if(user != NULL) {
length = writeString(user,buffer,length);
if(pass != NULL) {
length = writeString(pass,buffer,length);
}
}
write(MQTTCONNECT,buffer,length-5);
lastInActivity = lastOutActivity = millis();
while (!available()) {
unsigned long t = millis();
if (t-lastInActivity >= ((int32_t) MQTT_SOCKET_TIMEOUT*1000UL)) {
_state = MQTT_CONNECTION_TIMEOUT;
_client->stop();
return false;
}
}
uint8_t llen;
uint16_t len = readPacket(&llen);
if (len == 4) {
if (buffer[3] == 0) {
lastInActivity = millis();
pingOutstanding = false;
_state = MQTT_CONNECTED;
return true;
} else {
_state = buffer[3];
}
}
_client->stop();
} else {
_state = MQTT_CONNECT_FAILED;
}
return false;
}
return true;
}
// return and cache the available number of bytes in the client;
// remember to reduce the available count when consuming the buffer
int PubSubClient::available() {
if (_available == 0) {
_available = _client->available();
}
return _available;
}
// reads a byte into result
boolean PubSubClient::readByte(uint8_t * result) {
uint32_t previousMillis = millis();
while(!available()) {
uint32_t currentMillis = millis();
if(currentMillis - previousMillis >= ((int32_t) MQTT_SOCKET_TIMEOUT * 1000)){
return false;
}
}
*result = _client->read();
_available -= 1;
return true;
}
// reads a byte into result[*index] and increments index
boolean PubSubClient::readByte(uint8_t * result, uint16_t * index){
uint16_t current_index = *index;
uint8_t * write_address = &(result[current_index]);
if(readByte(write_address)){
*index = current_index + 1;
return true;
}
return false;
}
uint16_t PubSubClient::readPacket(uint8_t* lengthLength) {
uint16_t len = 0;
if(!readByte(buffer, &len)) return 0;
bool isPublish = (buffer[0]&0xF0) == MQTTPUBLISH;
uint32_t multiplier = 1;
uint16_t length = 0;
uint8_t digit = 0;
uint16_t skip = 0;
uint8_t start = 0;
do {
if(!readByte(&digit)) return 0;
buffer[len++] = digit;
length += (digit & 127) * multiplier;
multiplier *= 128;
} while ((digit & 128) != 0);
*lengthLength = len-1;
if (isPublish) {
// Read in topic length to calculate bytes to skip over for Stream writing
if(!readByte(buffer, &len)) return 0;
if(!readByte(buffer, &len)) return 0;
skip = (buffer[*lengthLength+1]<<8)+buffer[*lengthLength+2];
start = 2;
if (buffer[0]&MQTTQOS1) {
// skip message id
skip += 2;
}
}
for (uint16_t i = start;i<length;i++) {
if(!readByte(&digit)) return 0;
if (this->stream) {
if (isPublish && len-*lengthLength-2>skip) {
this->stream->write(digit);
}
}
if (len < MQTT_MAX_PACKET_SIZE) {
buffer[len] = digit;
}
len++;
}
if (!this->stream && len > MQTT_MAX_PACKET_SIZE) {
len = 0; // This will cause the packet to be ignored.
}
return len;
}
boolean PubSubClient::loop() {
if (connected()) {
do {
unsigned long t = millis();
if ((t - lastInActivity > MQTT_KEEPALIVE*1000UL) || (t - lastOutActivity > MQTT_KEEPALIVE*1000UL)) {
if (pingOutstanding) {
this->_state = MQTT_CONNECTION_TIMEOUT;
_client->stop();
return false;
} else {
buffer[0] = MQTTPINGREQ;
buffer[1] = 0;
_client->write(buffer,2);
lastOutActivity = t;
lastInActivity = t;
pingOutstanding = true;
}
}
if (available()) {
uint8_t llen;
uint16_t len = readPacket(&llen);
uint16_t msgId = 0;
uint8_t *payload;
if (len > 0) {
lastInActivity = t;
uint8_t type = buffer[0]&0xF0;
if (type == MQTTPUBLISH) {
if (callback) {
uint16_t tl = (buffer[llen+1]<<8)+buffer[llen+2]; /* topic length in bytes */
memmove(buffer+llen+2,buffer+llen+3,tl); /* move topic inside buffer 1 byte to front */
buffer[llen+2+tl] = 0; /* end the topic as a 'C' string with \x00 */
char *topic = (char*) buffer+llen+2;
// msgId only present for QOS>0
if ((buffer[0]&0x06) == MQTTQOS1) {
msgId = (buffer[llen+3+tl]<<8)+buffer[llen+3+tl+1];
payload = buffer+llen+3+tl+2;
callback(topic,payload,len-llen-3-tl-2);
buffer[0] = MQTTPUBACK;
buffer[1] = 2;
buffer[2] = (msgId >> 8);
buffer[3] = (msgId & 0xFF);
_client->write(buffer,4);
lastOutActivity = t;
} else {
payload = buffer+llen+3+tl;
callback(topic,payload,len-llen-3-tl);
}
}
} else if (type == MQTTPINGREQ) {
buffer[0] = MQTTPINGRESP;
buffer[1] = 0;
_client->write(buffer,2);
} else if (type == MQTTPINGRESP) {
pingOutstanding = false;
}
}
}
} while (_available > 0); // can't leave data in the buffer, or subsequent publish() calls
// may fail (axTLS is only half-duplex, so writes will fail, to
// avoid losing information)
return true;
}
return false;
}
boolean PubSubClient::publish(const char* topic, const char* payload) {
return publish(topic,(const uint8_t*)payload,strlen(payload),false);
}
boolean PubSubClient::publish(const char* topic, const char* payload, boolean retained) {
return publish(topic,(const uint8_t*)payload,strlen(payload),retained);
}
boolean PubSubClient::publish(const char* topic, const uint8_t* payload, unsigned int plength) {
return publish(topic, payload, plength, false);
}
boolean PubSubClient::publish(const char* topic, const uint8_t* payload, unsigned int plength, boolean retained) {
if (connected()) {
if (MQTT_MAX_PACKET_SIZE < 5 + 2+strlen(topic) + plength) {
// Too long
return false;
}
// Leave room in the buffer for header and variable length field
uint16_t length = 5;
length = writeString(topic,buffer,length);
uint16_t i;
for (i=0;i<plength;i++) {
buffer[length++] = payload[i];
}
uint8_t header = MQTTPUBLISH;
if (retained) {
header |= 1;
}
return write(header,buffer,length-5);
}
return false;
}
boolean PubSubClient::publish_P(const char* topic, const uint8_t* payload, unsigned int plength, boolean retained) {
uint8_t llen = 0;
uint8_t digit;
unsigned int rc = 0;
uint16_t tlen;
unsigned int pos = 0;
unsigned int i;
uint8_t header;
unsigned int len;
if (!connected()) {
return false;
}
tlen = strlen(topic);
header = MQTTPUBLISH;
if (retained) {
header |= 1;
}
buffer[pos++] = header;
len = plength + 2 + tlen;
do {
digit = len % 128;
len = len / 128;
if (len > 0) {
digit |= 0x80;
}
buffer[pos++] = digit;
llen++;
} while(len>0);
pos = writeString(topic,buffer,pos);
rc += _client->write(buffer,pos);
for (i=0;i<plength;i++) {
rc += _client->write((char)pgm_read_byte_near(payload + i));
}
lastOutActivity = millis();
return rc == tlen + 4 + plength;
}
boolean PubSubClient::write(uint8_t header, uint8_t* buf, uint16_t length) {
uint8_t lenBuf[4];
uint8_t llen = 0;
uint8_t digit;
uint8_t pos = 0;
uint16_t rc;
uint16_t len = length;
do {
digit = len % 128;
len = len / 128;
if (len > 0) {
digit |= 0x80;
}
lenBuf[pos++] = digit;
llen++;
} while(len>0);
buf[4-llen] = header;
for (int i=0;i<llen;i++) {
buf[5-llen+i] = lenBuf[i];
}
#ifdef MQTT_MAX_TRANSFER_SIZE
uint8_t* writeBuf = buf+(4-llen);
uint16_t bytesRemaining = length+1+llen; //Match the length type
uint8_t bytesToWrite;
boolean result = true;
while((bytesRemaining > 0) && result) {
bytesToWrite = (bytesRemaining > MQTT_MAX_TRANSFER_SIZE)?MQTT_MAX_TRANSFER_SIZE:bytesRemaining;
rc = _client->write(writeBuf,bytesToWrite);
result = (rc == bytesToWrite);
bytesRemaining -= rc;
writeBuf += rc;
}
return result;
#else
rc = _client->write(buf+(4-llen),length+1+llen);
lastOutActivity = millis();
return (rc == 1+llen+length);
#endif
}
boolean PubSubClient::subscribe(const char* topic) {
return subscribe(topic, 0);
}
boolean PubSubClient::subscribe(const char* topic, uint8_t qos) {
if (qos < 0 || qos > 1) {
return false;
}
if (MQTT_MAX_PACKET_SIZE < 9 + strlen(topic)) {
// Too long
return false;
}
if (connected()) {
// Leave room in the buffer for header and variable length field
uint16_t length = 5;
nextMsgId++;
if (nextMsgId == 0) {
nextMsgId = 1;
}
buffer[length++] = (nextMsgId >> 8);
buffer[length++] = (nextMsgId & 0xFF);
length = writeString((char*)topic, buffer,length);
buffer[length++] = qos;
return write(MQTTSUBSCRIBE|MQTTQOS1,buffer,length-5);
}
return false;
}
boolean PubSubClient::unsubscribe(const char* topic) {
if (MQTT_MAX_PACKET_SIZE < 9 + strlen(topic)) {
// Too long
return false;
}
if (connected()) {
uint16_t length = 5;
nextMsgId++;
if (nextMsgId == 0) {
nextMsgId = 1;
}
buffer[length++] = (nextMsgId >> 8);
buffer[length++] = (nextMsgId & 0xFF);
length = writeString(topic, buffer,length);
return write(MQTTUNSUBSCRIBE|MQTTQOS1,buffer,length-5);
}
return false;
}
void PubSubClient::disconnect() {
buffer[0] = MQTTDISCONNECT;
buffer[1] = 0;
_client->write(buffer,2);
_state = MQTT_DISCONNECTED;
_client->stop();
lastInActivity = lastOutActivity = millis();
}
uint16_t PubSubClient::writeString(const char* string, uint8_t* buf, uint16_t pos) {
const char* idp = string;
uint16_t i = 0;
pos += 2;
while (*idp) {
buf[pos++] = *idp++;
i++;
}
buf[pos-i-2] = (i >> 8);
buf[pos-i-1] = (i & 0xFF);
return pos;
}
boolean PubSubClient::connected() {
boolean rc;
if (_client == NULL ) {
rc = false;
} else {
rc = (int)_client->connected();
if (!rc) {
if (this->_state == MQTT_CONNECTED) {
this->_state = MQTT_CONNECTION_LOST;
_client->flush();
_client->stop();
}
}
}
return rc;
}
PubSubClient& PubSubClient::setServer(uint8_t * ip, uint16_t port) {
IPAddress addr(ip[0],ip[1],ip[2],ip[3]);
return setServer(addr,port);
}
PubSubClient& PubSubClient::setServer(IPAddress ip, uint16_t port) {
this->ip = ip;
this->port = port;
this->domain = NULL;
return *this;
}
PubSubClient& PubSubClient::setServer(const char * domain, uint16_t port) {
this->domain = domain;
this->port = port;
return *this;
}
PubSubClient& PubSubClient::setCallback(MQTT_CALLBACK_SIGNATURE) {
this->callback = callback;
return *this;
}
PubSubClient& PubSubClient::setClient(Client& client){
this->_client = &client;
return *this;
}
PubSubClient& PubSubClient::setStream(Stream& stream){
this->stream = &stream;
return *this;
}
int PubSubClient::state() {
return this->_state;
}

View File

@ -1,160 +0,0 @@
/*
PubSubClient.h - A simple client for MQTT.
Nick O'Leary
http://knolleary.net
*/
#ifndef PubSubClient_h
#define PubSubClient_h
#include <Arduino.h>
#include "IPAddress.h"
#include "Client.h"
#include "Stream.h"
#ifdef ESP8266
#include "WiFiClientSecure.h"
#endif
#define MQTT_VERSION_3_1 3
#define MQTT_VERSION_3_1_1 4
// MQTT_VERSION : Pick the version
//#define MQTT_VERSION MQTT_VERSION_3_1
#ifndef MQTT_VERSION
#define MQTT_VERSION MQTT_VERSION_3_1_1
#endif
// MQTT_MAX_PACKET_SIZE : Maximum packet size
#ifndef MQTT_MAX_PACKET_SIZE
#define MQTT_MAX_PACKET_SIZE 128
#endif
// MQTT_KEEPALIVE : keepAlive interval in Seconds
#ifndef MQTT_KEEPALIVE
#define MQTT_KEEPALIVE 15
#endif
// MQTT_SOCKET_TIMEOUT: socket timeout interval in Seconds
#ifndef MQTT_SOCKET_TIMEOUT
#define MQTT_SOCKET_TIMEOUT 15
#endif
// MQTT_MAX_TRANSFER_SIZE : limit how much data is passed to the network client
// in each write call. Needed for the Arduino Wifi Shield. Leave undefined to
// pass the entire MQTT packet in each write call.
//#define MQTT_MAX_TRANSFER_SIZE 80
// Possible values for client.state()
#define MQTT_TLS_BAD_SERVER_CREDENTIALS -5
#define MQTT_CONNECTION_TIMEOUT -4
#define MQTT_CONNECTION_LOST -3
#define MQTT_CONNECT_FAILED -2
#define MQTT_DISCONNECTED -1
#define MQTT_CONNECTED 0
#define MQTT_CONNECT_BAD_PROTOCOL 1
#define MQTT_CONNECT_BAD_CLIENT_ID 2
#define MQTT_CONNECT_UNAVAILABLE 3
#define MQTT_CONNECT_BAD_CREDENTIALS 4
#define MQTT_CONNECT_UNAUTHORIZED 5
#define MQTTCONNECT 1 << 4 // Client request to connect to Server
#define MQTTCONNACK 2 << 4 // Connect Acknowledgment
#define MQTTPUBLISH 3 << 4 // Publish message
#define MQTTPUBACK 4 << 4 // Publish Acknowledgment
#define MQTTPUBREC 5 << 4 // Publish Received (assured delivery part 1)
#define MQTTPUBREL 6 << 4 // Publish Release (assured delivery part 2)
#define MQTTPUBCOMP 7 << 4 // Publish Complete (assured delivery part 3)
#define MQTTSUBSCRIBE 8 << 4 // Client Subscribe request
#define MQTTSUBACK 9 << 4 // Subscribe Acknowledgment
#define MQTTUNSUBSCRIBE 10 << 4 // Client Unsubscribe request
#define MQTTUNSUBACK 11 << 4 // Unsubscribe Acknowledgment
#define MQTTPINGREQ 12 << 4 // PING Request
#define MQTTPINGRESP 13 << 4 // PING Response
#define MQTTDISCONNECT 14 << 4 // Client is Disconnecting
#define MQTTReserved 15 << 4 // Reserved
#define MQTTQOS0 (0 << 1)
#define MQTTQOS1 (1 << 1)
#define MQTTQOS2 (2 << 1)
#ifdef ESP8266
#include <functional>
#define MQTT_CALLBACK_SIGNATURE std::function<void(char*, uint8_t*, unsigned int)> callback
#else
#define MQTT_CALLBACK_SIGNATURE void (*callback)(char*, uint8_t*, unsigned int)
#endif
class PubSubClient {
private:
Client* _client;
uint8_t buffer[MQTT_MAX_PACKET_SIZE];
uint16_t nextMsgId;
unsigned long lastOutActivity;
unsigned long lastInActivity;
int _available;
bool pingOutstanding;
MQTT_CALLBACK_SIGNATURE;
int available();
uint16_t readPacket(uint8_t*);
boolean readByte(uint8_t * result);
boolean readByte(uint8_t * result, uint16_t * index);
boolean write(uint8_t header, uint8_t* buf, uint16_t length);
uint16_t writeString(const char* string, uint8_t* buf, uint16_t pos);
IPAddress ip;
const char* domain;
uint16_t port;
Stream* stream;
int _state;
#ifdef ESP8266
const char* fingerprint;
#endif
public:
PubSubClient();
PubSubClient(Client& client);
PubSubClient(IPAddress, uint16_t, Client& client);
PubSubClient(IPAddress, uint16_t, Client& client, Stream&);
PubSubClient(IPAddress, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client);
PubSubClient(IPAddress, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&);
PubSubClient(uint8_t *, uint16_t, Client& client);
PubSubClient(uint8_t *, uint16_t, Client& client, Stream&);
PubSubClient(uint8_t *, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client);
PubSubClient(uint8_t *, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&);
PubSubClient(const char*, uint16_t, Client& client);
PubSubClient(const char*, uint16_t, Client& client, Stream&);
PubSubClient(const char*, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client);
PubSubClient(const char*, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&);
#ifdef ESP8266
PubSubClient(WiFiClientSecure& client, const char* fingerprint);
#endif
PubSubClient& setServer(IPAddress ip, uint16_t port);
PubSubClient& setServer(uint8_t * ip, uint16_t port);
PubSubClient& setServer(const char * domain, uint16_t port);
PubSubClient& setCallback(MQTT_CALLBACK_SIGNATURE);
PubSubClient& setClient(Client& client);
PubSubClient& setStream(Stream& stream);
boolean connect(const char* id);
boolean connect(const char* id, const char* user, const char* pass);
boolean connect(const char* id, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage);
boolean connect(const char* id, const char* user, const char* pass, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage);
void disconnect();
boolean publish(const char* topic, const char* payload);
boolean publish(const char* topic, const char* payload, boolean retained);
boolean publish(const char* topic, const uint8_t * payload, unsigned int plength);
boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained);
boolean publish_P(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained);
boolean subscribe(const char* topic);
boolean subscribe(const char* topic, uint8_t qos);
boolean unsubscribe(const char* topic);
boolean loop();
boolean connected();
int state();
};
#endif

View File

@ -1,4 +1,82 @@
export ARDUINO_SKETCHBOOK_DIR=~/rgbled
arduino-cli compile --debug --fqbn=esp8266:esp8266:nodemcu ~/rgbled/sketch
# RgbLed - A Project and a Sample Project for multiple concepts
## The Project itself
This thing serves as a controller for smart RGB leds like WS2811, WS2812, PL9823 or others. For this purpose it utilizes the Adafruit Neopixel library.
It receives commands via MQTT to send related code sequences to chains of those leds. It supports two commands, which it receives via two MQTT topics it subscribes.
The simple ``command`` accepts one or two arguments. When only one argument is given, this argument has to be a number between 0 and 255 and is interpreted as brightness. All three colors of all connected leds are driven with that value. When two arguments are given, the first argument is interpreted as the number of the led to drive, starting with 0 and the second argument is again the brightness.
The ``colorCommand`` accepts one, two, three or four arguments. With only one argument, this argument is interpreted as a color word (on or white, off, warmwhite, red, green, blue, purple, yellow). All connected leds will be driven with the given color combination. With two arguments, the first one is the led number, the second one is the color word. Three arguments have to be 8 bit numbers to control the color channels of all connected leds. With four arguments the first argument is the led number, the remaining three are again red, green and blue values.
## Sample Project for ...
### ... a project to be used together with the ``build-env-arduino`` docker image
The ``build-env-arduino`` docker image, which can be loaded using the image name ``registry.gitlab.com/wolutator/build-env-arduino:latest`` is a tinned or preserved build environment for boards supported by the Arduino development system. Currently ``arduino:avr`` and ``esp8266:esp8266`` are supported by this image.
It is maintained in to the project [https://gitlab.com/wolutator/build-env-arduino].
A preserved build environment, which easily can be installed or simply loaded for many developers in exactly the same way and which can easily be archived is a major topic is professional software engineering. If you have a team of lots of developers you don't want to waste time by letting everyone install his or her development environment manually, finally ending up with minor to major differences which makes it hard to compare or integrate software or let one developer investigate a bug another developer found. Furthermore you want to be able, especially in an industrial environment, to pick a development environment from the shelve to investigate and fix an issue reported in a years-old software. Both can be achieved with preserved environments.
This preserved Arduino build environment uses the Arduino CLI tool, which can be found at [https://downloads.arduino.cc/arduino-cli/arduino-cli-latest-linux64.tar.bz2] and which is discussed here [https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/].
This Arduino CLI tool expects your projects to be stored in the common ``sketchbook`` folder, where also the common (used by all projects) ``libraries`` folder is located. This is not my cup of tea. You want my projects separated from each other, together with all dependent libraries.
So, I created the following directory structure of my project repository:
RepoRoot/
|
+--- sketch/
| |
| +--- sketch.ino
| +--- application.cpp
| +--- application.h
|
+--- libraries/
| |
| +--- library1/
| |
| +--- library2/
| |
| +--- includes/
|
+--- .gitignore
+--- .gitlab-ci.yml
+--- readme.md
To make the Arduino CLI use this structure, I point the variable ``ARDUINO_SKETCHBOOK_DIR`` to it, so the commandline to build a project is
env ARDUINO_SKETCHBOOK_DIR=$PROJECT_DIR arduino-cli compile --fqbn=esp8266:esp8266:nodemcu $PROJECT_DIR/sketch
The Arduino system expects a file with the extension ``.ino`` and same name as the directory within the sketchbook directory. Since in my setup every project lifes in a separate sketchbook directory, I call the directory with the main application sources ``sketch`` and the accordingly the ``ino``-file ``sketch.ino``. This file contain the typical main functions of each Arduino project, which are ``setup`` and ``loop``.
In my projects, I do not put any meaningful code into the ``ino``, I have everything in the companion ``cpp`` file, which is usually ``application.cpp`` (with its friend ``application.h``)
When the Arduino system trys to find some included ``.h`` it has a powerful strategy, which works without any ``CFLAGS`` variable with ``-I`` options. It works just by convention. Thus, it searches in the Arduino core folders, in the ``sketch`` folder itself and in all subfolders of the ``libraries`` folder. For this reason I put a ``includes`` folder into the ``libraries`` folder where I place all header files, which are shared between the main application (the "sketch") and some libraries.
This approach can easily be implemented in a Gitlab CI script:
build:
stage: build
image: registry.gitlab.com/wolutator/build-env-arduino:latest
variables:
GIT_SUBMODULE_STRATEGY: recursive
artifacts:
paths:
- sketch.esp8266.esp8266.nodemcu.bin
script:
- env ARDUINO_SKETCHBOOK_DIR=$CI_PROJECT_DIR arduino-cli compile --fqbn=esp8266:esp8266:nodemcu $CI_PROJECT_DIR/sketch
- cp sketch/sketch.esp8266.esp8266.nodemcu.* .
### Uploading to the target
In a final step the CI script will put the generated firmware binary into the Gitlab release area.
It can be downloaded there and uploaded to the device using the ``esptool.py``.
esptool.py -p /dev/ttyUSB0 write_flash 0x0 sketch.esp8266.esp8266.nodemcu.bin

8
releaseInfo.json Normal file
View File

@ -0,0 +1,8 @@
{
"releaseTag": "v1.0.4",
"createReleaseTag": "true",
"releaseName": "more LEDs, disable debug",
"description": "supports up to 300 LEDs, disable debug"
}

View File

@ -6,10 +6,8 @@ configItems = [
{"label":"Wifi SSID", "key":"wifiSsid", "type":"C", "length":32, "default":"test"},
{"label":"Wifi Key", "key":"wifiKey", "type":"C", "length":64, "default":"geheim"},
{"label":"MQTT Broker", "key":"mqttBroker", "type":"C", "length":32, "default":"broker.hottis.de"},
{"label":"MQTT Username", "key":"mqttUser", "type":"C", "length":32, "default":"RgbLed1"},
{"label":"MQTT Password", "key":"mqttPass", "type":"C", "length":32, "default":"geheim123"},
{"label":"MQTT ClientId", "key":"mqttClientId", "type":"C", "length":32, "default":"RgbLed1"},
{"label":"MQTT Port", "key":"mqttPort", "type":"I", "default":8883},
{"label":"MQTT Port", "key":"mqttPort", "type":"I", "default":1883},
{"label":"MQTT Topic Color Command", "key":"mqttTopicColorCommand", "type":"C", "length":64, "default":"IoT/RgbLed1/ColorCommand"},
{"label":"MQTT Topic Command", "key":"mqttTopicCommand", "type":"C", "length":64, "default":"IoT/RgbLed1/Command"},
{"label":"MQTT DebugTopic", "key":"mqttDebugTopic", "type":"C", "length":64, "default":"IoT/RgbLed1/Debug"},

View File

@ -42,7 +42,8 @@ typedef struct {
} CRGB;
Adafruit_NeoPixel pixels(NUM_OF_LEDs, PIXEL_PIN, NEO_RGB + NEO_KHZ400);
// Adafruit_NeoPixel pixels(NUM_OF_LEDs, PIXEL_PIN, NEO_RGB + NEO_KHZ400);
Adafruit_NeoPixel pixels(NUM_OF_LEDs, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
#endif
bool show = false;
@ -101,9 +102,9 @@ void subscribeApplication() {
static void setColor(int8_t ledNumber, uint8_t red, uint8_t green, uint8_t blue) {
static void setColor(int16_t ledNumber, uint8_t red, uint8_t green, uint8_t blue) {
if (ledNumber == -1) {
for (uint8_t i = 0; i < NUM_OF_LEDs; i++) {
for (uint16_t i = 0; i < NUM_OF_LEDs; i++) {
#ifdef WS2811
leds[i].r = red;
leds[i].g = green;
@ -193,7 +194,7 @@ void setupApplication() {
#ifdef PL9823
pixels.begin();
for (uint8_t i = 0; i < NUM_OF_LEDs; i++) {
for (uint16_t i = 0; i < NUM_OF_LEDs; i++) {
pixels.setPixelColor(i, pixels.Color(0,0,0));
}
pixels.show();

23
test/test.py Normal file
View File

@ -0,0 +1,23 @@
import paho.mqtt.client as mqtt
RGB_TOPIC = 'IoT/RgbLedStripe/ColorCommand'
client = mqtt.Client(client_id = 'test1')
client.connect("172.16.2.16", 1883, 60)
i = 0
while True:
client.loop()
i += 1
if i == 300:
i = 0
client.publish(RGB_TOPIC, "{0} 0 0 255".format(i))
client.publish(RGB_TOPIC, "{0} 0 255 0".format(i+1))
client.publish(RGB_TOPIC, "{0} 255 0 0".format(i+2))
client.publish(RGB_TOPIC, "{0} 0 0 0".format(i))