diff --git a/.vscode/.browse.c_cpp.db b/.vscode/.browse.c_cpp.db new file mode 100644 index 0000000..4c4c0df Binary files /dev/null and b/.vscode/.browse.c_cpp.db differ diff --git a/.vscode/arduino.json b/.vscode/arduino.json new file mode 100644 index 0000000..838c702 --- /dev/null +++ b/.vscode/arduino.json @@ -0,0 +1,5 @@ +{ + "board": "esp8266:esp8266:d1", + "configuration": "CpuFrequency=80,FlashSize=4M1M,LwIPVariant=v2mss536,Debug=Disabled,DebugLevel=None____,UploadSpeed=921600", + "port": "/dev/cu.usbmodem1411" +} \ No newline at end of file diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..a6c2f65 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,113 @@ +{ + "!!! WARNING !!!": "PLEASE DO NOT MODIFY THIS FILE! USE https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags", + "configurations": [ + { + "name": "Mac", + "macFrameworkPath": [], + "includePath": [ + "/Users/andrey/.platformio/packages/framework-arduinosam/cores/sam", + "/Users/andrey/.platformio/packages/framework-arduinosam/system/sam/libsam", + "/Users/andrey/.platformio/packages/framework-arduinosam/system/sam/CMSIS/CMSIS/Include", + "/Users/andrey/.platformio/packages/framework-arduinosam/system/sam/CMSIS/Device/ATMEL", + "/Users/andrey/.platformio/packages/framework-arduinosam/variants/arduino_due_x", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Adafruit Unified Sensor_ID31", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/ArduinoHttpClient/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Artnet", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/CmdArduino", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/DHT sensor library_ID19", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/DS2482_OneWire", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/DallasTemperature", + "/Users/andrey/.platformio/packages/framework-arduinosam/libraries/__cores__/sam/Wire/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/DmxDue", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/DueFlashStorage/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Ethernet2/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/FastLED_ID126", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/ModbusMaster/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/PrintEx/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/PubSubClient/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/SD_ID161", + "/Users/andrey/.platformio/packages/framework-arduinosam/libraries/__cores__/sam/SPI/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/SdFat_ID322/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Streaming_ID560", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Syslog/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/aJson", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/ArduinoJson_ID64/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/AsyncMqttClient_ID346/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Bounce2_ID1106/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/ESP Async WebServer_ID306/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Homie_ID555/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/HttpClient_ID66", + "/Users/andrey/.platformio/packages/framework-arduinosam/libraries/__cores__/sam/HID/src", + "/Users/andrey/.platformio/packages/tool-unity", + "/Users/andrey/Documents/Arduino/lighthub/include", + "/Users/andrey/Documents/Arduino/lighthub/lighthub", + "" + ], + "browse": { + "limitSymbolsToIncludedHeaders": true, + "databaseFilename": "${workspaceRoot}/.vscode/.browse.c_cpp.db", + "path": [ + "/Users/andrey/.platformio/packages/framework-arduinosam/cores/sam", + "/Users/andrey/.platformio/packages/framework-arduinosam/system/sam/libsam", + "/Users/andrey/.platformio/packages/framework-arduinosam/system/sam/CMSIS/CMSIS/Include", + "/Users/andrey/.platformio/packages/framework-arduinosam/system/sam/CMSIS/Device/ATMEL", + "/Users/andrey/.platformio/packages/framework-arduinosam/variants/arduino_due_x", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Adafruit Unified Sensor_ID31", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/ArduinoHttpClient/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Artnet", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/CmdArduino", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/DHT sensor library_ID19", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/DS2482_OneWire", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/DallasTemperature", + "/Users/andrey/.platformio/packages/framework-arduinosam/libraries/__cores__/sam/Wire/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/DmxDue", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/DueFlashStorage/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Ethernet2/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/FastLED_ID126", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/ModbusMaster/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/PrintEx/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/PubSubClient/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/SD_ID161", + "/Users/andrey/.platformio/packages/framework-arduinosam/libraries/__cores__/sam/SPI/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/SdFat_ID322/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Streaming_ID560", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Syslog/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/aJson", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/ArduinoJson_ID64/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/AsyncMqttClient_ID346/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Bounce2_ID1106/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/ESP Async WebServer_ID306/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/Homie_ID555/src", + "/Users/andrey/Documents/Arduino/lighthub/.piolibdeps/HttpClient_ID66", + "/Users/andrey/.platformio/packages/framework-arduinosam/libraries/__cores__/sam/HID/src", + "/Users/andrey/.platformio/packages/tool-unity", + "/Users/andrey/Documents/Arduino/lighthub/include", + "/Users/andrey/Documents/Arduino/lighthub/lighthub", + "" + ] + }, + "defines": [ + "PLATFORMIO=30603", + "__SAM3X8E__", + "ARDUINO_ARCH_SAM", + "ARDUINO_SAM_DUE", + "Wiz5500", + "ARTNET_ENABLE", + "F_CPU=84000000L", + "USBCON", + "ARDUINO=10805", + "USB_VID=0x2341", + "USB_PID=0x003E", + "USB_PRODUCT=\"Arduino Due\"", + "USB_MANUFACTURER=\"Arduino\"", + "printf=iprintf", + "" + ], + "intelliSenseMode": "clang-x64", + "cStandard": "c11", + "cppStandard": "c++11", + "compilerPath": "/Users/andrey/.platformio/packages/toolchain-gccarmnoneeabi@1.40804.0/bin/arm-none-eabi-gcc -mthumb -mcpu=cortex-m3" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..8281e64 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..b14c0f0 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,34 @@ +// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY + +// PIO Unified Debugger +// +// Documentation: https://docs.platformio.org/page/plus/debugging.html +// Configuration: https://docs.platformio.org/page/projectconf/section_env_debug.html + +{ + "version": "0.2.0", + "configurations": [ + { + "type": "platformio-debug", + "request": "launch", + "name": "PIO Debug", + "executable": "/Users/andrey/Documents/Arduino/lighthub/.pioenvs/due-5500/firmware.elf", + "toolchainBinDir": "/Users/andrey/.platformio/packages/toolchain-gccarmnoneeabi@1.40804.0/bin", + "svdPath": "/Users/andrey/.platformio/platforms/atmelsam/misc/svd/ATSAM3X8E.svd", + "preLaunchTask": { + "type": "PlatformIO", + "task": "Pre-Debug" + }, + "internalConsoleOptions": "openOnSessionStart" + }, + { + "type": "platformio-debug", + "request": "launch", + "name": "PIO Debug (skip Pre-Debug)", + "executable": "/Users/andrey/Documents/Arduino/lighthub/.pioenvs/due-5500/firmware.elf", + "toolchainBinDir": "/Users/andrey/.platformio/packages/toolchain-gccarmnoneeabi@1.40804.0/bin", + "svdPath": "/Users/andrey/.platformio/platforms/atmelsam/misc/svd/ATSAM3X8E.svd", + "internalConsoleOptions": "openOnSessionStart" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..889efeb --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "terminal.integrated.env.osx": { + "PATH": "/Users/andrey/.platformio/penv/bin:/Users/andrey/.platformio/penv:/usr/local/opt/python@2/bin:/opt/local/sbin:/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Applications/Wireshark.app/Contents/MacOS", + "PLATFORMIO_CALLER": "vscode" + } +} \ No newline at end of file diff --git a/lighthub/dmx.h b/lighthub/dmx.h index 387aaa7..874eae9 100644 --- a/lighthub/dmx.h +++ b/lighthub/dmx.h @@ -17,7 +17,6 @@ GIT: https://github.com/anklimov/lighthub e-mail anklimov@gmail.com */ - #define D_UPDATED1 1 #define D_UPDATED2 2 #define D_UPDATED3 4 diff --git a/lighthub/homiedef.h b/lighthub/homiedef.h new file mode 100644 index 0000000..855e123 --- /dev/null +++ b/lighthub/homiedef.h @@ -0,0 +1,31 @@ + +const char state_P[] PROGMEM = "$state"; +const char disconnected_P[] PROGMEM = "disconnected"; +const char ready_P[] PROGMEM = "ready"; + +const char homie_P[] PROGMEM = "$homie"; +const char homiever_P[] PROGMEM = "2.1.0"; + +const char name_P[] PROGMEM = "$name"; +const char nameval_P[] PROGMEM = "LightHub"; + +const char nodes_P[] PROGMEM = "$nodes"; +const char color_P[] PROGMEM = "color"; + +const char datatype_P[] PROGMEM = "$datatype"; + +const char float_P[] PROGMEM = "float"; +const char hsv_P[] PROGMEM = "hsv"; +const char int_P[] PROGMEM = "integer"; +const char enum_P[] PROGMEM = "enum"; +const char format_P[] PROGMEM = "$format"; +const char true_P[] PROGMEM = "true"; +const char false_P[] PROGMEM = "false"; + +const char enumformat_P[] PROGMEM = "ON,OFF,HALT,REST,XON,XOFF,TOGGLE"; +const char intformat_P[] PROGMEM = "0-100"; + +const char stats_P[] PROGMEM = "$stats"; +const char statsval_P[] PROGMEM = "uptime,freeheap"; +const char uptime_P[] PROGMEM = "uptime"; +const char freeheap_P[] PROGMEM = "freeheap"; diff --git a/lighthub/item.cpp b/lighthub/item.cpp index fef73b5..332cad2 100644 --- a/lighthub/item.cpp +++ b/lighthub/item.cpp @@ -250,9 +250,8 @@ int Item::Ctrl(char * payload, boolean send){ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send) { - debugSerial<child; + while (items && item) + if (item->type == aJson_Array && aJson.getArraySize(item)>0) { + + strncat_P(buf,item->name,sizeof(buf)); + strncat(buf,",",sizeof(buf)); + + switch ( aJson.getArrayItem(item, I_TYPE)->valueint) { + case CH_THERMO: + strncat_P(datatype,float_P,sizeof(datatype)); + break; + + case CH_RELAY: + strncpy_P(datatype,enum_P,sizeof(datatype)); + strncpy_P(format,enumformat_P,sizeof(format)); + break; + + case CH_RGBW: + case CH_RGB: + strncpy_P(datatype,color_P,sizeof(datatype)); + strncpy_P(format,hsv_P,sizeof(format)); + break; + case CH_DIMMER: + case CH_MODBUS: + case CH_PWM: + case CH_VCTEMP: + case CH_VC: + strncpy_P(datatype,int_P,sizeof(datatype)); + strncpy_P(format,intformat_P,sizeof(format)); + break; + } //switch + + strncpy_P(topic, outprefix, sizeof(topic)); + strncat_P(topic,item->name,sizeof(topic)); + strncat(topic,"/",sizeof(topic)); + strncat_P(topic,datatype_P,sizeof(topic)); + mqttClient.publish(topic,datatype,true); + + strncpy_P(topic, outprefix, sizeof(topic)); + strncat_P(topic,item->name,sizeof(topic)); + strncat(topic,"/",sizeof(topic)); + strncat_P(topic,format_P,sizeof(topic)); + mqttClient.publish(topic,format,true); + item = item->next; + } //if + strncpy_P(topic, outprefix, sizeof(topic)); + strncat_P(topic, nodes_P, sizeof(topic)); + mqttClient.publish(topic,buf,true); + } +} + void ip_ready_config_loaded_connecting_to_broker() { short n = 0; int port = 1883; @@ -387,9 +470,18 @@ void ip_ready_config_loaded_connecting_to_broker() { mqttClient.setServer(servername, port); mqttClient.setCallback(mqttCallback); + char willMessage[16]; + char willTopic[32]; + + strncpy_P(willMessage,disconnected_P,sizeof(willMessage)); + + strncpy_P(willTopic, outprefix, sizeof(willTopic)); + strncat_P(willTopic, state_P, sizeof(willTopic)); + + debugSerial< #include #include @@ -241,4 +241,4 @@ void ip_ready_config_loaded_connecting_to_broker(); void printCurentLanConfig(); -void printFreeRam(); +//void printFreeRam(); diff --git a/lighthub/options.h b/lighthub/options.h index 5dce6e9..2cf2832 100644 --- a/lighthub/options.h +++ b/lighthub/options.h @@ -66,7 +66,7 @@ #endif #ifndef OUTTOPIC -#define OUTTOPIC "/myhome/s_out/" +#define OUTTOPIC "homie/s_out/" #endif #ifndef CMDTOPIC diff --git a/lighthub/utils.cpp b/lighthub/utils.cpp index 2335d2d..4a4454b 100644 --- a/lighthub/utils.cpp +++ b/lighthub/utils.cpp @@ -20,6 +20,7 @@ e-mail anklimov@gmail.com #include "utils.h" #include "options.h" +#include "stdarg.h" #if defined(__SAM3X8E__) || defined(ARDUINO_ARCH_STM32F1) #include diff --git a/platformio.ini b/platformio.ini index 1eda6a1..fbca15d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,24 +9,29 @@ ; http://docs.platformio.org/page/projectconf.html [platformio] src_dir = lighthub -env_default = +env_default = due-5500 +;monitor_speed = 115200 ; megaatmega2560 ; megaatmega2560-net ; due ; esp8266 ; esp32 ; megaatmega2560-5500 - due-5500 +; due-5500 ; controllino ; stm32 +; esp32-evb ;build_dir = /tmp/pioenvs ;libdeps_dir = /tmp/piolibdeps -[env:esp32] + +[env:esp32-evb] platform = espressif32 framework = arduino -board = pico32 +board = esp32-evb +upload_protocol = esptool +upload_speed = 115200 build_flags = !bash check_custom_build_flags_esp32.sh lib_ignore = DmxSimple @@ -35,13 +40,51 @@ lib_ignore = DueFlashStorage SD SdFat - httpClient WifiManager Ethernet + Ethernet2 + httpClient lib_deps = https://github.com/anklimov/Arduino-Temperature-Control-Library.git https://github.com/anklimov/DS2482_OneWire Ethernet3 + ESP8266HTTPClient + https://github.com/anklimov/aJson + https://github.com/anklimov/CmdArduino + https://github.com/anklimov/ModbusMaster + https://github.com/knolleary/pubsubclient.git + https://github.com/anklimov/Artnet.git + FastLED + Adafruit Unified Sensor + DHT sensor library for ESPx + DHT sensor library + Streaming + https://github.com/livello/PrintEx#is-select-redecl + + +[env:esp32] +platform = espressif32 +framework = arduino +board = pico32 +upload_speed = 115200 +build_flags = !bash check_custom_build_flags_esp32.sh +lib_ignore = + DmxSimple + DMXSerial + DmxDue + DueFlashStorage + SD + SdFat + WifiManager + Ethernet + Ethernet2 + HTTPClient + httpClient +lib_deps = + https://github.com/anklimov/Arduino-Temperature-Control-Library.git + https://github.com/anklimov/DS2482_OneWire + Ethernet3 + ESP8266HTTPClient https://github.com/anklimov/aJson https://github.com/anklimov/CmdArduino https://github.com/anklimov/ModbusMaster @@ -66,6 +109,7 @@ lib_ignore = httpClient ESPDMX WifiManager + Ethernet3 lib_deps = https://github.com/sebnil/DueFlashStorage https://github.com/anklimov/Arduino-Temperature-Control-Library.git @@ -98,6 +142,8 @@ lib_ignore = DmxDue DueFlashStorage WifiManager + Ethernet3 + HTTPClient lib_deps = https://github.com/anklimov/Arduino-Temperature-Control-Library.git https://github.com/anklimov/DS2482_OneWire @@ -130,6 +176,7 @@ lib_ignore = SD SdFat httpClient + Ethernet3 lib_deps = https://github.com/anklimov/Arduino-Temperature-Control-Library.git https://github.com/anklimov/DS2482_OneWire @@ -160,6 +207,8 @@ lib_ignore = DueFlashStorage ESP-Dmx WifiManager + Ethernet3 + Ethernet2 lib_deps = https://github.com/anklimov/Arduino-Temperature-Control-Library.git https://github.com/anklimov/DS2482_OneWire @@ -194,6 +243,7 @@ lib_ignore = DmxSimple httpClient Ethernet + Ethernet3 lib_deps = https://github.com/sebnil/DueFlashStorage @@ -227,6 +277,8 @@ lib_ignore = DueFlashStorage ESP-Dmx WifiManager + Ethernet3 + Ethernet2 lib_deps = https://github.com/anklimov/Arduino-Temperature-Control-Library.git https://github.com/anklimov/DS2482_OneWire @@ -269,6 +321,7 @@ lib_ignore = PrintEx Ethernet2 Artnet + Ethernet3 lib_deps = diff --git a/prepareDue.sh b/prepareDue.sh index 6be6e61..a6d857f 100755 --- a/prepareDue.sh +++ b/prepareDue.sh @@ -1,2 +1,2 @@ #!/usr/bin/env bash -sed -i -- 's/void USART0_Handler(void)/void USART0_Handler(void ) __attribute__((weak));\nvoid USART0_Handler(void )/g' ~/.platformio/packages/framework-arduinosam/variants/arduino_due_x/variant.cpp +sed -i -- 's/void USART0_Handler(void)/void USART0_Handler(void ) __attribute__((weak)); void USART0_Handler(void )/g' ~/.platformio/packages/framework-arduinosam/variants/arduino_due_x/variant.cpp