mirror of
https://github.com/grillbaer/esp32-geiger-counter.git
synced 2025-12-23 14:13:58 +01:00
Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
92b42556f8 | ||
|
|
e044850b90 | ||
|
|
cffa2c43f0 | ||
|
|
17845b6f9f | ||
|
|
ed8bc79706 | ||
|
|
bd8315be1b | ||
|
|
2e4d51c08e | ||
|
|
88a98fb8d2 | ||
|
|
38c69ce641 | ||
|
|
4eed311214 | ||
|
|
e2f9e6fb25 | ||
|
|
df997b295b | ||
|
|
82ca57b63b | ||
|
|
24d9f56191 | ||
|
|
748b82144e | ||
|
|
3518e171a1 | ||
|
|
733ca426a4 | ||
|
|
91c7b5e2ef | ||
|
|
ee81a2f49b | ||
|
|
f3faddad05 | ||
|
|
71fff02bf8 | ||
|
|
92a5c24ba3 | ||
|
|
ac595a9b1e | ||
|
|
f90a674bb2 | ||
|
|
72661ef98e | ||
|
|
666c4148db | ||
|
|
4a3ebbf6f3 | ||
|
|
be850974b4 | ||
|
|
4ff29a4c0f | ||
|
|
8ac42248c7 | ||
|
|
0ee5275678 | ||
|
|
3a3e85a8f4 | ||
|
|
387eed0bcf | ||
|
|
17060ad77d | ||
|
|
db6bf5b7e6 | ||
|
|
9e461025c9 | ||
|
|
c329c96790 | ||
|
|
dc485c793c | ||
|
|
3bdbe5f8ef | ||
|
|
261411597b |
82
.cproject
82
.cproject
@@ -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=""${workspace_loc:/esp32-geiger-counter/core/core}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/core/variant}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/ESP32/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/SPI/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/Time}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/U8g2/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/Wire/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/WiFi/src}""/>
|
||||
</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=""${workspace_loc:/esp32-geiger-counter/core/core}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/core/variant}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/ESP32/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/SPI/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/Time}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/U8g2/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/Wire/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/WiFi/src}""/>
|
||||
</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=""${workspace_loc:/esp32-geiger-counter/core/core}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/core/variant}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/ESP32/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/SPI/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/Time}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/U8g2/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/Wire/src}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/esp32-geiger-counter/libraries/WiFi/src}""/>
|
||||
</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>
|
||||
31
.github/workflows/build.yml
vendored
Normal file
31
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
name: PlatformIO CI
|
||||
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Cache pip
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-
|
||||
- name: Cache PlatformIO
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.platformio
|
||||
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
- name: Install PlatformIO
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install --upgrade platformio
|
||||
- name: Run PlatformIO
|
||||
run: pio run
|
||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -1,4 +1,5 @@
|
||||
/Release/
|
||||
/sloeber.ino.cpp
|
||||
/spec.d
|
||||
/credentials.cpp
|
||||
.pio
|
||||
.pioenvs
|
||||
.piolibdeps
|
||||
.vscode
|
||||
secret_*
|
||||
|
||||
75
.project
75
.project
@@ -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>
|
||||
@@ -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__ "${INPUTS}"" 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>
|
||||
@@ -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
|
||||
16
.travis.yml
Normal file
16
.travis.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
language: python
|
||||
python:
|
||||
- "3.7"
|
||||
|
||||
sudo: false
|
||||
cache:
|
||||
directories:
|
||||
- "~/.platformio"
|
||||
- $HOME/.cache/pip
|
||||
|
||||
install:
|
||||
- pip install -U platformio
|
||||
- pio update
|
||||
|
||||
script:
|
||||
- pio run
|
||||
59
README.md
59
README.md
@@ -1,29 +1,68 @@
|
||||
# IoT Geiger Counter with ESP32, OLED Display and Thingspeak Channel
|
||||
 [](https://travis-ci.org/grillbaer/esp32-geiger-counter)
|
||||
|
||||
- Measures radioactive gamma and beta radiation with already quite good resolution at the typical low levels of the background radiation (due to the big STS-6 tube)
|
||||
# IoT Geiger Counter with ESP32, OLED Display, Thingspeak Channel and MQTT
|
||||
|
||||
- Measures radioactive gamma and beta radiation with quite good resolution at the typical low levels of the natural radiation (due to the big STS-6 tube)
|
||||
- Displays the current counts per minute (CPM), estimated dose equivalent rate in micro-Sievert per hour (µS/h) and 10 minutes history with 5 second resolution as bargraph
|
||||

|
||||
- Low-power mode for use with batteries, OLED display and click sounds on, WiFi off
|
||||
- WiFi mode for thingspeak data upload every minute, see https://thingspeak.com/channels/758223
|
||||
- WiFi mode for
|
||||
- optional thingspeak data upload every minute, see https://thingspeak.com/channels/758223
|
||||
[](https://thingspeak.com/channels/758223)
|
||||
- MQTT publishing to a broker every minute with optional SSL/TLS support
|
||||
|
||||
Feel free to use this project as a base for your own projects AT YOUR OWN RISK!
|
||||
|
||||
# Hardware
|
||||
|
||||
- Russian Geiger counter tube STS-6 at 400 V with ~5 MΩ series resistor
|
||||
- Russian Geiger counter tube STS-6 (CTC-6) at 400 V with ~5 MΩ series resistor
|
||||
- High voltage circuit from ArnoR at mikrocontroller.net https://www.mikrocontroller.net/topic/380666, schematic https://www.mikrocontroller.net/attachment/273334/HystereseStepUpTLC555-2.png. *Keep the high-voltage capacitor small to avoid dangerous charges! For safety avoid any contact with the high voltage parts!*
|
||||
- ~400 µs pulse generation using Geiger tube series resistors as voltage divider, high impedance input to darlington transistor and TLC 555 timer for rectangle pulse generation
|
||||
- ESP32 board Wemos Lolin32
|
||||
- ~400 µs pulse generation using Geiger tube series resistors as voltage divider, high impedance input to darlington transistor and TLC 555 timer for rectangle pulse generation (schematic and pulses see below)
|
||||
- ESP32 board EzSBC ESP32-01
|
||||
- OLED 128x64 with controller SH1106 at I2C
|
||||
- Voltage supply from either USB or power supply or 3x 1.5V AAA batteries, circuit works from 3.0 V up to 5.0 V
|
||||
- Pulse input is expected at GPIO 18 (high pulses with at least about 250 µs length)
|
||||
- Voltage supply from either USB or power supply or 3x 1.5V AAA batteries, circuit works stable from 3.0 V up to 5.0 V
|
||||
- Pulse input is expected at GPIO 15 (high pulses with at least about 250 µs length)
|
||||
- Switch for WiFi mode is expected at GPIO 4 (low=WiFi mode, high=low-power mode)
|
||||
- OLED I2C bus is expected at GPIO 22 (SCK) and 21 (SDA)
|
||||
- Pins may be adjusted in `main.cpp`
|
||||
|
||||
# Software
|
||||
|
||||
- Eclipse sloeber project using Arduino library, ESP-IDF for sleep functions and u8g2 for display output
|
||||
- [PlatformIO VSCode project](https://github.com/platformio/platformio-vscode-ide) using [Arduino](https://github.com/arduino/Arduino) library, [Espressif ESP-IDF](https://github.com/espressif/esp-idf) for sleep functions, [U8g2](https://github.com/olikraus/u8g2) for display output and [Arduino-MQTT](https://github.com/256dpi/arduino-mqtt).
|
||||
- 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.
|
||||
- Credentials (WiFi SSID, password, thingspeak channel key) are only declared in `credentials.h` and must be defined in a `credentials.cpp`
|
||||
- Credentials, addresses and user for WiFi, thingspeak channel and mqtt broker are declared in `credentials.h` and replaced by dummy values in `credentials.cpp` by default. Define your real secrets in a sibling file named `secret_credentials.h` (do never commit!). It will be automatically included by `credentials.cpp` if it exists. You may copy `TEMPLATE_secret_credentials.h` as a starting point.
|
||||
|
||||
# MQTT Message Format
|
||||
|
||||
Published messages have the following JSON format:
|
||||
```json
|
||||
{
|
||||
"pulses": 69,
|
||||
"cpm": 69,
|
||||
"uSph": 0.08,
|
||||
"secs": 60
|
||||
}
|
||||
```
|
||||
|
||||
# Geiger Tube Pulse Forming
|
||||
|
||||

|
||||
|
||||
The 5.4 MΩ series resistor is split up to reduce the voltage on each of them. The diode partially removes the noise spikes from the high voltage circuit.
|
||||
|
||||
This is the raw pulse at point A, about 2 V for less than 100 µs, then falling back to 0 V in the next several 100 µs. Remainings of the little noise spikes are still visible:
|
||||
|
||||

|
||||
|
||||
This is the formed pulse at point B, from 5 V to about 0.5 V for 200 µs:
|
||||
|
||||

|
||||
|
||||
It is then fed into a 555 timer to further extend its duration for the ESP32 wake-up from low-power mode.
|
||||
|
||||
# Schematic
|
||||
|
||||
KiCad files are located in folder `hardware`. Currently only schematic, no PCB.
|
||||
|
||||

|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#ifndef CREDENTIALS_H_
|
||||
#define CREDENTIALS_H_
|
||||
|
||||
extern const char *wifiSsid;
|
||||
extern const char *wifiPassword;
|
||||
extern const char *thingspeakApiKey;
|
||||
|
||||
#endif /* CREDENTIALS_H_ */
|
||||
9
hardware/kicad/lib/geiger.dcm
Normal file
9
hardware/kicad/lib/geiger.dcm
Normal file
@@ -0,0 +1,9 @@
|
||||
EESchema-DOCLIB Version 2.0
|
||||
#
|
||||
$CMP MPSA44
|
||||
D 0.5A Ic, 400V Vce, NPN High Voltage Transistor, TO-92
|
||||
K NPN High Voltage Transistor
|
||||
F http://www.onsemi.com/pub_link/Collateral/MPSA42-D.PDF
|
||||
$ENDCMP
|
||||
#
|
||||
#End Doc Library
|
||||
135
hardware/kicad/lib/geiger.lib
Normal file
135
hardware/kicad/lib/geiger.lib
Normal file
@@ -0,0 +1,135 @@
|
||||
EESchema-LIBRARY Version 2.4
|
||||
#encoding utf-8
|
||||
#
|
||||
# ADS1115_ADC_Module
|
||||
#
|
||||
DEF ADS1115_ADC_Module U 0 40 Y Y 1 F N
|
||||
F0 "U" 300 150 50 H V C CNN
|
||||
F1 "ADS1115_ADC_Module" 350 50 50 H V C CNN
|
||||
F2 "" 300 150 50 H I C CNN
|
||||
F3 "" 300 150 50 H I C CNN
|
||||
DRAW
|
||||
S 100 -50 550 -1150 0 1 0 f
|
||||
X A3 1 0 -1050 100 R 50 50 1 1 I
|
||||
X VDD 10 0 -150 100 R 50 50 1 1 W
|
||||
X A2 2 0 -950 100 R 50 50 1 1 I
|
||||
X A1 3 0 -850 100 R 50 50 1 1 I
|
||||
X A0 4 0 -750 100 R 50 50 1 1 I
|
||||
X ALRT 5 650 -650 100 L 50 50 1 1 O
|
||||
X ADDR 6 650 -550 100 L 50 50 1 1 I
|
||||
X SDA 7 650 -450 100 L 50 50 1 1 B
|
||||
X SCL 8 650 -350 100 L 50 50 1 1 I
|
||||
X GND 9 0 -250 100 R 50 50 1 1 W
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# EzSBC_ESP32-01
|
||||
#
|
||||
DEF EzSBC_ESP32-01 U 0 40 Y Y 1 F N
|
||||
F0 "U" 0 900 50 H V C CNN
|
||||
F1 "EzSBC_ESP32-01" 0 750 50 H V C CNN
|
||||
F2 "" 0 900 50 H I C CNN
|
||||
F3 "" 0 900 50 H I C CNN
|
||||
DRAW
|
||||
S -850 1050 850 -1050 0 1 0 f
|
||||
X GND 20 -950 -950 100 R 50 50 0 0 W
|
||||
X GND 21 950 -950 100 L 50 50 0 0 W
|
||||
X Vin 22 950 -850 100 L 50 50 0 0 W
|
||||
X 3.3V 23 950 -750 100 L 50 50 0 0 w
|
||||
X GND 3 -950 750 100 R 50 50 0 0 W
|
||||
X 3.3V 32 950 150 100 L 50 50 0 0 w
|
||||
X Vin 37 950 650 100 L 50 50 0 0 W
|
||||
X GND 38 950 750 100 L 50 50 0 0 W
|
||||
X IO36 1 -950 950 100 R 50 50 1 1 I
|
||||
X IO25/RTC6 10 -950 50 100 R 50 50 1 1 B
|
||||
X IO26/RTC7 11 -950 -50 100 R 50 50 1 1 B
|
||||
X IO27/RTC17 12 -950 -150 100 R 50 50 1 1 B
|
||||
X n.c. 13 -950 -250 100 R 50 50 1 1 N
|
||||
X IO23/VSPI_MOSI 14 -950 -350 100 R 50 50 1 1 B
|
||||
X IO22/I2C_SCL 15 -950 -450 100 R 50 50 1 1 B
|
||||
X IO21/I2C_SDA 16 -950 -550 100 R 50 50 1 1 B
|
||||
X EN/Reset 17 -950 -650 100 R 50 50 1 1 I
|
||||
X 3.3V 18 -950 -750 100 R 50 50 1 1 w
|
||||
X Vin 19 -950 -850 100 R 50 50 1 1 W
|
||||
X IO39 2 -950 850 100 R 50 50 1 1 I
|
||||
X IO0/RTC11/Boot 24 950 -650 100 L 50 50 1 1 B
|
||||
X IO2/RTC12 25 950 -550 100 L 50 50 1 1 B
|
||||
X IO4/RTC10 26 950 -450 100 L 50 50 1 1 B
|
||||
X IO5/VSPI_SS 27 950 -350 100 L 50 50 1 1 B
|
||||
X IO12/RTC15/HSPI_MISO 28 950 -250 100 L 50 50 1 1 B
|
||||
X IO13/RTC14/HSPI_MOSI 29 950 -150 100 L 50 50 1 1 B
|
||||
X IO14/RTC16/HSPI_SCK 30 950 -50 100 L 50 50 1 1 B
|
||||
X IO15/RTC13/HSPI_SS 31 950 50 100 L 50 50 1 1 B
|
||||
X IO16/L1_RED 33 950 250 100 L 50 50 1 1 B
|
||||
X IO17/L1_GREEN 34 950 350 100 L 50 50 1 1 B
|
||||
X IO18/VSPI_SCK/L1_BLUE 35 950 450 100 L 50 50 1 1 B
|
||||
X IO19/VSPI_MISO/L2_BLUE 36 950 550 100 L 50 50 1 1 B
|
||||
X IO3/RX0 39 950 850 100 L 50 50 1 1 I
|
||||
X Vin 4 -950 650 100 R 50 50 1 1 W
|
||||
X IO1/TX0 40 950 950 100 L 50 50 1 1 O
|
||||
X IO35 5 -950 550 100 R 50 50 1 1 I
|
||||
X IO34 6 -950 450 100 R 50 50 1 1 I
|
||||
X IO33/RTC8 7 -950 350 100 R 50 50 1 1 B
|
||||
X IO32/RTC9 8 -950 250 100 R 50 50 1 1 B
|
||||
X 3.3V 9 -950 150 100 R 50 50 1 1 w
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# MPSA44
|
||||
#
|
||||
DEF MPSA44 Q 0 40 Y N 1 F N
|
||||
F0 "Q" 200 75 50 H V L CNN
|
||||
F1 "MPSA44" 200 0 50 H V L CNN
|
||||
F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN
|
||||
F3 "" 0 0 50 H I L CNN
|
||||
$FPLIST
|
||||
TO?92*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
C 50 0 111 0 1 10 N
|
||||
P 2 0 1 0 0 0 25 0 N
|
||||
P 2 0 1 0 25 25 100 100 N
|
||||
P 3 0 1 0 25 -25 100 -100 100 -100 N
|
||||
P 3 0 1 20 25 75 25 -75 25 -75 N
|
||||
P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F
|
||||
X E 1 100 -200 100 U 50 50 1 1 P
|
||||
X B 2 -200 0 200 R 50 50 1 1 I
|
||||
X C 3 100 200 100 D 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Pressure_R_Bridge
|
||||
#
|
||||
DEF Pressure_R_Bridge U 0 40 Y Y 1 F N
|
||||
F0 "U" 650 -850 50 V V C CNN
|
||||
F1 "Pressure_R_Bridge" 550 -850 50 V V C CNN
|
||||
F2 "" 650 -850 50 V I C CNN
|
||||
F3 "" 650 -850 50 V I C CNN
|
||||
DRAW
|
||||
A -450 -850 50 -899 899 0 1 0 N -450 -900 -450 -800
|
||||
S -450 -450 450 -1250 0 1 0 f
|
||||
S -250 -1000 -50 -1100 0 1 0 N
|
||||
S -250 -700 -50 -600 0 1 0 N
|
||||
S 50 -1100 250 -1000 0 1 0 N
|
||||
S 50 -600 250 -700 0 1 0 N
|
||||
P 2 0 1 4 -50 -1050 50 -1050 N
|
||||
P 2 0 1 4 0 -1050 0 -1250 N
|
||||
P 2 0 1 4 0 -450 0 -650 N
|
||||
P 2 0 1 4 50 -650 -50 -650 N
|
||||
P 3 0 1 4 -300 -1250 -300 -1050 -250 -1050 N
|
||||
P 3 0 1 4 -300 -450 -300 -650 -250 -650 N
|
||||
P 3 0 1 0 -200 -1000 -150 -1100 -100 -1000 N
|
||||
P 3 0 1 0 -200 -700 -150 -600 -100 -700 N
|
||||
P 3 0 1 0 100 -1100 150 -1000 200 -1100 N
|
||||
P 3 0 1 0 100 -600 150 -700 200 -600 N
|
||||
P 5 0 1 4 250 -1050 300 -1050 300 -450 300 -650 250 -650 N
|
||||
X A_low 1 -300 -1350 100 U 50 50 1 1 P
|
||||
X A_mid 2 0 -1350 100 U 50 50 1 1 P
|
||||
X n.c. 3 300 -1350 100 U 50 50 1 1 N
|
||||
X AB_top 4 300 -350 100 D 50 50 1 1 P
|
||||
X B_mid 5 0 -350 100 D 50 50 1 1 P
|
||||
X B_low 6 -300 -350 100 D 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
#End Library
|
||||
491
hardware/kicad/project/geiger/geiger-cache.lib
Normal file
491
hardware/kicad/project/geiger/geiger-cache.lib
Normal file
@@ -0,0 +1,491 @@
|
||||
EESchema-LIBRARY Version 2.4
|
||||
#encoding utf-8
|
||||
#
|
||||
# Connector_Conn_01x02_Male
|
||||
#
|
||||
DEF Connector_Conn_01x02_Male J 0 40 Y N 1 F N
|
||||
F0 "J" 0 100 50 H V C CNN
|
||||
F1 "Connector_Conn_01x02_Male" 0 -200 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Connector*:*_1x??_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S 34 -95 0 -105 1 1 6 F
|
||||
S 34 5 0 -5 1 1 6 F
|
||||
P 2 1 1 6 50 -100 34 -100 N
|
||||
P 2 1 1 6 50 0 34 0 N
|
||||
X Pin_1 1 200 0 150 L 50 50 1 1 P
|
||||
X Pin_2 2 200 -100 150 L 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Connector_Conn_01x04_Female
|
||||
#
|
||||
DEF Connector_Conn_01x04_Female J 0 40 Y N 1 F N
|
||||
F0 "J" 0 200 50 H V C CNN
|
||||
F1 "Connector_Conn_01x04_Female" 0 -300 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Connector*:*_1x??_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220
|
||||
A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120
|
||||
A 0 0 20 901 -901 1 1 6 N 0 20 0 -20
|
||||
A 0 100 20 901 -901 1 1 6 N 0 120 0 80
|
||||
P 2 1 1 6 -50 -200 -20 -200 N
|
||||
P 2 1 1 6 -50 -100 -20 -100 N
|
||||
P 2 1 1 6 -50 0 -20 0 N
|
||||
P 2 1 1 6 -50 100 -20 100 N
|
||||
X Pin_1 1 -200 100 150 R 50 50 1 1 P
|
||||
X Pin_2 2 -200 0 150 R 50 50 1 1 P
|
||||
X Pin_3 3 -200 -100 150 R 50 50 1 1 P
|
||||
X Pin_4 4 -200 -200 150 R 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Connector_Screw_Terminal_01x02
|
||||
#
|
||||
DEF Connector_Screw_Terminal_01x02 J 0 40 Y N 1 F N
|
||||
F0 "J" 0 100 50 H V C CNN
|
||||
F1 "Connector_Screw_Terminal_01x02" 0 -200 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
TerminalBlock*:*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
C 0 -100 25 1 1 6 N
|
||||
C 0 0 25 1 1 6 N
|
||||
S -50 50 50 -150 1 1 10 f
|
||||
P 2 1 1 6 -21 -87 13 -120 N
|
||||
P 2 1 1 6 -21 13 13 -20 N
|
||||
P 2 1 1 6 -14 -80 20 -113 N
|
||||
P 2 1 1 6 -14 20 20 -13 N
|
||||
X Pin_1 1 -200 0 150 R 50 50 1 1 P
|
||||
X Pin_2 2 -200 -100 150 R 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_Buzzer
|
||||
#
|
||||
DEF Device_Buzzer BZ 0 1 Y N 1 F N
|
||||
F0 "BZ" 150 50 50 H V L CNN
|
||||
F1 "Device_Buzzer" 150 -50 50 H V L CNN
|
||||
F2 "" -25 100 50 V I C CNN
|
||||
F3 "" -25 100 50 V I C CNN
|
||||
$FPLIST
|
||||
*Buzzer*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
A 0 0 125 -899 899 0 1 0 N 0 -125 0 125
|
||||
P 2 0 1 0 -65 75 -45 75 N
|
||||
P 2 0 1 0 -55 85 -55 65 N
|
||||
P 2 0 1 0 0 125 0 -125 N
|
||||
X - 1 -100 100 100 R 50 50 1 1 P
|
||||
X + 2 -100 -100 100 R 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_C
|
||||
#
|
||||
DEF Device_C C 0 10 N Y 1 F N
|
||||
F0 "C" 25 100 50 H V L CNN
|
||||
F1 "Device_C" 25 -100 50 H V L CNN
|
||||
F2 "" 38 -150 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
C_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
P 2 0 1 20 -80 -30 80 -30 N
|
||||
P 2 0 1 20 -80 30 80 30 N
|
||||
X ~ 1 0 150 110 D 50 50 1 1 P
|
||||
X ~ 2 0 -150 110 U 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_CP
|
||||
#
|
||||
DEF Device_CP C 0 10 N Y 1 F N
|
||||
F0 "C" 25 100 50 H V L CNN
|
||||
F1 "Device_CP" 25 -100 50 H V L CNN
|
||||
F2 "" 38 -150 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
CP_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -90 20 90 40 0 1 0 N
|
||||
S 90 -20 -90 -40 0 1 0 F
|
||||
P 2 0 1 0 -70 90 -30 90 N
|
||||
P 2 0 1 0 -50 110 -50 70 N
|
||||
X ~ 1 0 150 110 D 50 50 1 1 P
|
||||
X ~ 2 0 -150 110 U 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_D
|
||||
#
|
||||
DEF Device_D D 0 40 N N 1 F N
|
||||
F0 "D" 0 100 50 H V C CNN
|
||||
F1 "Device_D" 0 -100 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
TO-???*
|
||||
*_Diode_*
|
||||
*SingleDiode*
|
||||
D_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
P 2 0 1 10 -50 50 -50 -50 N
|
||||
P 2 0 1 0 50 0 -50 0 N
|
||||
P 4 0 1 10 50 50 50 -50 -50 0 50 50 N
|
||||
X K 1 -150 0 100 R 50 50 1 1 P
|
||||
X A 2 150 0 100 L 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_D_Zener
|
||||
#
|
||||
DEF Device_D_Zener D 0 40 N N 1 F N
|
||||
F0 "D" 0 100 50 H V C CNN
|
||||
F1 "Device_D_Zener" 0 -100 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
TO-???*
|
||||
*_Diode_*
|
||||
*SingleDiode*
|
||||
D_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
P 2 0 1 0 50 0 -50 0 N
|
||||
P 3 0 1 10 -50 -50 -50 50 -30 50 N
|
||||
P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N
|
||||
X K 1 -150 0 100 R 50 50 1 1 P
|
||||
X A 2 150 0 100 L 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_L
|
||||
#
|
||||
DEF Device_L L 0 40 N N 1 F N
|
||||
F0 "L" -50 0 50 V V C CNN
|
||||
F1 "Device_L" 75 0 50 V V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Choke_*
|
||||
*Coil*
|
||||
Inductor_*
|
||||
L_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
A 0 -75 25 -899 899 0 1 0 N 0 -100 0 -50
|
||||
A 0 -25 25 -899 899 0 1 0 N 0 -50 0 0
|
||||
A 0 25 25 -899 899 0 1 0 N 0 0 0 50
|
||||
A 0 75 25 -899 899 0 1 0 N 0 50 0 100
|
||||
X 1 1 0 150 50 D 50 50 1 1 P
|
||||
X 2 2 0 -150 50 U 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_R
|
||||
#
|
||||
DEF Device_R R 0 0 N Y 1 F N
|
||||
F0 "R" 80 0 50 V V C CNN
|
||||
F1 "Device_R" 0 0 50 V V C CNN
|
||||
F2 "" -70 0 50 V I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
R_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -40 -100 40 100 0 1 10 N
|
||||
X ~ 1 0 150 50 D 50 50 1 1 P
|
||||
X ~ 2 0 -150 50 U 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Jumper_Jumper_2_Bridged
|
||||
#
|
||||
DEF Jumper_Jumper_2_Bridged JP 0 0 Y N 1 F N
|
||||
F0 "JP" 0 75 50 H V C CNN
|
||||
F1 "Jumper_Jumper_2_Bridged" 0 -100 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Jumper*
|
||||
TestPoint*2Pads*
|
||||
TestPoint*Bridge*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
A 0 -70 100 1269 531 0 1 0 N -60 10 60 10
|
||||
C -80 0 20 0 0 0 N
|
||||
C 80 0 20 0 0 0 N
|
||||
X A 1 -200 0 100 R 50 50 1 1 P
|
||||
X B 2 200 0 100 L 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Jumper_Jumper_2_Open
|
||||
#
|
||||
DEF Jumper_Jumper_2_Open JP 0 0 Y N 1 F N
|
||||
F0 "JP" 0 110 50 H V C CNN
|
||||
F1 "Jumper_Jumper_2_Open" 0 -90 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Jumper*
|
||||
TestPoint*2Pads*
|
||||
TestPoint*Bridge*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
A 0 -30 100 1269 531 0 1 0 N -60 50 60 50
|
||||
C -80 0 20 0 0 0 N
|
||||
C 80 0 20 0 0 0 N
|
||||
X A 1 -200 0 100 R 50 50 1 1 P
|
||||
X B 2 200 0 100 L 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Sensor_Nuclear-Radiation_Detector
|
||||
#
|
||||
DEF Sensor_Nuclear-Radiation_Detector V 0 0 Y N 1 F N
|
||||
F0 "V" 200 50 50 H V L CNN
|
||||
F1 "Sensor_Nuclear-Radiation_Detector" 200 -50 50 H V L CNN
|
||||
F2 "" 200 100 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
DRAW
|
||||
A -125 135 16 -184 1084 0 1 0 N -110 130 -130 150
|
||||
A -205 135 16 -184 1084 1 1 0 N -190 130 -210 150
|
||||
A -175 125 16 1616 -716 1 1 0 N -190 130 -170 110
|
||||
A -165 95 16 -184 1084 1 1 0 N -150 90 -170 110
|
||||
A -165 175 16 -184 1084 1 1 0 N -150 170 -170 190
|
||||
A -135 165 16 1616 -716 1 1 0 N -150 170 -130 150
|
||||
C 0 0 111 0 1 0 N
|
||||
C 55 -35 10 0 1 0 F
|
||||
T 0 80 125 50 0 0 0 + Normal 0 C C
|
||||
P 2 0 1 0 -45 -60 45 -60 N
|
||||
P 2 0 1 0 -45 60 45 60 N
|
||||
P 2 0 1 0 0 -60 0 -100 N
|
||||
P 2 0 1 0 0 100 0 60 N
|
||||
P 4 0 1 0 -100 140 -120 120 -80 100 -100 140 F
|
||||
P 4 1 1 0 -140 100 -160 80 -120 60 -140 100 F
|
||||
X 1 1 0 200 100 D 50 50 1 1 P
|
||||
X 2 2 0 -200 100 U 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Timer_TLC555xP
|
||||
#
|
||||
DEF Timer_TLC555xP U 0 20 Y Y 1 F N
|
||||
F0 "U" -400 350 50 H V L CNN
|
||||
F1 "Timer_TLC555xP" 100 350 50 H V L CNN
|
||||
F2 "Package_DIP:DIP-8_W7.62mm" 650 -400 50 H I C CNN
|
||||
F3 "" 850 -400 50 H I C CNN
|
||||
ALIAS LM555xN ICM7555xP LMC555xN MC1455P TLC555xP NA555P SE555P SA555P
|
||||
$FPLIST
|
||||
DIP*W7.62mm*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -350 -300 350 300 0 1 10 f
|
||||
S -350 -300 350 300 0 1 10 f
|
||||
X GND 1 0 -400 100 U 50 50 0 0 W
|
||||
X VCC 8 0 400 100 D 50 50 0 0 W
|
||||
X TR 2 -500 200 150 R 50 50 1 1 I
|
||||
X Q 3 500 200 150 L 50 50 1 1 O
|
||||
X R 4 -500 -200 150 R 50 50 1 1 I I
|
||||
X CV 5 -500 0 150 R 50 50 1 1 I
|
||||
X THR 6 500 -200 150 L 50 50 1 1 I
|
||||
X DIS 7 500 0 150 L 50 50 1 1 I
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Transistor_BJT_BC328
|
||||
#
|
||||
DEF Transistor_BJT_BC328 Q 0 0 Y N 1 F N
|
||||
F0 "Q" 200 75 50 H V L CNN
|
||||
F1 "Transistor_BJT_BC328" 200 0 50 H V L CNN
|
||||
F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN
|
||||
F3 "" 0 0 50 H I L CNN
|
||||
ALIAS BC556 BC558 BC559 BC560 BC327 BC328
|
||||
$FPLIST
|
||||
TO?92*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
C 50 0 111 0 1 10 N
|
||||
P 2 0 1 0 25 25 100 100 N
|
||||
P 3 0 1 0 25 -25 100 -100 100 -100 N
|
||||
P 3 0 1 20 25 75 25 -75 25 -75 N
|
||||
P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F
|
||||
X C 1 100 200 100 D 50 50 1 1 P
|
||||
X B 2 -200 0 225 R 50 50 1 1 I
|
||||
X E 3 100 -200 100 U 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Transistor_BJT_BC517
|
||||
#
|
||||
DEF Transistor_BJT_BC517 Q 0 0 Y N 1 F N
|
||||
F0 "Q" 200 75 50 H V L CNN
|
||||
F1 "Transistor_BJT_BC517" 200 0 50 H V L CNN
|
||||
F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN
|
||||
F3 "" 0 0 50 H I L CNN
|
||||
$FPLIST
|
||||
TO?92*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
C 50 0 111 0 1 10 N
|
||||
P 2 0 1 0 25 25 100 100 N
|
||||
P 3 0 1 0 25 -25 100 -100 100 -100 N
|
||||
P 3 0 1 0 25 0 100 75 100 100 N
|
||||
P 3 0 1 20 25 75 25 -75 25 -75 N
|
||||
P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F
|
||||
X C 1 100 200 100 D 50 50 1 1 P
|
||||
X B 2 -200 0 225 R 50 50 1 1 I
|
||||
X E 3 100 -200 100 U 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# power_GND
|
||||
#
|
||||
DEF power_GND #PWR 0 0 Y Y 1 F P
|
||||
F0 "#PWR" 0 -250 50 H I C CNN
|
||||
F1 "power_GND" 0 -150 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
DRAW
|
||||
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
|
||||
X GND 1 0 0 0 D 50 50 1 1 W N
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# power_GNDPWR
|
||||
#
|
||||
DEF power_GNDPWR #PWR 0 0 Y Y 1 F P
|
||||
F0 "#PWR" 0 -200 50 H I C CNN
|
||||
F1 "power_GNDPWR" 0 -130 50 H V C CNN
|
||||
F2 "" 0 -50 50 H I C CNN
|
||||
F3 "" 0 -50 50 H I C CNN
|
||||
DRAW
|
||||
P 2 0 1 0 0 -50 0 0 N
|
||||
P 3 0 1 8 -40 -50 -50 -80 -50 -80 N
|
||||
P 3 0 1 8 -20 -50 -30 -80 -30 -80 N
|
||||
P 3 0 1 8 0 -50 -10 -80 -10 -80 N
|
||||
P 3 0 1 8 20 -50 10 -80 10 -80 N
|
||||
P 3 0 1 8 40 -50 -40 -50 -40 -50 N
|
||||
P 4 0 1 8 40 -50 30 -80 30 -80 30 -80 N
|
||||
X GNDPWR 1 0 0 0 D 50 50 1 1 W N
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# power_PWR_FLAG
|
||||
#
|
||||
DEF power_PWR_FLAG #FLG 0 0 N N 1 F P
|
||||
F0 "#FLG" 0 75 50 H I C CNN
|
||||
F1 "power_PWR_FLAG" 0 150 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
DRAW
|
||||
P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N
|
||||
X pwr 1 0 0 0 U 50 50 0 0 w
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# power_VCC
|
||||
#
|
||||
DEF power_VCC #PWR 0 0 Y Y 1 F P
|
||||
F0 "#PWR" 0 -150 50 H I C CNN
|
||||
F1 "power_VCC" 0 150 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
DRAW
|
||||
P 2 0 1 0 -30 50 0 100 N
|
||||
P 2 0 1 0 0 0 0 100 N
|
||||
P 2 0 1 0 0 100 30 50 N
|
||||
X VCC 1 0 0 0 U 50 50 1 1 W N
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# project_EzSBC_ESP32-01
|
||||
#
|
||||
DEF project_EzSBC_ESP32-01 U 0 40 Y Y 1 F N
|
||||
F0 "U" 0 900 50 H V C CNN
|
||||
F1 "project_EzSBC_ESP32-01" 0 750 50 H V C CNN
|
||||
F2 "" 0 900 50 H I C CNN
|
||||
F3 "" 0 900 50 H I C CNN
|
||||
DRAW
|
||||
S -850 1050 850 -1050 0 1 0 f
|
||||
X GND 20 -950 -950 100 R 50 50 0 0 W
|
||||
X GND 21 950 -950 100 L 50 50 0 0 W
|
||||
X Vin 22 950 -850 100 L 50 50 0 0 W
|
||||
X 3.3V 23 950 -750 100 L 50 50 0 0 w
|
||||
X GND 3 -950 750 100 R 50 50 0 0 W
|
||||
X 3.3V 32 950 150 100 L 50 50 0 0 w
|
||||
X Vin 37 950 650 100 L 50 50 0 0 W
|
||||
X GND 38 950 750 100 L 50 50 0 0 W
|
||||
X IO36 1 -950 950 100 R 50 50 1 1 I
|
||||
X IO25/RTC6 10 -950 50 100 R 50 50 1 1 B
|
||||
X IO26/RTC7 11 -950 -50 100 R 50 50 1 1 B
|
||||
X IO27/RTC17 12 -950 -150 100 R 50 50 1 1 B
|
||||
X n.c. 13 -950 -250 100 R 50 50 1 1 N
|
||||
X IO23/VSPI_MOSI 14 -950 -350 100 R 50 50 1 1 B
|
||||
X IO22/I2C_SCL 15 -950 -450 100 R 50 50 1 1 B
|
||||
X IO21/I2C_SDA 16 -950 -550 100 R 50 50 1 1 B
|
||||
X EN/Reset 17 -950 -650 100 R 50 50 1 1 I
|
||||
X 3.3V 18 -950 -750 100 R 50 50 1 1 w
|
||||
X Vin 19 -950 -850 100 R 50 50 1 1 W
|
||||
X IO39 2 -950 850 100 R 50 50 1 1 I
|
||||
X IO0/RTC11/Boot 24 950 -650 100 L 50 50 1 1 B
|
||||
X IO2/RTC12 25 950 -550 100 L 50 50 1 1 B
|
||||
X IO4/RTC10 26 950 -450 100 L 50 50 1 1 B
|
||||
X IO5/VSPI_SS 27 950 -350 100 L 50 50 1 1 B
|
||||
X IO12/RTC15/HSPI_MISO 28 950 -250 100 L 50 50 1 1 B
|
||||
X IO13/RTC14/HSPI_MOSI 29 950 -150 100 L 50 50 1 1 B
|
||||
X IO14/RTC16/HSPI_SCK 30 950 -50 100 L 50 50 1 1 B
|
||||
X IO15/RTC13/HSPI_SS 31 950 50 100 L 50 50 1 1 B
|
||||
X IO16/L1_RED 33 950 250 100 L 50 50 1 1 B
|
||||
X IO17/L1_GREEN 34 950 350 100 L 50 50 1 1 B
|
||||
X IO18/VSPI_SCK/L1_BLUE 35 950 450 100 L 50 50 1 1 B
|
||||
X IO19/VSPI_MISO/L2_BLUE 36 950 550 100 L 50 50 1 1 B
|
||||
X IO3/RX0 39 950 850 100 L 50 50 1 1 I
|
||||
X Vin 4 -950 650 100 R 50 50 1 1 W
|
||||
X IO1/TX0 40 950 950 100 L 50 50 1 1 O
|
||||
X IO35 5 -950 550 100 R 50 50 1 1 I
|
||||
X IO34 6 -950 450 100 R 50 50 1 1 I
|
||||
X IO33/RTC8 7 -950 350 100 R 50 50 1 1 B
|
||||
X IO32/RTC9 8 -950 250 100 R 50 50 1 1 B
|
||||
X 3.3V 9 -950 150 100 R 50 50 1 1 w
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# project_MPSA44
|
||||
#
|
||||
DEF project_MPSA44 Q 0 40 Y N 1 F N
|
||||
F0 "Q" 200 75 50 H V L CNN
|
||||
F1 "project_MPSA44" 200 0 50 H V L CNN
|
||||
F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN
|
||||
F3 "" 0 0 50 H I L CNN
|
||||
$FPLIST
|
||||
TO?92*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
C 50 0 111 0 1 10 N
|
||||
P 2 0 1 0 0 0 25 0 N
|
||||
P 2 0 1 0 25 25 100 100 N
|
||||
P 3 0 1 0 25 -25 100 -100 100 -100 N
|
||||
P 3 0 1 20 25 75 25 -75 25 -75 N
|
||||
P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F
|
||||
X E 1 100 -200 100 U 50 50 1 1 P
|
||||
X B 2 -200 0 200 R 50 50 1 1 I
|
||||
X C 3 100 200 100 D 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
#End Library
|
||||
1
hardware/kicad/project/geiger/geiger.kicad_pcb
Normal file
1
hardware/kicad/project/geiger/geiger.kicad_pcb
Normal file
@@ -0,0 +1 @@
|
||||
(kicad_pcb (version 4) (host kicad "dummy file") )
|
||||
33
hardware/kicad/project/geiger/geiger.pro
Normal file
33
hardware/kicad/project/geiger/geiger.pro
Normal file
@@ -0,0 +1,33 @@
|
||||
update=22/05/2015 07:44:53
|
||||
version=1
|
||||
last_client=kicad
|
||||
[general]
|
||||
version=1
|
||||
RootSch=
|
||||
BoardNm=
|
||||
[pcbnew]
|
||||
version=1
|
||||
LastNetListRead=
|
||||
UseCmpFile=1
|
||||
PadDrill=0.600000000000
|
||||
PadDrillOvalY=0.600000000000
|
||||
PadSizeH=1.500000000000
|
||||
PadSizeV=1.500000000000
|
||||
PcbTextSizeV=1.500000000000
|
||||
PcbTextSizeH=1.500000000000
|
||||
PcbTextThickness=0.300000000000
|
||||
ModuleTextSizeV=1.000000000000
|
||||
ModuleTextSizeH=1.000000000000
|
||||
ModuleTextSizeThickness=0.150000000000
|
||||
SolderMaskClearance=0.000000000000
|
||||
SolderMaskMinWidth=0.000000000000
|
||||
DrawSegmentWidth=0.200000000000
|
||||
BoardOutlineThickness=0.100000000000
|
||||
ModuleOutlineThickness=0.150000000000
|
||||
[cvpcb]
|
||||
version=1
|
||||
NetIExt=net
|
||||
[eeschema]
|
||||
version=1
|
||||
LibDir=
|
||||
[eeschema/libraries]
|
||||
1126
hardware/kicad/project/geiger/geiger.sch
Normal file
1126
hardware/kicad/project/geiger/geiger.sch
Normal file
File diff suppressed because it is too large
Load Diff
3
hardware/kicad/project/geiger/sym-lib-table
Normal file
3
hardware/kicad/project/geiger/sym-lib-table
Normal file
@@ -0,0 +1,3 @@
|
||||
(sym_lib_table
|
||||
(lib (name project)(type Legacy)(uri C:/dev/git/esp32-geiger-counter/hardware/kicad/lib/geiger.lib)(options "")(descr ""))
|
||||
)
|
||||
@@ -1,37 +1,37 @@
|
||||
#ifndef GEIGERDATA_H_
|
||||
#define GEIGERDATA_H_
|
||||
|
||||
#include "Arduino.h"
|
||||
|
||||
// Russion STS-6 ("CTC-6") Geiger tube:
|
||||
// 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;
|
||||
|
||||
// Holds pulse counter history and performs calculations
|
||||
class GeigerData {
|
||||
public:
|
||||
const uint16_t sampleCount;
|
||||
const uint16_t sampleSeconds;
|
||||
const float cpm_per_uSph;
|
||||
|
||||
private:
|
||||
uint16_t currentSample;
|
||||
uint16_t *pulsesPerSample;
|
||||
uint16_t next(uint16_t index);
|
||||
uint16_t prev(uint16_t index);
|
||||
|
||||
public:
|
||||
|
||||
GeigerData(uint16_t sampleCount, uint16_t sampleSeconds,
|
||||
float cpm_per_uSph);
|
||||
virtual ~GeigerData();
|
||||
|
||||
virtual void addPulses(uint16_t pulses);
|
||||
virtual void nextSample();
|
||||
|
||||
virtual uint16_t getCurrentSample();
|
||||
virtual uint32_t getPreviousPulses(uint16_t offset, uint16_t samples);
|
||||
virtual float toMicroSievertPerHour(uint32_t pulses, uint16_t samples);
|
||||
};
|
||||
|
||||
#endif /* GEIGERDATA_H_ */
|
||||
#ifndef GEIGERDATA_H_
|
||||
#define GEIGERDATA_H_
|
||||
|
||||
#include "Arduino.h"
|
||||
|
||||
// Russion STS-6 ("CTC-6") Geiger tube:
|
||||
// N = (2.28-3.42)*10^3 at 0.36 µR/h; Nmax = 6*10^4; Nf = 110
|
||||
const float STS6_CPM_PER_USPH = 825; // 875 is a little bit too low compared to official station
|
||||
|
||||
// Holds pulse counter history and performs calculations
|
||||
class GeigerData
|
||||
{
|
||||
public:
|
||||
const uint16_t sampleCount;
|
||||
const uint16_t sampleSeconds;
|
||||
const float cpm_per_uSph;
|
||||
|
||||
private:
|
||||
uint16_t currentSample;
|
||||
uint16_t *pulsesPerSample;
|
||||
uint16_t next(uint16_t index);
|
||||
uint16_t prev(uint16_t index);
|
||||
|
||||
public:
|
||||
GeigerData(uint16_t sampleCount, uint16_t sampleSeconds,
|
||||
float cpm_per_uSph);
|
||||
virtual ~GeigerData();
|
||||
|
||||
virtual void addPulses(uint16_t pulses);
|
||||
virtual void nextSample();
|
||||
|
||||
virtual uint16_t getCurrentSample();
|
||||
virtual uint32_t getPreviousPulses(uint16_t offset, uint16_t samples);
|
||||
virtual float toMicroSievertPerHour(uint32_t pulses, uint16_t samples);
|
||||
};
|
||||
|
||||
#endif /* GEIGERDATA_H_ */
|
||||
39
include/README
Normal file
39
include/README
Normal 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
|
||||
15
include/credentials.h
Normal file
15
include/credentials.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef CREDENTIALS_H_
|
||||
#define CREDENTIALS_H_
|
||||
|
||||
extern const char *wifiSsid;
|
||||
extern const char *wifiPassword;
|
||||
extern const char *thingspeakApiKey;
|
||||
|
||||
extern const char *mqttHost;
|
||||
extern int mqttPort;
|
||||
extern const char *mqttTlsServerRootCert;
|
||||
extern const char *mqttUser;
|
||||
extern const char *mqttPassword;
|
||||
extern const char *mqttTopic;
|
||||
|
||||
#endif /* CREDENTIALS_H_ */
|
||||
@@ -1,9 +1,9 @@
|
||||
#ifndef DISPLAY_H_
|
||||
#define DISPLAY_H_
|
||||
|
||||
#include "GeigerData.h"
|
||||
|
||||
void initDisplay();
|
||||
void updateDisplay(GeigerData &geigerData, char uSphStr[16], char cpmStr[16]);
|
||||
|
||||
#endif /* DISPLAY_H_ */
|
||||
#ifndef DISPLAY_H_
|
||||
#define DISPLAY_H_
|
||||
|
||||
#include "GeigerData.h"
|
||||
|
||||
void initDisplay();
|
||||
void updateDisplay(GeigerData &geigerData, char uSphStr[16], char cpmStr[16]);
|
||||
|
||||
#endif /* DISPLAY_H_ */
|
||||
12
include/ingest.h
Normal file
12
include/ingest.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef INGEST_H_
|
||||
#define INGEST_H_
|
||||
|
||||
#include "GeigerData.h"
|
||||
|
||||
void initIngest();
|
||||
void loopIngest();
|
||||
void deinitIngest();
|
||||
void ingestToThingspeak(GeigerData &geigerData, uint16_t intervalSamples);
|
||||
void ingestToMqtt(GeigerData &geigerData, uint16_t intervalSamples);
|
||||
|
||||
#endif /* INGEST_H_ */
|
||||
104
ingest.cpp
104
ingest.cpp
@@ -1,104 +0,0 @@
|
||||
#include <WiFi.h>
|
||||
|
||||
#include "GeigerData.h"
|
||||
|
||||
#include "credentials.h"
|
||||
|
||||
const char *thingsPeakUrl = "api.thingspeak.com";
|
||||
|
||||
bool connect() {
|
||||
uint16_t retries = 3;
|
||||
while (WiFi.status() != WL_CONNECTED && (--retries) > 0) {
|
||||
Serial.print("Trying to connect to ");
|
||||
Serial.print(wifiSsid);
|
||||
Serial.print(" ... ");
|
||||
WiFi.begin(wifiSsid, wifiPassword);
|
||||
uint16_t waitRemaining = 8;
|
||||
while (WiFi.status() != WL_CONNECTED && (--waitRemaining) > 0) {
|
||||
delay(500);
|
||||
}
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
Serial.println("successful");
|
||||
return true;
|
||||
} else {
|
||||
Serial.print("failed status=");
|
||||
Serial.println(WiFi.status());
|
||||
}
|
||||
}
|
||||
|
||||
return WiFi.status() == WL_CONNECTED;
|
||||
}
|
||||
|
||||
void initIngest() {
|
||||
connect();
|
||||
}
|
||||
|
||||
void deinitIngest() {
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
Serial.println("Disconnecting WiFi");
|
||||
WiFi.disconnect(true, true);
|
||||
}
|
||||
}
|
||||
|
||||
void ingest(GeigerData &geigerData, uint16_t intervalSamples) {
|
||||
if (!connect())
|
||||
return;
|
||||
|
||||
WiFiClient client;
|
||||
if (!client.connect(thingsPeakUrl, 80)) {
|
||||
Serial.print("Connecting to ");
|
||||
Serial.print(thingsPeakUrl);
|
||||
Serial.println(" failed");
|
||||
} else {
|
||||
|
||||
const uint32_t pulses = geigerData.getPreviousPulses(1,
|
||||
intervalSamples);
|
||||
const uint32_t cpm = uint32_t(
|
||||
pulses
|
||||
/ ((float) intervalSamples * geigerData.sampleSeconds
|
||||
/ 60.) + 0.5);
|
||||
const float uSph = geigerData.toMicroSievertPerHour(pulses,
|
||||
intervalSamples);
|
||||
|
||||
const String content = "api_key=" + String(thingspeakApiKey)
|
||||
+ "&field1=" + String(cpm) + "&field2=" + String(uSph, 3);
|
||||
|
||||
Serial.print("Ingesting cpm=");
|
||||
Serial.print(cpm);
|
||||
Serial.print(" uSph=");
|
||||
Serial.print(uSph, 3);
|
||||
Serial.print(" ... ");
|
||||
|
||||
client.print("POST /update HTTP/1.1\n");
|
||||
|
||||
client.print("Host: ");
|
||||
client.print(thingsPeakUrl);
|
||||
client.print("\n");
|
||||
|
||||
client.print("Connection: close\n");
|
||||
|
||||
client.print("Content-Type: application/x-www-form-urlencoded\n");
|
||||
client.print("Content-Length: ");
|
||||
client.print(content.length());
|
||||
client.print("\n\n");
|
||||
|
||||
client.print(content);
|
||||
|
||||
uint16_t timeout = 40;
|
||||
while (client.available() == 0 && (--timeout) > 0) {
|
||||
delay(50);
|
||||
}
|
||||
if (client.available() == 0) {
|
||||
Serial.println("failed (no response)");
|
||||
}
|
||||
|
||||
Serial.println("response:");
|
||||
while (client.available()) {
|
||||
char c = client.read();
|
||||
Serial.write(c);
|
||||
}
|
||||
Serial.println();
|
||||
|
||||
client.stop();
|
||||
}
|
||||
}
|
||||
10
ingest.h
10
ingest.h
@@ -1,10 +0,0 @@
|
||||
#ifndef INGEST_H_
|
||||
#define INGEST_H_
|
||||
|
||||
#include "GeigerData.h"
|
||||
|
||||
void initIngest();
|
||||
void deinitIngest();
|
||||
void ingest(GeigerData &geigerData, uint16_t intervalSamples);
|
||||
|
||||
#endif /* INGEST_H_ */
|
||||
46
lib/README
Normal file
46
lib/README
Normal 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
|
||||
BIN
media/geiger-signal-formed.png
Normal file
BIN
media/geiger-signal-formed.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
BIN
media/geiger-signal-raw.png
Normal file
BIN
media/geiger-signal-raw.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
BIN
media/kicad-circuit-sketch.png
Normal file
BIN
media/kicad-circuit-sketch.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 110 KiB |
BIN
media/pulse-forming-schematic.png
Normal file
BIN
media/pulse-forming-schematic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 163 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 350 KiB |
18
platformio.ini
Normal file
18
platformio.ini
Normal 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 = 115200
|
||||
lib_deps =
|
||||
U8g2@^2.27.6
|
||||
256dpi/MQTT@^2.4.7
|
||||
@@ -1,53 +1,62 @@
|
||||
#include "GeigerData.h"
|
||||
|
||||
GeigerData::GeigerData(uint16_t sampleCount, uint16_t sampleSeconds,
|
||||
float cpm_per_uSph) :
|
||||
sampleCount(sampleCount), sampleSeconds(sampleSeconds), cpm_per_uSph(
|
||||
cpm_per_uSph), pulsesPerSample(new uint16_t[sampleCount]) {
|
||||
currentSample = 0;
|
||||
for (int i = 0; i < sampleCount; i++) {
|
||||
pulsesPerSample[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
GeigerData::~GeigerData() {
|
||||
delete[] pulsesPerSample;
|
||||
}
|
||||
|
||||
uint16_t GeigerData::next(uint16_t index) {
|
||||
return index + 1 < sampleCount ? index + 1 : 0;
|
||||
}
|
||||
|
||||
uint16_t GeigerData::prev(uint16_t index) {
|
||||
return index > 0 ? index - 1 : sampleCount - 1;
|
||||
}
|
||||
|
||||
void GeigerData::addPulses(uint16_t pulses) {
|
||||
if (pulsesPerSample[currentSample] <= UINT16_MAX - pulses)
|
||||
pulsesPerSample[currentSample] += pulses;
|
||||
}
|
||||
|
||||
void GeigerData::nextSample() {
|
||||
currentSample = next(currentSample);
|
||||
pulsesPerSample[currentSample] = 0;
|
||||
}
|
||||
|
||||
uint16_t GeigerData::getCurrentSample() {
|
||||
return currentSample;
|
||||
}
|
||||
|
||||
uint32_t GeigerData::getPreviousPulses(uint16_t offset, uint16_t samples) {
|
||||
uint32_t pulses = 0;
|
||||
uint16_t index = (currentSample + sampleCount - offset) % sampleCount;
|
||||
for (uint16_t i = 0; i < samples; i++) {
|
||||
pulses += pulsesPerSample[index];
|
||||
index = prev(index);
|
||||
}
|
||||
|
||||
return pulses;
|
||||
}
|
||||
|
||||
float GeigerData::toMicroSievertPerHour(uint32_t pulses, uint16_t samples) {
|
||||
float cpm = pulses / (sampleSeconds / 60. * samples);
|
||||
return cpm / cpm_per_uSph;
|
||||
}
|
||||
#include "GeigerData.h"
|
||||
|
||||
GeigerData::GeigerData(uint16_t sampleCount, uint16_t sampleSeconds,
|
||||
float cpm_per_uSph) : sampleCount(sampleCount), sampleSeconds(sampleSeconds), cpm_per_uSph(cpm_per_uSph), pulsesPerSample(new uint16_t[sampleCount])
|
||||
{
|
||||
currentSample = 0;
|
||||
for (int i = 0; i < sampleCount; i++)
|
||||
{
|
||||
pulsesPerSample[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
GeigerData::~GeigerData()
|
||||
{
|
||||
delete[] pulsesPerSample;
|
||||
}
|
||||
|
||||
uint16_t GeigerData::next(uint16_t index)
|
||||
{
|
||||
return index + 1 < sampleCount ? index + 1 : 0;
|
||||
}
|
||||
|
||||
uint16_t GeigerData::prev(uint16_t index)
|
||||
{
|
||||
return index > 0 ? index - 1 : sampleCount - 1;
|
||||
}
|
||||
|
||||
void GeigerData::addPulses(uint16_t pulses)
|
||||
{
|
||||
if (pulsesPerSample[currentSample] <= UINT16_MAX - pulses)
|
||||
pulsesPerSample[currentSample] += pulses;
|
||||
}
|
||||
|
||||
void GeigerData::nextSample()
|
||||
{
|
||||
currentSample = next(currentSample);
|
||||
pulsesPerSample[currentSample] = 0;
|
||||
}
|
||||
|
||||
uint16_t GeigerData::getCurrentSample()
|
||||
{
|
||||
return currentSample;
|
||||
}
|
||||
|
||||
uint32_t GeigerData::getPreviousPulses(uint16_t offset, uint16_t samples)
|
||||
{
|
||||
uint32_t pulses = 0;
|
||||
uint16_t index = (currentSample + sampleCount - offset) % sampleCount;
|
||||
for (uint16_t i = 0; i < samples; i++)
|
||||
{
|
||||
pulses += pulsesPerSample[index];
|
||||
index = prev(index);
|
||||
}
|
||||
|
||||
return pulses;
|
||||
}
|
||||
|
||||
float GeigerData::toMicroSievertPerHour(uint32_t pulses, uint16_t samples)
|
||||
{
|
||||
float cpm = pulses / (sampleSeconds / 60. * samples);
|
||||
return cpm / cpm_per_uSph;
|
||||
}
|
||||
50
src/TEMPLATE_secret_credentials.h
Normal file
50
src/TEMPLATE_secret_credentials.h
Normal file
@@ -0,0 +1,50 @@
|
||||
#define _SECRET_CREDENTIALS
|
||||
|
||||
// Copy this file to secret_credentials.h and adjust for
|
||||
// your needs and environment.
|
||||
|
||||
// !!! NEVER COMMIT YOUR SECRETS !!!
|
||||
|
||||
const char *wifiSsid = "MyWiFi";
|
||||
const char *wifiPassword = "mypassword";
|
||||
|
||||
|
||||
// ThingsPeak Channel
|
||||
|
||||
// set key to NULL or empty string to disable ThingsPeak ingest:
|
||||
const char *thingspeakApiKey = "MYAPIKEY";
|
||||
|
||||
|
||||
// MQTT Broker
|
||||
|
||||
// set host to NULL or empty string to disable MQTT publishing:
|
||||
const char *mqttHost = "my.mqtt.server";
|
||||
int mqttPort = 1833;
|
||||
// set MQTT server's root CA cert to NULL or empty string to disable MQTT TLS/SSL:
|
||||
const char *mqttTlsServerRootCert = R""""(
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
|
||||
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
|
||||
Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
|
||||
MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
|
||||
A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
|
||||
hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
|
||||
v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
|
||||
eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
|
||||
tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
|
||||
C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
|
||||
zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
|
||||
mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
|
||||
V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
|
||||
bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
|
||||
3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
|
||||
J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
|
||||
291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
|
||||
ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
|
||||
AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
|
||||
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
|
||||
-----END CERTIFICATE-----
|
||||
)"""";
|
||||
const char *mqttUser = "user";
|
||||
const char *mqttPassword = "mypassword";
|
||||
const char *mqttTopic = "home/radioactivity";
|
||||
22
src/credentials.cpp
Normal file
22
src/credentials.cpp
Normal file
@@ -0,0 +1,22 @@
|
||||
#include "credentials.h"
|
||||
|
||||
#if __has_include("secret_credentials.h")
|
||||
// keep secret credentials in an external file that is never committed:
|
||||
#include "secret_credentials.h"
|
||||
#endif
|
||||
|
||||
#ifndef _SECRET_CREDENTIALS
|
||||
|
||||
// use dummy credentials to make it compilable without secrets
|
||||
const char *wifiSsid = "unset-wifi-ssid";
|
||||
const char *wifiPassword = "unset-password";
|
||||
const char *thingspeakApiKey = ""; // empty to disable thinkspeak
|
||||
|
||||
const char *mqttHost = ""; // empty to disable MQTT
|
||||
int mqttPort = 1833;
|
||||
extern const char *mqttTlsServerRootCert = ""; // empty to disable TLS
|
||||
const char *mqttUser = "user";
|
||||
const char *mqttPassword = "unset-password";
|
||||
const char *mqttTopic = "home/geiger/radioactivity";
|
||||
|
||||
#endif
|
||||
@@ -1,100 +1,106 @@
|
||||
#include "U8g2lib.h"
|
||||
|
||||
#include "display.h"
|
||||
|
||||
// OLED display 128x64 with SH1106 controller
|
||||
// on I2C GPIOs SCL 22 and SDA 21
|
||||
U8G2_SH1106_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, 22, 21);
|
||||
|
||||
void initDisplay() {
|
||||
// high I2c clock still results in about 100ms buffer transmission to OLED:
|
||||
u8g2.setBusClock(1000000);
|
||||
u8g2.begin();
|
||||
}
|
||||
|
||||
void renderDigits(char uSphStr[16], char cpmStr[16]) {
|
||||
uint16_t y = 14;
|
||||
uint16_t xCpm = 56;
|
||||
uint16_t xUSph = 127;
|
||||
|
||||
u8g2.setFont(u8g2_font_crox4hb_tr);
|
||||
u8g2_uint_t w = u8g2.getStrWidth(uSphStr);
|
||||
u8g2.setCursor(xUSph - w, y);
|
||||
u8g2.print(uSphStr);
|
||||
|
||||
w = u8g2.getStrWidth(cpmStr);
|
||||
u8g2.setCursor(xCpm - w, y);
|
||||
u8g2.print(cpmStr);
|
||||
|
||||
y = 21;
|
||||
u8g2.setFont(u8g2_font_4x6_tf);
|
||||
w = u8g2.getStrWidth("µS/h");
|
||||
u8g2.setCursor(xUSph - w, y);
|
||||
u8g2.print("µS/h");
|
||||
|
||||
w = u8g2.getStrWidth("cnt/min");
|
||||
u8g2.setCursor(xCpm - w, y);
|
||||
u8g2.print("cnt/min");
|
||||
}
|
||||
|
||||
void renderHistoryBarGraph(GeigerData &geigerData) {
|
||||
const uint16_t bars = 120;
|
||||
const uint16_t maxBarHeight = 40;
|
||||
const uint16_t samplesPerBar = geigerData.sampleCount / bars;
|
||||
const uint16_t barsPerMinute = 60
|
||||
/ (samplesPerBar * geigerData.sampleSeconds);
|
||||
|
||||
// determine max value for y scale:
|
||||
uint16_t offset = geigerData.getCurrentSample() % samplesPerBar + 1;
|
||||
uint32_t maxPulses = 0;
|
||||
for (int16_t i = 0; i < bars - 1; i++) {
|
||||
const uint32_t prevPulses = geigerData.getPreviousPulses(offset,
|
||||
samplesPerBar);
|
||||
if (prevPulses > maxPulses)
|
||||
maxPulses = prevPulses;
|
||||
|
||||
offset += samplesPerBar;
|
||||
}
|
||||
|
||||
const float maxUSph = geigerData.toMicroSievertPerHour(maxPulses,
|
||||
samplesPerBar);
|
||||
const float uSphPerPixel = maxUSph > 40. ? 10. : maxUSph > 4. ? 1. :
|
||||
maxUSph > 0.4 ? 0.1 : 0.01;
|
||||
// labels and grid
|
||||
u8g2.setFont(u8g2_font_4x6_tn);
|
||||
char s[10];
|
||||
for (uint16_t i = 10; i <= maxBarHeight; i += 10) {
|
||||
u8g2.setCursor(0, 63 - i + 3);
|
||||
if (uSphPerPixel >= 0.1)
|
||||
sprintf(s, "%.0f", i * uSphPerPixel);
|
||||
else
|
||||
sprintf(s, ".%.0f", i * uSphPerPixel * 10);
|
||||
|
||||
u8g2.print(s);
|
||||
for (int16_t x = 127 - barsPerMinute; x >= 8; x -= barsPerMinute) {
|
||||
u8g2.drawPixel(x, 63 - i);
|
||||
}
|
||||
}
|
||||
|
||||
// bars
|
||||
offset = geigerData.getCurrentSample() % samplesPerBar + 1;
|
||||
for (int16_t i = 0; i < bars - 1; i++) {
|
||||
const uint32_t prevPulses = geigerData.getPreviousPulses(offset,
|
||||
samplesPerBar);
|
||||
const float uSph = geigerData.toMicroSievertPerHour(prevPulses,
|
||||
samplesPerBar);
|
||||
offset += samplesPerBar;
|
||||
uint16_t barHeight = 1 + (int) ((uSph / uSphPerPixel));
|
||||
if (barHeight > 40)
|
||||
barHeight = 40;
|
||||
|
||||
u8g2.drawVLine(127 - i, 63 - barHeight, barHeight);
|
||||
}
|
||||
}
|
||||
|
||||
void updateDisplay(GeigerData &geigerData, char uSphStr[16], char cpmStr[16]) {
|
||||
u8g2.clearBuffer();
|
||||
renderDigits(uSphStr, cpmStr);
|
||||
renderHistoryBarGraph(geigerData);
|
||||
u8g2.sendBuffer();
|
||||
}
|
||||
#include "U8g2lib.h"
|
||||
|
||||
#include "display.h"
|
||||
|
||||
// OLED display 128x64 with SH1106 controller
|
||||
// on I2C GPIOs SCL 22 and SDA 21
|
||||
U8G2_SH1106_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, 22, 21);
|
||||
|
||||
void initDisplay()
|
||||
{
|
||||
// high I2c clock still results in about 100ms buffer transmission to OLED:
|
||||
u8g2.setBusClock(1000000);
|
||||
u8g2.begin();
|
||||
}
|
||||
|
||||
void renderDigits(char uSphStr[16], char cpmStr[16])
|
||||
{
|
||||
uint16_t y = 14;
|
||||
uint16_t xCpm = 56;
|
||||
uint16_t xUSph = 127;
|
||||
|
||||
u8g2.setFont(u8g2_font_crox4hb_tr);
|
||||
u8g2_uint_t w = u8g2.getStrWidth(uSphStr);
|
||||
u8g2.setCursor(xUSph - w, y);
|
||||
u8g2.print(uSphStr);
|
||||
|
||||
w = u8g2.getStrWidth(cpmStr);
|
||||
u8g2.setCursor(xCpm - w, y);
|
||||
u8g2.print(cpmStr);
|
||||
|
||||
y = 21;
|
||||
u8g2.setFont(u8g2_font_4x6_tf);
|
||||
w = u8g2.getStrWidth("\xB5S/h");
|
||||
u8g2.setCursor(xUSph - w, y);
|
||||
u8g2.print("\xB5S/h");
|
||||
|
||||
w = u8g2.getStrWidth("cnt/min");
|
||||
u8g2.setCursor(xCpm - w, y);
|
||||
u8g2.print("cnt/min");
|
||||
}
|
||||
|
||||
void renderHistoryBarGraph(GeigerData &geigerData)
|
||||
{
|
||||
const uint16_t bars = 120;
|
||||
const uint16_t maxBarHeight = 40;
|
||||
const uint16_t samplesPerBar = geigerData.sampleCount / bars;
|
||||
const uint16_t barsPerMinute = 60 / (samplesPerBar * geigerData.sampleSeconds);
|
||||
|
||||
// determine max value for y scale:
|
||||
uint16_t offset = geigerData.getCurrentSample() % samplesPerBar + 1;
|
||||
uint32_t maxPulses = 0;
|
||||
for (int16_t i = 0; i < bars - 1; i++)
|
||||
{
|
||||
const uint32_t prevPulses = geigerData.getPreviousPulses(offset,
|
||||
samplesPerBar);
|
||||
if (prevPulses > maxPulses)
|
||||
maxPulses = prevPulses;
|
||||
|
||||
offset += samplesPerBar;
|
||||
}
|
||||
|
||||
const float maxUSph = geigerData.toMicroSievertPerHour(maxPulses,
|
||||
samplesPerBar);
|
||||
const float uSphPerPixel = maxUSph > 40. ? 10. : maxUSph > 4. ? 1. : maxUSph > 0.4 ? 0.1 : 0.01;
|
||||
// labels and grid
|
||||
u8g2.setFont(u8g2_font_4x6_tn);
|
||||
char s[10];
|
||||
for (uint16_t i = 10; i <= maxBarHeight; i += 10)
|
||||
{
|
||||
u8g2.setCursor(0, 63 - i + 3);
|
||||
if (uSphPerPixel >= 0.1)
|
||||
sprintf(s, "%.0f", i * uSphPerPixel);
|
||||
else
|
||||
sprintf(s, ".%.0f", i * uSphPerPixel * 10);
|
||||
|
||||
u8g2.print(s);
|
||||
for (int16_t x = 127 - barsPerMinute; x >= 8; x -= barsPerMinute)
|
||||
{
|
||||
u8g2.drawPixel(x, 63 - i);
|
||||
}
|
||||
}
|
||||
|
||||
// bars
|
||||
offset = geigerData.getCurrentSample() % samplesPerBar + 1;
|
||||
for (int16_t i = 0; i < bars - 1; i++)
|
||||
{
|
||||
const uint32_t prevPulses = geigerData.getPreviousPulses(offset,
|
||||
samplesPerBar);
|
||||
const float uSph = geigerData.toMicroSievertPerHour(prevPulses,
|
||||
samplesPerBar);
|
||||
offset += samplesPerBar;
|
||||
uint16_t barHeight = 1 + (int)((uSph / uSphPerPixel));
|
||||
if (barHeight > 40)
|
||||
barHeight = 40;
|
||||
|
||||
u8g2.drawVLine(127 - i, 63 - barHeight, barHeight);
|
||||
}
|
||||
}
|
||||
|
||||
void updateDisplay(GeigerData &geigerData, char uSphStr[16], char cpmStr[16])
|
||||
{
|
||||
u8g2.clearBuffer();
|
||||
renderDigits(uSphStr, cpmStr);
|
||||
renderHistoryBarGraph(geigerData);
|
||||
u8g2.sendBuffer();
|
||||
}
|
||||
211
src/ingest.cpp
Normal file
211
src/ingest.cpp
Normal file
@@ -0,0 +1,211 @@
|
||||
#include <WiFi.h>
|
||||
#include <WiFiClientSecure.h>
|
||||
#include <MQTT.h>
|
||||
|
||||
#include "GeigerData.h"
|
||||
|
||||
#include "credentials.h"
|
||||
|
||||
const char *thingsPeakUrl = "api.thingspeak.com";
|
||||
|
||||
WiFiClient mqttWifiClient;
|
||||
WiFiClientSecure mqttWifiClientSecure;
|
||||
MQTTClient mqttClient;
|
||||
|
||||
bool connectWiFi()
|
||||
{
|
||||
WiFi.persistent(false);
|
||||
|
||||
uint16_t retries = 10;
|
||||
while (WiFi.status() != WL_CONNECTED && (retries--) > 0)
|
||||
{
|
||||
Serial.print("Trying to connect to ");
|
||||
Serial.print(wifiSsid);
|
||||
Serial.print(" ... ");
|
||||
WiFi.begin(wifiSsid, wifiPassword);
|
||||
uint16_t waitRemaining = 8;
|
||||
while (WiFi.status() != WL_CONNECTED && (--waitRemaining) > 0)
|
||||
{
|
||||
delay(500);
|
||||
}
|
||||
if (WiFi.status() == WL_CONNECTED)
|
||||
{
|
||||
Serial.println("successful");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.print("failed status=");
|
||||
Serial.println(WiFi.status());
|
||||
}
|
||||
}
|
||||
|
||||
return WiFi.status() == WL_CONNECTED;
|
||||
}
|
||||
|
||||
void disconnectWiFi()
|
||||
{
|
||||
Serial.println("Disconnecting WiFi");
|
||||
WiFi.disconnect(true, true);
|
||||
}
|
||||
|
||||
void initIngest()
|
||||
{
|
||||
connectWiFi();
|
||||
}
|
||||
|
||||
void loopIngest()
|
||||
{
|
||||
if (mqttClient.connected())
|
||||
{
|
||||
mqttClient.loop();
|
||||
}
|
||||
}
|
||||
|
||||
void deinitIngest()
|
||||
{
|
||||
if (WiFi.status() == WL_CONNECTED)
|
||||
{
|
||||
disconnectWiFi();
|
||||
}
|
||||
}
|
||||
|
||||
void ingestToThingspeak(GeigerData &geigerData, uint16_t intervalSamples)
|
||||
{
|
||||
if (!connectWiFi())
|
||||
return;
|
||||
|
||||
if (thingsPeakUrl == NULL || thingsPeakUrl[0] == 0)
|
||||
return;
|
||||
|
||||
WiFiClient client;
|
||||
if (!client.connect(thingsPeakUrl, 80))
|
||||
{
|
||||
Serial.print("Connecting to ");
|
||||
Serial.print(thingsPeakUrl);
|
||||
Serial.println(" failed");
|
||||
// disconnect from WiFi to trigger fresh connect on next ingest
|
||||
disconnectWiFi();
|
||||
}
|
||||
else
|
||||
{
|
||||
client.setTimeout(30);
|
||||
|
||||
const uint32_t pulses = geigerData.getPreviousPulses(1,
|
||||
intervalSamples);
|
||||
const uint32_t cpm = uint32_t(
|
||||
pulses / ((float)intervalSamples * geigerData.sampleSeconds / 60.) + 0.5);
|
||||
const float uSph = geigerData.toMicroSievertPerHour(pulses,
|
||||
intervalSamples);
|
||||
|
||||
const String content = "api_key=" + String(thingspeakApiKey) + "&field1=" + String(cpm) + "&field2=" + String(uSph, 3);
|
||||
|
||||
Serial.print("Ingesting cpm=");
|
||||
Serial.print(cpm);
|
||||
Serial.print(" uSph=");
|
||||
Serial.print(uSph, 3);
|
||||
Serial.print(" ... ");
|
||||
|
||||
client.print("POST /update HTTP/1.1\n");
|
||||
|
||||
client.print("Host: ");
|
||||
client.print(thingsPeakUrl);
|
||||
client.print("\n");
|
||||
|
||||
client.print("Connection: close\n");
|
||||
|
||||
client.print("Content-Type: application/x-www-form-urlencoded\n");
|
||||
client.print("Content-Length: ");
|
||||
client.print(content.length());
|
||||
client.print("\n\n");
|
||||
|
||||
client.print(content);
|
||||
|
||||
uint16_t timeout = 40;
|
||||
while (client.available() == 0 && (--timeout) > 0)
|
||||
{
|
||||
delay(50);
|
||||
}
|
||||
if (client.available() == 0)
|
||||
{
|
||||
Serial.println("failed (no response)");
|
||||
}
|
||||
|
||||
Serial.println("response:");
|
||||
while (client.available())
|
||||
{
|
||||
char c = client.read();
|
||||
Serial.write(c);
|
||||
}
|
||||
Serial.println();
|
||||
|
||||
client.stop();
|
||||
}
|
||||
}
|
||||
|
||||
bool connectMqtt()
|
||||
{
|
||||
if (!connectWiFi())
|
||||
return false;
|
||||
|
||||
if (mqttHost == NULL || mqttHost[0] == 0)
|
||||
return false;
|
||||
|
||||
if (!mqttClient.connected())
|
||||
{
|
||||
const bool tls = mqttTlsServerRootCert != NULL && mqttTlsServerRootCert[0] != 0;
|
||||
Serial.print("Connecting to MQTT host ");
|
||||
Serial.print(mqttHost);
|
||||
Serial.print(":");
|
||||
Serial.print(mqttPort);
|
||||
Serial.print(" user ");
|
||||
Serial.print(mqttUser);
|
||||
if (tls) {
|
||||
Serial.print(" with TLS ");
|
||||
mqttWifiClientSecure.setCACert(mqttTlsServerRootCert);
|
||||
mqttClient.begin(mqttHost, mqttPort, mqttWifiClientSecure);
|
||||
} else {
|
||||
Serial.print(" without TLS ");
|
||||
mqttClient.begin(mqttHost, mqttPort, mqttWifiClient);
|
||||
}
|
||||
|
||||
if (mqttClient.connect("esp32-geiger-counter", mqttUser, mqttPassword))
|
||||
{
|
||||
Serial.println(" successful");
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.println(" failed");
|
||||
// disconnect from WiFi to trigger fresh connect on next ingest
|
||||
disconnectWiFi();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void disconnectMqtt()
|
||||
{
|
||||
mqttClient.disconnect();
|
||||
}
|
||||
|
||||
void ingestToMqtt(GeigerData &geigerData, uint16_t intervalSamples)
|
||||
{
|
||||
if (connectMqtt())
|
||||
{
|
||||
const unsigned long pulses = geigerData.getPreviousPulses(1,
|
||||
intervalSamples);
|
||||
const unsigned long cpm = (unsigned long)(pulses / ((float)intervalSamples * geigerData.sampleSeconds / 60.) + 0.5);
|
||||
const float uSph = geigerData.toMicroSievertPerHour(pulses,
|
||||
intervalSamples);
|
||||
char payload[129];
|
||||
sprintf(payload, "{\"pulses\":%lu, \"cpm\":%lu,\"uSph\":%.3f,\"secs\":%d}",
|
||||
pulses, cpm, uSph, (int)intervalSamples);
|
||||
|
||||
if (!mqttClient.publish(mqttTopic, payload))
|
||||
{
|
||||
mqttClient.disconnect();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,203 +1,244 @@
|
||||
#include "Arduino.h"
|
||||
|
||||
#include "driver/pcnt.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "driver/rtc_io.h"
|
||||
|
||||
#include "display.h"
|
||||
#include "ingest.h"
|
||||
#include "GeigerData.h"
|
||||
|
||||
// ~400µs high pulses from Geiger tube on GPIO 18
|
||||
#define PULSE_PIN 18
|
||||
#define PULSE_GPIO GPIO_NUM_18
|
||||
|
||||
// switch input for WiFi on (low) and off (high)
|
||||
#define WIFI_SWITCH_PIN 4
|
||||
|
||||
// Keep 600 samples of 1s in history (10 minutes),
|
||||
// calculate radiation for russian STS-6 ("CTC-6") Geiger tube
|
||||
GeigerData geigerData(600, 1, STS6_CPM_PER_USPH);
|
||||
|
||||
// blinky state
|
||||
int blinky = 1;
|
||||
|
||||
// Pulses counted by interrupt (while CPU is awake)
|
||||
volatile uint16_t intPulseCount = 0;
|
||||
// Pulses counted during ESP light sleep
|
||||
volatile uint16_t pulseCount = 0;
|
||||
|
||||
// Sample duration in µs
|
||||
const uint32_t sampleMicros = geigerData.sampleSeconds * 1000000;
|
||||
// Absolute sample interval start micros
|
||||
uint32_t sampleStart = 0;
|
||||
|
||||
const int16_t ingestInterval = 60;
|
||||
int16_t ingestCountdown;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(921600);
|
||||
Serial.println("Starting!");
|
||||
|
||||
// OLED
|
||||
initDisplay();
|
||||
|
||||
// blinky
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
|
||||
// Geiger pulse input
|
||||
pinMode(PULSE_PIN, INPUT);
|
||||
|
||||
// WiFi switch input
|
||||
pinMode(WIFI_SWITCH_PIN, INPUT_PULLUP);
|
||||
|
||||
if (wifiSwitchOn()) {
|
||||
initIngest();
|
||||
}
|
||||
|
||||
// initialize sample start
|
||||
sampleStart = micros();
|
||||
ingestCountdown = ingestInterval;
|
||||
}
|
||||
|
||||
// interrupt handler
|
||||
void pulse() {
|
||||
++intPulseCount;
|
||||
}
|
||||
|
||||
uint32_t calcRemainingWait() {
|
||||
const uint32_t remaining = sampleMicros - (micros() - sampleStart);
|
||||
return remaining > sampleMicros ? 0 : remaining;
|
||||
}
|
||||
|
||||
boolean wifiSwitchOn() {
|
||||
return digitalRead(WIFI_SWITCH_PIN) == 0;
|
||||
}
|
||||
|
||||
uint16_t takeSampleNoSleep() {
|
||||
attachInterrupt(PULSE_PIN, pulse, RISING);
|
||||
|
||||
int32_t remainingWait = calcRemainingWait();
|
||||
delayMicroseconds(remainingWait);
|
||||
sampleStart = micros();
|
||||
noInterrupts();
|
||||
const int16_t pulses = intPulseCount;
|
||||
intPulseCount = 0;
|
||||
interrupts();
|
||||
|
||||
return pulses;
|
||||
}
|
||||
|
||||
uint16_t takeSampleLowPower() {
|
||||
// To save battery power, use light sleep as much as possible.
|
||||
// During light sleep, no counters or interrupts are working.
|
||||
// Therefore simply wake up on each pulse signal change. This
|
||||
// is fast enough for the low frequencies from a Geiger tube
|
||||
// (below 2kHz):
|
||||
// Wake up at end of sample period. Also
|
||||
// wake up on pulse getting high and getting low.
|
||||
// Waking up directly on rising/falling edges is not possible,
|
||||
// so wait until level change.
|
||||
// Switch to interrupt counting while awake for calculations
|
||||
// and display update.
|
||||
|
||||
// stop interrupt (switch to active wakeup counting loop):
|
||||
detachInterrupt(PULSE_PIN);
|
||||
|
||||
int32_t remainingWait = calcRemainingWait();
|
||||
esp_sleep_wakeup_cause_t cause = ESP_SLEEP_WAKEUP_UNDEFINED;
|
||||
while (cause != ESP_SLEEP_WAKEUP_TIMER && remainingWait > 0) {
|
||||
|
||||
if (digitalRead(PULSE_PIN)) {
|
||||
// wait for low pulse start or sample time end
|
||||
esp_sleep_enable_timer_wakeup(remainingWait);
|
||||
gpio_wakeup_enable(PULSE_GPIO, GPIO_INTR_LOW_LEVEL);
|
||||
esp_sleep_enable_gpio_wakeup();
|
||||
esp_light_sleep_start();
|
||||
cause = esp_sleep_get_wakeup_cause();
|
||||
}
|
||||
|
||||
remainingWait = calcRemainingWait();
|
||||
if (cause != ESP_SLEEP_WAKEUP_TIMER && remainingWait > 0) {
|
||||
// wait for high pulse start or sample time end
|
||||
esp_sleep_enable_timer_wakeup(remainingWait);
|
||||
gpio_wakeup_enable(PULSE_GPIO, GPIO_INTR_HIGH_LEVEL);
|
||||
esp_sleep_enable_gpio_wakeup();
|
||||
esp_light_sleep_start();
|
||||
cause = esp_sleep_get_wakeup_cause();
|
||||
if (cause == ESP_SLEEP_WAKEUP_GPIO) {
|
||||
++pulseCount;
|
||||
}
|
||||
}
|
||||
|
||||
remainingWait = calcRemainingWait();
|
||||
}
|
||||
|
||||
// take sample and add to statistics
|
||||
|
||||
sampleStart = micros();
|
||||
const int16_t pulses = pulseCount + intPulseCount;
|
||||
// Serial.print("pc=");
|
||||
// Serial.print(pulseCount);
|
||||
// Serial.print(" ipc=");
|
||||
// Serial.println(intPulseCount);
|
||||
attachInterrupt(PULSE_PIN, pulse, RISING);
|
||||
interrupts();
|
||||
// reset counters AFTER enabling interrupt to avoid double-counting on high signal
|
||||
pulseCount = 0;
|
||||
intPulseCount = 0;
|
||||
|
||||
return pulses;
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
// blinky
|
||||
|
||||
digitalWrite(LED_BUILTIN, blinky);
|
||||
blinky = !blinky;
|
||||
|
||||
const uint16_t pulses =
|
||||
wifiSwitchOn() ? takeSampleNoSleep() : takeSampleLowPower();
|
||||
|
||||
geigerData.addPulses(pulses);
|
||||
geigerData.nextSample();
|
||||
|
||||
if (wifiSwitchOn()) {
|
||||
ingestCountdown--;
|
||||
if (ingestCountdown <= 0) {
|
||||
ingestCountdown = ingestInterval;
|
||||
ingest(geigerData, ingestInterval);
|
||||
}
|
||||
} else {
|
||||
deinitIngest();
|
||||
}
|
||||
|
||||
// determine current value, average 6 seconds
|
||||
// because this is very near to the 5 seconds history
|
||||
// bar width and gives nicely rounded count values
|
||||
|
||||
const uint16_t samples = 6;
|
||||
const uint32_t prevPulses = geigerData.getPreviousPulses(1, samples);
|
||||
const uint32_t cpm = prevPulses * (60 / samples);
|
||||
const float uSph = geigerData.toMicroSievertPerHour(prevPulses, samples);
|
||||
|
||||
// test for display layout:
|
||||
// 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);
|
||||
}
|
||||
#include <Arduino.h>
|
||||
#include "driver/pcnt.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "driver/rtc_io.h"
|
||||
#include "display.h"
|
||||
#include "ingest.h"
|
||||
#include "GeigerData.h"
|
||||
|
||||
// ~400µs high pulses from Geiger tube on GPIO 18
|
||||
#define PULSE_PIN 15
|
||||
#define PULSE_GPIO GPIO_NUM_15
|
||||
|
||||
// switch input for WiFi on (low) and off (high)
|
||||
#define WIFI_SWITCH_PIN 4
|
||||
|
||||
// blinky LED
|
||||
#define BLINKY_LED_PIN 18
|
||||
|
||||
// Keep 600 samples of 1s in history (10 minutes),
|
||||
// calculate radiation for russian STS-6 ("CTC-6") Geiger tube
|
||||
GeigerData geigerData(600, 1, STS6_CPM_PER_USPH);
|
||||
|
||||
// blinky state
|
||||
int blinky = 1;
|
||||
|
||||
// Pulses counted by interrupt (while CPU is awake)
|
||||
volatile uint16_t intPulseCount = 0;
|
||||
// Pulses counted during ESP light sleep
|
||||
volatile uint16_t pulseCount = 0;
|
||||
|
||||
// Sample duration in µs
|
||||
const uint32_t sampleMicros = geigerData.sampleSeconds * 1000000;
|
||||
// Absolute sample interval start micros
|
||||
uint32_t sampleStart = 0;
|
||||
|
||||
const int16_t ingestInterval = 60;
|
||||
int16_t ingestCountdown;
|
||||
|
||||
const int watchdogTimeoutMicros = 40000000L;
|
||||
hw_timer_t *watchdogTimer = NULL;
|
||||
|
||||
void pulse();
|
||||
uint32_t calcRemainingWait();
|
||||
boolean wifiSwitchOn();
|
||||
uint16_t takeSampleNoSleep();
|
||||
uint16_t takeSampleLowPower();
|
||||
void IRAM_ATTR watchdogExpired();
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
Serial.println("Starting!");
|
||||
|
||||
// initialize watchdog timer
|
||||
watchdogTimer = timerBegin(0, 80, true);
|
||||
timerAttachInterrupt(watchdogTimer, &watchdogExpired, true);
|
||||
timerAlarmWrite(watchdogTimer, watchdogTimeoutMicros, false);
|
||||
timerAlarmEnable(watchdogTimer);
|
||||
|
||||
// OLED
|
||||
initDisplay();
|
||||
|
||||
// blinky
|
||||
pinMode(BLINKY_LED_PIN, OUTPUT);
|
||||
|
||||
// Geiger pulse input
|
||||
pinMode(PULSE_PIN, INPUT);
|
||||
|
||||
// WiFi switch input
|
||||
pinMode(WIFI_SWITCH_PIN, INPUT_PULLUP);
|
||||
if (wifiSwitchOn())
|
||||
{
|
||||
initIngest();
|
||||
}
|
||||
|
||||
// initialize sample start
|
||||
sampleStart = micros();
|
||||
ingestCountdown = ingestInterval;
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
// blinky
|
||||
|
||||
digitalWrite(BLINKY_LED_PIN, blinky);
|
||||
blinky = !blinky;
|
||||
|
||||
// reset watchdog
|
||||
timerWrite(watchdogTimer, 0);
|
||||
|
||||
const uint16_t pulses =
|
||||
wifiSwitchOn() ? takeSampleNoSleep() : takeSampleLowPower();
|
||||
|
||||
geigerData.addPulses(pulses);
|
||||
geigerData.nextSample();
|
||||
|
||||
if (wifiSwitchOn())
|
||||
{
|
||||
loopIngest();
|
||||
ingestCountdown--;
|
||||
if (ingestCountdown <= 0)
|
||||
{
|
||||
ingestCountdown = ingestInterval;
|
||||
ingestToThingspeak(geigerData, ingestInterval);
|
||||
ingestToMqtt(geigerData, ingestInterval);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
deinitIngest();
|
||||
}
|
||||
|
||||
// determine current value, average 6 seconds
|
||||
// because this is very near to the 5 seconds history
|
||||
// bar width and gives nicely rounded count values
|
||||
|
||||
const uint16_t samples = 6;
|
||||
const uint32_t prevPulses = geigerData.getPreviousPulses(1, samples);
|
||||
const uint32_t cpm = prevPulses * (60 / samples);
|
||||
const float uSph = geigerData.toMicroSievertPerHour(prevPulses, samples);
|
||||
|
||||
// test for display layout:
|
||||
// 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);
|
||||
}
|
||||
|
||||
// interrupt handler
|
||||
void pulse()
|
||||
{
|
||||
++intPulseCount;
|
||||
}
|
||||
|
||||
uint32_t calcRemainingWait()
|
||||
{
|
||||
const uint32_t remaining = sampleMicros - (micros() - sampleStart);
|
||||
return remaining > sampleMicros ? 0 : remaining;
|
||||
}
|
||||
|
||||
boolean wifiSwitchOn()
|
||||
{
|
||||
return digitalRead(WIFI_SWITCH_PIN) == 0;
|
||||
}
|
||||
|
||||
uint16_t takeSampleNoSleep()
|
||||
{
|
||||
attachInterrupt(PULSE_PIN, pulse, RISING);
|
||||
|
||||
int32_t remainingWait = calcRemainingWait();
|
||||
delayMicroseconds(remainingWait);
|
||||
sampleStart = micros();
|
||||
noInterrupts();
|
||||
const int16_t pulses = intPulseCount;
|
||||
intPulseCount = 0;
|
||||
interrupts();
|
||||
|
||||
return pulses;
|
||||
}
|
||||
|
||||
uint16_t takeSampleLowPower()
|
||||
{
|
||||
// To save battery power, use light sleep as much as possible.
|
||||
// During light sleep, no counters or interrupts are working.
|
||||
// Therefore simply wake up on each pulse signal change. This
|
||||
// is fast enough for the low frequencies from a Geiger tube
|
||||
// (below 2kHz):
|
||||
// Wake up at end of sample period. Also
|
||||
// wake up on pulse getting high and getting low.
|
||||
// Waking up directly on rising/falling edges is not possible,
|
||||
// so wait until level change.
|
||||
// Switch to interrupt counting while awake for calculations
|
||||
// and display update.
|
||||
|
||||
// stop interrupt (switch to active wakeup counting loop):
|
||||
detachInterrupt(PULSE_PIN);
|
||||
|
||||
int32_t remainingWait = calcRemainingWait();
|
||||
esp_sleep_wakeup_cause_t cause = ESP_SLEEP_WAKEUP_UNDEFINED;
|
||||
while (cause != ESP_SLEEP_WAKEUP_TIMER && remainingWait > 0)
|
||||
{
|
||||
|
||||
if (digitalRead(PULSE_PIN))
|
||||
{
|
||||
// wait for low pulse start or sample time end
|
||||
esp_sleep_enable_timer_wakeup(remainingWait);
|
||||
gpio_wakeup_enable(PULSE_GPIO, GPIO_INTR_LOW_LEVEL);
|
||||
esp_sleep_enable_gpio_wakeup();
|
||||
esp_light_sleep_start();
|
||||
cause = esp_sleep_get_wakeup_cause();
|
||||
}
|
||||
|
||||
remainingWait = calcRemainingWait();
|
||||
if (cause != ESP_SLEEP_WAKEUP_TIMER && remainingWait > 0)
|
||||
{
|
||||
// wait for high pulse start or sample time end
|
||||
esp_sleep_enable_timer_wakeup(remainingWait);
|
||||
gpio_wakeup_enable(PULSE_GPIO, GPIO_INTR_HIGH_LEVEL);
|
||||
esp_sleep_enable_gpio_wakeup();
|
||||
esp_light_sleep_start();
|
||||
cause = esp_sleep_get_wakeup_cause();
|
||||
if (cause == ESP_SLEEP_WAKEUP_GPIO)
|
||||
{
|
||||
++pulseCount;
|
||||
}
|
||||
}
|
||||
|
||||
remainingWait = calcRemainingWait();
|
||||
}
|
||||
|
||||
// take sample and add to statistics
|
||||
|
||||
sampleStart = micros();
|
||||
const int16_t pulses = pulseCount + intPulseCount;
|
||||
// Serial.print("pc=");
|
||||
// Serial.print(pulseCount);
|
||||
// Serial.print(" ipc=");
|
||||
// Serial.println(intPulseCount);
|
||||
attachInterrupt(PULSE_PIN, pulse, RISING);
|
||||
interrupts();
|
||||
// reset counters AFTER enabling interrupt to avoid double-counting on high signal
|
||||
pulseCount = 0;
|
||||
intPulseCount = 0;
|
||||
|
||||
return pulses;
|
||||
}
|
||||
|
||||
void IRAM_ATTR watchdogExpired()
|
||||
{
|
||||
esp_restart();
|
||||
}
|
||||
11
test/README
Normal file
11
test/README
Normal 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
|
||||
Reference in New Issue
Block a user