diff --git a/README.md b/README.md index a78c655fe..fdb199842 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,16 @@ This project brings support for ESP8266 chip to the Arduino environment. It lets ESP8266 Arduino core comes with libraries to communicate over WiFi using TCP and UDP, set up HTTP, mDNS, SSDP, and DNS servers, do OTA updates, use a file system in flash memory, work with SD cards, servos, SPI and I2C peripherals. +# Contents +- Installing options: + - [Using Boards Manager](#installing-with-boards-manager) + - [Using git version](#using-git-version-) + - [Using stable version with PlatformIO](#using-stable-version-with-platformio) +- [Documentation](#documentation) +- [Issues and support](#issues-and-support) +- [Contributing](#contributing) +- [License and credits](#license-and-credits) + ### Installing with Boards Manager ### Starting with 1.6.4, Arduino allows installation of third-party platform packages using Boards Manager. We have packages available for Windows, Mac OS, and Linux (32 and 64 bit). diff --git a/doc/platformio.md b/doc/platformio.md index a03500bb3..c03edae7e 100644 --- a/doc/platformio.md +++ b/doc/platformio.md @@ -28,6 +28,8 @@ platformio boards espressif # Initialise base project # platformio init --board %TYPE%(see above) +# for example, initialise project for ESP8266 ESP-12E board (NodeMCU) +platformio init --board esp12e # The next files/directories will be created in myproject # platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-| @@ -39,16 +41,44 @@ platformio init --board %TYPE%(see above) - Place your source code to `src` directory - Build/Upload project -``` +```bash # process/build project platformio run # build+upload firmware platformio run --target upload +``` -# build+upload firmware via OTA +## OTA firmware uploading + +There are 2 options: + +- Directly specify `--upoad-port` in command line +```bash platformio run --target upload --upload-port IP_ADDRESS_HERE ``` +- Specify [upload_port](http://docs.platformio.org/en/latest/projectconf.html#upload-port) option in `platformio.ini` +```ini +[env:***] +... +upload_port = IP_ADDRESS_HERE +``` + +### Authentication and upload options + +You can pass additional options/flags to OTA uploader using [upload_flags](http://docs.platformio.org/en/latest/projectconf.html#upload-flags) option in `platformio.ini` +```ini +[env:***] +upload_flags = --port=8266 +``` + +Availalbe flags +- `--port=ESP_PORT` ESP8266 ota Port. Default 8266 +- `--auth=AUTH` Set authentication password +- `--spiffs` Use this option to transmit a SPIFFS image and do not flash the module + +For the full list with availalbe options please run this command `~/.platformio/packages/framework-arduinoespressif/tools/espota.py -h`. + ## IDE Integration In addition, PlatformIO [can be integrated into the popular IDEs](http://docs.platformio.org/en/latest/ide.html). For example, initialise project for Espressif ESP8266 ESP-01 board and Eclipse IDE diff --git a/libraries/ESP8266HTTPClient/examples/ReuseConnection/ReuseConnection.ino b/libraries/ESP8266HTTPClient/examples/ReuseConnection/ReuseConnection.ino index 35babdc33..631b9494d 100644 --- a/libraries/ESP8266HTTPClient/examples/ReuseConnection/ReuseConnection.ino +++ b/libraries/ESP8266HTTPClient/examples/ReuseConnection/ReuseConnection.ino @@ -60,7 +60,6 @@ void loop() { } http.end(); - } delay(1000); diff --git a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp index 6a8d010e1..5cddaf616 100644 --- a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp +++ b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp @@ -30,7 +30,6 @@ #include "ESP8266HTTPClient.h" - /** * constractor */ @@ -117,7 +116,7 @@ void HTTPClient::begin(String url, String httpsFingerprint) { if(index >= 0) { // auth info String auth = host.substring(0, index); - host.remove(0, index +1); // remove auth part including @ + host.remove(0, index + 1); // remove auth part including @ _base64Authorization = base64::encode(auth); } @@ -335,8 +334,7 @@ int HTTPClient::sendRequest(const char * type, Stream * stream, size_t size) { return HTTPC_ERROR_SEND_HEADER_FAILED; } - // create buffer for read - uint8_t buff[1460] = { 0 }; + size_t buff_size = HTTP_TCP_BUFFER_SIZE; int len = size; int bytesWritten = 0; @@ -345,34 +343,51 @@ int HTTPClient::sendRequest(const char * type, Stream * stream, size_t size) { len = -1; } - // read all data from stream and send it to server - while(connected() && stream->available() && (len > 0 || len == -1)) { - - // get available data size - size_t s = stream->available(); - - if(s) { - int c = stream->readBytes(buff, ((s > sizeof(buff)) ? sizeof(buff) : s)); - - // write it to Stream - bytesWritten += _tcp->write((const uint8_t *)buff, c); - - if(len > 0) { - len -= c; - } - - delay(0); - } else { - delay(1); - } + // if possible create smaller buffer then HTTP_TCP_BUFFER_SIZE + if((len > 0) && (len < HTTP_TCP_BUFFER_SIZE)) { + buff_size = len; } - if(size && (int)size != bytesWritten) { - DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] Stream payload bytesWritten %d and size %d mismatch!.\n", bytesWritten, _size); - DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] ERROR SEND PAYLOAD FAILED!"); - return HTTPC_ERROR_SEND_PAYLOAD_FAILED; + // create buffer for read + uint8_t * buff = (uint8_t *) malloc(buff_size); + + + if(buff) { + // read all data from stream and send it to server + while(connected() && stream->available() && (len > 0 || len == -1)) { + + // get available data size + size_t s = stream->available(); + + if(s) { + int c = stream->readBytes(buff, ((s > buff_size) ? buff_size : s)); + + // write it to Stream + bytesWritten += _tcp->write((const uint8_t *) buff, c); + + if(len > 0) { + len -= c; + } + + delay(0); + } else { + delay(1); + } + } + + free(buff); + + if(size && (int) size != bytesWritten) { + DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] Stream payload bytesWritten %d and size %d mismatch!.\n", bytesWritten, _size); + DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] ERROR SEND PAYLOAD FAILED!"); + return HTTPC_ERROR_SEND_PAYLOAD_FAILED; + } else { + DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] Stream payload written: %d\n", bytesWritten); + } + } else { - DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] Stream payload written: %d\n", bytesWritten); + DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] too less ram! need " HTTP_TCP_BUFFER_SIZE); + return HTTPC_ERROR_TOO_LESS_RAM; } // handle Server Response (Header) @@ -434,35 +449,50 @@ int HTTPClient::writeToStream(Stream * stream) { int len = _size; int bytesWritten = 0; - // create buffer for read - uint8_t buff[1460] = { 0 }; + size_t buff_size = HTTP_TCP_BUFFER_SIZE; - // read all data from server - while(connected() && (len > 0 || len == -1)) { - - // get available data size - size_t size = _tcp->available(); - - if(size) { - int c = _tcp->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size)); - - // write it to Stream - bytesWritten += stream->write(buff, c); - - if(len > 0) { - len -= c; - } - - delay(0); - } else { - delay(1); - } + // if possible create smaller buffer then HTTP_TCP_BUFFER_SIZE + if((len > 0) && (len < HTTP_TCP_BUFFER_SIZE)) { + buff_size = len; } - DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] connection closed or file end (written: %d).\n", bytesWritten); + // create buffer for read + uint8_t * buff = (uint8_t *) malloc(buff_size); - if(_size && _size != bytesWritten) { - DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] bytesWritten %d and size %d mismatch!.\n", bytesWritten, _size); + if(buff) { + // read all data from server + while(connected() && (len > 0 || len == -1)) { + + // get available data size + size_t size = _tcp->available(); + + if(size) { + int c = _tcp->readBytes(buff, ((size > buff_size) ? buff_size : size)); + + // write it to Stream + bytesWritten += stream->write(buff, c); + + if(len > 0) { + len -= c; + } + + delay(0); + } else { + delay(1); + } + } + + free(buff); + + DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] connection closed or file end (written: %d).\n", bytesWritten); + + if(_size && _size != bytesWritten) { + DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] bytesWritten %d and size %d mismatch!.\n", bytesWritten, _size); + } + + } else { + DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] too less ram! need " HTTP_TCP_BUFFER_SIZE); + return HTTPC_ERROR_TOO_LESS_RAM; } end(); @@ -509,12 +539,13 @@ String HTTPClient::errorToString(int error) { return String("no stream"); case HTTPC_ERROR_NO_HTTP_SERVER: return String("no HTTP server"); + case HTTPC_ERROR_TOO_LESS_RAM: + return String("too less ram"); default: return String(); } } - /** * adds Header to the request * @param name diff --git a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h index 2bf6d0565..5f7490f86 100644 --- a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h +++ b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.h @@ -41,6 +41,10 @@ #define HTTPC_ERROR_CONNECTION_LOST (-5) #define HTTPC_ERROR_NO_STREAM (-6) #define HTTPC_ERROR_NO_HTTP_SERVER (-7) +#define HTTPC_ERROR_TOO_LESS_RAM (-8) + +/// size for the stream handling +#define HTTP_TCP_BUFFER_SIZE (1460) /// HTTP codes see RFC7231 typedef enum { diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp index 84f78e590..25544f858 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp @@ -561,7 +561,7 @@ void ESP8266WiFiClass::scanDelete() _scanComplete = false; } -int8_t ESP8266WiFiClass::scanNetworks(bool async) +int8_t ESP8266WiFiClass::scanNetworks(bool async, bool show_hidden) { if(ESP8266WiFiClass::_scanStarted) { return WIFI_SCAN_RUNNING; @@ -589,7 +589,7 @@ int8_t ESP8266WiFiClass::scanNetworks(bool async) config.ssid = 0; config.bssid = 0; config.channel = 0; - config.show_hidden = 0; + config.show_hidden = show_hidden; if(wifi_station_scan(&config, reinterpret_cast(&ESP8266WiFiClass::_scanDone))) { ESP8266WiFiClass::_scanComplete = false; ESP8266WiFiClass::_scanStarted = true; diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFi.h b/libraries/ESP8266WiFi/src/ESP8266WiFi.h index 0d732ab4c..2623b2fb6 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFi.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFi.h @@ -240,7 +240,7 @@ public: * * return: Number of discovered networks */ - int8_t scanNetworks(bool async = false); + int8_t scanNetworks(bool async = false, bool show_hidden = false); /* * Return the SSID discovered during the network scan.