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:
commit
a331927e93
10
README.md
10
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.
|
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).
|
||||||
|
@ -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
|
||||||
|
@ -60,7 +60,6 @@ void loop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
http.end();
|
http.end();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(1000);
|
delay(1000);
|
||||||
|
@ -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,34 +343,51 @@ int HTTPClient::sendRequest(const char * type, Stream * stream, size_t size) {
|
|||||||
len = -1;
|
len = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// read all data from stream and send it to server
|
// if possible create smaller buffer then HTTP_TCP_BUFFER_SIZE
|
||||||
while(connected() && stream->available() && (len > 0 || len == -1)) {
|
if((len > 0) && (len < HTTP_TCP_BUFFER_SIZE)) {
|
||||||
|
buff_size = len;
|
||||||
// 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(size && (int)size != bytesWritten) {
|
// create buffer for read
|
||||||
DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] Stream payload bytesWritten %d and size %d mismatch!.\n", bytesWritten, _size);
|
uint8_t * buff = (uint8_t *) malloc(buff_size);
|
||||||
DEBUG_HTTPCLIENT("[HTTP-Client][sendRequest] ERROR SEND PAYLOAD FAILED!");
|
|
||||||
return HTTPC_ERROR_SEND_PAYLOAD_FAILED;
|
|
||||||
|
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 {
|
} 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)
|
// handle Server Response (Header)
|
||||||
@ -434,35 +449,50 @@ 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 };
|
|
||||||
|
|
||||||
// read all data from server
|
// if possible create smaller buffer then HTTP_TCP_BUFFER_SIZE
|
||||||
while(connected() && (len > 0 || len == -1)) {
|
if((len > 0) && (len < HTTP_TCP_BUFFER_SIZE)) {
|
||||||
|
buff_size = len;
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
if(buff) {
|
||||||
DEBUG_HTTPCLIENT("[HTTP-Client][writeToStream] bytesWritten %d and size %d mismatch!.\n", bytesWritten, _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 > 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();
|
end();
|
||||||
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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;
|
||||||
|
@ -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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user