From 2ce453db82ed02cf6aa44e5ce93af1676b5fbb6f Mon Sep 17 00:00:00 2001 From: livello Date: Tue, 22 May 2018 20:45:02 +0300 Subject: [PATCH] esp8266 esp8266 worked esp8266 basic support, DMX now can be disabled --- README.md | 2 + build_flags_template.sh | 2 + lighthub/dmx.cpp | 2 + lighthub/item.cpp | 117 ++++++++++++++++++++-------------------- lighthub/main.cpp | 56 +++++++++++++++---- lighthub/main.h | 2 +- lighthub/options.h | 10 ++++ platformio.ini | 8 +-- 8 files changed, 125 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index 18dd9d4..a37d05b 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,8 @@ platformio device monitor -b 115200 * AVR_DMXOUT_PIN=18 // Set Pin for DMXOUT on megaatmega2560 * CONTROLLINO //Change Modbus port, direction pins and Wiznet SS pins to be working on [Controllino](http://controllino.biz/) * LAN_INIT_DELAY=2000 // set lan init delay for Wiznet ethernet shield +* ESP_WIFI_AP=MYAP // esp wifi access point name +* ESP_WIFI_PWD=MYPWD // esp wifi access point password diff --git a/build_flags_template.sh b/build_flags_template.sh index 27ed24f..0ec4b85 100644 --- a/build_flags_template.sh +++ b/build_flags_template.sh @@ -21,6 +21,8 @@ export FLAGS="$FLAGS -DAVR_DMXOUT_PIN=18" export FLAGS="$FLAGS -DLAN_INIT_DELAY=2000" export FLAGS="$FLAGS -DCONTROLLINO" + export FLAGS="$FLAGS -DESP_WIFI_AP=MYAP" + export FLAGS="$FLAGS -DESP_WIFI_PWD=MYPWD" export PLATFORMIO_BUILD_FLAGS="$FLAGS" echo PLATFORMIO_BUILD_FLAGS=$PLATFORMIO_BUILD_FLAGS echo "==============================================Custom build flags END=====================================================" diff --git a/lighthub/dmx.cpp b/lighthub/dmx.cpp index 6b5df64..e9c8280 100644 --- a/lighthub/dmx.cpp +++ b/lighthub/dmx.cpp @@ -29,8 +29,10 @@ e-mail anklimov@gmail.com #endif #if defined(__ESP__) +#ifndef DMX_DISABLE DMXESPSerial dmxout; #endif +#endif uint8_t * DMXin = NULL; int D_State=0; diff --git a/lighthub/item.cpp b/lighthub/item.cpp index 0cd0a4e..0e08002 100644 --- a/lighthub/item.cpp +++ b/lighthub/item.cpp @@ -696,8 +696,11 @@ void Item::mb_fail(short addr, short op, int val, int cmd) { setVal(val); } +#ifndef MODBUS_DISABLE extern ModbusMaster node; + + int Item::VacomSetFan(int8_t val, int8_t cmd) { int addr = getArg(); Serial.print(F("VC#")); @@ -766,63 +769,6 @@ int Item::VacomSetHeat(int addr, int8_t val, int8_t cmd) { modbusBusy = 0; } - -int Item::SendStatus(short cmd, short n, int *Par, boolean deffered) { - -/// ToDo: relative patches, configuration - - if (deffered) { - setCmd(cmd | CMD_REPORT); - Serial.println(F("Status deffered")); - // mqttClient.publish("/push", "1"); - return 0; - // Todo: Parameters? Now expected that parameters already stored by setVal() - } - else { //publush to MQTT - char addrstr[32]; - //char addrbuf[17]; - char valstr[16] = ""; - - strcpy_P(addrstr, outprefix); - strncat(addrstr, itemArr->name, sizeof(addrstr)); - - - switch (cmd) { - case CMD_ON: - strcpy(valstr, "ON"); - break; - case CMD_OFF: - case CMD_HALT: - strcpy(valstr, "OFF"); - break; - // TODO send Par - case 0: - case CMD_SET: - if (Par) - for (short i = 0; i < n; i++) { - char num[4]; - snprintf(num, sizeof(num), "%d", Par[i]); - strncat(valstr, num, sizeof(valstr)); - if (i != n - 1) { - strcpy(num, ","); - strncat(valstr, num, sizeof(valstr)); - } - } - break; - default: - Serial.println(F("Unknown cmd ")); - return -1; - } - Serial.print(F("Pub: ")); - Serial.print(addrstr); - Serial.print(F("->")); - Serial.println(valstr); - mqttClient.publish(addrstr, valstr,true); - return 0; - } -} - - int Item::modbusDimmerSet(int addr, uint16_t _reg, int _mask, uint16_t value) { if (modbusBusy) { @@ -856,7 +802,6 @@ int Item::modbusDimmerSet(int addr, uint16_t _reg, int _mask, uint16_t value) { modbusBusy = 0; } - int Item::checkFM() { if (modbusBusy) return -1; if (checkModbusRetry()) return -2; @@ -1118,3 +1063,59 @@ void Item::sendDelayedStatus(){ setCmd(cmd); } } + +#endif +int Item::SendStatus(short cmd, short n, int *Par, boolean deffered) { + +/// ToDo: relative patches, configuration + + if (deffered) { + setCmd(cmd | CMD_REPORT); + Serial.println(F("Status deffered")); + // mqttClient.publish("/push", "1"); + return 0; + // Todo: Parameters? Now expected that parameters already stored by setVal() + } + else { //publush to MQTT + char addrstr[32]; + //char addrbuf[17]; + char valstr[16] = ""; + + strcpy_P(addrstr, outprefix); + strncat(addrstr, itemArr->name, sizeof(addrstr)); + + + switch (cmd) { + case CMD_ON: + strcpy(valstr, "ON"); + break; + case CMD_OFF: + case CMD_HALT: + strcpy(valstr, "OFF"); + break; + // TODO send Par + case 0: + case CMD_SET: + if (Par) + for (short i = 0; i < n; i++) { + char num[4]; + snprintf(num, sizeof(num), "%d", Par[i]); + strncat(valstr, num, sizeof(valstr)); + if (i != n - 1) { + strcpy(num, ","); + strncat(valstr, num, sizeof(valstr)); + } + } + break; + default: + Serial.println(F("Unknown cmd ")); + return -1; + } + Serial.print(F("Pub: ")); + Serial.print(addrstr); + Serial.print(F("->")); + Serial.println(valstr); + mqttClient.publish(addrstr, valstr,true); + return 0; + } +} diff --git a/lighthub/main.cpp b/lighthub/main.cpp index ca96e80..17c8c23 100644 --- a/lighthub/main.cpp +++ b/lighthub/main.cpp @@ -270,9 +270,13 @@ int lanLoop() { case 0: //Ethernet.begin(mac,ip); { #ifdef __ESP__ - //WiFi.mode(WIFI_STA); -//wifiMulti.addAP("Smartbox", ""); -if((wifiMulti.run() == WL_CONNECTED)) lanStatus=1; + WiFi.mode(WIFI_STA); + Serial.print(F("WIFI AP/Password:")); + Serial.print(QUOTE(ESP_WIFI_AP)); + Serial.print(F("/")); + Serial.println(QUOTE(ESP_WIFI_PWD)); + wifiMulti.addAP(QUOTE(ESP_WIFI_AP), QUOTE(ESP_WIFI_PWD)); + if((wifiMulti.run() == WL_CONNECTED)) lanStatus=1; #else IPAddress ip; IPAddress dns; @@ -858,10 +862,7 @@ return 0; } int getConfig(int arg_cnt, char **args) -//(char *tokens) { - - int responseStatusCode = 0; char ch; char URI[40]; @@ -928,9 +929,8 @@ int getConfig(int arg_cnt, char **args) lanCheck = millis() + 5000; return -11; } - -#else - //Non AVR code +#endif +#if defined(__SAM3X8E__) String response; EthernetClient configEthClient; HttpClient htclient = HttpClient(configEthClient, configServer, 80); @@ -976,9 +976,39 @@ int getConfig(int arg_cnt, char **args) //lanCheck=millis()+15000; return -11; //Load from NVRAM } - - #endif +#if defined(__ESP__) + HTTPClient httpClient; + String fullURI = "http://"; + fullURI+=configServer; + fullURI+=URI; + httpClient.begin(fullURI); + int httpResponseCode = httpClient.GET(); + if (httpResponseCode > 0) { + // HTTP header has been send and Server response header has been handled + Serial.printf("[HTTP] GET... code: %d\n", httpResponseCode); + // file found at server + if (httpResponseCode == HTTP_CODE_OK) { + String response = httpClient.getString(); + Serial.println(response); + aJson.deleteItem(root); + root = aJson.parse((char *) response.c_str()); + if (!root) { + Serial.println(F("Config parsing failed")); + return -11; //Load from NVRAM + } else { + Serial.println(F("Config OK, Applying")); + applyConfig(); + } + } + } else { + Serial.printf("[HTTP] GET... failed, error: %s\n", httpClient.errorToString(httpResponseCode).c_str()); + httpClient.end(); + return -11; //Load from NVRAM + } + httpClient.end(); +#endif + return 2; } @@ -1167,7 +1197,9 @@ void loop_main() { // if (lastpacket && (lastpacket%10==0)) Serial.println(lastpacket); if (items) { + #ifndef MODBUS_DISABLE if (lanStatus != 4) pollingLoop(); + #endif #ifdef _owire thermoLoop(); #endif @@ -1241,6 +1273,7 @@ void inputLoop(void) { } } +#ifndef MODBUS_DISABLE void pollingLoop(void) { boolean done = false; if (millis() > nextPollingCheck) { @@ -1258,6 +1291,7 @@ void pollingLoop(void) { } //while }//if } +#endif //TODO: refactoring diff --git a/lighthub/main.h b/lighthub/main.h index c4f607d..92f154c 100644 --- a/lighthub/main.h +++ b/lighthub/main.h @@ -63,7 +63,7 @@ #include //this needs to be first, or it all crashes and burns... #include "esp.h" #include -#include +#include #endif #ifdef _owire diff --git a/lighthub/options.h b/lighthub/options.h index 3ff36b1..390dfc0 100644 --- a/lighthub/options.h +++ b/lighthub/options.h @@ -109,10 +109,20 @@ #if defined(__ESP__) #undef _dmxin #undef _modbus +#ifndef DMX_DISABLE #define _espdmx +#endif #define modbusSerial Serial1 #endif #ifndef _dmxout #undef _artnet #endif + +#ifndef ESP_WIFI_AP +#define ESP_WIFI_AP mywifiap +#endif + +#ifndef ESP_WIFI_PWD +#define ESP_WIFI_PWD mywifipass +#endif \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index d5e0ae6..91dbbb8 100644 --- a/platformio.ini +++ b/platformio.ini @@ -18,6 +18,7 @@ platform = atmelsam framework = arduino board = due lib_ldf_mode = chain+ +extra_scripts = pre:my_build_flags.py build_flags = !echo -n "-DPIO_SRC_REV="$(git log --pretty=format:%h_%ad -1 --date=short) lib_deps = https://github.com/sebnil/DueFlashStorage @@ -67,17 +68,16 @@ framework = arduino board = nodemcuv2 lib_ldf_mode = chain+ build_flags = !echo -n "-DPIO_SRC_REV="$(git log --pretty=format:%h_%ad -1 --date=short) -pre = test.py +extra_scripts = pre:my_build_flags.py lib_deps = https://github.com/anklimov/Arduino-Temperature-Control-Library.git https://github.com/anklimov/DS2482_OneWire https://github.com/anklimov/ESP-Dmx - https://github.com/arduino-libraries/ArduinoHttpClient + ESP8266HTTPClient https://github.com/anklimov/aJson https://github.com/anklimov/CmdArduino https://github.com/anklimov/ModbusMaster - https://github.com/anklimov/DMXSerial https://github.com/knolleary/pubsubclient.git https://github.com/anklimov/Artnet.git FastLED - WifiManager@0.12 + WifiManager