From f46f6aa70ed29bafe593fa3832c353cf6b03db77 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Thu, 3 Jan 2019 22:20:50 +0100 Subject: [PATCH] add sonoff s20 example (not tested) --- examples/knx-sonoffS20/knx-sonoffS20.ino | 57 +++ examples/knx-sonoffS20/knx-sonoffS20.knxprod | Bin 0 -> 40548 bytes examples/knx-sonoffS20/knx-sonoffS20.xml | 66 +++ src/knx_facade.h | 2 +- visualstudio/knx-demo.vgdbproj | 131 +++++- visualstudio/knx-sonoffS20.vgdbproj | 448 +++++++++++++++++++ visualstudio/knx.sln | 80 ++++ 7 files changed, 778 insertions(+), 6 deletions(-) create mode 100644 examples/knx-sonoffS20/knx-sonoffS20.ino create mode 100644 examples/knx-sonoffS20/knx-sonoffS20.knxprod create mode 100644 examples/knx-sonoffS20/knx-sonoffS20.xml create mode 100644 visualstudio/knx-sonoffS20.vgdbproj diff --git a/examples/knx-sonoffS20/knx-sonoffS20.ino b/examples/knx-sonoffS20/knx-sonoffS20.ino new file mode 100644 index 0000000..b8d1576 --- /dev/null +++ b/examples/knx-sonoffS20/knx-sonoffS20.ino @@ -0,0 +1,57 @@ +#include + +#define RELAYPIN 12 + +// declare array of all groupobjects with their sizes in byte +GroupObject groupObjects[] +{ + GroupObject(1), + GroupObject(1), + GroupObject(1) +}; + +// create named references for easy access to group objects +GroupObject& goSwitch = groupObjects[0]; +GroupObject& goBlock = groupObjects[1]; +GroupObject& goStatus = groupObjects[2]; + + + +// callback from switch-GO +void switchCallback(GroupObject& go) +{ + if (goBlock.objectReadBool()) + return; + + bool value = goSwitch.objectReadBool(); + digitalWrite(RELAYPIN, value); + goStatus.objectWrite(value); +} + +void setup() +{ + SerialDBG.begin(115200); + + // register group objects + knx.registerGroupObjects(groupObjects, 3); + // read adress table, association table, groupobject table and parameters from eeprom + knx.readMemory(); + + // register callback for reset GO + goSwitch.callback(switchCallback); + + // start the framework. Will get wifi first. + knx.start(); +} + +void loop() +{ + // don't delay here to much. Otherwise you might lose packages or mess up the timing with ETS + knx.loop(); + + // only run the application code if the device was configured with ETS + if (!knx.configured()) + return; + + // nothing else to do. +} diff --git a/examples/knx-sonoffS20/knx-sonoffS20.knxprod b/examples/knx-sonoffS20/knx-sonoffS20.knxprod new file mode 100644 index 0000000000000000000000000000000000000000..6486d0452c45e7908a1ce61311b4cd5eb515f352 GIT binary patch literal 40548 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/knx_facade.h b/src/knx_facade.h index 6cd9fd1..9eea789 100644 --- a/src/knx_facade.h +++ b/src/knx_facade.h @@ -51,7 +51,7 @@ public: uint32_t paramInt(uint32_t addr); private: BauSystemB& _bau; - uint32_t _ledPin = 16; + uint32_t _ledPin = LED_BUILTIN; uint32_t _buttonPin = 0; #ifdef USE_STATES Ticker _ticker; diff --git a/visualstudio/knx-demo.vgdbproj b/visualstudio/knx-demo.vgdbproj index a93d72a..241b9ce 100644 --- a/visualstudio/knx-demo.vgdbproj +++ b/visualstudio/knx-demo.vgdbproj @@ -43,7 +43,7 @@ - COM9 + COM11 115200 8 @@ -54,8 +54,8 @@ 0 false - false - false + true + true ASCII @@ -205,9 +205,14 @@ false 0 - + + gdbsim + + + + true - Auto + Disabled 0 false false @@ -222,6 +227,7 @@ arduino:samd:arduino_zero_native + COM11 @@ -322,6 +328,121 @@ Sketch + + Generic ESP8266 Module + + + + + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + true + false + None + false + false + main + true + false + false + false + 0 + + + gdbsim + + + + + true + Auto + 0 + false + false + true + false + false + + _estack + 0 + false + true + + + esp8266:esp8266:generic + + + + CpuFrequency + 80 + + + VTable + flash + + + ResetMethod + none + + + CrystalFreq + 26 + + + FlashFreq + 40 + + + FlashMode + dout + + + FlashSize + 1M0 + + + led + 13 + + + LwIPVariant + v2mss1460 + + + Debug + Disabled + + + DebugLevel + None____ + + + FlashErase + none + + + UploadSpeed + 115200 + + + + Sketch + + \ No newline at end of file diff --git a/visualstudio/knx-sonoffS20.vgdbproj b/visualstudio/knx-sonoffS20.vgdbproj new file mode 100644 index 0000000..3b957d8 --- /dev/null +++ b/visualstudio/knx-sonoffS20.vgdbproj @@ -0,0 +1,448 @@ + + + Debug + + + + Unknown + + + 3db3061b-09a3-4c8b-a197-cbeeb3336437 + true + true + ..\examples\knx-sonoffS20 + Sketch.ino + + + + knx-sonoffS20.ino + + + + + + + + ..\.. + + Output\$(PlatformName.defuse)\$(ConfigurationName.defuse) + true + + + + + + + + + + + + + Default + + + + COM11 + + 115200 + 8 + None + One + None + + + 0 + false + true + true + ASCII + + + 255 + 0 + 0 + 0 + + + 255 + 169 + 169 + 169 + + + 255 + 211 + 211 + 211 + + + 255 + 144 + 238 + 144 + + + 255 + 169 + 169 + 169 + + + + 16 + true + true + true + true + 0 + + LF + false + true + true + + + + true + + + + + True + + true + true + + Enabled + true + true + true + + true + + + + false + + apiModeling.google.GTest + core.builtin.BuiltinFunctions + core.builtin.NoReturnFunctions + core.CallAndMessage + core.DivideZero + core.DynamicTypePropagation + core.NonnilStringConstants + core.NonNullParamChecker + core.NullDereference + core.StackAddressEscape + core.UndefinedBinaryOperatorResult + core.uninitialized.ArraySubscript + core.uninitialized.Assign + core.uninitialized.Branch + core.uninitialized.CapturedBlockVariable + core.uninitialized.UndefReturn + core.VLASize + cplusplus.NewDelete + cplusplus.NewDeleteLeaks + cplusplus.SelfAssignment + deadcode.DeadStores + nullability.NullPassedToNonnull + nullability.NullReturnedFromNonnull + security.insecureAPI.getpw + security.insecureAPI.gets + security.insecureAPI.mkstemp + security.insecureAPI.mktemp + security.insecureAPI.UncheckedReturn + security.insecureAPI.vfork + unix.API + unix.cstring.BadSizeArg + unix.cstring.NullArg + unix.Malloc + unix.MallocSizeof + unix.MismatchedDeallocator + unix.StdCLibraryFunctions + unix.Vfork + + + -analyzer-store=region + -analyzer-opt-analyze-nested-blocks + -analyzer-eagerly-assume + + + + + + Arduino Genuino Zero (Native USB Port) + + + + + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + true + false + None + false + false + main + true + false + false + false + 0 + + + gdbsim + + + + + true + Disabled + 0 + false + false + true + false + false + + _estack + 0 + false + true + + + arduino:samd:arduino_zero_native + COM11 + + + + Sketch + + + + NodeMCU 1 0 (ESP-12E Module) + + + + + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + true + false + None + false + false + main + true + false + false + false + 0 + + + true + Auto + 0 + false + false + true + false + false + + _estack + 0 + false + true + + + esp8266:esp8266:nodemcuv2 + + + + xtal + 80 + + + vt + flash + + + exception + enabled + + + eesz + 4M + + + ip + lm2f + + + dbg + Disabled + + + lvl + None____ + + + wipe + none + + + baud + 115200 + + + + Sketch + + + + Generic ESP8266 Module + + + + + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + true + false + None + false + false + main + true + false + false + false + 0 + + + gdbsim + + + + + true + Auto + 0 + false + false + true + false + false + + _estack + 0 + false + true + + + esp8266:esp8266:generic + + + + CpuFrequency + 80 + + + VTable + flash + + + ResetMethod + none + + + CrystalFreq + 26 + + + FlashFreq + 40 + + + FlashMode + dout + + + FlashSize + 1M0 + + + led + 13 + + + LwIPVariant + v2mss1460 + + + Debug + Disabled + + + DebugLevel + None____ + + + FlashErase + none + + + UploadSpeed + 115200 + + + + Sketch + + + + + \ No newline at end of file diff --git a/visualstudio/knx.sln b/visualstudio/knx.sln index eb7e8f4..51a3e08 100644 --- a/visualstudio/knx.sln +++ b/visualstudio/knx.sln @@ -12,24 +12,30 @@ Project("{803FD0C6-D64E-4E16-9DC3-1DAEC859A3D2}") = "knx-vito", "knx-vito.vgdbpr EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "knxPython", "..\knxPython\knxPython.vcxproj", "{68FCB2F7-7A74-43A0-8CBE-36CB25020584}" EndProject +Project("{803FD0C6-D64E-4E16-9DC3-1DAEC859A3D2}") = "knx-sonoffS20", "knx-sonoffS20.vgdbproj", "{3DB3061B-09A3-4C8B-A197-CBEEB3336437}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Arduino Genuino Zero (Native USB Port) = Debug|Arduino Genuino Zero (Native USB Port) + Debug|Generic ESP8266 Module = Debug|Generic ESP8266 Module Debug|NodeMCU 1 0 (ESP-12E Module) = Debug|NodeMCU 1 0 (ESP-12E Module) Debug|VisualGDB = Debug|VisualGDB Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 MinSizeRel|Arduino Genuino Zero (Native USB Port) = MinSizeRel|Arduino Genuino Zero (Native USB Port) + MinSizeRel|Generic ESP8266 Module = MinSizeRel|Generic ESP8266 Module MinSizeRel|NodeMCU 1 0 (ESP-12E Module) = MinSizeRel|NodeMCU 1 0 (ESP-12E Module) MinSizeRel|VisualGDB = MinSizeRel|VisualGDB MinSizeRel|x64 = MinSizeRel|x64 MinSizeRel|x86 = MinSizeRel|x86 Release|Arduino Genuino Zero (Native USB Port) = Release|Arduino Genuino Zero (Native USB Port) + Release|Generic ESP8266 Module = Release|Generic ESP8266 Module Release|NodeMCU 1 0 (ESP-12E Module) = Release|NodeMCU 1 0 (ESP-12E Module) Release|VisualGDB = Release|VisualGDB Release|x64 = Release|x64 Release|x86 = Release|x86 RelWithDebInfo|Arduino Genuino Zero (Native USB Port) = RelWithDebInfo|Arduino Genuino Zero (Native USB Port) + RelWithDebInfo|Generic ESP8266 Module = RelWithDebInfo|Generic ESP8266 Module RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module) = RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module) RelWithDebInfo|VisualGDB = RelWithDebInfo|VisualGDB RelWithDebInfo|x64 = RelWithDebInfo|x64 @@ -37,6 +43,7 @@ Global EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|Generic ESP8266 Module.ActiveCfg = Debug|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Debug|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|VisualGDB.ActiveCfg = Debug|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|VisualGDB.Build.0 = Debug|VisualGDB @@ -44,6 +51,8 @@ Global {819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|x86.ActiveCfg = Debug|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Release|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Generic ESP8266 Module.ActiveCfg = Release|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Generic ESP8266 Module.Build.0 = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|VisualGDB.ActiveCfg = Release|VisualGDB @@ -53,6 +62,7 @@ Global {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|x86.ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|x86.Build.0 = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|Generic ESP8266 Module.ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|VisualGDB.ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|VisualGDB.Build.0 = Release|VisualGDB @@ -60,6 +70,8 @@ Global {819E55F9-05A8-454D-B771-4A99F775DD87}.Release|x86.ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Generic ESP8266 Module.ActiveCfg = Release|VisualGDB + {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Generic ESP8266 Module.Build.0 = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|VisualGDB {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|VisualGDB @@ -70,6 +82,7 @@ Global {819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|x86.Build.0 = Release|VisualGDB {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Arduino Genuino Zero (Native USB Port).Build.0 = Debug|Arduino Genuino Zero (Native USB Port) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Generic ESP8266 Module.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|NodeMCU 1 0 (ESP-12E Module).Build.0 = Debug|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|VisualGDB.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) @@ -77,6 +90,8 @@ Global {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|x86.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Generic ESP8266 Module.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Generic ESP8266 Module.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|VisualGDB.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) @@ -87,6 +102,7 @@ Global {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x86.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Generic ESP8266 Module.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) @@ -94,6 +110,8 @@ Global {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|x86.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Generic ESP8266 Module.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) + {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Generic ESP8266 Module.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) @@ -103,6 +121,8 @@ Global {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x86.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x86.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Generic ESP8266 Module.ActiveCfg = Debug|Generic ESP8266 Module + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Generic ESP8266 Module.Build.0 = Debug|Generic ESP8266 Module {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|NodeMCU 1 0 (ESP-12E Module).Build.0 = Debug|NodeMCU 1 0 (ESP-12E Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) @@ -110,6 +130,8 @@ Global {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x86.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Generic ESP8266 Module.ActiveCfg = Release|Generic ESP8266 Module + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Generic ESP8266 Module.Build.0 = Release|Generic ESP8266 Module {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) @@ -120,6 +142,8 @@ Global {6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Generic ESP8266 Module.ActiveCfg = Release|Generic ESP8266 Module + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Generic ESP8266 Module.Build.0 = Release|Generic ESP8266 Module {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) @@ -127,6 +151,8 @@ Global {6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Generic ESP8266 Module.ActiveCfg = Release|Generic ESP8266 Module + {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Generic ESP8266 Module.Build.0 = Release|Generic ESP8266 Module {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) @@ -137,6 +163,7 @@ Global {6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|Arduino Genuino Zero (Native USB Port).Build.0 = Debug|Arduino Genuino Zero (Native USB Port) + {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|Generic ESP8266 Module.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|NodeMCU 1 0 (ESP-12E Module).Build.0 = Debug|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|VisualGDB.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) @@ -144,6 +171,8 @@ Global {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|x86.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Debug|Arduino Genuino Zero (Native USB Port) + {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Generic ESP8266 Module.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) + {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Generic ESP8266 Module.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) @@ -154,6 +183,7 @@ Global {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|Generic ESP8266 Module.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|VisualGDB.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) @@ -161,6 +191,8 @@ Global {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Generic ESP8266 Module.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) + {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Generic ESP8266 Module.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) @@ -170,6 +202,7 @@ Global {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) {527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port) {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|Generic ESP8266 Module.ActiveCfg = Debug|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Debug|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|VisualGDB.ActiveCfg = Debug|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|x64.ActiveCfg = Debug|Win32 @@ -177,6 +210,8 @@ Global {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|x86.Build.0 = Debug|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Generic ESP8266 Module.ActiveCfg = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Generic ESP8266 Module.Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|VisualGDB.ActiveCfg = Release|Win32 @@ -186,6 +221,7 @@ Global {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|x86.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|x86.Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|Generic ESP8266 Module.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|VisualGDB.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|x64.ActiveCfg = Release|Win32 @@ -193,6 +229,8 @@ Global {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|x86.Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Generic ESP8266 Module.ActiveCfg = Release|Win32 + {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Generic ESP8266 Module.Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Win32 @@ -201,6 +239,48 @@ Global {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|x64.Build.0 = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|x86.ActiveCfg = Release|Win32 {68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|x86.Build.0 = Release|Win32 + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|Arduino Genuino Zero (Native USB Port).Build.0 = Debug|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|Generic ESP8266 Module.ActiveCfg = Debug|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|Generic ESP8266 Module.Build.0 = Debug|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|NodeMCU 1 0 (ESP-12E Module).Build.0 = Debug|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|VisualGDB.ActiveCfg = Debug|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|x64.ActiveCfg = Debug|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|x86.ActiveCfg = Debug|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Generic ESP8266 Module.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Generic ESP8266 Module.Build.0 = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|VisualGDB.Build.0 = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x64.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x64.Build.0 = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x86.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x86.Build.0 = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|Generic ESP8266 Module.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|Generic ESP8266 Module.Build.0 = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|x64.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|x86.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Generic ESP8266 Module.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Generic ESP8266 Module.Build.0 = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|NodeMCU 1 0 (ESP-12E Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module) + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|VisualGDB.Build.0 = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|x64.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|x64.Build.0 = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|x86.ActiveCfg = Release|Generic ESP8266 Module + {3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|x86.Build.0 = Release|Generic ESP8266 Module EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE