migrated to PlatformIO on VSCode

This commit is contained in:
Holger Fleischmann
2019-04-16 20:31:02 +02:00
parent cf4e631f9b
commit 261411597b
19 changed files with 726 additions and 1165 deletions

View File

@@ -1,82 +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.2091291922">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="io.sloeber.core.toolChain.release.2091291922" 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.2091291922" name="Release" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="io.sloeber.core.toolChain.release.2091291922.628608223" name="/" resourcePath="">
<toolChain id="io.sloeber.core.toolChain.release.282342079" name="Arduino Toolchain (Sloeber edition)" superClass="io.sloeber.core.toolChain.release">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="io.sloeber.targetplatform.423680738" name="Arduino Target" osList="all" superClass="io.sloeber.targetplatform"/>
<builder buildPath="${workspace_loc:/Arduino_ESP32_Geiger}/Release" id="io.sloeber.sketch.builder.966698240" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Arduino sketch builder" superClass="io.sloeber.sketch.builder"/>
<tool id="io.sloeber.tool.sketch.compiler.cpp.1981005346" name="Arduino C++ Compiler" superClass="io.sloeber.tool.sketch.compiler.cpp">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="io.sloeber.compiler.cpp.sketch.option.incpath.1251431701" name="Include Paths (-I)" superClass="io.sloeber.compiler.cpp.sketch.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/core/core}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/core/variant}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/ESP32/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/SPI/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/Time}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/U8g2/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/Wire/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/WiFi/src}&quot;"/>
</option>
<inputType id="io.sloeber.compiler.cpp.sketch.input.704589672" name="CPP source files" superClass="io.sloeber.compiler.cpp.sketch.input"/>
</tool>
<tool id="io.sloeber.tool.compiler.c.814948982" name="Arduino C Compiler" superClass="io.sloeber.tool.compiler.c">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="io.sloeber.compiler.c.sketch.option.incpath.1874159930" name="Include Paths (-I)" superClass="io.sloeber.compiler.c.sketch.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/core/core}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/core/variant}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/ESP32/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/SPI/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/Time}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/U8g2/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/Wire/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/WiFi/src}&quot;"/>
</option>
<inputType id="io.sloeber.compiler.c.sketch.input.1892783216" name="C Source Files" superClass="io.sloeber.compiler.c.sketch.input"/>
</tool>
<tool id="io.sloeber.tool.sketch.compiler.s.1002677074" name="Arduino Assembler" superClass="io.sloeber.tool.sketch.compiler.s">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="io.sloeber.compiler.asm.sketch.option.incpath.134772337" name="Include Paths (-I)" superClass="io.sloeber.compiler.asm.sketch.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/core/core}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/core/variant}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/ESP32/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/SPI/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/Time}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/U8g2/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/Wire/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/esp32-geiger-counter/libraries/WiFi/src}&quot;"/>
</option>
<inputType id="io.sloeber.compiler.S.sketch.input.1759766211" name="Assembly source files" superClass="io.sloeber.compiler.S.sketch.input"/>
</tool>
<tool id="io.sloeber.tool.ar.1145366377" name="Arduino archiver" superClass="io.sloeber.tool.ar"/>
<tool id="io.sloeber.tool.combine.554573936" name="Arduino combiner" superClass="io.sloeber.tool.combine"/>
<tool id="io.sloeber.tool.objcopy.eep.326077824" name="Arduino tool objcopy command" superClass="io.sloeber.tool.objcopy.eep"/>
<tool id="io.sloeber.tool.size.125186026" name="Arduino tool Print Size" superClass="io.sloeber.tool.size"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="libraries/Wire/doc|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="Arduino_ESP32_Geiger.null.1452401334" name="Arduino_ESP32_Geiger"/>
</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,4 +1,4 @@
/Release/ .pioenvs
/sloeber.ino.cpp .piolibdeps
/spec.d .vscode
/credentials.cpp credentials.cpp

View File

@@ -1,75 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>esp32-geiger-counter</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<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>
</natures>
<linkedResources>
<link>
<name>core/core</name>
<type>2</type>
<location>C:/dev/git/arduino-esp32/cores/esp32</location>
</link>
<link>
<name>core/variant</name>
<type>2</type>
<location>C:/dev/git/arduino-esp32/variants/lolin32</location>
</link>
<link>
<name>libraries/ESP32</name>
<type>2</type>
<location>C:/dev/git/arduino-esp32/libraries/ESP32</location>
</link>
<link>
<name>libraries/SPI</name>
<type>2</type>
<location>C:/dev/git/arduino-esp32/libraries/SPI</location>
</link>
<link>
<name>libraries/Time</name>
<type>2</type>
<locationURI>ECLIPSE_HOME/arduinoPlugin/libraries/Time/1.5.0</locationURI>
</link>
<link>
<name>libraries/U8g2</name>
<type>2</type>
<locationURI>ECLIPSE_HOME/arduinoPlugin/libraries/U8g2/2.25.10</locationURI>
</link>
<link>
<name>libraries/WiFi</name>
<type>2</type>
<location>C:/dev/git/arduino-esp32/libraries/WiFi</location>
</link>
<link>
<name>libraries/Wire</name>
<type>2</type>
<location>C:/dev/git/arduino-esp32/libraries/Wire</location>
</link>
</linkedResources>
</projectDescription>

View File

@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<configuration id="io.sloeber.core.toolChain.release.2091291922" 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="-375989101142970796" 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,465 +0,0 @@
eclipse.preferences.version=1
environment/project/io.sloeber.core.toolChain.release.2091291922/A.ALT_SIZE_COMMAND/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.ALT_SIZE_COMMAND/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/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.2091291922/A.ARCHIVE_FILE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.ARCHIVE_FILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.ARCHIVE_FILE/value=arduino.ar
environment/project/io.sloeber.core.toolChain.release.2091291922/A.ARCHIVE_FILE_PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.ARCHIVE_FILE_PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.ARCHIVE_FILE_PATH/value=${A.BUILD.PATH}/${A.ARCHIVE_FILE}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.ARCH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.ARCH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.ARCH/value=ARDUINO-ESP32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.BOARD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.BOARD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.BOARD/value=LOLIN32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.BOOT/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.BOOT/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.BOOT/value=dio
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.CODE_DEBUG/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.CODE_DEBUG/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.CODE_DEBUG/value=0
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.CORE.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.CORE.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.CORE.PATH/value=C\:\\dev\\git\\arduino-esp32\\cores\\esp32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.CORE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.CORE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.CORE/value=esp32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.DEFINES/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.DEFINES/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.DEFINES/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.EXTRA_FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.EXTRA_FLAGS/value=-DESP32 -DCORE_DEBUG_LEVEL\=${A.BUILD.CODE_DEBUG} ${A.BUILD.DEFINES}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.FLASH_FREQ/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.FLASH_FREQ/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.FLASH_FREQ/value=40m
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.FLASH_MODE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.FLASH_MODE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.FLASH_MODE/value=dio
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.FLASH_SIZE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.FLASH_SIZE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.FLASH_SIZE/value=4MB
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.F_CPU/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.F_CPU/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.F_CPU/value=240000000L
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.MCU/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.MCU/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.MCU/value=esp32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.PARTITIONS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.PARTITIONS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.PARTITIONS/value=default
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.PATH/value=${ProjDirPath}/${ConfigName}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.PROJECT_NAME/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.PROJECT_NAME/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.PROJECT_NAME/value=${ProjName}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.SYSTEM.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.SYSTEM.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.SYSTEM.PATH/value=${A.RUNTIME.PLATFORM.PATH}/system
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.VARIANT.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.VARIANT.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.VARIANT.PATH/value=C\:\\dev\\git\\arduino-esp32\\variants\\lolin32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.VARIANT/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.VARIANT/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.BUILD.VARIANT/value=lolin32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AR.CMD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AR.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AR.CMD/value=xtensa-esp32-elf-ar
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AR.EXTRA_FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AR.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AR.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AR.FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AR.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AR.FLAGS/value=cru
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AS.CMD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AS.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.AS.CMD/value=xtensa-esp32-elf-as
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.CMD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.CMD/value=xtensa-esp32-elf-gcc
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.CMD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.CMD/value=xtensa-esp32-elf-gcc
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.EXTRA_FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.FLAGS/value=-nostdlib "-L${A.COMPILER.SDK.PATH}/lib" "-L${A.COMPILER.SDK.PATH}/ld" -T esp32_out.ld -T esp32.common.ld -T esp32.rom.ld -T esp32.peripherals.ld -T esp32.rom.spiram_incompatible_fns.ld -u ld_include_panic_highint_hdl -u call_user_start_cpu0 -Wl,--gc-sections -Wl,-static -Wl,--undefined\=uxTopUsedPriority -u __cxa_guard_dummy -u __cxx_fatal_exception
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.LIBS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.LIBS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.ELF.LIBS/value=-lgcc -lopenssl -lbtdm_app -lfatfs -lwps -lcoexist -lwear_levelling -lesp_http_client -lprotobuf-c -lhal -lnewlib -ldriver -lbootloader_support -lpp -lfreemodbus -lmesh -lsmartconfig -ljsmn -lwpa -lethernet -lphy -lfrmn -lapp_trace -lfr_coefficients -lconsole -lulp -lwpa_supplicant -lfreertos -lbt -lmicro-ecc -lesp32-camera -lcxx -lxtensa-debug-module -ltcp_transport -lmdns -lvfs -lmtmn -lespcoredump -lesp_ringbuf -lsoc -lcore -lfb_gfx -lsdmmc -llibsodium -lcoap -ltcpip_adapter -lprotocomm -lesp_event -limage_util -lc_nano -lesp-tls -lasio -lrtc -lspi_flash -lwpa2 -lwifi_provisioning -lesp32 -lface_recognition -lapp_update -lnghttp -lspiffs -lface_detection -lefuse -lunity -lesp_https_server -lespnow -lnvs_flash -lesp_adc_cal -llog -ldl_lib -lsmartconfig_ack -lexpat -lfd_coefficients -lm -lmqtt -lc -lheap -lmbedtls -llwip -lnet80211 -lesp_http_server -lpthread -ljson -lesp_https_ota -lstdc++
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.EXTRA_FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.C.FLAGS/value=-std\=gnu99 -Os -g3 -fstack-protector -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -mlongcalls -nostdlib -Wpointer-arith ${A.COMPILER.WARNING_FLAGS} -Wno-error\=unused-function -Wno-error\=unused-but-set-variable -Wno-error\=unused-variable -Wno-error\=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -Wno-old-style-declaration -MMD -c
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPP.CMD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPP.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPP.CMD/value=xtensa-esp32-elf-g++
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPP.EXTRA_FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPP.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPP.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPP.FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPP.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPP.FLAGS/value=-std\=gnu++11 -fno-exceptions -Os -g3 -Wpointer-arith -fexceptions -fstack-protector -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -mlongcalls -nostdlib ${A.COMPILER.WARNING_FLAGS} -Wno-error\=unused-function -Wno-error\=unused-but-set-variable -Wno-error\=unused-variable -Wno-error\=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -fno-rtti -MMD -c
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPREPROCESSOR.FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPREPROCESSOR.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.CPREPROCESSOR.FLAGS/value=-DESP_PLATFORM -DMBEDTLS_CONFIG_FILE\="mbedtls/esp_config.h" -DHAVE_CONFIG_H "-I${A.COMPILER.SDK.PATH}/include/config" "-I${A.COMPILER.SDK.PATH}/include/app_trace" "-I${A.COMPILER.SDK.PATH}/include/app_update" "-I${A.COMPILER.SDK.PATH}/include/asio" "-I${A.COMPILER.SDK.PATH}/include/bootloader_support" "-I${A.COMPILER.SDK.PATH}/include/bt" "-I${A.COMPILER.SDK.PATH}/include/coap" "-I${A.COMPILER.SDK.PATH}/include/console" "-I${A.COMPILER.SDK.PATH}/include/driver" "-I${A.COMPILER.SDK.PATH}/include/efuse" "-I${A.COMPILER.SDK.PATH}/include/esp-tls" "-I${A.COMPILER.SDK.PATH}/include/esp32" "-I${A.COMPILER.SDK.PATH}/include/esp_adc_cal" "-I${A.COMPILER.SDK.PATH}/include/esp_event" "-I${A.COMPILER.SDK.PATH}/include/esp_http_client" "-I${A.COMPILER.SDK.PATH}/include/esp_http_server" "-I${A.COMPILER.SDK.PATH}/include/esp_https_ota" "-I${A.COMPILER.SDK.PATH}/include/esp_https_server" "-I${A.COMPILER.SDK.PATH}/include/esp_ringbuf" "-I${A.COMPILER.SDK.PATH}/include/espcoredump" "-I${A.COMPILER.SDK.PATH}/include/ethernet" "-I${A.COMPILER.SDK.PATH}/include/expat" "-I${A.COMPILER.SDK.PATH}/include/fatfs" "-I${A.COMPILER.SDK.PATH}/include/freemodbus" "-I${A.COMPILER.SDK.PATH}/include/freertos" "-I${A.COMPILER.SDK.PATH}/include/heap" "-I${A.COMPILER.SDK.PATH}/include/idf_test" "-I${A.COMPILER.SDK.PATH}/include/jsmn" "-I${A.COMPILER.SDK.PATH}/include/json" "-I${A.COMPILER.SDK.PATH}/include/libsodium" "-I${A.COMPILER.SDK.PATH}/include/log" "-I${A.COMPILER.SDK.PATH}/include/lwip" "-I${A.COMPILER.SDK.PATH}/include/mbedtls" "-I${A.COMPILER.SDK.PATH}/include/mdns" "-I${A.COMPILER.SDK.PATH}/include/micro-ecc" "-I${A.COMPILER.SDK.PATH}/include/mqtt" "-I${A.COMPILER.SDK.PATH}/include/newlib" "-I${A.COMPILER.SDK.PATH}/include/nghttp" "-I${A.COMPILER.SDK.PATH}/include/nvs_flash" "-I${A.COMPILER.SDK.PATH}/include/openssl" "-I${A.COMPILER.SDK.PATH}/include/protobuf-c" "-I${A.COMPILER.SDK.PATH}/include/protocomm" "-I${A.COMPILER.SDK.PATH}/include/pthread" "-I${A.COMPILER.SDK.PATH}/include/sdmmc" "-I${A.COMPILER.SDK.PATH}/include/smartconfig_ack" "-I${A.COMPILER.SDK.PATH}/include/soc" "-I${A.COMPILER.SDK.PATH}/include/spi_flash" "-I${A.COMPILER.SDK.PATH}/include/spiffs" "-I${A.COMPILER.SDK.PATH}/include/tcp_transport" "-I${A.COMPILER.SDK.PATH}/include/tcpip_adapter" "-I${A.COMPILER.SDK.PATH}/include/ulp" "-I${A.COMPILER.SDK.PATH}/include/unity" "-I${A.COMPILER.SDK.PATH}/include/vfs" "-I${A.COMPILER.SDK.PATH}/include/wear_levelling" "-I${A.COMPILER.SDK.PATH}/include/wifi_provisioning" "-I${A.COMPILER.SDK.PATH}/include/wpa_supplicant" "-I${A.COMPILER.SDK.PATH}/include/xtensa-debug-module" "-I${A.COMPILER.SDK.PATH}/include/esp32-camera" "-I${A.COMPILER.SDK.PATH}/include/esp-face" "-I${A.COMPILER.SDK.PATH}/include/fb_gfx"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.ELF2HEX.EXTRA_FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.ELF2HEX.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.ELF2HEX.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.PATH/value=${A.RUNTIME.TOOLS.XTENSA-ESP32-ELF-GCC.PATH}/bin/
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.S.CMD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.S.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.S.CMD/value=xtensa-esp32-elf-gcc
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.S.EXTRA_FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.S.EXTRA_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.S.EXTRA_FLAGS/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.S.FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.S.FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.S.FLAGS/value=-c -g3 -x assembler-with-cpp -MMD -mlongcalls
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.SDK.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.SDK.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.SDK.PATH/value=${A.RUNTIME.PLATFORM.PATH}/tools/sdk
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.SIZE.CMD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.SIZE.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.SIZE.CMD/value=xtensa-esp32-elf-size
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.ALL/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.ALL/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.ALL/value=-Wall -Werror\=all -Wextra
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.DEFAULT/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.DEFAULT/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.DEFAULT/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.MORE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.MORE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.MORE/value=-Wall -Werror\=all
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.NONE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.NONE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS.NONE/value=-w
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.COMPILER.WARNING_FLAGS/value=${A.COMPILER.WARNING_FLAGS.ALL}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.ESP8266.NETWORK.UPLOAD.TOOL/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.ESP8266.NETWORK.UPLOAD.TOOL/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.ESP8266.NETWORK.UPLOAD.TOOL/value=esp8266OTA
environment/project/io.sloeber.core.toolChain.release.2091291922/A.NAME/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.NAME/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.NAME/value=WEMOS LOLIN32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.PACKAGES/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.PACKAGES/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.PACKAGES/value=${eclipse_home}/arduinoPlugin/packages
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN.1/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.AR.CMD}" ${A.COMPILER.AR.FLAGS} ${A.COMPILER.AR.EXTRA_FLAGS}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN.2/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN.2/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN.2/value=\
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN.3/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN.3/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN.3/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.AR.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.AR.CMD}" ${A.COMPILER.AR.FLAGS} ${A.COMPILER.AR.EXTRA_FLAGS} "${A.ARCHIVE_FILE_PATH}" "${A.OBJECT_FILE}"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.COMBINE.PATTERN.1/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.COMBINE.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.COMBINE.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.C.ELF.CMD}" ${A.COMPILER.C.ELF.FLAGS} ${A.COMPILER.C.ELF.EXTRA_FLAGS} -Wl,--start-group
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.COMBINE.PATTERN.2/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.COMBINE.PATTERN.2/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.COMBINE.PATTERN.2/value=\
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.COMBINE.PATTERN.3/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.COMBINE.PATTERN.3/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.COMBINE.PATTERN.3/value=\ ${A.COMPILER.C.ELF.LIBS} -Wl,--end-group -Wl,-EL -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.COMBINE.PATTERN/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.COMBINE.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/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} -Wl,--start-group ${A.OBJECT_FILES} "${A.ARCHIVE_FILE_PATH}" ${A.COMPILER.C.ELF.LIBS} -Wl,--end-group -Wl,-EL -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.O.PATTERN.1/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.O.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.O.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.C.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} -DARDUINO_BOARD\="${A.BUILD.BOARD}" -DARDUINO_VARIANT\="${A.BUILD.VARIANT}" ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.O.PATTERN.2/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.O.PATTERN.2/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.O.PATTERN.2/value=\ -o
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.O.PATTERN.3/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.O.PATTERN.3/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.O.PATTERN.3/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.O.PATTERN/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.C.O.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/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} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} -DARDUINO_BOARD\="${A.BUILD.BOARD}" -DARDUINO_VARIANT\="${A.BUILD.VARIANT}" ${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.2091291922/A.RECIPE.CPP.O.PATTERN.1/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.CPP.O.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.CPP.O.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.CPP.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.CPP.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} -DARDUINO_BOARD\="${A.BUILD.BOARD}" -DARDUINO_VARIANT\="${A.BUILD.VARIANT}" ${A.COMPILER.CPP.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.CPP.O.PATTERN.2/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.CPP.O.PATTERN.2/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.CPP.O.PATTERN.2/value=\ -o
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.CPP.O.PATTERN.3/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.CPP.O.PATTERN.3/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.CPP.O.PATTERN.3/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.CPP.O.PATTERN/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.CPP.O.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/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} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} -DARDUINO_BOARD\="${A.BUILD.BOARD}" -DARDUINO_VARIANT\="${A.BUILD.VARIANT}" ${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.2091291922/A.RECIPE.OBJCOPY.EEP.PATTERN.1/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.EEP.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.EEP.PATTERN.1/value=${A.TOOLS.GEN_ESP32PART.CMD} -q "${A.RUNTIME.PLATFORM.PATH}/tools/partitions/${A.BUILD.PARTITIONS}.csv" "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.partitions.bin"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.EEP.PATTERN/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.EEP.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.EEP.PATTERN/value=${A.TOOLS.GEN_ESP32PART.CMD} -q "${A.RUNTIME.PLATFORM.PATH}/tools/partitions/${A.BUILD.PARTITIONS}.csv" "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.partitions.bin"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.HEX.PATTERN.1/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.HEX.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.HEX.PATTERN.1/value="${A.TOOLS.ESPTOOL_PY.PATH}/${A.TOOLS.ESPTOOL_PY.CMD}" --chip esp32 elf2image --flash_mode "${A.BUILD.FLASH_MODE}" --flash_freq "${A.BUILD.FLASH_FREQ}" --flash_size "${A.BUILD.FLASH_SIZE}" -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.HEX.PATTERN.LINUX/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.HEX.PATTERN.LINUX/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.HEX.PATTERN.LINUX/value=python "${A.TOOLS.ESPTOOL_PY.PATH}/${A.TOOLS.ESPTOOL_PY.CMD}" --chip esp32 elf2image --flash_mode "${A.BUILD.FLASH_MODE}" --flash_freq "${A.BUILD.FLASH_FREQ}" --flash_size "${A.BUILD.FLASH_SIZE}" -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.HEX.PATTERN/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.HEX.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OBJCOPY.HEX.PATTERN/value="${A.TOOLS.ESPTOOL_PY.PATH}/${A.TOOLS.ESPTOOL_PY.CMD}" --chip esp32 elf2image --flash_mode "${A.BUILD.FLASH_MODE}" --flash_freq "${A.BUILD.FLASH_FREQ}" --flash_size "${A.BUILD.FLASH_SIZE}" -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OUTPUT.SAVE_FILE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OUTPUT.SAVE_FILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OUTPUT.SAVE_FILE/value=${A.BUILD.PROJECT_NAME}.${A.BUILD.VARIANT}.bin
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OUTPUT.TMP_FILE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OUTPUT.TMP_FILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.OUTPUT.TMP_FILE/value=${A.BUILD.PROJECT_NAME}.bin
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.S.O.PATTERN.1/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.S.O.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.S.O.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.S.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} -DARDUINO_BOARD\="${A.BUILD.BOARD}" -DARDUINO_VARIANT\="${A.BUILD.VARIANT}" ${A.COMPILER.S.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.S.O.PATTERN.2/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.S.O.PATTERN.2/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.S.O.PATTERN.2/value=\ -o
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.S.O.PATTERN.3/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.S.O.PATTERN.3/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.S.O.PATTERN.3/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.S.O.PATTERN/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.S.O.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/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} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} -DARDUINO_BOARD\="${A.BUILD.BOARD}" -DARDUINO_VARIANT\="${A.BUILD.VARIANT}" ${A.COMPILER.S.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.SIZE.PATTERN.1/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.SIZE.PATTERN.1/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.SIZE.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" -A "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.SIZE.PATTERN/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.SIZE.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/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.2091291922/A.RECIPE.SIZE.REGEX.DATA/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.SIZE.REGEX.DATA/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.SIZE.REGEX.DATA/value=^(?\:\\.dram0\\.data|\\.dram0\\.bss|\\.noinit)\\s+([0-9]+).*
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.SIZE.REGEX/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.SIZE.REGEX/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RECIPE.SIZE.REGEX/value=^(?\:\\.iram0\\.text|\\.iram0\\.vectors|\\.dram0\\.data|\\.flash\\.text|\\.flash\\.rodata|)\\s+([0-9]+).*
environment/project/io.sloeber.core.toolChain.release.2091291922/A.REFERENCED.CORE.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.REFERENCED.CORE.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.REFERENCED.CORE.PATH/value=C\:\\dev\\git\\arduino-esp32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.REFERENCED.UPLOAD.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.REFERENCED.UPLOAD.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.REFERENCED.UPLOAD.PATH/value=C\:\\dev\\git\\arduino-esp32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.REFERENCED.VARIANT.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.REFERENCED.VARIANT.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.REFERENCED.VARIANT.PATH/value=C\:\\dev\\git\\arduino-esp32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.HARDWARE.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.HARDWARE.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.HARDWARE.PATH/value=C\:/dev/git
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.IDE.VERSION/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.IDE.VERSION/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.IDE.VERSION/value=10802
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.PLATFORM.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.PLATFORM.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.PLATFORM.PATH/value=C\:/dev/git/arduino-esp32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.ARDUINOOTA-1.2.1.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.ARDUINOOTA-1.2.1.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.ARDUINOOTA-1.2.1.PATH/value=C\:\\dev\\sw\\eclipse2019-03\\arduinoPlugin\\packages\\arduino\\tools\\arduinoOTA\\1.2.1
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/value=C\:\\dev\\sw\\eclipse2019-03\\arduinoPlugin\\packages\\arduino\\tools\\arduinoOTA\\1.2.1
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.ARDUINOOTA1.2.1.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.ARDUINOOTA1.2.1.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.ARDUINOOTA1.2.1.PATH/value=C\:\\dev\\sw\\eclipse2019-03\\arduinoPlugin\\packages\\arduino\\tools\\arduinoOTA\\1.2.1
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVR-GCC-5.4.0-ATMEL3.6.1-ARDUINO2.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVR-GCC-5.4.0-ATMEL3.6.1-ARDUINO2.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVR-GCC-5.4.0-ATMEL3.6.1-ARDUINO2.PATH/value=C\:\\dev\\sw\\eclipse2019-03\\arduinoPlugin\\packages\\arduino\\tools\\avr-gcc\\5.4.0-atmel3.6.1-arduino2
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVR-GCC.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVR-GCC.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVR-GCC.PATH/value=C\:\\dev\\sw\\eclipse2019-03\\arduinoPlugin\\packages\\arduino\\tools\\avr-gcc\\5.4.0-atmel3.6.1-arduino2
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVR-GCC5.4.0-ATMEL3.6.1-ARDUINO2.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVR-GCC5.4.0-ATMEL3.6.1-ARDUINO2.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVR-GCC5.4.0-ATMEL3.6.1-ARDUINO2.PATH/value=C\:\\dev\\sw\\eclipse2019-03\\arduinoPlugin\\packages\\arduino\\tools\\avr-gcc\\5.4.0-atmel3.6.1-arduino2
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO14.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO14.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO14.PATH/value=C\:\\dev\\sw\\eclipse2019-03\\arduinoPlugin\\packages\\arduino\\tools\\avrdude\\6.3.0-arduino14
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVRDUDE.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVRDUDE.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVRDUDE.PATH/value=C\:\\dev\\sw\\eclipse2019-03\\arduinoPlugin\\packages\\arduino\\tools\\avrdude\\6.3.0-arduino14
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO14.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO14.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO14.PATH/value=C\:\\dev\\sw\\eclipse2019-03\\arduinoPlugin\\packages\\arduino\\tools\\avrdude\\6.3.0-arduino14
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.XTENSA-ESP32-ELF-GCC.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.XTENSA-ESP32-ELF-GCC.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.RUNTIME.TOOLS.XTENSA-ESP32-ELF-GCC.PATH/value=${A.RUNTIME.PLATFORM.PATH}/tools/xtensa-esp32-elf
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.DISABLEDTR/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.DISABLEDTR/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.DISABLEDTR/value=true
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.DISABLERTS/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.DISABLERTS/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.DISABLERTS/value=true
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.PORT.FILE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.PORT.FILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.PORT.FILE/value=${A.SERIAL.PORT}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.PORT/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.PORT/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SERIAL.PORT/value=${JANTJE.COM_PORT}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SOFTWARE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SOFTWARE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.SOFTWARE/value=ARDUINO
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/value=-v
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/value=${A.TOOLS.ESP8266OTA.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESP8266OTA/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESP8266OTA/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESP8266OTA/value=${A.TOOLS.ESP8266OTA.TOOLS.ESPTOOL.NETWORK_CMD}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/value=${A.TOOLS.ESPTOOL.NETWORK.AUTH}
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.CMD.LINUX/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.CMD.LINUX/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.CMD.LINUX/value=esptool.py
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.CMD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.CMD/value=esptool.exe
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.NETWORK_CMD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.NETWORK_CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.NETWORK_CMD/value="${A.RUNTIME.PLATFORM.PATH}/tools/espota.exe"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.PATH/value=${A.RUNTIME.PLATFORM.PATH}/tools/esptool
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.NETWORK_PATTERN/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.NETWORK_PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.NETWORK_PATTERN/value=${A.TOOLS.ESPTOOL_PY.NETWORK_CMD} -i "${A.SERIAL.PORT}" -p "${A.NETWORK.PORT}" "--auth\=${A.NETWORK.PASSWORD}" -f "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PARAMS.QUIET/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PARAMS.QUIET/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PARAMS.QUIET/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PARAMS.VERBOSE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PARAMS.VERBOSE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PARAMS.VERBOSE/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PATTERN.LINUX/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PATTERN.LINUX/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PATTERN.LINUX/value=python "${A.TOOLS.ESPTOOL_PY.PATH}/${A.TOOLS.ESPTOOL_PY.CMD}" --chip esp32 --port "${A.SERIAL.PORT}" --baud ${A.UPLOAD.SPEED} --before default_reset --after hard_reset write_flash -z --flash_mode ${A.BUILD.FLASH_MODE} --flash_freq ${A.BUILD.FLASH_FREQ} --flash_size detect 0xe000 "${A.RUNTIME.PLATFORM.PATH}/tools/partitions/boot_app0.bin" 0x1000 "${A.RUNTIME.PLATFORM.PATH}/tools/sdk/bin/bootloader_${A.BUILD.BOOT}_${A.BUILD.FLASH_FREQ}.bin" 0x10000 "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" 0x8000 "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.partitions.bin"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PATTERN/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PATTERN/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PATTERN/value="${A.TOOLS.ESPTOOL_PY.PATH}/${A.TOOLS.ESPTOOL_PY.CMD}" --chip esp32 --port "${A.SERIAL.PORT}" --baud ${A.UPLOAD.SPEED} --before default_reset --after hard_reset write_flash -z --flash_mode ${A.BUILD.FLASH_MODE} --flash_freq ${A.BUILD.FLASH_FREQ} --flash_size detect 0xe000 "${A.RUNTIME.PLATFORM.PATH}/tools/partitions/boot_app0.bin" 0x1000 "${A.RUNTIME.PLATFORM.PATH}/tools/sdk/bin/bootloader_${A.BUILD.BOOT}_${A.BUILD.FLASH_FREQ}.bin" 0x10000 "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" 0x8000 "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.partitions.bin"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PROTOCOL/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PROTOCOL/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.ESPTOOL_PY.UPLOAD.PROTOCOL/value=esp32
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.GEN_ESP32PART.CMD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.GEN_ESP32PART.CMD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.TOOLS.GEN_ESP32PART.CMD/value="${A.RUNTIME.PLATFORM.PATH}/tools/gen_esp32part.exe"
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.ALTID/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.ALTID/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.ALTID/value=no_altID
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.MAXIMUM_DATA_SIZE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.MAXIMUM_DATA_SIZE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.MAXIMUM_DATA_SIZE/value=327680
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.MAXIMUM_SIZE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.MAXIMUM_SIZE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.MAXIMUM_SIZE/value=1310720
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.PROTOCOL/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.PROTOCOL/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.PROTOCOL/value=stk500v1
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.SPEED/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.SPEED/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.SPEED/value=921600
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.TOOL/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.TOOL/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.TOOL/value=esptool_py
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.USBID/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.USBID/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.USBID/value=no_altID
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/value=true
environment/project/io.sloeber.core.toolChain.release.2091291922/A.VERSION/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/A.VERSION/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/A.VERSION/value=0.0.1
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.ARCHITECTURE_ID/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.ARCHITECTURE_ID/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.ARCHITECTURE_ID/value=arduino-esp32
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.BOARDS_FILE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.BOARDS_FILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.BOARDS_FILE/value=C\:\\dev\\git\\arduino-esp32\\boards.txt
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.BOARD_ID/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.BOARD_ID/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.BOARD_ID/value=lolin32
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.BOARD_NAME/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.BOARD_NAME/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.BOARD_NAME/value=WEMOS LOLIN32
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.COM_PORT/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.COM_PORT/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.COM_PORT/value=COM4
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.ECLIPSE_LOCATION/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.ECLIPSE_LOCATION/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.ECLIPSE_LOCATION/value=C\:\\dev\\sw\\eclipse2019-03\\
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.ALL/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.ALL/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.ALL/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.ARCHIVE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.ARCHIVE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.ARCHIVE/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.ASSEMBLY/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.ASSEMBLY/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.ASSEMBLY/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.C.COMPILE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.C.COMPILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.C.COMPILE/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.COMPILE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.COMPILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.COMPILE/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.CPP.COMPILE/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.CPP.COMPILE/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.CPP.COMPILE/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.LINK/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.LINK/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.EXTRA.LINK/value=
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.MAKE_LOCATION/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.MAKE_LOCATION/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.MAKE_LOCATION/value=C\:\\dev\\sw\\eclipse2019-03\\arduinoPlugin\\tools\\make\\
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.MENU/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.MENU/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.MENU/value=DebugLevel\=info\nFlashFreq\=40\nFlashMode\=dout\nFlashSize\=4M\nPartitionScheme\=default\nUploadSpeed\=921600
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.OBJCOPY/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.OBJCOPY/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.OBJCOPY/value=${A.RECIPE.OBJCOPY.EEP.PATTERN}\n\t${A.RECIPE.OBJCOPY.HEX.PATTERN}
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.OS_NAME/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.OS_NAME/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.OS_NAME/value=win32
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.PACKAGE_ID/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.PACKAGE_ID/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.PACKAGE_ID/value=git
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.PROJECT_NAME/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.PROJECT_NAME/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.PROJECT_NAME/value=esp32-geiger-counter
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.SELECTED.PLATFORM/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.SELECTED.PLATFORM/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.SELECTED.PLATFORM/value=C\:/dev/git/arduino-esp32
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.SIZE.SWITCH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.SIZE.SWITCH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.SIZE.SWITCH/value=${A.RECIPE.SIZE.PATTERN}
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.UPLOAD/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.UPLOAD/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.UPLOAD/value=Default
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.WARNING_LEVEL/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.WARNING_LEVEL/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.WARNING_LEVEL/value=true
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.WORKSPACE_LOCATION/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.WORKSPACE_LOCATION/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/JANTJE.WORKSPACE_LOCATION/value=C\:\\dev\\workspace-2019-03
environment/project/io.sloeber.core.toolChain.release.2091291922/PATH/delimiter=;
environment/project/io.sloeber.core.toolChain.release.2091291922/PATH/operation=replace
environment/project/io.sloeber.core.toolChain.release.2091291922/PATH/value=${A.COMPILER.PATH}${PathDelimiter}${A.BUILD.GENERIC.PATH}${PathDelimiter}${SystemRoot}\\system32${PathDelimiter}${SystemRoot}${PathDelimiter}${SystemRoot}\\system32\\Wbem${PathDelimiter}${sloeber_path_extension}
environment/project/io.sloeber.core.toolChain.release.2091291922/append=true
environment/project/io.sloeber.core.toolChain.release.2091291922/appendContributed=true

67
.travis.yml Normal file
View File

@@ -0,0 +1,67 @@
# Continuous Integration (CI) is the practice, in software
# engineering, of merging all developer working copies with a shared mainline
# several times a day < https://docs.platformio.org/page/ci/index.html >
#
# Documentation:
#
# * Travis CI Embedded Builds with PlatformIO
# < https://docs.travis-ci.com/user/integration/platformio/ >
#
# * PlatformIO integration with Travis CI
# < https://docs.platformio.org/page/ci/travis.html >
#
# * User Guide for `platformio ci` command
# < https://docs.platformio.org/page/userguide/cmd_ci.html >
#
#
# Please choose one of the following templates (proposed below) and uncomment
# it (remove "# " before each line) or use own configuration according to the
# Travis CI documentation (see above).
#
#
# Template #1: General project. Test it using existing `platformio.ini`.
#
# language: python
# python:
# - "2.7"
#
# sudo: false
# cache:
# directories:
# - "~/.platformio"
#
# install:
# - pip install -U platformio
# - platformio update
#
# script:
# - platformio run
#
# Template #2: The project is intended to be used as a library with examples.
#
# language: python
# python:
# - "2.7"
#
# sudo: false
# cache:
# directories:
# - "~/.platformio"
#
# env:
# - PLATFORMIO_CI_SRC=path/to/test/file.c
# - PLATFORMIO_CI_SRC=examples/file.ino
# - PLATFORMIO_CI_SRC=path/to/test/directory
#
# install:
# - pip install -U platformio
# - platformio update
#
# script:
# - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N

View File

@@ -23,7 +23,7 @@ Feel free to use this project as a base for your own projects AT YOUR OWN RISK!
# Software # Software
- Eclipse sloeber project using Arduino library, ESP-IDF for sleep functions and u8g2 for display output - PlatformIO project using Arduino library, ESP-IDF for sleep functions and U8g2 for display output
- Low-power mode uses light sleep, a wake-up for each signal pulse change and a wake-up every 1000 ms to update pulse statistics and OLED. This results in about 90% sleep. Could be improved using deep sleep and ULP. However, light sleep is already quite good and much easier. - Low-power mode uses light sleep, a wake-up for each signal pulse change and a wake-up every 1000 ms to update pulse statistics and OLED. This results in about 90% sleep. Could be improved using deep sleep and ULP. However, light sleep is already quite good and much easier.
- WiFi mode uses no sleep and simple interrupts for pulse counting. Pulse statistics and OLED are updated every 1000 ms, data is sent to thingspeak every 60 s. - WiFi mode uses no sleep and simple interrupts for pulse counting. Pulse statistics and OLED are updated every 1000 ms, data is sent to thingspeak every 60 s.
- Credentials (WiFi SSID, password, thingspeak channel key) are only declared in `credentials.h` and must be defined in a `credentials.cpp` - Credentials (WiFi SSID, password, thingspeak channel key) are only declared in `credentials.h` and must be defined in a `credentials.cpp`

View File

@@ -1,37 +1,37 @@
#ifndef GEIGERDATA_H_ #ifndef GEIGERDATA_H_
#define GEIGERDATA_H_ #define GEIGERDATA_H_
#include "Arduino.h" #include "Arduino.h"
// Russion STS-6 ("CTC-6") Geiger tube: // Russion STS-6 ("CTC-6") Geiger tube:
// N = (2.283.42)*10^3 at 0.36 µR/h; Nmax = 6*10^4; Nf = 110 // N = (2.28-3.42)*10^3 at 0.36 µR/h; Nmax = 6*10^4; Nf = 110
const float STS6_CPM_PER_USPH = 875; const float STS6_CPM_PER_USPH = 875;
// Holds pulse counter history and performs calculations // Holds pulse counter history and performs calculations
class GeigerData { class GeigerData {
public: public:
const uint16_t sampleCount; const uint16_t sampleCount;
const uint16_t sampleSeconds; const uint16_t sampleSeconds;
const float cpm_per_uSph; const float cpm_per_uSph;
private: private:
uint16_t currentSample; uint16_t currentSample;
uint16_t *pulsesPerSample; uint16_t *pulsesPerSample;
uint16_t next(uint16_t index); uint16_t next(uint16_t index);
uint16_t prev(uint16_t index); uint16_t prev(uint16_t index);
public: public:
GeigerData(uint16_t sampleCount, uint16_t sampleSeconds, GeigerData(uint16_t sampleCount, uint16_t sampleSeconds,
float cpm_per_uSph); float cpm_per_uSph);
virtual ~GeigerData(); virtual ~GeigerData();
virtual void addPulses(uint16_t pulses); virtual void addPulses(uint16_t pulses);
virtual void nextSample(); virtual void nextSample();
virtual uint16_t getCurrentSample(); virtual uint16_t getCurrentSample();
virtual uint32_t getPreviousPulses(uint16_t offset, uint16_t samples); virtual uint32_t getPreviousPulses(uint16_t offset, uint16_t samples);
virtual float toMicroSievertPerHour(uint32_t pulses, uint16_t samples); virtual float toMicroSievertPerHour(uint32_t pulses, uint16_t samples);
}; };
#endif /* GEIGERDATA_H_ */ #endif /* GEIGERDATA_H_ */

39
include/README Normal file
View File

@@ -0,0 +1,39 @@
This directory is intended for project header files.
A header file is a file containing C declarations and macro definitions
to be shared between several project source files. You request the use of a
header file in your project source file (C, C++, etc) located in `src` folder
by including it, with the C preprocessing directive `#include'.
```src/main.c
#include "header.h"
int main (void)
{
...
}
```
Including a header file produces the same results as copying the header file
into each source file that needs it. Such copying would be time-consuming
and error-prone. With a header file, the related declarations appear
in only one place. If they need to be changed, they can be changed in one
place, and programs that include the header file will automatically use the
new version when next recompiled. The header file eliminates the labor of
finding and changing all the copies as well as the risk that a failure to
find one copy will result in inconsistencies within a program.
In C, the usual convention is to give header files names that end with `.h'.
It is most portable to use only letters, digits, dashes, and underscores in
header file names, and at most one dot.
Read more about using header files in official GCC documentation:
* Include Syntax
* Include Operation
* Once-Only Headers
* Computed Includes
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html

View File

@@ -1,8 +1,8 @@
#ifndef CREDENTIALS_H_ #ifndef CREDENTIALS_H_
#define CREDENTIALS_H_ #define CREDENTIALS_H_
extern const char *wifiSsid; extern const char *wifiSsid;
extern const char *wifiPassword; extern const char *wifiPassword;
extern const char *thingspeakApiKey; extern const char *thingspeakApiKey;
#endif /* CREDENTIALS_H_ */ #endif /* CREDENTIALS_H_ */

View File

@@ -1,9 +1,9 @@
#ifndef DISPLAY_H_ #ifndef DISPLAY_H_
#define DISPLAY_H_ #define DISPLAY_H_
#include "GeigerData.h" #include "GeigerData.h"
void initDisplay(); void initDisplay();
void updateDisplay(GeigerData &geigerData, char uSphStr[16], char cpmStr[16]); void updateDisplay(GeigerData &geigerData, char uSphStr[16], char cpmStr[16]);
#endif /* DISPLAY_H_ */ #endif /* DISPLAY_H_ */

View File

@@ -1,10 +1,10 @@
#ifndef INGEST_H_ #ifndef INGEST_H_
#define INGEST_H_ #define INGEST_H_
#include "GeigerData.h" #include "GeigerData.h"
void initIngest(); void initIngest();
void deinitIngest(); void deinitIngest();
void ingest(GeigerData &geigerData, uint16_t intervalSamples); void ingest(GeigerData &geigerData, uint16_t intervalSamples);
#endif /* INGEST_H_ */ #endif /* INGEST_H_ */

46
lib/README Normal file
View File

@@ -0,0 +1,46 @@
This directory is intended for project specific (private) libraries.
PlatformIO will compile them to static libraries and link into executable file.
The source code of each library should be placed in a an own separate directory
("lib/your_library_name/[here are source files]").
For example, see a structure of the following two libraries `Foo` and `Bar`:
|--lib
| |
| |--Bar
| | |--docs
| | |--examples
| | |--src
| | |- Bar.c
| | |- Bar.h
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
| |
| |--Foo
| | |- Foo.c
| | |- Foo.h
| |
| |- README --> THIS FILE
|
|- platformio.ini
|--src
|- main.c
and a contents of `src/main.c`:
```
#include <Foo.h>
#include <Bar.h>
int main (void)
{
...
}
```
PlatformIO Library Dependency Finder will find automatically dependent
libraries scanning project source files.
More information about PlatformIO Library Dependency Finder
- https://docs.platformio.org/page/librarymanager/ldf.html

18
platformio.ini Normal file
View File

@@ -0,0 +1,18 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:lolin32]
platform = espressif32
board = lolin32
framework = arduino
monitor_speed = 921600
lib_deps = U8g2@2.26.1

View File

@@ -1,53 +1,53 @@
#include "GeigerData.h" #include "GeigerData.h"
GeigerData::GeigerData(uint16_t sampleCount, uint16_t sampleSeconds, GeigerData::GeigerData(uint16_t sampleCount, uint16_t sampleSeconds,
float cpm_per_uSph) : float cpm_per_uSph) :
sampleCount(sampleCount), sampleSeconds(sampleSeconds), cpm_per_uSph( sampleCount(sampleCount), sampleSeconds(sampleSeconds), cpm_per_uSph(
cpm_per_uSph), pulsesPerSample(new uint16_t[sampleCount]) { cpm_per_uSph), pulsesPerSample(new uint16_t[sampleCount]) {
currentSample = 0; currentSample = 0;
for (int i = 0; i < sampleCount; i++) { for (int i = 0; i < sampleCount; i++) {
pulsesPerSample[i] = 0; pulsesPerSample[i] = 0;
} }
} }
GeigerData::~GeigerData() { GeigerData::~GeigerData() {
delete[] pulsesPerSample; delete[] pulsesPerSample;
} }
uint16_t GeigerData::next(uint16_t index) { uint16_t GeigerData::next(uint16_t index) {
return index + 1 < sampleCount ? index + 1 : 0; return index + 1 < sampleCount ? index + 1 : 0;
} }
uint16_t GeigerData::prev(uint16_t index) { uint16_t GeigerData::prev(uint16_t index) {
return index > 0 ? index - 1 : sampleCount - 1; return index > 0 ? index - 1 : sampleCount - 1;
} }
void GeigerData::addPulses(uint16_t pulses) { void GeigerData::addPulses(uint16_t pulses) {
if (pulsesPerSample[currentSample] <= UINT16_MAX - pulses) if (pulsesPerSample[currentSample] <= UINT16_MAX - pulses)
pulsesPerSample[currentSample] += pulses; pulsesPerSample[currentSample] += pulses;
} }
void GeigerData::nextSample() { void GeigerData::nextSample() {
currentSample = next(currentSample); currentSample = next(currentSample);
pulsesPerSample[currentSample] = 0; pulsesPerSample[currentSample] = 0;
} }
uint16_t GeigerData::getCurrentSample() { uint16_t GeigerData::getCurrentSample() {
return currentSample; return currentSample;
} }
uint32_t GeigerData::getPreviousPulses(uint16_t offset, uint16_t samples) { uint32_t GeigerData::getPreviousPulses(uint16_t offset, uint16_t samples) {
uint32_t pulses = 0; uint32_t pulses = 0;
uint16_t index = (currentSample + sampleCount - offset) % sampleCount; uint16_t index = (currentSample + sampleCount - offset) % sampleCount;
for (uint16_t i = 0; i < samples; i++) { for (uint16_t i = 0; i < samples; i++) {
pulses += pulsesPerSample[index]; pulses += pulsesPerSample[index];
index = prev(index); index = prev(index);
} }
return pulses; return pulses;
} }
float GeigerData::toMicroSievertPerHour(uint32_t pulses, uint16_t samples) { float GeigerData::toMicroSievertPerHour(uint32_t pulses, uint16_t samples) {
float cpm = pulses / (sampleSeconds / 60. * samples); float cpm = pulses / (sampleSeconds / 60. * samples);
return cpm / cpm_per_uSph; return cpm / cpm_per_uSph;
} }

View File

@@ -1,100 +1,100 @@
#include "U8g2lib.h" #include "U8g2lib.h"
#include "display.h" #include "display.h"
// OLED display 128x64 with SH1106 controller // OLED display 128x64 with SH1106 controller
// on I2C GPIOs SCL 22 and SDA 21 // on I2C GPIOs SCL 22 and SDA 21
U8G2_SH1106_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, 22, 21); U8G2_SH1106_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, 22, 21);
void initDisplay() { void initDisplay() {
// high I2c clock still results in about 100ms buffer transmission to OLED: // high I2c clock still results in about 100ms buffer transmission to OLED:
u8g2.setBusClock(1000000); u8g2.setBusClock(1000000);
u8g2.begin(); u8g2.begin();
} }
void renderDigits(char uSphStr[16], char cpmStr[16]) { void renderDigits(char uSphStr[16], char cpmStr[16]) {
uint16_t y = 14; uint16_t y = 14;
uint16_t xCpm = 56; uint16_t xCpm = 56;
uint16_t xUSph = 127; uint16_t xUSph = 127;
u8g2.setFont(u8g2_font_crox4hb_tr); u8g2.setFont(u8g2_font_crox4hb_tr);
u8g2_uint_t w = u8g2.getStrWidth(uSphStr); u8g2_uint_t w = u8g2.getStrWidth(uSphStr);
u8g2.setCursor(xUSph - w, y); u8g2.setCursor(xUSph - w, y);
u8g2.print(uSphStr); u8g2.print(uSphStr);
w = u8g2.getStrWidth(cpmStr); w = u8g2.getStrWidth(cpmStr);
u8g2.setCursor(xCpm - w, y); u8g2.setCursor(xCpm - w, y);
u8g2.print(cpmStr); u8g2.print(cpmStr);
y = 21; y = 21;
u8g2.setFont(u8g2_font_4x6_tf); u8g2.setFont(u8g2_font_4x6_tf);
w = u8g2.getStrWidth("µS/h"); w = u8g2.getStrWidth("µS/h");
u8g2.setCursor(xUSph - w, y); u8g2.setCursor(xUSph - w, y);
u8g2.print("µS/h"); u8g2.print("µS/h");
w = u8g2.getStrWidth("cnt/min"); w = u8g2.getStrWidth("cnt/min");
u8g2.setCursor(xCpm - w, y); u8g2.setCursor(xCpm - w, y);
u8g2.print("cnt/min"); u8g2.print("cnt/min");
} }
void renderHistoryBarGraph(GeigerData &geigerData) { void renderHistoryBarGraph(GeigerData &geigerData) {
const uint16_t bars = 120; const uint16_t bars = 120;
const uint16_t maxBarHeight = 40; const uint16_t maxBarHeight = 40;
const uint16_t samplesPerBar = geigerData.sampleCount / bars; const uint16_t samplesPerBar = geigerData.sampleCount / bars;
const uint16_t barsPerMinute = 60 const uint16_t barsPerMinute = 60
/ (samplesPerBar * geigerData.sampleSeconds); / (samplesPerBar * geigerData.sampleSeconds);
// determine max value for y scale: // determine max value for y scale:
uint16_t offset = geigerData.getCurrentSample() % samplesPerBar + 1; uint16_t offset = geigerData.getCurrentSample() % samplesPerBar + 1;
uint32_t maxPulses = 0; uint32_t maxPulses = 0;
for (int16_t i = 0; i < bars - 1; i++) { for (int16_t i = 0; i < bars - 1; i++) {
const uint32_t prevPulses = geigerData.getPreviousPulses(offset, const uint32_t prevPulses = geigerData.getPreviousPulses(offset,
samplesPerBar); samplesPerBar);
if (prevPulses > maxPulses) if (prevPulses > maxPulses)
maxPulses = prevPulses; maxPulses = prevPulses;
offset += samplesPerBar; offset += samplesPerBar;
} }
const float maxUSph = geigerData.toMicroSievertPerHour(maxPulses, const float maxUSph = geigerData.toMicroSievertPerHour(maxPulses,
samplesPerBar); samplesPerBar);
const float uSphPerPixel = maxUSph > 40. ? 10. : maxUSph > 4. ? 1. : const float uSphPerPixel = maxUSph > 40. ? 10. : maxUSph > 4. ? 1. :
maxUSph > 0.4 ? 0.1 : 0.01; maxUSph > 0.4 ? 0.1 : 0.01;
// labels and grid // labels and grid
u8g2.setFont(u8g2_font_4x6_tn); u8g2.setFont(u8g2_font_4x6_tn);
char s[10]; char s[10];
for (uint16_t i = 10; i <= maxBarHeight; i += 10) { for (uint16_t i = 10; i <= maxBarHeight; i += 10) {
u8g2.setCursor(0, 63 - i + 3); u8g2.setCursor(0, 63 - i + 3);
if (uSphPerPixel >= 0.1) if (uSphPerPixel >= 0.1)
sprintf(s, "%.0f", i * uSphPerPixel); sprintf(s, "%.0f", i * uSphPerPixel);
else else
sprintf(s, ".%.0f", i * uSphPerPixel * 10); sprintf(s, ".%.0f", i * uSphPerPixel * 10);
u8g2.print(s); u8g2.print(s);
for (int16_t x = 127 - barsPerMinute; x >= 8; x -= barsPerMinute) { for (int16_t x = 127 - barsPerMinute; x >= 8; x -= barsPerMinute) {
u8g2.drawPixel(x, 63 - i); u8g2.drawPixel(x, 63 - i);
} }
} }
// bars // bars
offset = geigerData.getCurrentSample() % samplesPerBar + 1; offset = geigerData.getCurrentSample() % samplesPerBar + 1;
for (int16_t i = 0; i < bars - 1; i++) { for (int16_t i = 0; i < bars - 1; i++) {
const uint32_t prevPulses = geigerData.getPreviousPulses(offset, const uint32_t prevPulses = geigerData.getPreviousPulses(offset,
samplesPerBar); samplesPerBar);
const float uSph = geigerData.toMicroSievertPerHour(prevPulses, const float uSph = geigerData.toMicroSievertPerHour(prevPulses,
samplesPerBar); samplesPerBar);
offset += samplesPerBar; offset += samplesPerBar;
uint16_t barHeight = 1 + (int) ((uSph / uSphPerPixel)); uint16_t barHeight = 1 + (int) ((uSph / uSphPerPixel));
if (barHeight > 40) if (barHeight > 40)
barHeight = 40; barHeight = 40;
u8g2.drawVLine(127 - i, 63 - barHeight, barHeight); u8g2.drawVLine(127 - i, 63 - barHeight, barHeight);
} }
} }
void updateDisplay(GeigerData &geigerData, char uSphStr[16], char cpmStr[16]) { void updateDisplay(GeigerData &geigerData, char uSphStr[16], char cpmStr[16]) {
u8g2.clearBuffer(); u8g2.clearBuffer();
renderDigits(uSphStr, cpmStr); renderDigits(uSphStr, cpmStr);
renderHistoryBarGraph(geigerData); renderHistoryBarGraph(geigerData);
u8g2.sendBuffer(); u8g2.sendBuffer();
} }

View File

@@ -1,104 +1,104 @@
#include <WiFi.h> #include <WiFi.h>
#include "GeigerData.h" #include "GeigerData.h"
#include "credentials.h" #include "credentials.h"
const char *thingsPeakUrl = "api.thingspeak.com"; const char *thingsPeakUrl = "api.thingspeak.com";
bool connect() { bool connect() {
uint16_t retries = 3; uint16_t retries = 3;
while (WiFi.status() != WL_CONNECTED && (--retries) > 0) { while (WiFi.status() != WL_CONNECTED && (--retries) > 0) {
Serial.print("Trying to connect to "); Serial.print("Trying to connect to ");
Serial.print(wifiSsid); Serial.print(wifiSsid);
Serial.print(" ... "); Serial.print(" ... ");
WiFi.begin(wifiSsid, wifiPassword); WiFi.begin(wifiSsid, wifiPassword);
uint16_t waitRemaining = 8; uint16_t waitRemaining = 8;
while (WiFi.status() != WL_CONNECTED && (--waitRemaining) > 0) { while (WiFi.status() != WL_CONNECTED && (--waitRemaining) > 0) {
delay(500); delay(500);
} }
if (WiFi.status() == WL_CONNECTED) { if (WiFi.status() == WL_CONNECTED) {
Serial.println("successful"); Serial.println("successful");
return true; return true;
} else { } else {
Serial.print("failed status="); Serial.print("failed status=");
Serial.println(WiFi.status()); Serial.println(WiFi.status());
} }
} }
return WiFi.status() == WL_CONNECTED; return WiFi.status() == WL_CONNECTED;
} }
void initIngest() { void initIngest() {
connect(); connect();
} }
void deinitIngest() { void deinitIngest() {
if (WiFi.status() == WL_CONNECTED) { if (WiFi.status() == WL_CONNECTED) {
Serial.println("Disconnecting WiFi"); Serial.println("Disconnecting WiFi");
WiFi.disconnect(true, true); WiFi.disconnect(true, true);
} }
} }
void ingest(GeigerData &geigerData, uint16_t intervalSamples) { void ingest(GeigerData &geigerData, uint16_t intervalSamples) {
if (!connect()) if (!connect())
return; return;
WiFiClient client; WiFiClient client;
if (!client.connect(thingsPeakUrl, 80)) { if (!client.connect(thingsPeakUrl, 80)) {
Serial.print("Connecting to "); Serial.print("Connecting to ");
Serial.print(thingsPeakUrl); Serial.print(thingsPeakUrl);
Serial.println(" failed"); Serial.println(" failed");
} else { } else {
const uint32_t pulses = geigerData.getPreviousPulses(1, const uint32_t pulses = geigerData.getPreviousPulses(1,
intervalSamples); intervalSamples);
const uint32_t cpm = uint32_t( const uint32_t cpm = uint32_t(
pulses pulses
/ ((float) intervalSamples * geigerData.sampleSeconds / ((float) intervalSamples * geigerData.sampleSeconds
/ 60.) + 0.5); / 60.) + 0.5);
const float uSph = geigerData.toMicroSievertPerHour(pulses, const float uSph = geigerData.toMicroSievertPerHour(pulses,
intervalSamples); intervalSamples);
const String content = "api_key=" + String(thingspeakApiKey) const String content = "api_key=" + String(thingspeakApiKey)
+ "&field1=" + String(cpm) + "&field2=" + String(uSph, 3); + "&field1=" + String(cpm) + "&field2=" + String(uSph, 3);
Serial.print("Ingesting cpm="); Serial.print("Ingesting cpm=");
Serial.print(cpm); Serial.print(cpm);
Serial.print(" uSph="); Serial.print(" uSph=");
Serial.print(uSph, 3); Serial.print(uSph, 3);
Serial.print(" ... "); Serial.print(" ... ");
client.print("POST /update HTTP/1.1\n"); client.print("POST /update HTTP/1.1\n");
client.print("Host: "); client.print("Host: ");
client.print(thingsPeakUrl); client.print(thingsPeakUrl);
client.print("\n"); client.print("\n");
client.print("Connection: close\n"); client.print("Connection: close\n");
client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: "); client.print("Content-Length: ");
client.print(content.length()); client.print(content.length());
client.print("\n\n"); client.print("\n\n");
client.print(content); client.print(content);
uint16_t timeout = 40; uint16_t timeout = 40;
while (client.available() == 0 && (--timeout) > 0) { while (client.available() == 0 && (--timeout) > 0) {
delay(50); delay(50);
} }
if (client.available() == 0) { if (client.available() == 0) {
Serial.println("failed (no response)"); Serial.println("failed (no response)");
} }
Serial.println("response:"); Serial.println("response:");
while (client.available()) { while (client.available()) {
char c = client.read(); char c = client.read();
Serial.write(c); Serial.write(c);
} }
Serial.println(); Serial.println();
client.stop(); client.stop();
} }
} }

View File

@@ -1,203 +1,219 @@
#include "Arduino.h" #include <Arduino.h>
#include "driver/pcnt.h"
#include "driver/pcnt.h" #include "driver/gpio.h"
#include "driver/gpio.h" #include "driver/rtc_io.h"
#include "driver/rtc_io.h" #include "display.h"
#include "ingest.h"
#include "display.h" #include "GeigerData.h"
#include "ingest.h"
#include "GeigerData.h" void setup() ;
void pulse() ;
// ~400µs high pulses from Geiger tube on GPIO 18 uint32_t calcRemainingWait() ;
#define PULSE_PIN 18 boolean wifiSwitchOn() ;
#define PULSE_GPIO GPIO_NUM_18 uint16_t takeSampleNoSleep() ;
uint16_t takeSampleLowPower() ;
// switch input for WiFi on (low) and off (high) void loop() ;
#define WIFI_SWITCH_PIN 4
#include "Arduino.h"
// Keep 600 samples of 1s in history (10 minutes),
// calculate radiation for russian STS-6 ("CTC-6") Geiger tube #include "driver/pcnt.h"
GeigerData geigerData(600, 1, STS6_CPM_PER_USPH); #include "driver/gpio.h"
#include "driver/rtc_io.h"
// blinky state
int blinky = 1; #include "display.h"
#include "ingest.h"
// Pulses counted by interrupt (while CPU is awake) #include "GeigerData.h"
volatile uint16_t intPulseCount = 0;
// Pulses counted during ESP light sleep // ~400µs high pulses from Geiger tube on GPIO 18
volatile uint16_t pulseCount = 0; #define PULSE_PIN 18
#define PULSE_GPIO GPIO_NUM_18
// Sample duration in µs
const uint32_t sampleMicros = geigerData.sampleSeconds * 1000000; // switch input for WiFi on (low) and off (high)
// Absolute sample interval start micros #define WIFI_SWITCH_PIN 4
uint32_t sampleStart = 0;
// Keep 600 samples of 1s in history (10 minutes),
const int16_t ingestInterval = 60; // calculate radiation for russian STS-6 ("CTC-6") Geiger tube
int16_t ingestCountdown; GeigerData geigerData(600, 1, STS6_CPM_PER_USPH);
void setup() { // blinky state
Serial.begin(921600); int blinky = 1;
Serial.println("Starting!");
// Pulses counted by interrupt (while CPU is awake)
// OLED volatile uint16_t intPulseCount = 0;
initDisplay(); // Pulses counted during ESP light sleep
volatile uint16_t pulseCount = 0;
// blinky
pinMode(LED_BUILTIN, OUTPUT); // Sample duration in µs
const uint32_t sampleMicros = geigerData.sampleSeconds * 1000000;
// Geiger pulse input // Absolute sample interval start micros
pinMode(PULSE_PIN, INPUT); uint32_t sampleStart = 0;
// WiFi switch input const int16_t ingestInterval = 60;
pinMode(WIFI_SWITCH_PIN, INPUT_PULLUP); int16_t ingestCountdown;
if (wifiSwitchOn()) { void setup() {
initIngest(); Serial.begin(921600);
} Serial.println("Starting!");
// initialize sample start // OLED
sampleStart = micros(); initDisplay();
ingestCountdown = ingestInterval;
} // blinky
pinMode(LED_BUILTIN, OUTPUT);
// interrupt handler
void pulse() { // Geiger pulse input
++intPulseCount; pinMode(PULSE_PIN, INPUT);
}
// WiFi switch input
uint32_t calcRemainingWait() { pinMode(WIFI_SWITCH_PIN, INPUT_PULLUP);
const uint32_t remaining = sampleMicros - (micros() - sampleStart);
return remaining > sampleMicros ? 0 : remaining; if (wifiSwitchOn()) {
} initIngest();
}
boolean wifiSwitchOn() {
return digitalRead(WIFI_SWITCH_PIN) == 0; // initialize sample start
} sampleStart = micros();
ingestCountdown = ingestInterval;
uint16_t takeSampleNoSleep() { }
attachInterrupt(PULSE_PIN, pulse, RISING);
// interrupt handler
int32_t remainingWait = calcRemainingWait(); void pulse() {
delayMicroseconds(remainingWait); ++intPulseCount;
sampleStart = micros(); }
noInterrupts();
const int16_t pulses = intPulseCount; uint32_t calcRemainingWait() {
intPulseCount = 0; const uint32_t remaining = sampleMicros - (micros() - sampleStart);
interrupts(); return remaining > sampleMicros ? 0 : remaining;
}
return pulses;
} boolean wifiSwitchOn() {
return digitalRead(WIFI_SWITCH_PIN) == 0;
uint16_t takeSampleLowPower() { }
// To save battery power, use light sleep as much as possible.
// During light sleep, no counters or interrupts are working. uint16_t takeSampleNoSleep() {
// Therefore simply wake up on each pulse signal change. This attachInterrupt(PULSE_PIN, pulse, RISING);
// is fast enough for the low frequencies from a Geiger tube
// (below 2kHz): int32_t remainingWait = calcRemainingWait();
// Wake up at end of sample period. Also delayMicroseconds(remainingWait);
// wake up on pulse getting high and getting low. sampleStart = micros();
// Waking up directly on rising/falling edges is not possible, noInterrupts();
// so wait until level change. const int16_t pulses = intPulseCount;
// Switch to interrupt counting while awake for calculations intPulseCount = 0;
// and display update. interrupts();
// stop interrupt (switch to active wakeup counting loop): return pulses;
detachInterrupt(PULSE_PIN); }
int32_t remainingWait = calcRemainingWait(); uint16_t takeSampleLowPower() {
esp_sleep_wakeup_cause_t cause = ESP_SLEEP_WAKEUP_UNDEFINED; // To save battery power, use light sleep as much as possible.
while (cause != ESP_SLEEP_WAKEUP_TIMER && remainingWait > 0) { // During light sleep, no counters or interrupts are working.
// Therefore simply wake up on each pulse signal change. This
if (digitalRead(PULSE_PIN)) { // is fast enough for the low frequencies from a Geiger tube
// wait for low pulse start or sample time end // (below 2kHz):
esp_sleep_enable_timer_wakeup(remainingWait); // Wake up at end of sample period. Also
gpio_wakeup_enable(PULSE_GPIO, GPIO_INTR_LOW_LEVEL); // wake up on pulse getting high and getting low.
esp_sleep_enable_gpio_wakeup(); // Waking up directly on rising/falling edges is not possible,
esp_light_sleep_start(); // so wait until level change.
cause = esp_sleep_get_wakeup_cause(); // Switch to interrupt counting while awake for calculations
} // and display update.
remainingWait = calcRemainingWait(); // stop interrupt (switch to active wakeup counting loop):
if (cause != ESP_SLEEP_WAKEUP_TIMER && remainingWait > 0) { detachInterrupt(PULSE_PIN);
// wait for high pulse start or sample time end
esp_sleep_enable_timer_wakeup(remainingWait); int32_t remainingWait = calcRemainingWait();
gpio_wakeup_enable(PULSE_GPIO, GPIO_INTR_HIGH_LEVEL); esp_sleep_wakeup_cause_t cause = ESP_SLEEP_WAKEUP_UNDEFINED;
esp_sleep_enable_gpio_wakeup(); while (cause != ESP_SLEEP_WAKEUP_TIMER && remainingWait > 0) {
esp_light_sleep_start();
cause = esp_sleep_get_wakeup_cause(); if (digitalRead(PULSE_PIN)) {
if (cause == ESP_SLEEP_WAKEUP_GPIO) { // wait for low pulse start or sample time end
++pulseCount; esp_sleep_enable_timer_wakeup(remainingWait);
} gpio_wakeup_enable(PULSE_GPIO, GPIO_INTR_LOW_LEVEL);
} esp_sleep_enable_gpio_wakeup();
esp_light_sleep_start();
remainingWait = calcRemainingWait(); cause = esp_sleep_get_wakeup_cause();
} }
// take sample and add to statistics remainingWait = calcRemainingWait();
if (cause != ESP_SLEEP_WAKEUP_TIMER && remainingWait > 0) {
sampleStart = micros(); // wait for high pulse start or sample time end
const int16_t pulses = pulseCount + intPulseCount; esp_sleep_enable_timer_wakeup(remainingWait);
// Serial.print("pc="); gpio_wakeup_enable(PULSE_GPIO, GPIO_INTR_HIGH_LEVEL);
// Serial.print(pulseCount); esp_sleep_enable_gpio_wakeup();
// Serial.print(" ipc="); esp_light_sleep_start();
// Serial.println(intPulseCount); cause = esp_sleep_get_wakeup_cause();
attachInterrupt(PULSE_PIN, pulse, RISING); if (cause == ESP_SLEEP_WAKEUP_GPIO) {
interrupts(); ++pulseCount;
// reset counters AFTER enabling interrupt to avoid double-counting on high signal }
pulseCount = 0; }
intPulseCount = 0;
remainingWait = calcRemainingWait();
return pulses; }
}
// take sample and add to statistics
void loop() {
sampleStart = micros();
// blinky const int16_t pulses = pulseCount + intPulseCount;
// Serial.print("pc=");
digitalWrite(LED_BUILTIN, blinky); // Serial.print(pulseCount);
blinky = !blinky; // Serial.print(" ipc=");
// Serial.println(intPulseCount);
const uint16_t pulses = attachInterrupt(PULSE_PIN, pulse, RISING);
wifiSwitchOn() ? takeSampleNoSleep() : takeSampleLowPower(); interrupts();
// reset counters AFTER enabling interrupt to avoid double-counting on high signal
geigerData.addPulses(pulses); pulseCount = 0;
geigerData.nextSample(); intPulseCount = 0;
if (wifiSwitchOn()) { return pulses;
ingestCountdown--; }
if (ingestCountdown <= 0) {
ingestCountdown = ingestInterval; void loop() {
ingest(geigerData, ingestInterval);
} // blinky
} else {
deinitIngest(); digitalWrite(LED_BUILTIN, blinky);
} blinky = !blinky;
// determine current value, average 6 seconds const uint16_t pulses =
// because this is very near to the 5 seconds history wifiSwitchOn() ? takeSampleNoSleep() : takeSampleLowPower();
// bar width and gives nicely rounded count values
geigerData.addPulses(pulses);
const uint16_t samples = 6; geigerData.nextSample();
const uint32_t prevPulses = geigerData.getPreviousPulses(1, samples);
const uint32_t cpm = prevPulses * (60 / samples); if (wifiSwitchOn()) {
const float uSph = geigerData.toMicroSievertPerHour(prevPulses, samples); ingestCountdown--;
if (ingestCountdown <= 0) {
// test for display layout: ingestCountdown = ingestInterval;
// const uint32_t cpm = 1000*60; ingest(geigerData, ingestInterval);
// const float uSph = geigerData.toMicroSievertPerHour(cpm, 60); }
} else {
char cpmStr[16]; deinitIngest();
ltoa(cpm, cpmStr, 10); }
char uSphStr[16];
sprintf(uSphStr, "%.2f", uSph); // determine current value, average 6 seconds
// because this is very near to the 5 seconds history
// serial output cpm and µS/h // bar width and gives nicely rounded count values
Serial.print(pulses); const uint16_t samples = 6;
Serial.print(" "); const uint32_t prevPulses = geigerData.getPreviousPulses(1, samples);
Serial.print(cpmStr); const uint32_t cpm = prevPulses * (60 / samples);
Serial.print(" "); const float uSph = geigerData.toMicroSievertPerHour(prevPulses, samples);
Serial.println(uSphStr);
// test for display layout:
updateDisplay(geigerData, uSphStr, cpmStr); // const uint32_t cpm = 1000*60;
} // const float uSph = geigerData.toMicroSievertPerHour(cpm, 60);
char cpmStr[16];
ltoa(cpm, cpmStr, 10);
char uSphStr[16];
sprintf(uSphStr, "%.2f", uSph);
// serial output cpm and µS/h
Serial.print(pulses);
Serial.print(" ");
Serial.print(cpmStr);
Serial.print(" ");
Serial.println(uSphStr);
updateDisplay(geigerData, uSphStr, cpmStr);
}

11
test/README Normal file
View File

@@ -0,0 +1,11 @@
This directory is intended for PIO Unit Testing and project tests.
Unit Testing is a software testing method by which individual units of
source code, sets of one or more MCU program modules together with associated
control data, usage procedures, and operating procedures, are tested to
determine whether they are fit for use. Unit testing finds problems early
in the development cycle.
More information about PIO Unit Testing:
- https://docs.platformio.org/page/plus/unit-testing.html