1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-09 03:41:41 +03:00

Merge remote-tracking branch 'esp8266/master'

This commit is contained in:
Me No Dev 2015-12-17 01:36:40 +02:00
commit a331927e93
7 changed files with 135 additions and 61 deletions

View File

@ -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. 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 ### ### 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). 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).

View File

@ -28,6 +28,8 @@ platformio boards espressif
# Initialise base project # Initialise base project
# #
platformio init --board %TYPE%(see above) 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 # The next files/directories will be created in myproject
# platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-| # 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 - Place your source code to `src` directory
- Build/Upload project - Build/Upload project
``` ```bash
# process/build project # process/build project
platformio run platformio run
# build+upload firmware # build+upload firmware
platformio run --target upload 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 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 ## 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 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

View File

@ -60,7 +60,6 @@ void loop() {
} }
http.end(); http.end();
} }
delay(1000); delay(1000);

View File

@ -30,7 +30,6 @@
#include "ESP8266HTTPClient.h" #include "ESP8266HTTPClient.h"
/** /**
* constractor * constractor
*/ */
@ -117,7 +116,7 @@ void HTTPClient::begin(String url, String httpsFingerprint) {
if(index >= 0) { if(index >= 0) {
// auth info // auth info
String auth = host.substring(0, index); 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); _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; return HTTPC_ERROR_SEND_HEADER_FAILED;
} }
// create buffer for read size_t buff_size = HTTP_TCP_BUFFER_SIZE;
uint8_t buff[1460] = { 0 };
int len = size; int len = size;
int bytesWritten = 0; int bytesWritten = 0;
@ -345,6 +343,16 @@ int HTTPClient::sendRequest(const char * type, Stream * stream, size_t size) {
len = -1; len = -1;
} }
// if possible create smaller buffer then HTTP_TCP_BUFFER_SIZE
if((len > 0) && (len < HTTP_TCP_BUFFER_SIZE)) {
buff_size = len;
}
// create buffer for read
uint8_t * buff = (uint8_t *) malloc(buff_size);
if(buff) {
// read all data from stream and send it to server // read all data from stream and send it to server
while(connected() && stream->available() && (len > 0 || len == -1)) { while(connected() && stream->available() && (len > 0 || len == -1)) {
@ -352,10 +360,10 @@ int HTTPClient::sendRequest(const char * type, Stream * stream, size_t size) {
size_t s = stream->available(); size_t s = stream->available();
if(s) { if(s) {
int c = stream->readBytes(buff, ((s > sizeof(buff)) ? sizeof(buff) : s)); int c = stream->readBytes(buff, ((s > buff_size) ? buff_size : s));
// write it to Stream // write it to Stream
bytesWritten += _tcp->write((const uint8_t *)buff, c); bytesWritten += _tcp->write((const uint8_t *) buff, c);
if(len > 0) { if(len > 0) {
len -= c; len -= c;
@ -367,7 +375,9 @@ int HTTPClient::sendRequest(const char * type, Stream * stream, size_t size) {
} }
} }
if(size && (int)size != bytesWritten) { 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] Stream payload bytesWritten %d and size %d mismatch!.\n", bytesWritten, _size);
DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] ERROR SEND PAYLOAD FAILED!"); DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] ERROR SEND PAYLOAD FAILED!");
return HTTPC_ERROR_SEND_PAYLOAD_FAILED; return HTTPC_ERROR_SEND_PAYLOAD_FAILED;
@ -375,6 +385,11 @@ int HTTPClient::sendRequest(const char * type, Stream * stream, size_t size) {
DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] Stream payload written: %d\n", bytesWritten); DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] Stream payload written: %d\n", bytesWritten);
} }
} else {
DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] too less ram! need " HTTP_TCP_BUFFER_SIZE);
return HTTPC_ERROR_TOO_LESS_RAM;
}
// handle Server Response (Header) // handle Server Response (Header)
return handleHeaderResponse(); return handleHeaderResponse();
} }
@ -434,9 +449,17 @@ int HTTPClient::writeToStream(Stream * stream) {
int len = _size; int len = _size;
int bytesWritten = 0; int bytesWritten = 0;
// create buffer for read size_t buff_size = HTTP_TCP_BUFFER_SIZE;
uint8_t buff[1460] = { 0 };
// if possible create smaller buffer then HTTP_TCP_BUFFER_SIZE
if((len > 0) && (len < HTTP_TCP_BUFFER_SIZE)) {
buff_size = len;
}
// create buffer for read
uint8_t * buff = (uint8_t *) malloc(buff_size);
if(buff) {
// read all data from server // read all data from server
while(connected() && (len > 0 || len == -1)) { while(connected() && (len > 0 || len == -1)) {
@ -444,7 +467,7 @@ int HTTPClient::writeToStream(Stream * stream) {
size_t size = _tcp->available(); size_t size = _tcp->available();
if(size) { if(size) {
int c = _tcp->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size)); int c = _tcp->readBytes(buff, ((size > buff_size) ? buff_size : size));
// write it to Stream // write it to Stream
bytesWritten += stream->write(buff, c); bytesWritten += stream->write(buff, c);
@ -459,12 +482,19 @@ int HTTPClient::writeToStream(Stream * stream) {
} }
} }
free(buff);
DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] connection closed or file end (written: %d).\n", bytesWritten); DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] connection closed or file end (written: %d).\n", bytesWritten);
if(_size && _size != bytesWritten) { if(_size && _size != bytesWritten) {
DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] bytesWritten %d and size %d mismatch!.\n", bytesWritten, _size); 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(); end();
return bytesWritten; return bytesWritten;
} }
@ -509,12 +539,13 @@ String HTTPClient::errorToString(int error) {
return String("no stream"); return String("no stream");
case HTTPC_ERROR_NO_HTTP_SERVER: case HTTPC_ERROR_NO_HTTP_SERVER:
return String("no HTTP server"); return String("no HTTP server");
case HTTPC_ERROR_TOO_LESS_RAM:
return String("too less ram");
default: default:
return String(); return String();
} }
} }
/** /**
* adds Header to the request * adds Header to the request
* @param name * @param name

View File

@ -41,6 +41,10 @@
#define HTTPC_ERROR_CONNECTION_LOST (-5) #define HTTPC_ERROR_CONNECTION_LOST (-5)
#define HTTPC_ERROR_NO_STREAM (-6) #define HTTPC_ERROR_NO_STREAM (-6)
#define HTTPC_ERROR_NO_HTTP_SERVER (-7) #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 /// HTTP codes see RFC7231
typedef enum { typedef enum {

View File

@ -561,7 +561,7 @@ void ESP8266WiFiClass::scanDelete()
_scanComplete = false; _scanComplete = false;
} }
int8_t ESP8266WiFiClass::scanNetworks(bool async) int8_t ESP8266WiFiClass::scanNetworks(bool async, bool show_hidden)
{ {
if(ESP8266WiFiClass::_scanStarted) { if(ESP8266WiFiClass::_scanStarted) {
return WIFI_SCAN_RUNNING; return WIFI_SCAN_RUNNING;
@ -589,7 +589,7 @@ int8_t ESP8266WiFiClass::scanNetworks(bool async)
config.ssid = 0; config.ssid = 0;
config.bssid = 0; config.bssid = 0;
config.channel = 0; config.channel = 0;
config.show_hidden = 0; config.show_hidden = show_hidden;
if(wifi_station_scan(&config, reinterpret_cast<scan_done_cb_t>(&ESP8266WiFiClass::_scanDone))) { if(wifi_station_scan(&config, reinterpret_cast<scan_done_cb_t>(&ESP8266WiFiClass::_scanDone))) {
ESP8266WiFiClass::_scanComplete = false; ESP8266WiFiClass::_scanComplete = false;
ESP8266WiFiClass::_scanStarted = true; ESP8266WiFiClass::_scanStarted = true;

View File

@ -240,7 +240,7 @@ public:
* *
* return: Number of discovered networks * 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. * Return the SSID discovered during the network scan.