ESP8266 core for Arduino

Overview

Arduino core for ESP8266 WiFi chip

Quick links

Arduino on ESP8266

This project brings support for the ESP8266 chip to the Arduino environment. It lets you write sketches, using familiar Arduino functions and libraries, and run them directly on ESP8266, with no external microcontroller required.

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, and work with SD cards, servos, SPI and I2C peripherals.

Contents

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

  • Install the current upstream Arduino IDE at the 1.8.9 level or later. The current version is on the Arduino website.
  • Start Arduino and open the Preferences window.
  • Enter https://arduino.esp8266.com/stable/package_esp8266com_index.json into the File>Preferences>Additional Boards Manager URLs field of the Arduino IDE. You can add multiple URLs, separating them with commas.
  • Open Boards Manager from Tools > Board menu and install esp8266 platform (and don't forget to select your ESP8266 board from Tools > Board menu after installation).

Latest release Latest release

Boards manager link: https://arduino.esp8266.com/stable/package_esp8266com_index.json

Documentation: https://arduino-esp8266.readthedocs.io/en/3.0.2/

Using git version

Linux build status

Also known as latest git or master branch.

Using PlatformIO

PlatformIO is an open source ecosystem for IoT development with a cross-platform build system, a library manager, and full support for Espressif (ESP8266) development. It works on the following popular host operating systems: macOS, Windows, Linux 32/64, and Linux ARM (like Raspberry Pi, BeagleBone, CubieBoard).

Building with make

makeEspArduino is a generic makefile for any ESP8266 Arduino project. Using make instead of the Arduino IDE makes it easier to do automated and production builds.

Documentation

Documentation for latest development version: https://arduino-esp8266.readthedocs.io/en/latest/

Issues and support

ESP8266 Community Forum is a well-established community for questions and answers about Arduino for ESP8266. Stackoverflow is also an alternative. If you need help, have a "How do I..." type question, have a problem with a 3rd party library not hosted in this repo, or just want to discuss how to approach a problem, please ask there.

If you find the forum useful, please consider supporting it with a donation.
Donate

If you encounter an issue which you think is a bug in the ESP8266 Arduino Core or the associated libraries, or if you want to propose an enhancement, you are welcome to submit it here on Github: https://github.com/esp8266/Arduino/issues.

Please provide as much context as possible, as well as the information requested in the issue template:

  • ESP8266 Arduino core version which you are using (you can check it in Boards Manager)
  • your sketch code; please wrap it into a code block, see Github markdown manual
  • when encountering an issue that happens at run time, attach the serial output. Wrap it into a code block, just like the code.
  • for issues that happen at compile time, enable verbose compiler output in the IDE preferences, and attach that output (also inside a code block)
  • ESP8266 development board model
  • IDE settings (board choice, flash size)
  • etc

Contributing

For minor fixes of code and documentation, please go ahead and submit a pull request. A gentle introduction to the process can be found here.

Check out the list of issues that are easy to fix — easy issues pending. Working on them is a great way to move the project forward.

Larger changes (rewriting parts of existing code from scratch, adding new functions to the core, adding new libraries) should generally be discussed by opening an issue first. PRs with such changes require testing and approval.

Feature branches with lots of small commits (especially titled "oops", "fix typo", "forgot to add file", etc.) should be squashed before opening a pull request. At the same time, please refrain from putting multiple unrelated changes into a single pull request.

License and credits

Arduino IDE is developed and maintained by the Arduino team. The IDE is licensed under GPL.

ESP8266 core includes an xtensa gcc toolchain, which is also under GPL.

Esptool.py was initially created by Fredrik Ahlberg (@themadinventor, @kongo), and is currently maintained by Angus Gratton (@projectgus) under GPL 2.0 license.

Espressif's NONOS SDK included in this build is under Espressif MIT License.

ESP8266 core files are licensed under LGPL.

SPI Flash File System (SPIFFS) written by Peter Andersson is used in this project. It is distributed under the MIT license.

umm_malloc memory management library written by Ralph Hempel is used in this project. It is distributed under the MIT license.

SoftwareSerial library and examples written by Peter Lerup. Distributed under LGPL 2.1.

BearSSL library written by Thomas Pornin, built from https://github.com/earlephilhower/bearssl-esp8266, is used in this project. It is distributed under the MIT License.

LittleFS library written by ARM Limited and released under the BSD 3-clause license.

uzlib library written and (c) 2014-2018 Paul Sokolovsky, licensed under the ZLib license (https://www.zlib.net/zlib_license.html). uzlib is based on: tinf library by Joergen Ibsen (Deflate decompression); Deflate Static Huffman tree routines by Simon Tatham; LZ77 compressor by Paul Sokolovsky; with library integrated and maintained by Paul Sokolovsky.

Other useful links

Toolchain repo

Lwip link layer repo

SoftwareSerial repo

Serial Monitor Arduino IDE plugin Original discussion here, quick download there.

FTP Client/Server Library

Issues
  • Esp8266 IP Address not reachable after a while

    Esp8266 IP Address not reachable after a while

    Hi All, ESP abecomes unavailable after sometime intermittently where it says Connection to http://192.168.1.4:80 refused org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.1.4:80 refused

    The same happens from the web browser and then it starts working randomly. Checking the logs of the ESP device itself there is no crash.

    Am i missing something in the setup of the server which can keep it alive all the time.

    I thought this was a webserver problem but it seems like and ESP issue. Here is the related issue https://github.com/me-no-dev/ESPAsyncWebServer/issues/54

    Cheers, Akash A

    type: bug component: libraries waiting for feedback 
    opened by thehellmaker 326
  • "Phase Locked" Waveform: fix significant jitter, that stresses servos and is clearly audible in Tone output

    • Improves jitter that occurs when multiple GPIOs are served
    • Improves on the poor timing which results in servos with narrow deadband constantly re-adjusting
    • Also the Tone library example showed serious interference on various frequencies across 6 or 8 octaves
    • Fixes 0 duration duty of off-cycle handling
    • Allows finishing on HIGH, instead of always forcing LOW on waveform stop. This is required for instance to use waveform for software serial output signal generation, something I am tinkering with for for well over a year now (reminder: I am the current maintainer and author of EspSoftwareSerial).
    • Allows setting waveform at CPU cycle precision instead of just microseconds.
    • Proper semantics of stopping (startWaveformCycles(pin, timeHighCycles, timeLowCycles, runTimeCycles)), runTimeCycles gets applied to the next started FULL period, instead of randomly relative to time of call.
    opened by dok-net 165
  • Writing files with SPIFFS no longer working for ESP-01

    Writing files with SPIFFS no longer working for ESP-01

    Basic Infos

    SPIFFS no longer works on a ESP-01.

    Hardware

    Hardware: ESP-01 Core Version: 2.3.0-rc2 also tried with stable

    I reproduced this problem on several different ESP-01. So seems not to be hardware related

    Description

    Problem description SPIFFS worked for a long time but all of a sudden it stoped working on a ESP-01. Whenever i write a file its not existing or empty after next boot. Using the same sketch on an Wemos D1 mini its works without problems. Actually im only facing this problem on a ESP-01.

    Settings in IDE

    Module: Generic ESP8266 Module Flash Size: 1MB (64k SPIFFS), also tried with 512k (64k SPIFFS) CPU Frequency: 80Mhz Flash Mode: DIO Flash Frequency: 40Mhz Upload Using: SERIAL Reset Method: ck

    Sketch

    #include <FS.h>

    void setup() { Serial.begin(115200);

    if (!SPIFFS.begin()) Serial.println("error while mounting filesystem!");

    readFile(); writeFile(); readFile();

    Serial.println("done"); }

    void readFile() { Serial.println("reading"); File f = SPIFFS.open("/myFile.txt", "r"); if (!f) Serial.println("file not available"); else if (f.available()<=0) Serial.println("file exists but available <0"); else { String ssidString = f.readStringUntil('#'); Serial.print("read from file: "); Serial.println(ssidString); } f.close(); }

    void writeFile() { Serial.println("writing"); File f = SPIFFS.open("/myFile.txt", "w"); if (!f) Serial.println("File creation failed"); else { f.print("networkConfig"); f.print("#"); f.flush(); f.close(); } }

    void loop() { }

    Debug Messages

    messages here

    • Output of first run: reading file not available writing reading read from file: <--- here we see the problem already done

    • Output of second run: eading file not available writing reading read from file: done

    • Output of third run: reading read from file: writing File creation failed <---- check this! reading read from file: done

    Any ideas? thank you!

    opened by funtastic99 162
  • SSL support

    SSL support

    Hi! I would like to know if you plan to include SSL support in the libraries. I've tryed to send some https requests with no sucess.

    It would be cool if it the ESP could act as a secure server too.

    I've checked the some examples from the sdk and they have a code to create a secure server with digital certificate.

    Thanks!

    type: enhancement component: libraries component: network 
    opened by anteph 155
  • SoftwareSerial: wdt reset

    SoftwareSerial: wdt reset

    I use both SoftwareSerial and WiFiClient. During normal operations, it sometimes works for many hours but other times it gives a wdt reset. This looks like it has a relation between SoftwareSerial and WiFiClient.

    If I use mySerial.enableRX(false) before starting the function with the WiFiClient, it seems to keep working, otherwise it looks like to crash on different places.

    ets Jan 8 2013,rst cause:4, boot mode:(3,6) wdt reset This was during client.print() operations, the first client.print with the data succeeded, then just after that, only when sending an empty line with client.print("\r\n") it gave the wdt reset.

    But earlier, it was just during receiving data on the SoftwareSerial: `ets Jan 8 2013,rst cause:4, boot mode:(1,6)``

    And a couple of other times also during normal receiving on the serial: ets Jan 8 2013,rst cause:4, boot mode:(3,7)

    So many different boot modes, they all seem only to occur if I don't use the mySerial.enableRX(false).

    Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

    type: troubleshooting component: 3rd party lib 
    opened by supersjimmie 142
  • ESP.deepSleep hangs after wakeup - ESP12F (Working on older chips)

    ESP.deepSleep hangs after wakeup - ESP12F (Working on older chips)

    Basic Infos

    • [x] This issue complies with the issue POLICY doc.
    • [x] I have read the documentation at readthedocs and the issue is not addressed there.
    • [x] I have tested that the issue is present in current master branch (aka latest git).
    • [x] I have searched the issue tracker for a similar issue.
    • [x] If there is a stack dump, I have decoded it.
    • [x] I have filled out all fields below.

    Platform

    • Hardware: ESP-12F - ESP8266MOD
    • Core Version: SDK:3.0.0-dev(c0f7b44)/Core:2.5.0
    • Development Env: Arduino IDE 1.8.5
    • Operating System: Windows 10

    Settings in IDE

    • Module: Generic ESP8266 Module
    • Flash Mode: QIO (try DIO also)
    • Flash Size: 4MB
    • lwip Variant: v1.4|v2 Lower Memory|Higher Bandwidth (try all)
    • Reset Method: none
    • Flash Frequency: 40Mhz
    • CPU Frequency: 80Mhz
    • Upload Using: SERIAL
    • Upload Speed: 115200

    Problem Description

    A few months ago, we start developing a custom PCB using ESP8266, ESP12F from AI.

    esptool.py --port COM14 flash_id esptool.py v2.6 Serial port COM14 Connecting... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi MAC: cc:50:e3:04:37:7e Uploading stub... Running stub... Stub running... Manufacturer: 20 Device: 4016 Detected flash size: 4MB Hard resetting via RTS pin...

    After successfully deploy 100 boards, we receive a new batch from a distributor on China. The new chip, looks the same as the old one, except it has an Expressif logo instead of AI logo.

    Then, using esptool, we check that was manufactured by other factory

    esptool.py --port COM14 flash_id esptool.py v2.6 Serial port COM14 Connecting... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi MAC: dc:4f:22:5e:93:23 Uploading stub... Running stub... Stub running... Manufacturer: 0e Device: 4016 Detected flash size: 4MB Hard resetting via RTS pin...

    The PCB was build using all the following design rules and experiences from Espressif, blogs, etc. Example: https://www.instructables.com/id/ESP-12F-ESP8266-Module-Minimal-Breadboard-for-Flas/

    Also, we using several recomendations from videos of Andreas Spiess. @SensorsIOT and read post by @igrr.

    image

    • Power: 3 x AA Batteries (4,5v)

    • MCP1700 LDO for 3,3v

    • Capacitor filters: 1000uF and .1uf - VCC to GND

    • GPIO0 - pull up 10k resistor - VCC

    • GPIO2 - pull up 10k resistor - VCC

    • GPIO15 - pull down 10k resistor - GND

    • EN - pull up 10k resistor - VCC

    • RESET - pull up 10k resistor - VCC

    • HARD WIRED GPIO16 to RESET pin.

    The sensor, reads a value, then enter a deepSleep cycle until wakeups. All was working fine in more than 100 pcb!!!

    After receiving the new batch, with the same PCB and CODE, the ESP hangs after wake up.

    We already try 10 chips off the new bach, all have the same issue.

    Trying this simple sketch:

    MCVE Sketch

    
    /**
     * An example showing how to put ESP8266 into Deep-sleep mode
     */
    
     #include <Arduino.h>
    extern "C" {
    #include <user_interface.h>
    }
    
    #define STATUS_LED  2   
     
    void setup() {
    
      
      pinMode(STATUS_LED, OUTPUT);
      
      Serial.begin(74880);
      Serial.setTimeout(2000);
    
      digitalWrite(STATUS_LED, false);
    
      // Wait for serial to initialize.
      while(!Serial) { }
    
      Serial.print("Chip ID: ");
      Serial.println(ESP.getChipId());
    
      rst_info *rinfo = ESP.getResetInfoPtr();
    
      Serial.print(String("\nResetInfo.reason = ") + (*rinfo).reason + ": " + ESP.getResetReason() + "\n");
    
      Serial.println(".");  
      Serial.println("I'm awake.");
    
      delay(1000);
    
      Serial.println("Going into deep sleep for 3 seconds");
      ESP.deepSleep(3e6);    
    
      delay(5000);
    }
    
    void loop() {
    }
    
    
    

    Debug Messages ON WORKING CHIP

    ets Jan  8 2013,rst cause:2, boot mode:(3,6)
    
    load 0x4010f000, len 1384, room 16 
    tail 8
    chksum 0x2d
    csum 0x2d
    v951aeffa
    ~ld
    Chip ID: 276350
    
    ResetInfo.reason = 5: Deep-Sleep Wake
    .
    I'm awake.
    Going into deep sleep for 3 seconds
    
     ets Jan  8 2013,rst cause:2, boot mode:(3,6)
    
    load 0x4010f000, len 1384, room 16 
    tail 8
    chksum 0x2d
    csum 0x2d
    v951aeffa
    ~ld
    Chip ID: 276350
    
    ResetInfo.reason = 5: Deep-Sleep Wake
    .
    I'm awake.
    Going into deep sleep for 3 seconds
    
    

    Debug Messages ON NOT WORKING CHIP

    ets Jan  8 2013,rst cause:2, boot mode:(3,6)
    
    load 0x4010f000, len 1384, room 16 
    tail 8
    chksum 0x2d
    csum 0x2d
    v951aeffa
    ~ld
    Chip ID: 6198051
    
    ResetInfo.reason = 5: Deep-Sleep Wake
    .
    I'm awake.
    Going into deep sleep for 3 seconds
    
     ets Jan  8 2013,rst cause:2, boot mode:(3,6)
    
    

    Hangs/Freeze until power down, or hard reset (button from RESET to GND).

    Things we already try

    • Erase all flash memory using esptool.py
    • Changing firmware version from ESP CORE (2.0.0, 2.1.0, 2.4.0, 2.5.0)
    • Changing values of pullup resistors (10k, 4k7, 1k)
    • Using a stable protoboard 5v power bank
    • Connection from RESET to GPIO16 -Hardwire -RESISTOR 470, 1k, 10 -Using a diode, schottky -Adding aditional 10pF capacitor from RESET to GND

    Similar ISSUES

    #5892 #2768 https://github.com/universam1/iSpindel/issues/59

    Please HELP US!!! Can be a faulty batch?

    opened by petrilloa 139
  • [BUG]WEB Server reset module randomly (Watchdog Reset with Watchdog disabled)

    [BUG]WEB Server reset module randomly (Watchdog Reset with Watchdog disabled)

    Hi I am using staging module and I compile using 1.6.4 under windows 7 64bit I use ESP8266 01 to be a bridge between 3D printer and a web browser to get printer information, for this I do a request every 2 seconds to refresh the content of the web page and this make the module to reset randomly.

    it happens even watchdog is disabled ( between 10min to 8h) I open 2 web pages at once to make it happen faster if no pages open the module do not reset at least within 48h ( I did not tested longer) so currently can be String issue (but did not saw any memory leak) or Webserver issue but I do not know what to test

    Is it a known issue ? I there anything wrong in the code ? or anything that should be added to prevent module reset ?

    Thanks in advance

    I narrow down the minimal code using helloserver.ino to reproduce the problem (IP is harcoded to limit the usage of any function)

    #include <ESP8266WiFi.h>
    #include <WiFiClient.h>
    #include <ESP8266WebServer.h>
    
    const char* ssid = "dlink";
    const char* password = "****";//I remove my password
    
    ESP8266WebServer server(80);
    
    void handleRoot() {
      String message = "<HTML><BODY><H1>Page static</H1>";
      message += "<IFRAME  width=\"200\" height=\"200\"  NAME=\"frmstatus\"  ID=\"frmstatus\"  SRC=\"http://192.168.0.115/STATUS\"></IFRAME>\n<SCRIPT TYPE=\"text/javascript\">\n";
      message +="setInterval(function(){";
      message +="var ifrm=document.getElementById(\"frmstatus\");var doc=ifrm.contentDocument?ifrm.contentDocument:ifrm.contentWindow.document;";
      message +="doc.location.reload(true);";
      message +="},2000);\n";
      message +="</SCRIPT>\n</BODY></HTML>";
      server.send(200, "text/html", message);
    
    }
    
    void handleSubRoot() {
      static long cnta=0;
      static long cntb=0;
      cnta++;
      if(cnta>100000000)
      {
          cntb++;
          cnta=0;
      }
      String message = "<HTML>\n<BODY>\n<H1>refreshed page</H1>";
      message += String(cntb) + "/" + String(cnta);
      message +="</BODY>\n</HTML>\n";
      server.send(200, "text/html", message);
    
    }
    
    void setup(void){
      ESP.wdtDisable(); //enable or disable reset will happen 
      Serial.begin(115200);
      WiFi.begin(ssid, password);
      Serial.println("");
    
      // Wait for connection
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.print("Connected to ");
      Serial.println(ssid);
      Serial.print("IP address: ");
      Serial.println(WiFi.localIP());
    
    
      server.on("/", handleRoot);
      server.on("/STATUS", handleSubRoot);
    
      server.begin();
      Serial.println("HTTP server started");
    }
    
    void loop(void){
      server.handleClient();
    } 
    
    opened by luc-github 136
  • Fluctuating ADC with stabilized source

    Fluctuating ADC with stabilized source

    I supply the ADC with a stable voltage, supplied by a separate LM1117 3.3V with 100uF capacitor a resistor voltage divider. The LM1117 will provide 3.3V regardless of the load of the ESP's own voltage regulator, the capacitor takes away any noise and the 2 resistors make a fixed voltage suitable to be read by the ADC. (GND for both the ESP and the LM1117 are connected)

    Then, based on this article, I tried to add more stability to the readings: https://www.quora.com/Why-is-a-little-delay-needed-after-analogRead-in-Arduino So I do subsequent readings and only use the last one. I even do it 3 times instead of 2, and then only use the last one because that one is supposed to be stable.

    #define ANALOGPIN A0;
    ...
    analog = analogRead(ANALOGPIN);
    delay(1);
    analog = analogRead(ANALOGPIN);
    analog = analogRead(ANALOGPIN);
    Serial.print(F("Stablized Analog pin: "));
    Serial.println(analog);
    

    Readings are done and stored every minute.

    The ADC reading has 2 fluctuations, a slow drift and spikes. This show the ADC output: analogRead fluctuations

    This has been tested with the mentioned 'external' 3.3V regulator and with the 3.3V output from the ESP itself. I also tried with or without the subsequent readings. I don't really mind the spikes because I can add some code to flatten those, but the "long" wave-like fluctuation makes it all useless.

    (I need this to read an MQ135 sensor.)

    Using current core stable and Arduino IDE 1.6.9.

    Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

    type: troubleshooting 
    opened by supersjimmie 129
  • Automatic reboot after wdt reset

    Automatic reboot after wdt reset

    My boards crash from time to time and I do not know why. After such crash the wd reset shows up (boot mode:(1,6)), but the board does not restart automatically. How can I make the boards reset/restart automatically after a wdt reset?

    Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

    type: bug component: uploader 
    opened by SensorsIot 129
  • Wemos d1 mini not waking up

    Wemos d1 mini not waking up

    Im trying a simple deepsleep sketch to use it in one of my projects but when the deepsleep ends, the led flashes once and nothing happens. how can i fix this?

    it sleeps because it doesnt print the deepsleep not working message but when its waking up, the led flashes once and nothing happens I connected GPIO 16 to rst

    i also debuged it with Serial.setDebugOutput(true);

    Debug Messages

    22:02:17.751 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6) 22:02:17.751 -> 22:02:17.751 -> load 0x4010f000, len 1384, room 16 22:02:17.751 -> tail 8 22:02:17.751 -> chksum 0x2d 22:02:17.751 -> csum 0x2d 22:02:17.785 -> v8b899c12 22:02:17.785 -> ~ld 22:02:51.502 -> 22:02:51.502 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6) 22:02:51.502 ->

    my code:

    #include <ESP.h>

    void setup() { Serial.begin(2400); Serial.setDebugOutput(true); }

    void loop() { // put your main code here, to run repeatedly: Serial.print("Uaaah. I'm tired. Going back to bed for "); Serial.println(" minutes. Good night!"); Serial.println("---"); ESP.deepSleep(20 * 1000000); delay(100); Serial.println("deepsleep not working"); }

    opened by flowhl 128
  • WEMOS D1 mini Pro - 16M supporting

    WEMOS D1 mini Pro - 16M supporting

    Hardware

    Hardware: WEMOS D1 mini Pro - 16M

    What's new with D1 mini Pro

    • 16M bytes (128M bit) Flash
    • External antenna connector
    • Built-in ceramic antenna
    • New CP2104 USB-TO-UART IC
    • Same size as D1 mini, but more light

    View D1 mini Pro on WeMos Aliexpress store

    component: boards 
    opened by 4refr0nt 120
  • Create Range_Extender_with_WiFi_Manager.ino

    Create Range_Extender_with_WiFi_Manager.ino

    WiFi range extender with a WiFi manager. Allows you to change the WiFi network the extender is connected to Led blinks at different rates to indicate various states of the extender (useful for debugging) GPIO 0 is used as a reset button: this deletes the WiFi credentials stored in the file system.

    opened by Pius171 0
  • Updater lifetime callbacks

    Updater lifetime callbacks

    follow-up of https://github.com/esp8266/Arduino/pull/8598 we removed some WiFiClient stopAll(s) from updaters, make some lifetime callbacks similar to ArduinoOTA ones so it can be handled by the user

    arduino ota part is not 'proxied' to updater counterparts, since the idea there is to track things specific to arduino ota and not anything global

    not tested

    opened by mcspr 0
  • UpdaterClass error [10] Magic byte is wrong most of the time

    UpdaterClass error [10] Magic byte is wrong most of the time

    Update firmware returns error [10] Magic byte is wrong, not 0xE9 while the first byte of bin file is 0xE9

    • [ ] This issue complies with the issue POLICY doc.
    • [x] I have read the documentation at readthedocs and the issue is not addressed there.
    • [x] I have tested that the issue is present in the current master branch (aka latest git).
    • [x] I have searched the issue tracker for a similar issue.
    • [ ] If there is a stack dump, I have decoded it.
    • [x] I have filled out all fields below.

    Platform

    • Hardware: [ESP-12]
    • Core Version: [3.0.2]
    • Development Env: [Platformio]
    • Operating System: [Windows]

    Settings in IDE

    • Module: [Nodemcu]
    • Flash Mode: [qio|dio|other]
    • Flash Size: [4MB/1MB]
    • lwip Variant: [v1.4|v2 Lower Memory|Higher Bandwidth]
    • Reset Method: [nodemcu]
    • Flash Frequency: [40Mhz]
    • CPU Frequency: [80Mhz]
    • Upload Using: [SERIAL]
    • Upload Speed: [115200] (serial upload only)

    Problem Description

    I am trying to download the ESP firmware bin file from AWS, however, since I could not pass the HTTPclient object to the ESPhttpUpdateobject, I tried to create a method to download firmware and upload on the ESP chip.

    Sketch

    
    #include <Arduino.h>
    #include <ESP8266HTTPClient.h>
    #include "AWSClient4.h"
    #include "Utils.h"
    
    void executeOTAFirmware()
    {
    DateTimeProvider *dateTimeProvider = new DateTimeProvider;
      char *dateTime = dateTimeProvider->getDateTime();
      Serial.printf("Date and Time: %s\r\n", dateTime);
      
      AWSClient4 *awsClient4 = new AWSClient4;
      awsClient4->setQuery("");
      awsClient4->setMethod("GET");
      awsClient4->setSignedHeaders("host;x-amz-content-sha256;x-amz-date");
      awsClient4->setAWSRegion(awsRegion);
      awsClient4->setAWSEndpoint(awsEndpoint);
      awsClient4->setAWSDomain(awsDomain);
      awsClient4->setAWSService("s3");
      awsClient4->setAWSKeyID(awsAccessKey);
      awsClient4->setAWSSecretKey(awsSecretKey);
      awsClient4->setDateTime(dateTime);
      awsClient4->setAWSPath(awsPath_WiFi);
      awsClient4->createSignature("");
    
      HTTPClient *httpClient = new HTTPClient;
      WiFiClientSecure *client = new WiFiClientSecure;
      if (client)
      {
        client->setInsecure();
        Log("\n\t[HTTPS] begin...");
        httpClient->begin(*client, url_WiFi);
        // httpClient.begin(client, awsDomain, 80, awsPath, true);
        httpClient->addHeader("x-amz-content-sha256", awsClient4->getPayloadHash());
        httpClient->addHeader("x-amz-date", awsClient4->getDateTime());
        httpClient->addHeader("Authorization", awsClient4->getAuthorization());
        httpClient->addHeader("Connection", "keep-alive");
        httpClient->collectHeaders(headerKeys, numberOfHeaders);
    
        Log("\n\t[HTTP] GET...");
        // start connection and send HTTP header
        int httpCode = httpClient->GET();
        if (httpCode == HTTP_CODE_OK)
        {
          Log("\n\tConnected successfully");
          //  get length of document (is -1 when Server sends no Content-Length header)
          size_t contentLength = httpClient->header("Content-Length").toInt();
          bool isValidContentType = (httpClient->header("Content-Type") == "application/octet-stream") ? true : false;
    
          Serial.printf("\n\tContent length: %ld, Is valid content: %s\n", contentLength, (isValidContentType ? "Yes" : "No"));
          // check contentLength and content type
          if (contentLength && isValidContentType)
          {
            // Check if there is enough to OTA Update
            UpdaterClass *update = new UpdaterClass;
            bool canBegin = update->begin(contentLength);
    
            // If yes, begin
            if (canBegin)
            {
              Serial.print("\n\tBegin OTA. This may take 2 - 5 mins to complete. Things might be quite for a while.. Patience!");
              // No activity would appear on the Serial monitor
              // So be patient. This may take 2 - 5mins to complete
              delay(50);
              size_t written = update->writeStream(*client);
    
              if (written == contentLength)
              {
                Serial.print("\n\tWritten : " + String(written) + " successfully");
              }
              else
              {
                Serial.print("\n\tWritten only : " + String(written) + "/" + String(contentLength) + ". Retry?");
              }
    
              if (update->end())
              {
                Serial.print("\n\tOTA done!");
                if (update->isFinished())
                {
                  Serial.print("\n\tUpdate successfully completed. Rebooting.");
                  ESP.restart();
                }
                else
                {
                  Serial.print("\n\tUpdate not finished? Something went wrong!");
                }
              }
              else
              {
                Serial.print("\n\tError Occurred. Error #: " + String(update->getError()));
              }
              delete update;
            }
            else
            {
              Serial.print("\n\tNot enough space to begin OTA");
            }
          }
          else
          {
            Serial.print("\n\tThere was no content in the response");
          }
        }
        else
        {
          Serial.printf("\n\t[HTTP] GET... failed, error: %s\n", httpClient->errorToString(httpCode).c_str());
        }
    
        delete awsClient4;
    
        client->flush();
        client->stop();
        delete client;
    
        httpClient->end();
        delete httpClient;
      }
    }
    

    Debug Messages

        -----
        GET /wifi/WIFI.bin HTTP/1.1
        Host: xxxxxxxxx.xxxxxxxxxx.xxxxxxx.amazonaws.com
        User-Agent: ESP8266HTTPClient
        Accept-Encoding: identity;q=1,chunked;q=0.1,*;q=0
        Connection: keep-alive
        x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
        x-amz-date: 20220716T123911Z
        Authorization: AWS4-HMAC-SHA256 Credential=XXXXXXXXXXXXXXXXXX/20220716/xxxxxxxxx/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=d7bdcd376c19f7082f3b8dafa3e829d39692200fb9e828a6b4c07d9047af4921
        Content-Length: 0
    
        -----
        [HTTP-Client][handleHeaderResponse] RX: 'HTTP/1.1 200 OK
        '
        [HTTP-Client][handleHeaderResponse] RX: 'x-amz-id-2: Q9kWQticrr21YkDOXz4W4+egRRGDZwqHFLqgkFaJ3T3QgRUfjR996THGUgbwdchgRZNpsSW+kME=
        '
        [HTTP-Client][handleHeaderResponse] RX: 'x-amz-request-id: R36KWQYM6V6ENSP1
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Date: Sat, 16 Jul 2022 12:39:15 GMT
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Last-Modified: Fri, 15 Jul 2022 21:57:26 GMT
        '
        [HTTP-Client][handleHeaderResponse] RX: 'ETag: "e116552586477fbd1530aebceb332ee8"
        '
        [HTTP-Client][handleHeaderResponse] RX: 'x-amz-server-side-encryption: AES256
        '
        [HTTP-Client][handleHeaderResponse] RX: 'x-amz-version-id: biNSdrPNNyPdPOKOCBWC0muum.evqW1u
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Accept-Ranges: bytes
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Content-Type: application/octet-stream
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Server: AmazonS3
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Content-Length: 535920
        '
        [HTTP-Client][handleHeaderResponse] RX: '
        '
        [HTTP-Client][handleHeaderResponse] code: 200
        [HTTP-Client][handleHeaderResponse] size: 535920
    
        Free size: 10120, After GET
    
    	Connected successfully
    	Content length: 535920, Is valid content: Yes
        sleep disable
        [begin] roundedSize:       0x00083000 (536576)
        [begin] updateEndAddress:  0x00300000 (3145728)
        [begin] currentSketchSize: 0x00072000 (466944)
        [begin] _startAddress:     0x0027D000 (2609152)
        [begin] _currentAddress:   0x0027D000 (2609152)
        [begin] _size:             0x00082D70 (535920)
    
    	Begin OTA. This may take 2 - 5 mins to complete. Things might be quite for a while.. Patience!
        
        ERROR[10]: Magic byte is wrong, not 0xE9
    	Error Occurred. Error #: 10
    

    Check file data with a downloader sketch

    Sketch

    int httpCode = httpClient->GET();
        Serial.printf("\r\nFree size: %d, After GET\r\n", ESP.getFreeHeap());
        if (httpCode == HTTP_CODE_OK)
        {
          Log("\n\tConnected successfully");
          //  get length of document (is -1 when Server sends no Content-Length header)
          size_t contentLength = httpClient->header("Content-Length").toInt();
          bool isValidContentType = (httpClient->header("Content-Type") == "application/octet-stream") ? true : false;
    
          Serial.printf("\n\tContent length: %ld, Is valid content: %s\n", contentLength, (isValidContentType ? "Yes" : "No"));
          // check contentLength and content type
          if (contentLength && isValidContentType)
          {
    
            static uint8_t buff[128] = {0};
            while (httpClient->connected() && (contentLength > 0 || contentLength == -1))
            {
              // get available data size
              size_t size = client->available();
    
              if (size)
              {
                // read up to 128 byte
                int c = client->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size));
                // write it to Serial
                for (int i = 0; i < 128; i++)
                {
                  if (i % 16 == 0 && i != 0)
                  {
                    Serial.println("");
                  }
                  // Serial.printf("%02x ", buff[i]); //lower case
                  Serial.printf("%02X ", buff[i]); // uper case
                }
    
                Serial.println("");
    
                if (contentLength > 0)
                {
                  contentLength -= c;
                }
              }
              delay(1);
            }
    
            Log("\n\t[HTTPS] connection closed or file end.\n");
          }
          else
          {
            Serial.print("\n\tThere was no content in the response");
          }
        }
        else
        {
          Serial.printf("\n\t[HTTP] GET... failed, error: %s\n", httpClient->errorToString(httpCode).c_str());
        }
    

    Debug Messages

        -----
        [HTTP-Client][handleHeaderResponse] RX: 'HTTP/1.1 200 OK
        '
        [HTTP-Client][handleHeaderResponse] RX: 'x-amz-id-2: DO19YGEgC58NHgyN+S04yWRBAAvi0afCqZyxDEs2wgp49t5JUE3jCjRttnERcZrgu8RuHVwDci4=
        '
        [HTTP-Client][handleHeaderResponse] RX: 'x-amz-request-id: C9YDKYPYKHQ1P7WB
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Date: Sat, 16 Jul 2022 12:39:58 GMT
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Last-Modified: Fri, 15 Jul 2022 21:57:26 GMT
        '
        [HTTP-Client][handleHeaderResponse] RX: 'ETag: "e116552586477fbd1530aebceb332ee8"
        '
        [HTTP-Client][handleHeaderResponse] RX: 'x-amz-server-side-encryption: AES256
        '
        [HTTP-Client][handleHeaderResponse] RX: 'x-amz-version-id: biNSdrPNNyPdPOKOCBWC0muum.evqW1u
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Accept-Ranges: bytes
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Content-Type: application/octet-stream
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Server: AmazonS3
        '
        [HTTP-Client][handleHeaderResponse] RX: 'Content-Length: 535920
        '
        [HTTP-Client][handleHeaderResponse] RX: '
        '
        [HTTP-Client][handleHeaderResponse] code: 200
        [HTTP-Client][handleHeaderResponse] size: 535920
    
        Free size: 8304, After GET
    
            Connected successfully
            Content length: 535920, Is valid content: Yes
        E9 02 02 30 94 F4 10 40 00 F0 10 40 84 0D 00 00 
        00 80 FE 3F 00 90 FE 3F 1C 4B 00 40 B8 20 FF 3F 
        CC 24 00 40 FF BF 00 00 FF FF FF 1F F0 FF FF 3F 
        FF 0F 00 00 94 F0 10 40 04 90 FE 3F 04 10 FF 3F 
        90 E1 00 40 A8 DE 00 40 E8 2B 00 40 00 4A 00 40 
        4C 4A 00 40 BF 20 FF 3F C9 20 FF 3F C3 20 FF 3F 
        C7 20 FF 3F 00 07 00 60 F0 30 00 40 A0 2F 00 40 
        B7 1D C1 04 00 12 00 60 00 EE FF 9F 80 12 00 60 
        00 10 00 EB 7C 12 00 60 88 DC 00 40 CD 20 FF 3F 
        04 20 FF 3F 7C 20 FF 3F 40 20 FF 3F 9A 20 FF 3F 
        FF FF 00 00 12 C1 F0 31 DA FF C9 21 D9 11 09 31 
        D1 D9 FF CD 02 39 02 21 D7 FF 0C 14 29 1C 28 0D 
        40 44 11 01 D5 FF C0 00 00 28 0D 08 31 22 D2 10 
        29 0D 28 0C D8 11 1B 32 39 0C 22 02 00 C8 21 12 
        C1 10 0D F0 52 A1 01 12 C1 E0 C0 55 11 0C 44 3D 
        01 5A 22 C9 61 09 71 01 C8 FF C0 00 00 CD 02 CC 
        D2 38 01 21 C6 FF 01 C6 FF C0 00 00 86 00 00 00 
        0C 1C 08 71 2D 0C C8 61 12 C1 20 0D F0 00 00 00 
        12 C1 E0 0C 84 D9 51 4A 31 DD 02 22 D2 10 09 71 
        C2 61 06 E2 61 04 01 B8 FF C0 00 00 56 22 07 C2 
        A2 01 D0 CC B0 ED 02 DD 02 C6 14 00 0C 84 3D 01 
        2D 0C D9 01 D9 11 01 B0 FF C0 00 00 FC 42 38 01 
        22 AB FF C0 22 01 51 AF FF 2A 23 48 11 8B CC 27 
        B5 0F 7C F2 20 22 01 51 AC FF 2A 23 27 35 02 C6 
    

    Based on the debug message, the first byte of the file is 0xE9. I have tested "UpdaterClass" 10 times and it could only update ESP firmware just two times.

    The question is, what is wrong with that? I checked it several times.

    opened by BrotherV 1
  • WPA2 enterprise auth - is there support for TLSv1.2

    WPA2 enterprise auth - is there support for TLSv1.2

    Basic Infos

    • [x] This issue complies with the issue POLICY doc.
    • [X] I have read the documentation at readthedocs and the issue is not addressed there.
    • [X] I have tested that the issue is present in current master branch (aka latest git).
    • [X] I have searched the issue tracker for a similar issue.
    • [X] If there is a stack dump, I have decoded it.
    • [X] I have filled out all fields below.

    Platform

    • Hardware: [ESP-12]
    • Core Version: [a2982f96]
    • Development Env: [Arduino IDE]
    • Operating System: [Ubuntu]

    Settings in IDE

    • Module: [Nodemcu]
    • Flash Mode: [dout]
    • Flash Size: [1MB]
    • lwip Variant: [v2 Lower Memory]
    • Reset Method: [nodemcu]
    • Flash Frequency: [26Mhz]
    • CPU Frequency: [80Mhz]
    • Upload Using: [SERIAL]
    • Upload Speed: [115200]

    Problem Description

    Using latest version from git (a2982f96) with nonos-sdk pre 3 ESP8266 can successfully connect to WPA2 enterprise using EAP-PEAP as long as the access point supports TLSv1.1. When, however, the access point requires TLSv1.2 it appears as ESP8266 is still trying to use TLSv1.1 and thus connection establishment fails during EAP phase. Is there support for TLSv1.2 for WPA2 enterprise authentication and how can it be enabled?

    MCVE Sketch

    #include  <ESP8266WiFi.h>
    
    extern "C" {
    #include "wpa2_enterprise.h"
    }
    
    char ssid[] = "WLAN1";
    char username[] = "test1";
    char identity[] = "test1";
    char password[] = "secretpass1";
    
    void setup() {
      Serial.begin(115200);
      Serial.printf("SDK version: %s\n", system_get_sdk_version());
      Serial.printf("free heap: %d\n", ESP.getFreeHeap());
    
      WiFi.mode(WIFI_STA);
      wifi_set_opmode(STATION_MODE);
    
      struct station_config wifi_config;
      memset(&wifi_config, 0, sizeof(wifi_config));
      strcpy((char*)wifi_config.ssid, ssid);
      strcpy((char*)wifi_config.password, password);
    
      wifi_station_set_config(&wifi_config);
     
      //clear enterprise
      wifi_station_clear_cert_key();
      wifi_station_clear_enterprise_ca_cert();
      wifi_station_clear_enterprise_identity();
      wifi_station_clear_enterprise_username();
      wifi_station_clear_enterprise_password();
      wifi_station_clear_enterprise_new_password();
    
      //setup enterprise auth
      wifi_station_set_wpa2_enterprise_auth(1);
      wifi_station_set_enterprise_identity((uint8*)identity, strlen(identity));
      wifi_station_set_enterprise_username((uint8*)username, strlen(username));
      wifi_station_set_enterprise_password((uint8*)password, strlen(password));
      wifi_station_set_enterprise_new_password((uint8*)password, strlen(password));
    
      //connect
      wifi_station_connect();
      int waitCnt = 0;
      while (WiFi.status() != WL_CONNECTED) {
        ++waitCnt;
        if(waitCnt % 5 == 0){
          Serial.print("_");
        }else{
          Serial.print(".");  
        }
        
        delay(1000);
      }
    
      Serial.println("WiFi connected");
      Serial.print("IP address: ");
      Serial.println(WiFi.localIP());
    }
    
    unsigned int msgCnt = 0;
    unsigned int last = millis();
    void loop() {
      WiFiClient client;
      IPAddress remote(192, 168, 3, 1);
      if(last + 2000 < millis()){
        last = millis();
        Serial.printf("WiFi status: %d \n", WiFi.status());
        Serial.println("connecting");
        if (client.connect(remote, 2000)) {
          ++msgCnt;
          Serial.println("connected");
          client.printf("this is message nr: %d\n", msgCnt);
          Serial.println("written");
          client.stop();
          Serial.println("stopped");
        }
      }
    }
    

    Debug Messages

    with TLSv1.1 supported by the AP

    ESP8266 with WIFI debug enabled:

    .scandone
    state: 0 -> 2 (b0)
    state: 2 -> 3 (0)
    state: 3 -> 5 (10)
    add 0
    aid 1
    cnt 
    .EAP-PEAP: received 53 bytes encrypted data for Phase 2
    EAP-PEAP: received Phase 2: code=1 identifier=22 length=5
    EAP-PEAP: Phase 2 Request: type=1
    _EAP-PEAP: received 85 bytes encrypted data for Phase 2
    EAP-PEAP: received Phase 2: code=1 identifier=23 length=33
    EAP-PEAP: Phase 2 Request: type=26
    EAP-PEAP: Selected Phase 2 EAP vendor 0 method 26
    EAP-MSCHAPV2: RX identifier 23 mschapv2_id 23
    EAP-MSCHAPV2: Generate Challenge Response
    .EAP-PEAP: received 101 bytes encrypted data for Phase 2
    EAP-PEAP: received Phase 2: code=1 identifier=24 length=56
    EAP-PEAP: Phase 2 Request: type=26
    EAP-MSCHAPV2: RX identifier 24 mschapv2_id 23
    .EAP-PEAP: received 53 bytes encrypted data for Phase 2
    EAP-PEAP: received Phase 2: code=3 identifier=25 length=4
    EAP-PEAP: Phase 2 Success
    .
    connected with WLAN1, channel 6
    dhcp client start...
    wifi evt: 0
    ip:192.168.3.10,mask:255.255.255.0,gw:192.168.3.1
    wifi evt: 3
    WiFi connected
    IP address: 192.168.3.10
    WiFi status: 3 
    connecting
    connected
    written
    stopped
    
    hostapd debug log
    EAP: Server state machine created
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state IDLE
    IEEE 802.1X: ac:0b:fb:d8:03:46 CTRL_DIR entering state FORCE_BOTH
    wlan0: STA ac:0b:fb:d8:03:46 WPA: start authentication
    WPA: ac:0b:fb:d8:03:46 WPA_PTK entering state INITIALIZE
    wpa_driver_nl80211_set_key: ifindex=3 (wlan0) alg=0 addr=0x55816b1f60 key_idx=0 set_tx=1 seq_len=0 key_len=0
       addr=ac:0b:fb:d8:03:46
    nl80211: set_key failed; err=-22 Invalid argument)
    RSN: PTK removal from the driver failed
    WPA: ac:0b:fb:d8:03:46 WPA_PTK_GROUP entering state IDLE
    WPA: ac:0b:fb:d8:03:46 WPA_PTK entering state AUTHENTICATION
    WPA: ac:0b:fb:d8:03:46 WPA_PTK entering state AUTHENTICATION2
    WPA: Re-initialize GMK/Counter on first station
    Get randomness: len=32 entropy=1
    GMK - hexdump(len=32): c5 f2 ed 92 96 7c 34 b2 c2 1c d7 33 a8 a3 70 30 be 4f 90 4e be 39 8e 51 f6 97 55 02 95 34 5b 27
    Get randomness: len=32 entropy=0
    Key Counter - hexdump(len=32): f9 52 01 42 64 e5 c1 60 e7 53 7b 2c 48 ef 34 80 92 2b b2 c1 5f e3 42 83 e4 fd f0 d7 5d a4 ed 5f
    Get randomness: len=16 entropy=0
    GTK - hexdump(len=16): 47 61 fc 36 29 e9 87 40 cc 99 cc 0f 28 b1 ec f4
    wpa_driver_nl80211_set_key: ifindex=3 (wlan0) alg=3 addr=0x556af35f50 key_idx=1 set_tx=1 seq_len=0 key_len=16
    nl80211: KEY_DATA - hexdump(len=16): 47 61 fc 36 29 e9 87 40 cc 99 cc 0f 28 b1 ec f4
       broadcast key
    Get randomness: len=32 entropy=0
    WPA: Assign ANonce - hexdump(len=32): 34 b3 0b 79 ee b7 0d f1 33 0c 64 65 43 de f2 55 bd 65 b3 7d 4c d8 e3 50 81 8e 17 8e 83 02 2c e3
    wlan0: hostapd_new_assoc_sta: reschedule ap_handle_timer timeout for ac:0b:fb:d8:03:46 (300 seconds - ap_max_inactivity)
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state DISCONNECTED
    nl80211: Set STA flags - ifname=wlan0 addr=ac:0b:fb:d8:03:46 total_flags=0x60 flags_or=0x0 flags_and=0xfffffffe authorized=0
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: unauthorizing port
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state RESTART
    EAP: EAP entering state INITIALIZE
    wlan0: CTRL-EVENT-EAP-STARTED ac:0b:fb:d8:03:46
    EAP: EAP entering state SELECT_ACTION
    EAP: getDecision: no identity known yet -> CONTINUE
    EAP: EAP entering state PROPOSE_METHOD
    EAP: getNextMethod: vendor 0 type 1
    wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1
    EAP: EAP entering state METHOD_REQUEST
    EAP: building EAP-Request: Identifier 103
    EAP: EAP entering state SEND_REQUEST
    EAP: EAP entering state IDLE
    EAP: retransmit timeout 3 seconds (from dynamic back off; retransCount=0)
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state CONNECTING
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state AUTHENTICATING
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state REQUEST
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: Sending EAP Packet (identifier 103)
    wlan0: Event EAPOL_RX (23) received
    IEEE 802.1X: 4 bytes from ac:0b:fb:d8:03:46
       IEEE 802.1X: version=1 type=1 length=0
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: received EAPOL-Start from STA
    wlan0: STA ac:0b:fb:d8:03:46 WPA: event 5 notification
    WPA: ac:0b:fb:d8:03:46 WPA_PTK entering state AUTHENTICATION2
    Get randomness: len=32 entropy=0
    WPA: Assign ANonce - hexdump(len=32): 5e ca df a2 05 b0 df 77 ee 63 8f 9f f1 bb 95 43 87 2a ad 56 67 17 d2 b5 75 8f 04 d0 81 c1 8b 58
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state ABORTING
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state INITIALIZE
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: aborting authentication
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state RESTART
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state IDLE
    EAP: EAP entering state INITIALIZE
    wlan0: CTRL-EVENT-EAP-STARTED ac:0b:fb:d8:03:46
    EAP: EAP entering state SELECT_ACTION
    EAP: getDecision: no identity known yet -> CONTINUE
    EAP: EAP entering state PROPOSE_METHOD
    EAP: getNextMethod: vendor 0 type 1
    wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1
    EAP: EAP entering state METHOD_REQUEST
    EAP: building EAP-Request: Identifier 198
    EAP: EAP entering state SEND_REQUEST
    EAP: EAP entering state IDLE
    EAP: retransmit timeout 3 seconds (from dynamic back off; retransCount=0)
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state CONNECTING
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state AUTHENTICATING
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state REQUEST
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: Sending EAP Packet (identifier 198)
    wlan0: Event EAPOL_RX (23) received
    IEEE 802.1X: 14 bytes from ac:0b:fb:d8:03:46
       IEEE 802.1X: version=1 type=0 length=10
    EAP: code=2 identifier=103 length=10
     (response)
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: received EAP packet (code=2 id=103 len=10) from STA: EAP Response-Identity (1)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state RESPONSE
    EAP: EAP entering state RECEIVED
    EAP: parseEapResp: rxResp=1 rxInitiate=0 respId=103 respMethod=1 respVendor=0 respVendorMethod=0
    EAP: RECEIVED->DISCARD: rxResp=1 respId=103 currentId=198 respMethod=1 currentMethod=1
    EAP: EAP entering state DISCARD
    EAP: EAP entering state IDLE
    EAP: retransmit timeout 3 seconds (from dynamic back off; retransCount=0)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state IGNORE
    wlan0: Event EAPOL_RX (23) received
    IEEE 802.1X: 14 bytes from ac:0b:fb:d8:03:46
       IEEE 802.1X: version=1 type=0 length=10
    EAP: code=2 identifier=198 length=10
     (response)
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: received EAP packet (code=2 id=198 len=10) from STA: EAP Response-Identity (1)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state RESPONSE
    EAP: EAP entering state RECEIVED
    EAP: parseEapResp: rxResp=1 rxInitiate=0 respId=198 respMethod=1 respVendor=0 respVendorMethod=0
    EAP: EAP entering state INTEGRITY_CHECK
    EAP: EAP entering state METHOD_RESPONSE
    EAP-Identity: Peer identity - hexdump_ascii(len=5):
         74 65 73 74 31                                    test1           
    EAP: EAP entering state SELECT_ACTION
    EAP: getDecision: another method available -> CONTINUE
    EAP: EAP entering state PROPOSE_METHOD
    EAP: getNextMethod: vendor 0 type 25
    wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
    EAP: EAP entering state METHOD_REQUEST
    EAP: building EAP-Request: Identifier 199
    EAP-PEAP: START -> PHASE1
    EAP: EAP entering state SEND_REQUEST
    EAP: EAP entering state IDLE
    EAP: retransmit timeout 3 seconds (from dynamic back off; retransCount=0)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state REQUEST
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: Sending EAP Packet (identifier 199)
    wlan0: Event EAPOL_RX (23) received
    IEEE 802.1X: 72 bytes from ac:0b:fb:d8:03:46
       IEEE 802.1X: version=1 type=0 length=68
    EAP: code=2 identifier=199 length=68
     (response)
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: received EAP packet (code=2 id=199 len=68) from STA: EAP Response-PEAP (25)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state RESPONSE
    EAP: EAP entering state RECEIVED
    EAP: parseEapResp: rxResp=1 rxInitiate=0 respId=199 respMethod=25 respVendor=0 respVendorMethod=0
    EAP: EAP entering state INTEGRITY_CHECK
    EAP: EAP entering state METHOD_RESPONSE
    SSL: Received packet(len=68) - Flags 0x01
    SSL: Received data - hexdump(len=62): 16 03 02 00 39 01 00 00 35 03 02 40 10 0c f6 0c a2 2f 2a a5 23 2c 68 54 b8 8f 0c f9 46 cd 9d b8 20 20 86 79 cd 77 23 79 7f 74 68 00 00 0e 00 3d 00 35 00 3c 00 2f 00 0a 00 05 00 04 01 00
    SSL: Received packet: Flags 0x1 Message Length 0
    SSL: (where=0x10 ret=0x1)
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:before SSL initialization
    OpenSSL: RX ver=0x0 content_type=256 (TLS header info/)
    OpenSSL: Message - hexdump(len=5): 16 03 02 00 39
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:before SSL initialization
    OpenSSL: RX ver=0x304 content_type=22 (handshake/client hello)
    OpenSSL: Message - hexdump(len=57): 01 00 00 35 03 02 40 10 0c f6 0c a2 2f 2a a5 23 2c 68 54 b8 8f 0c f9 46 cd 9d b8 20 20 86 79 cd 77 23 79 7f 74 68 00 00 0e 00 3d 00 35 00 3c 00 2f 00 0a 00 05 00 04 01 00
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:SSLv3/TLS read client hello
    OpenSSL: TX ver=0x0 content_type=256 (TLS header info/)
    OpenSSL: Message - hexdump(len=5): 16 03 02 00 2a
    OpenSSL: TX ver=0x302 content_type=22 (handshake/server hello)
    OpenSSL: Message - hexdump(len=42): 02 00 00 26 03 02 2d 62 b7 9b cf 5c a9 c3 1c c9 38 9c f3 46 53 d5 24 19 50 af f1 9b d4 18 44 4f 57 4e 47 52 44 00 00 00 35 00
    OpenSSL: Server selected cipher suite 0x35
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:SSLv3/TLS write server hello
    OpenSSL: TX ver=0x0 content_type=256 (TLS header info/)
    OpenSSL: Message - hexdump(len=5): 16 03 02 09 03
    OpenSSL: TX ver=0x302 content_type=22 (handshake/certificate)
    OpenSSL: Message - hexdump(len=2307): 0b 00 08 ff 00 08 fc 00 03 f8 30 82 03 f4 30 82 02 dc a0 03 02 01 02 02 01 01 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 30 81 93 31 0b 30 09 06 03 55 04 06 13 02 46 52 31 0f 30 0d 06 03 55 04 08 0c 06 52 61 64 69 75 73 31 12 30 10 06 03 55 04 07 0c 09 53 6f 6d 65 77 68 65 72 65 31 15 30 13 06 03 55 04 0a 0c 0c 45 78 61 6d 70 6c 65 20 49 6e 63 2e 31 20 30 1e 06 09 2a 86 48 86 f7 0d 01 09 01 16 11 61 64 6d 69 6e 40 65 78 61 6d 70 6c 65 2e 6f 72 67 31 26 30 24 06 03 55 04 03 0c 1d 45 78 61 6d 70 6c 65 20 43 65 72 74 69 66 69 63 61 74 65 20 41 75 74 68 6f 72 69 74 79 30 1e 17 0d 32 32 30 37 31 33 31 34 32 32 30 34 5a 17 0d 32 32 30 39 31 31 31 34 32 32 30 34 5a 30 7c 31 0b 30 09 06 03 55 04 06 13 02 46 52 31 0f 30 0d 06 03 55 04 08 0c 06 52 61 64 69 75 73 31 15 30 13 06 03 55 04 0a 0c 0c 45 78 61 6d 70 6c 65 20 49 6e 63 2e 31 23 30 21 06 03 55 04 03 0c 1a 45 78 61 6d 70 6c 65 20 53 65 72 76 65 72 20 43 65 72 74 69 66 69 63 61 74 65 31 20 30 1e 06 09 2a 86 48 86 f7 0d 01 09 01 16 11 61 64 6d 69 6e 40 65 78 61 6d 70 6c 65 2e 6f 72 67 30 82 01 22 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 03 82 01 0f 00 30 82 01 0a 02 82 01 01 00 bf 38 e2 78 43 ae 62 98 31 6b e5 3f 97 3e e9 c5 12 3c 94 7e f1 aa 7a b7 92 a6 24 3a 0c 32 66 a3 e1 1c 67 09 4e fd 15 71 ef 0c 1a 28 ba c7 14 e9 22 9c 42 58 c5 96 8e 61 a0 69 6e de 3f eb e2 cd dc cc a0 36 65 84 60 34 d7 04 52 c5 64 2d 70 fb df 66 98 8a 86 80 f7 e9 82 07 b0 f9 0e eb 3b b2 dc b8 ff bb 33 4e df 0a 62 a3 e8 fe a2 31 ba 25 fd 1e ef fc 9f 1d c8 f5 5f a7 af 57 67 ae 89 40 84 72 15 5e d0 5c 63 b7 cd c9 ec 1b 91 a0 33 ad db ea d5 93 26 64 85 98 f9 ef c7 d6 6d ff 88 c8 ab 6b cd 29 1d df 78 3e 6b 62 1d 78 d2 3a 3e 2e ac fa e1 da e5 67 7b d8 e1 5f 11 a6 1d f3 c3 bd 77 38 18 6d ba e3 45 cc 21 12 84 d7 8f b8 02 c6 f7 60 03 b2 53 21 90 b7 94 37 9d 4f f0 76 89 5c d0 e2 ba f2 37 e0 1e c3 71 1b a5 64 23 83 15 73 35 00 7d 37 d6 29 e0 9f 94 19 c8 73 f2 a3 75 ed 02 03 01 00 01 a3 69 30 67 30 13 06 03 55 1d 25 04 0c 30 0a 06 08 2b 06 01 05 05 07 03 01 30 36 06 03 55 1d 1f 04 2f 30 2d 30 2b a0 29 a0 27 86 25 68 74 74 70 3a 2f 2f 77 77 77 2e 65 78 61 6d 70 6c 65 2e 63 6f 6d 2f 65 78 61 6d 70 6c 65 5f 63 61 2e 63 72 6c 30 18 06 03 55 1d 20 04 11 30 0f 30 0d 06 0b 2b 06 01 04 01 82 be 68 01 03 02 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 03 82 01 01 00 9b 52 4a 2d 49 ae ba c5 43 d7 a4 6b 6b 97 24 f4 b7 44 20 b1 f4 db 27 72 c2 20 b8 15 92 05 f5 b9 1a 7b 84 a0 9b 20 8e f9 8f 63 a5 30 cf 95 4a 1a e2 92 ea 9e 24 a9 c8 90 6d 9f b8 d8 11 89 9c 1b 0a 57 3a 01 de dd 0c 6c 1f d8 2e 67 8a aa de c4 c6 0f df 8e 07 29 55 a9 0a 59 de 03 da 79 a3 fd 49 60 1c a4 51 86 aa 7e 3e a1 79 30 8b 1b 1a 87 3f 26 02 8f eb 9c 67 a1 d3 e2 66 e3 d0 22 03 78 e6 03 09 7d 65 ec e7 f9 00 66 8e 74 07 df 1e a5 8a cf 24 0e 70 69 23 11 1c cb 86 42 d9 0b 93 61 ed b5 bd 4d 52 c0 f0 c7 e9 98 7a 36 52 76 cf e5 63 a7 62 2f d6 e3 ed be e0 62 d2 54 f7 9b 9f 7c 4d 54 f1 a9 bb 0f 14 23 0d 9b 4b 5e 93 c8 d0 58 c9 dd 19 8e 07 33 35 91 e4 83 03 ba 36 87 0f ab 31 71 62 a8 cf 46 54 28 34 e5 45 45 c2 4a df 1e 45 55 47 a9 9d 95 77 95 97 eb 03 05 4f 02 64 ae 00 04 fe 30 82 04 fa 30 82 03 e2 a0 03 02 01 02 02 14 25 1a 93 65 79 97 bb f1 6c c8 b1 8c 05 6e 72 d8 c8 5b 40 ce 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 30 81 93 31 0b 30 09 06 03 55 04 06 13 02 46 52 31 0f 30 0d 06 03 55 04 08 0c 06 52 61 64 69 75 73 31 12 30 10 06 03 55 04 07 0c 09 53 6f 6d 65 77 68 65 72 65 31 15 30 13 06 03 55 04 0a 0c 0c 45 78 61 6d 70 6c 65 20 49 6e 63 2e 31 20 30 1e 06 09 2a 86 48 86 f7 0d 01 09 01 16 11 61 64 6d 69 6e 40 65 78 61 6d 70 6c 65 2e 6f 72 67 31 26 30 24 06 03 55 04 03 0c 1d 45 78 61 6d 70 6c 65 20 43 65 72 74 69 66 69 63 61 74 65 20 41 75 74 68 6f 72 69 74 79 30 1e 17 0d 32 32 30 37 31 33 31 34 32 32 30 34 5a 17 0d 32 32 30 39 31 31 31 34 32 32 30 34 5a 30 81 93 31 0b 30 09 06 03 55 04 06 13 02 46 52 31 0f 30 0d 06 03 55 04 08 0c 06 52 61 64 69 75 73 31 12 30 10 06 03 55 04 07 0c 09 53 6f 6d 65 77 68 65 72 65 31 15 30 13 06 03 55 04 0a 0c 0c 45 78 61 6d 70 6c 65 20 49 6e 63 2e 31 20 30 1e 06 09 2a 86 48 86 f7 0d 01 09 01 16 11 61 64 6d 69 6e 40 65 78 61 6d 70 6c 65 2e 6f 72 67 31 26 30 24 06 03 55 04 03 0c 1d 45 78 61 6d 70 6c 65 20 43 65 72 74 69 66 69 63 61 74 65 20 41 75 74 68 6f 72 69 74 79 30 82 01 22 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 03 82 01 0f 00 30 82 01 0a 02 82 01 01 00 cc 03 3c 7d a8 67 1c 1a 75 a0 c0 ae 32 07 42 62 2c b9 8e c9 06 72 07 61 9c 78 e4 06 ec d0 db 57 0c 00 7a db 9d c9 ed 24 50 de c1 cc d0 1a 4d a7 9a 86 67 6f 29 21 d0 04 f6 ad 2e e7 e8 a4 8a 08 5f 14 77 e9 3c b1 86 8c 19 5f bb 60 56 d2 af 78 d5 84 e2 d6 d2 a6 3a d2 2e d4 75 0e 2c d4 bf 17 c4 f6 6e e4 f6 7b e5 4f ed 32 ec d7 72 7c 8b 15 79 d1 71 f0 35 86 ae 23 e8 ea a8 e4 35 73 38 ad 6c 60 d1 04 75 e8 5c ca 6e 06 f6 2c a0 93 7e 5f 7f 05 9f 9a c6 a4 8f 53 cd 63 30 f3 98 99 16 61 bb 58 6f 50 39 05 d5 ce ab 23 26 81 31 a8 32 ae 9a 89 71 60 84 dc 63 17 3e 70 c7 07 d0 21 a7 22 89 95 c1 df d3 b5 46 e7 57 13 ab dc 58 4e 33 17 04 a3 77 34 fd 6b 20 fc a0 c4 f1 ee 57 2e e0 aa e5 3d 53 2d 77 d0 3f 44 40 d3 d7 93 0b 93 4b 88 9e 4e 76 d0 e0 ca ac ec 83 64 69 ba 14 95 91 c7 02 03 01 00 01 a3 82 01 42 30 82 01 3e 30 1d 06 03 55 1d 0e 04 16 04 14 1e 84 b6 bf e8 0b 95 33 71 08 f3 7a 8b 34 7a 44 b1 70 c4 1c 30 81 d3 06 03 55 1d 23 04 81 cb 30 81 c8 80 14 1e 84 b6 bf e8 0b 95 33 71 08 f3 7a 8b 34 7a 44 b1 70 c4 1c a1 81 99 a4 81 96 30 81 93 31 0b 30 09 06 03 55 04 06 13 02 46 52 31 0f 30 0d 06 03 55 04 08 0c 06 52 61 64 69 75 73 31 12 30 10 06 03 55 04 07 0c 09 53 6f 6d 65 77 68 65 72 65 31 15 30 13 06 03 55 04 0a 0c 0c 45 78 61 6d 70 6c 65 20 49 6e 63 2e 31 20 30 1e 06 09 2a 86 48 86 f7 0d 01 09 01 16 11 61 64 6d 69 6e 40 65 78 61 6d 70 6c 65 2e 6f 72 67 31 26 30 24 06 03 55 04 03 0c 1d 45 78 61 6d 70 6c 65 20 43 65 72 74 69 66 69 63 61 74 65 20 41 75 74 68 6f 72 69 74 79 82 14 25 1a 93 65 79 97 bb f1 6c c8 b1 8c 05 6e 72 d8 c8 5b 40 ce 30 0f 06 03 55 1d 13 01 01 ff 04 05 30 03 01 01 ff 30 36 06 03 55 1d 1f 04 2f 30 2d 30 2b a0 29 a0 27 86 25 68 74 74 70 3a 2f 2f 77 77 77 2e 65 78 61 6d 70 6c 65 2e 6f 72 67 2f 65 78 61 6d 70 6c 65 5f 63 61 2e 63 72 6c 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 03 82 01 01 00 a2 65 ea 56 cb 1d 5e fc bc 78 a7 15 8e b3 e3 70 78 c5 71 24 6d 3f d4 5b bb 77 aa a9 3f 6b e2 d0 17 bd c5 8e f2 40 5f d4 29 b7 a1 3d c6 38 ea 01 13 02 93 01 fe 5e fd 5e db 35 61 75 d6 35 38 d7 28 9e 6e b7 f2 d7 ac 52 b4 0d ad 82 11 65 1e e3 8c bb a5 f6 dc 40 df a1 69 af cb 66 e0 1f da c9 ba 4a 62 a4 88 c4 83 be d6 fa aa 53 f8 36 b1 08 2d 30 0b 52 3e 5a 73 34 ee 3e ce d1 c4 c6 7d 42 0c 1c 73 57 28 54 49 44 06 7c 10 26 2f 2b 98 ad fc ea 8c 1b d9 d7 67 e4 80 3b 3e 1a da a3 73 58 26 2d da b6 27 c3 5d 16 09 b6 8a bf a3 a9 10 5e 71 43 12 ad 77 63 9b c3 8f ac 38 c5 a9 7b 39 12 a5 18 bb de 2c ba 19 53 12 72 89 48 1f 55 51 f3 68 a7 11 7f 86 84 e4 81 ad 76 1b d8 7a f3 40 01 a6 53 d9 ff 1c 54 c3 0f c4 75 19 ce 99 c8 2d 73 b0 5e 13 3c 60 b2 fb 83 0a 18 07 c1 56 d0 ed 43
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:SSLv3/TLS write certificate
    OpenSSL: TX ver=0x0 content_type=256 (TLS header info/)
    OpenSSL: Message - hexdump(len=5): 16 03 02 00 04
    OpenSSL: TX ver=0x302 content_type=22 (handshake/server hello done)
    OpenSSL: Message - hexdump(len=4): 0e 00 00 00
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:SSLv3/TLS write server done
    SSL: (where=0x2002 ret=0xffffffff)
    SSL: SSL_accept:error in SSLv3/TLS write server done
    SSL: SSL_connect - want more data
    SSL: 2368 bytes pending from ssl_out
    SSL: Using TLS version TLSv1.1
    EAP: EAP entering state METHOD_REQUEST
    EAP: building EAP-Request: Identifier 200
    SSL: Generating Request
    SSL: Sending out 1393 bytes (975 more to send)
    EAP: EAP entering state SEND_REQUEST
    EAP: EAP entering state IDLE
    EAP: retransmit timeout 3 seconds (from dynamic back off; retransCount=0)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state REQUEST
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: Sending EAP Packet (identifier 200)
    wlan0: Event EAPOL_RX (23) received
    IEEE 802.1X: 10 bytes from ac:0b:fb:d8:03:46
       IEEE 802.1X: version=1 type=0 length=6
    EAP: code=2 identifier=200 length=6
     (response)
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: received EAP packet (code=2 id=200 len=6) from STA: EAP Response-PEAP (25)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state RESPONSE
    EAP: EAP entering state RECEIVED
    EAP: parseEapResp: rxResp=1 rxInitiate=0 respId=200 respMethod=25 respVendor=0 respVendorMethod=0
    EAP: EAP entering state INTEGRITY_CHECK
    EAP: EAP entering state METHOD_RESPONSE
    SSL: Received packet(len=6) - Flags 0x01
    SSL: Received data - hexdump(len=0):
    SSL: Received packet: Flags 0x1 Message Length 0
    SSL: Fragment acknowledged
    EAP: EAP entering state METHOD_REQUEST
    EAP: building EAP-Request: Identifier 201
    SSL: Generating Request
    SSL: Sending out 975 bytes (message sent completely)
    EAP: EAP entering state SEND_REQUEST
    EAP: EAP entering state IDLE
    EAP: retransmit timeout 3 seconds (from dynamic back off; retransCount=0)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state REQUEST
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: Sending EAP Packet (identifier 201)
    wlan0: Event EAPOL_RX (23) received
    IEEE 802.1X: 352 bytes from ac:0b:fb:d8:03:46
       IEEE 802.1X: version=1 type=0 length=348
    EAP: code=2 identifier=201 length=348
     (response)
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: received EAP packet (code=2 id=201 len=348) from STA: EAP Response-PEAP (25)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state RESPONSE
    EAP: EAP entering state RECEIVED
    EAP: parseEapResp: rxResp=1 rxInitiate=0 respId=201 respMethod=25 respVendor=0 respVendorMethod=0
    EAP: EAP entering state INTEGRITY_CHECK
    EAP: EAP entering state METHOD_RESPONSE
    SSL: Received packet(len=348) - Flags 0x01
    SSL: Received data - hexdump(len=342): 16 03 02 01 06 10 00 01 02 01 00 22 76 1a d4 95 27 b8 6a 81 bb 4e f8 5e 4a 78 7e eb d7 32 01 0e f9 77 8f cf ab ca db 89 db 16 8c 81 0c b9 c5 1b 17 24 ef 3f 04 d2 55 2b 0d a1 e0 89 af c9 f2 3e 44 03 d0 96 7a 1b 22 ce f8 74 92 08 b4 16 8a c1 22 b1 51 fb 93 b2 2d 1d 2d ce c7 57 6c 2f 6e 28 59 18 de f7 c0 20 04 dd 75 10 6d ca d5 5e 70 dd 6d e2 76 96 e5 77 84 5d 43 00 38 ab 72 f4 f5 4d e5 27 fc 88 0c 88 fe 7f a6 3d 00 af 8d 91 4c c8 3e 61 32 44 c8 6d c2 76 8a a2 65 83 ce 26 03 66 ed e7 61 f9 ed 7c 3c a7 a1 e4 c1 3a 64 92 06 a2 0e 6e 18 06 83 a2 f5 b6 8d cd 55 e6 96 67 2b cc bf 12 fc 97 d2 41 0c cd d2 27 f4 16 85 93 a6 11 0c f2 3e 53 89 d4 52 e7 f8 83 df be 3b 01 99 0f db d2 ec 8d c7 62 40 f5 5c 2b 87 da a6 50 17 d6 3d 02 e1 d5 aa 2a 50 58 35 0e 91 b3 ae 5c aa 0b 9d 23 4b be ab 72 ca d8 b1 22 c7 14 03 02 00 01 01 16 03 02 00 40 b5 6d cf b6 93 11 83 b7 ae 1d 77 da 07 c5 f2 4a 90 9d 36 5f 00 a9 cf d3 8a d4 c3 10 05 1f 65 d2 5d 0f 0b 7f 09 9c 82 96 97 69 54 b9 5a a9 c6 7d ab bd 08 7a 5e bc 05 6b e1 36 e1 c9 4e 4c b3 64
    SSL: Received packet: Flags 0x1 Message Length 0
    OpenSSL: RX ver=0x0 content_type=256 (TLS header info/)
    OpenSSL: Message - hexdump(len=5): 16 03 02 01 06
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:SSLv3/TLS write server done
    OpenSSL: RX ver=0x302 content_type=22 (handshake/client key exchange)
    OpenSSL: Message - hexdump(len=262): 10 00 01 02 01 00 22 76 1a d4 95 27 b8 6a 81 bb 4e f8 5e 4a 78 7e eb d7 32 01 0e f9 77 8f cf ab ca db 89 db 16 8c 81 0c b9 c5 1b 17 24 ef 3f 04 d2 55 2b 0d a1 e0 89 af c9 f2 3e 44 03 d0 96 7a 1b 22 ce f8 74 92 08 b4 16 8a c1 22 b1 51 fb 93 b2 2d 1d 2d ce c7 57 6c 2f 6e 28 59 18 de f7 c0 20 04 dd 75 10 6d ca d5 5e 70 dd 6d e2 76 96 e5 77 84 5d 43 00 38 ab 72 f4 f5 4d e5 27 fc 88 0c 88 fe 7f a6 3d 00 af 8d 91 4c c8 3e 61 32 44 c8 6d c2 76 8a a2 65 83 ce 26 03 66 ed e7 61 f9 ed 7c 3c a7 a1 e4 c1 3a 64 92 06 a2 0e 6e 18 06 83 a2 f5 b6 8d cd 55 e6 96 67 2b cc bf 12 fc 97 d2 41 0c cd d2 27 f4 16 85 93 a6 11 0c f2 3e 53 89 d4 52 e7 f8 83 df be 3b 01 99 0f db d2 ec 8d c7 62 40 f5 5c 2b 87 da a6 50 17 d6 3d 02 e1 d5 aa 2a 50 58 35 0e 91 b3 ae 5c aa 0b 9d 23 4b be ab 72 ca d8 b1 22 c7
    OpenSSL: RX ver=0x0 content_type=256 (TLS header info/)
    OpenSSL: Message - hexdump(len=5): 14 03 02 00 01
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:SSLv3/TLS read client key exchange
    OpenSSL: RX ver=0x0 content_type=256 (TLS header info/)
    OpenSSL: Message - hexdump(len=5): 16 03 02 00 40
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:SSLv3/TLS read change cipher spec
    OpenSSL: RX ver=0x302 content_type=22 (handshake/finished)
    OpenSSL: Message - hexdump(len=16): 14 00 00 0c 01 91 8b 46 ef 54 45 0f f8 8c 88 6d
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:SSLv3/TLS read finished
    OpenSSL: TX ver=0x0 content_type=256 (TLS header info/)
    OpenSSL: Message - hexdump(len=5): 14 03 02 00 01
    OpenSSL: TX ver=0x302 content_type=20 (change cipher spec/)
    OpenSSL: Message - hexdump(len=1): 01
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:SSLv3/TLS write change cipher spec
    OpenSSL: TX ver=0x0 content_type=256 (TLS header info/)
    OpenSSL: Message - hexdump(len=5): 16 03 02 00 40
    OpenSSL: TX ver=0x302 content_type=22 (handshake/finished)
    OpenSSL: Message - hexdump(len=16): 14 00 00 0c 44 9c 31 1c 0b 1c 41 47 59 43 55 1d
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:SSLv3/TLS write finished
    SSL: (where=0x20 ret=0x1)
    SSL: (where=0x2002 ret=0x1)
    SSL: 75 bytes pending from ssl_out
    OpenSSL: Handshake finished - resumed=0
    OpenSSL: Shared ciphers: AES256-SHA256:AES256-SHA:AES128-SHA256:AES128-SHA
    SSL: Using TLS version TLSv1.1
    EAP: EAP entering state METHOD_REQUEST
    EAP: building EAP-Request: Identifier 202
    EAP-PEAP: Phase1 done, starting Phase2
    

    AP requiring TLSv1.2

    ESP8266 with WIFI debug enabled

    .scandone
    state: 0 -> 2 (b0)
    state: 2 -> 3 (0)
    state: 3 -> 5 (10)
    add 0
    aid 1
    cnt 
    state: 5 -> 2 (17c0)
    rm 0
    wifi evt: 1
    STA disconnect: 23
    .reconnect
    state: 2 -> 0 (0)
    _scandone
    state: 0 -> 2 (b0)
    state: 2 -> 3 (0)
    state: 3 -> 5 (10)
    add 0
    aid 1
    cnt 
    state: 5 -> 2 (17c0)
    rm 0
    wifi evt: 1
    STA disconnect: 23
    
    hostapd debug log
    EAP: Server state machine created
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state IDLE
    IEEE 802.1X: ac:0b:fb:d8:03:46 CTRL_DIR entering state FORCE_BOTH
    wlan0: STA ac:0b:fb:d8:03:46 WPA: start authentication
    WPA: ac:0b:fb:d8:03:46 WPA_PTK entering state INITIALIZE
    wpa_driver_nl80211_set_key: ifindex=3 (wlan0) alg=0 addr=0x556c2aff10 key_idx=0 set_tx=1 seq_len=0 key_len=0
       addr=ac:0b:fb:d8:03:46
    nl80211: set_key failed; err=-22 Invalid argument)
    RSN: PTK removal from the driver failed
    WPA: ac:0b:fb:d8:03:46 WPA_PTK_GROUP entering state IDLE
    WPA: ac:0b:fb:d8:03:46 WPA_PTK entering state AUTHENTICATION
    WPA: ac:0b:fb:d8:03:46 WPA_PTK entering state AUTHENTICATION2
    WPA: Re-initialize GMK/Counter on first station
    Get randomness: len=32 entropy=1
    GMK - hexdump(len=32): 54 3d ae 26 80 e2 4e 2a 65 0b 47 3b 7d d3 aa 44 17 6f e7 9e 7c 69 b4 a9 bc 01 ce 9d 00 ab a5 5e
    Get randomness: len=32 entropy=0
    Key Counter - hexdump(len=32): 2f 6a 92 e7 a1 d5 1d 8c 4b a5 c2 22 6d 74 d8 c7 62 ec ed da 49 bc 78 90 96 f0 8c 6f 2e 4f af 6f
    Get randomness: len=16 entropy=0
    GTK - hexdump(len=16): f1 a3 b2 ff 4e da ea 23 5e 78 a2 85 7f be 75 90
    wpa_driver_nl80211_set_key: ifindex=3 (wlan0) alg=3 addr=0x5568ce5f50 key_idx=1 set_tx=1 seq_len=0 key_len=16
    nl80211: KEY_DATA - hexdump(len=16): f1 a3 b2 ff 4e da ea 23 5e 78 a2 85 7f be 75 90
       broadcast key
    Get randomness: len=32 entropy=0
    WPA: Assign ANonce - hexdump(len=32): 63 f3 a6 ca dd 8c 5f aa e5 3c a7 0a e2 5a b6 b9 38 fe 53 04 de dc 64 ee ee 45 6c f9 24 63 f5 3a
    wlan0: hostapd_new_assoc_sta: reschedule ap_handle_timer timeout for ac:0b:fb:d8:03:46 (300 seconds - ap_max_inactivity)
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state DISCONNECTED
    nl80211: Set STA flags - ifname=wlan0 addr=ac:0b:fb:d8:03:46 total_flags=0x60 flags_or=0x0 flags_and=0xfffffffe authorized=0
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: unauthorizing port
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state RESTART
    EAP: EAP entering state INITIALIZE
    wlan0: CTRL-EVENT-EAP-STARTED ac:0b:fb:d8:03:46
    EAP: EAP entering state SELECT_ACTION
    EAP: getDecision: no identity known yet -> CONTINUE
    EAP: EAP entering state PROPOSE_METHOD
    EAP: getNextMethod: vendor 0 type 1
    wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1
    EAP: EAP entering state METHOD_REQUEST
    EAP: building EAP-Request: Identifier 103
    EAP: EAP entering state SEND_REQUEST
    EAP: EAP entering state IDLE
    EAP: retransmit timeout 3 seconds (from dynamic back off; retransCount=0)
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state CONNECTING
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state AUTHENTICATING
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state REQUEST
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: Sending EAP Packet (identifier 103)
    wlan0: Event EAPOL_RX (23) received
    IEEE 802.1X: 4 bytes from ac:0b:fb:d8:03:46
       IEEE 802.1X: version=1 type=1 length=0
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: received EAPOL-Start from STA
    wlan0: STA ac:0b:fb:d8:03:46 WPA: event 5 notification
    WPA: ac:0b:fb:d8:03:46 WPA_PTK entering state AUTHENTICATION2
    Get randomness: len=32 entropy=0
    WPA: Assign ANonce - hexdump(len=32): 32 2e 97 14 9b b0 87 d7 bd d2 16 08 36 6f 28 13 94 66 71 a2 c0 54 b7 85 e6 80 7a fc c6 39 96 70
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state ABORTING
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state INITIALIZE
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: aborting authentication
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state RESTART
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state IDLE
    EAP: EAP entering state INITIALIZE
    wlan0: CTRL-EVENT-EAP-STARTED ac:0b:fb:d8:03:46
    EAP: EAP entering state SELECT_ACTION
    EAP: getDecision: no identity known yet -> CONTINUE
    EAP: EAP entering state PROPOSE_METHOD
    EAP: getNextMethod: vendor 0 type 1
    wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1
    EAP: EAP entering state METHOD_REQUEST
    EAP: building EAP-Request: Identifier 198
    EAP: EAP entering state SEND_REQUEST
    EAP: EAP entering state IDLE
    EAP: retransmit timeout 3 seconds (from dynamic back off; retransCount=0)
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state CONNECTING
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state AUTHENTICATING
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state REQUEST
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: Sending EAP Packet (identifier 198)
    wlan0: Event EAPOL_RX (23) received
    IEEE 802.1X: 14 bytes from ac:0b:fb:d8:03:46
       IEEE 802.1X: version=1 type=0 length=10
    EAP: code=2 identifier=103 length=10
     (response)
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: received EAP packet (code=2 id=103 len=10) from STA: EAP Response-Identity (1)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state RESPONSE
    EAP: EAP entering state RECEIVED
    EAP: parseEapResp: rxResp=1 rxInitiate=0 respId=103 respMethod=1 respVendor=0 respVendorMethod=0
    EAP: RECEIVED->DISCARD: rxResp=1 respId=103 currentId=198 respMethod=1 currentMethod=1
    EAP: EAP entering state DISCARD
    EAP: EAP entering state IDLE
    EAP: retransmit timeout 3 seconds (from dynamic back off; retransCount=0)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state IGNORE
    wlan0: Event EAPOL_RX (23) received
    IEEE 802.1X: 14 bytes from ac:0b:fb:d8:03:46
       IEEE 802.1X: version=1 type=0 length=10
    EAP: code=2 identifier=198 length=10
     (response)
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: received EAP packet (code=2 id=198 len=10) from STA: EAP Response-Identity (1)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state RESPONSE
    EAP: EAP entering state RECEIVED
    EAP: parseEapResp: rxResp=1 rxInitiate=0 respId=198 respMethod=1 respVendor=0 respVendorMethod=0
    EAP: EAP entering state INTEGRITY_CHECK
    EAP: EAP entering state METHOD_RESPONSE
    EAP-Identity: Peer identity - hexdump_ascii(len=5):
         74 65 73 74 31                                    test1           
    EAP: EAP entering state SELECT_ACTION
    EAP: getDecision: another method available -> CONTINUE
    EAP: EAP entering state PROPOSE_METHOD
    EAP: getNextMethod: vendor 0 type 25
    wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
    EAP: EAP entering state METHOD_REQUEST
    EAP: building EAP-Request: Identifier 199
    EAP-PEAP: START -> PHASE1
    EAP: EAP entering state SEND_REQUEST
    EAP: EAP entering state IDLE
    EAP: retransmit timeout 3 seconds (from dynamic back off; retransCount=0)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state REQUEST
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: Sending EAP Packet (identifier 199)
    wlan0: Event EAPOL_RX (23) received
    IEEE 802.1X: 72 bytes from ac:0b:fb:d8:03:46
       IEEE 802.1X: version=1 type=0 length=68
    EAP: code=2 identifier=199 length=68
     (response)
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: received EAP packet (code=2 id=199 len=68) from STA: EAP Response-PEAP (25)
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state RESPONSE
    EAP: EAP entering state RECEIVED
    EAP: parseEapResp: rxResp=1 rxInitiate=0 respId=199 respMethod=25 respVendor=0 respVendorMethod=0
    EAP: EAP entering state INTEGRITY_CHECK
    EAP: EAP entering state METHOD_RESPONSE
    SSL: Received packet(len=68) - Flags 0x01
    SSL: Received data - hexdump(len=62): 16 03 02 00 39 01 00 00 35 03 02 40 10 0c f6 71 8c 7d 1f 78 d2 36 16 3c f0 c6 01 36 7b e1 ee 21 64 23 3f 07 a6 d6 ae aa 0c b2 2c 00 00 0e 00 3d 00 35 00 3c 00 2f 00 0a 00 05 00 04 01 00
    SSL: Received packet: Flags 0x1 Message Length 0
    SSL: (where=0x10 ret=0x1)
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:before SSL initialization
    OpenSSL: RX ver=0x0 content_type=256 (TLS header info/)
    OpenSSL: Message - hexdump(len=5): 16 03 02 00 39
    SSL: (where=0x2001 ret=0x1)
    SSL: SSL_accept:before SSL initialization
    OpenSSL: RX ver=0x304 content_type=22 (handshake/client hello)
    OpenSSL: Message - hexdump(len=57): 01 00 00 35 03 02 40 10 0c f6 71 8c 7d 1f 78 d2 36 16 3c f0 c6 01 36 7b e1 ee 21 64 23 3f 07 a6 d6 ae aa 0c b2 2c 00 00 0e 00 3d 00 35 00 3c 00 2f 00 0a 00 05 00 04 01 00
    OpenSSL: TX ver=0x0 content_type=256 (TLS header info/)
    OpenSSL: Message - hexdump(len=5): 15 03 02 00 02
    OpenSSL: TX ver=0x302 content_type=21 (alert/)
    OpenSSL: Message - hexdump(len=2): 02 46
    SSL: (where=0x4008 ret=0x246)
    SSL: SSL3 alert: write (local SSL3 detected an error):fatal:protocol version
    authsrv: local TLS alert: protocol version
    SSL: (where=0x2002 ret=0xffffffff)
    SSL: SSL_accept:error in error
    OpenSSL: openssl_handshake - SSL_connect error:14209102:SSL routines:tls_early_post_process_client_hello:unsupported protocol
    SSL: 7 bytes pending from ssl_out
    SSL: Failed - tls_out available to report error
    EAP-PEAP: PHASE1 -> FAILURE
    EAP: Session-Id - hexdump(len=0): [NULL]
    EAP: EAP entering state SELECT_ACTION
    EAP: getDecision: method failed -> FAILURE
    EAP: EAP entering state FAILURE
    EAP: Building EAP-Failure (id=199)
    wlan0: CTRL-EVENT-EAP-FAILURE ac:0b:fb:d8:03:46
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state FAIL
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: Sending EAP Packet (identifier 199)
    IEEE 802.1X: ac:0b:fb:d8:03:46 AUTH_PAE entering state HELD
    nl80211: Set STA flags - ifname=wlan0 addr=ac:0b:fb:d8:03:46 total_flags=0x60 flags_or=0x0 flags_and=0xfffffffe authorized=0
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: unauthorizing port
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: authentication failed - EAP type: 0 (unknown)
    wlan0: STA ac:0b:fb:d8:03:46 IEEE 802.1X: Supplicant used different EAP type: 25 (PEAP)
    wlan0: IEEE 802.1X: Force disconnection of ac:0b:fb:d8:03:46 after EAP-Failure in 10 ms
    IEEE 802.1X: ac:0b:fb:d8:03:46 BE_AUTH entering state IDLE
    wlan0: IEEE 802.1X: Scheduled disconnection of ac:0b:fb:d8:03:46 after EAP-Failure
    wlan0: ap_sta_disconnect STA ac:0b:fb:d8:03:46 reason=23
    nl80211: sta_remove -> DEL_STATION wlan0 ac:0b:fb:d8:03:46 --> 0 (Success)
    wlan0: STA ac:0b:fb:d8:03:46 WPA: event 3 notification
    wpa_driver_nl80211_set_key: ifindex=3 (wlan0) alg=0 addr=0x556c2aff10 key_idx=0 set_tx=1 seq_len=0 key_len=0
       addr=ac:0b:fb:d8:03:46
    nl80211: set_key failed; err=-22 Invalid argument)
    RSN: PTK removal from the driver failed
    WPA: ac:0b:fb:d8:03:46 WPA_PTK entering state DISCONNECTED
    
    opened by aheinzel 1
  • lwip netif->hostname and a global value

    lwip netif->hostname and a global value

    mentioned in #8626

    While we have netif hostnames enabled in lwip https://github.com/esp8266/Arduino/blob/65d30437f04678aaac7f9d1730dc5020e38c305b/tools/sdk/lwip2/include/lwipopts.h#L1605

    Current approach to working with hostname is to have it set / get through wifi_station_{set,get}_hostname() funcs. Internally, this works with char* wifi_station_hostname;

    Then we update every netif to reference it https://github.com/esp8266/Arduino/blob/65d30437f04678aaac7f9d1730dc5020e38c305b/cores/esp8266/LwipIntf.cpp#L151-L152

    Should we have int gethostname(char*, size_t) and void sethostname(const char*, size_t) calls? Should the symbol be renamed to something more generic so we don't miss that it is actually something global? Should the wifi_station_...hostname funcs be weakened / removed in favour of our own wrappers? Right now both depend on netif being up, possibly needless. Should we go back on the global idea and actually implement per-netif hostname? (like esp-idf netif api actually works, also esp32-arduino wifi implementation)

    type: enhancement component: core component: network 
    opened by mcspr 0
  • Longer delays for Ticker and some internal updates

    Longer delays for Ticker and some internal updates

    resolves #8066

    Adds max duration check. In case it is over SDK limit, enable 'repeat'ing timer with a duration proportional to the original one and count until it executes N times, only then run the callback. Code with durations less than that executes as usual. Original proposal was to not create anything or create some kind of error state... which seems counter-productive to not help out with this pretty solvable use-case.

    Three additional updates, while refactoring the class

    • Stronger types for internal time management using std::chrono::duration. Works the same, std::chrono::duration handles seconds <-> milliseconds conversion.
    • ::detach() 'once' timer when it finishes. Fixes (unintentional?) side-effect that we remain ::active(). Plus, this destroys any lambda-bound variables that will persist with the Ticker object. And, since we can't re-arm with the same function (Ticker::attach_ms(uint32_t just_the_time) and etc.)
    • std::variant aka union for internal callback storage (kind-of similar to #6918). Instead of having two separate code paths, always attach our static function and dispatch using type info. Also helps with the issue described above, since it will call std::function dtor when ptr + arg is attached instead of doing nothing.
    opened by mcspr 1
Releases(3.0.2)
  • 3.0.2(Jul 26, 2021)

    Release 3.0.2 Notes

    (includes 3.0.1 and 3.0.0 release notes)

    Core

    • Internal API: add comments and corrections (#8201)
    • String: Avoid copying past end of buffer in ::concat (#8198)
    • Call umm_init just before starting SDK (#8207)
    • Clean up use of "byte" as a type. uint8_t or (C++17) std::byte are better. (#8090)
    • Fix PRxxx printf format macros (#8222)

    Libraries

    • Update to EspSoftwareSerial bug fix release 6.12.7 (#8195)
    • Fixes failing https connections to HelloServerBearSSL (w/MMU48KIRAM) (#8206)
    • Use valid categories in library.properties of bundled libraries (#8221)
    • Netdump printf fix (#8215)
    • Fix with NO_GLOBAL_INSTANCES (#8184)
    • Make multiple FS begin calls noops() SDFS/LittleFS (#8235)

    CI

    • Copy released JSON to board URL, not new one (#8182)

    Build system

    • Make mkdir.py work under python<3.5 (#8194)
    • Certificate and public keys automatic updater (#8218)
    • Use only installed Python on Windows (#8226)

    Board definitions

    • Add wifi kit 8 to boards (#8190)

    Release 3.0.1 Notes

    Breaking Changes

    • BREAKING: "i2s.h" removed, I2S library added (#8108)

    Core

    • Make String reallocation warning more descriptive (#8131)
    • Normalize core header's include guard. (#8110)
    • makeword: sync header and implementation (#8097)
    • Use optimal bundled library names (#8088) (#8098)
    • Added IRAM_ATTR to _stopPWM() so that digitalWrite() would work inside ISR. Fixes #8043 (#8044) (#8048)
    • makecorever.py: restore ARDUINO_ESP8266_GIT_VER even without .git/ (#8138)

    IDE

    • Update debug level list link (#8172)
    • Add missing menu.UploadTool name definition (#8153)

    Libraries - LittleFS

    • Re-add mklittlefs to package.json, fixing "ESP8266 LittleFS Data Upload" (#8060)
    • Don't crash when including LittleFS.h w/no FS (#8173)

    Libraries - SD/SDFS

    • SDFS: fix AvailableForWrite: do not always return 0 when space is available (#8167)

    Libraries - ESP8266httpUpdate

    • ESP266httpUpdate: remove dead API and fix doc (#8063)

    Libraries - ESP8266WiFi

    • Fix stopAllExcept with WiFiClientSecure (#8136)
    • LwipIntfDev.h - apply static DNS config (#8076)

    Libraries - SoftwareSerial

    • Update EspSoftwareSerial to bug fix release 6.12.6

    Libraries - ESP8266HTTPClient

    • ESP8266HTTPClient: remove old example (#8111)
    • Change protocol detection so uppercase or lowercase works (#8137)

    Toolchain

    • Update toolchain to gcc 10.3 w/patches (#8104) (#8103)
    • Update toolchain to fix pgm_read_float_unaligned (#8091)
    • Remove include and lib folders removed since 3.0.0 core (#8125)
    • Add errors on invalid/missing function return type (#8165)
    • GNU source: honoring libc requirements (#8147)

    PlatformIO

    • PIO: use CCFLAGS for -Werror (#8175) (#8092)
    • Documentation: Note about options on PIO (#8174)

    Documentation

    • Fix readthedoc python dependencies (#8166)
    • Documentation: Arduino IDE options: fix hyperlinks and format, options (#8158) (#8154)

    CI / Release / Environment

    • Add code-spell spelling checks to CI (#8067)
    • Release script: protect bash variables and add logs, major/minor/rev macro addition, BASH fix (#8074) (#8126) (#8127) (#8168)
    • Remove some no longer applicable artifacts from .gitignore (#8170)

    Release 3.0.0 Notes

    Great additions

    • PoC cache configuration control (aka +16KB heap!) (#7060)
    • Hardware WDT Stack Dump Tool (#7010)
    • Update to GCC 10.2 (#7607)

    Breaking: Deprecation - Removal

    • BREAKING: httpclient: remove deprecated API (#7617)
    • BREAKING: Update Arduino.h, remove TIM_DIV265 (#7440)
    • BREAKING: Remove lwip-v1.4 specific code (#7436)
    • BREAKING: Remove axTLS from code and documentation (#7437)

    Breaking changes summary

    • BREAKING: WString: return bool instead of unsigned char (#7939)
    • BREAKING: wifi: remove pseudo-modes for shutdown, expose ::[resumeFrom]shutdown() (#7956)
    • BREAKING: Disable WiFi at boot by default (#7902, #7990, #7993)
    • BREAKING: base64::encode() compat with esp32: no newlines by default (#7910)
    • BREAKING: Use IRAM_ATTR in place of ICACHE_RAM_ATTR (#7921)
    • BREAKING: Upgrade to upstream newlib 4.0.0 release (64 bits time_t) (#7708)
    • BREAKING: Change servo defaults to safer defaults (#7023)
    • BREAKING: Add Print::availableForWrite method (#7658)
    • BREAKING: Change return EEPROM.end() to bool (#7630)
    • BREAKING: Change return type of channel() (#7656)
    • BREAKING: Change return type of RSSI() (#7657)
    • BREAKING: Add Wrong Password wifi status case (#7652)
    • BREAKING: analogWriteRange 8-bit default (#7456)
    • BREAKING: HTTPClient: RequestHandler: Pass String by const reference (#6583)

    Boot

    • eboot: .RODATA, upstream uzlib, move CRC, save 112 bytes (#7844)
    • Update eboot to build with C17, not C99 standard (#7837, #7838)
    • Fix eboot crash with exception 28. ets_printf() should take pointer argument. (#7666)
    • Use 32b loads to set print strings (#7545)
    • Comment out verify step in eboot.c (#7468)

    Core

    • BREAKING: WString: return bool instead of unsigned char (#7939)
    • ESP class should be a singleton: make all member functions static. (#8006)
    • Updated HWDT to use IRAM_ATTR instead of ICACHE_RAM_ATTR. (#8013, #8018)
    • Hardware WDT Stack Dump Tool (#7010)
    • WString: direct operator overloads instead of StringSumHelper (#7781)
    • Clean up ICACHE_RAM_ATTR in VM PR (#7924)
    • Added ESP32 compatible methods for setting/getting sleep mode (#7901)
    • Enable 128K virtual memory via external SPI SRAM (#6994)
    • Stream::send() (#6979, #7935, #7951, #7987, #7995)
    • [BREAKING] base64::encode() compat with esp32: no newlines by default (#7910)
    • BREAKING - Use IRAM_ATTR in place of ICACHE_RAM_ATTR (#7921)
    • OOM debug: warn about String reallocation (#7908)
    • OOM: avoid warn when calling *alloc(0) (#7909)
    • String: add missing long long operator implementations (#7888)
    • Support to reboot into UART download mode (#7854, #7897)
    • String: compatibility with 64 bits scalars (#7863)
    • Update toolchain to support std::remainder (#7849)
    • allow to set pin to OUTPUT_OPEN_DRAIN in analogWriteMode (#7841)
    • Add 24-bit mode to I2S (#7835)
    • Hexdump fix&update (#7831)
    • improve silicon aes_unwrap (#7773)
    • Supersede #3856, remove undef min/max (#7824)
    • Add stub for analogReference() (#7809)
    • UART: add yield (#7799)
    • BREAKING - Upgrade to upstream newlib 4.0.0 release (#7708)
    • Update to latest uzlib upstream (#7776, #7782)
    • i2s: adds i2s_rxtxdrive_begin(enableRx, enableTx, driveRxClocks, driveTxClocks) (#7748)
    • PoC cache configuration control (#7060, #7754, #7767, #7768, #7812, #7816, #7820, #7790)
    • Receiving no data in Updater is an error (#7729)
    • PROGMEM compatibility changes to String (#7724)
    • schedule_recurrent_function_us should be in iram (#7713)
    • Re-implement PWM generator (#7715, #7712, #7022, #7231, #7800, #7996)
    • WString: Optimize a bit (#7553)
    • Fix sntp_get_real_time prototype in header (#7707)
    • Provide String::indexOf for a char* needle (#7706)
    • Fix newlib to support <+-nn> timezone names (#7699, #7702)
    • BREAKING: Add Print::availableForWrite method (#7658)
    • settimeofday_cb: distinguish from user or sntp (#7637)
    • Add Copyright notice to Schedule.h (#7653)
    • BREAKING: Add Wrong Password wifi status case (#7652)
    • New flash writing method with offset/memory/size alignment handling (#7514)
    • Add missing sntp_init/sntp_stop (#7628)
    • Use direct member initialization instead of ctr initialisation (#7558)
    • Prevent rewriting Updater_Signing.h if content unchanged (#7627)
    • WString: c_str() returns null pointer after move (#7611)
    • WString: mark move ctor as noexcept (#7610)
    • sntp: use one time source and fix unsynchronized sntp time stamp (#7595)
    • Add clear method to IPAddress (#7586)
    • Check also if IP is not IPADDR_NONE (#7585)
    • Fix gzip+signed OTA error (#7577)
    • new w/ OOM now aborts by defaults, or throw an exception (#7536)
    • getCpuFreqMHz(): fix when F_CPU is not defined (#7554)
    • Updater MD5 cleanup on begin (#7534)
    • Add synthetic IntegerDivideByZero exception (#7496)
    • avoid circular #include dependence for PolledTimeout (#7356)
    • base64 class uses String, adding harmless #include (#7517)
    • sys/pgmspace.h: Refactor inline asm (#7510)
    • Add SerialEvent() callback to loop processing (#7505)
    • Remove warnings when building NoAssert (#7499)
    • BREAKING - analogWriteRange 8-bit default (#7456)
    • BREAKING - Pass String by const reference [3.0] (#6583)

    Libraries - softserial

    • Maintenance release 6.12.3: better dependency declarations for Platformio (#8030)
    • EspSoftwareSerial 6.12.2: Inlining push() functions that must be in IRAM for calling from ISRs (#7986)
    • Bug-fix release 6.12.1: a documentation error was reported by a user; dropped bit-patterns that masked the stop-bit fixed. (#7938)
    • EspSoftwareSerial minor release 6.12.0 completes adaptation to new Stream::send() (#7923)
    • Minor EspSoftwareSerial release 6.11.7, for deprecated ICACHE_RAM_ATTR in upcoming ESP8266 Arduino core 3.0.0. (#7922)
    • EspSoftwareSerial, bump up Arduino library manager related files 6.11.6 (#7891)
    • Update to EspSoftwareSerial 6.11.5 (#7889)
    • EspSoftwareSerial bug-fix release 6.11.4 (#7862)
    • Update to EspSoftwareSerial 6.11.3: prepares for ESP8266 Arduino core PR 6979. (#7840)
    • EspSoftwareSerial 6.11.2: Delegate<> assign operators added. (#7815)
    • Minor EspSoftwareSerial release 6.11.1 (#7804)
    • Minor EspSoftwareSerial release 6.11.0 (#7802)
    • EspSoftwareSerial bug fix release 6.10.1: preciseDelay() could delay() for extremely long time, if period duration was exceeded on entry. (#7771)
    • EspSoftwareSerial 6.10.0: override keyword for recent Print::availableForWrite() addition (#7710)
    • EspSoftwareSerial 6.9.0: data/strings in flash alignment handling fix. Yielding during write() improvement. (#7604)

    Libraries - FS

    • Update mklittlefs executable (#7906)
    • Track creation time of LittleFS FS (#7873)
    • Invalid read return value fix (#7817)
    • Update to SdFat 2.0.2, speed SD access (#7779)
    • Rationalize File timestamp callback (#7785)
    • Update to LittleFS v2.3 (#7787)

    Libraries - Network

    • added ArduinoWiFiServer with send-to-all-clients functionality (#7612)
    • internal: rename ClientContext::wait_until_sent() to wait_until_acked() (#7896)
    • Added ESP32 compatible methods for setting/getting hostname (#7900)
    • AP & dhcp-server: fix uninitialized variables (#7905)
    • Netdump: Avoid UB and abort on nullptr buffer (#7822)
    • lwip2: use pvPortXalloc/vPortFree and "-free -fipa-pta" (#7793)
    • more lwIP physical interfaces (#6680)
    • Netump (#7527, #7659)
    • replace old Ethernet Arduino-library with v2, submoduled (#6812)

    Library - WiFi

    • WiFi: clean up AP SSID setter & getter, support 32 chars (#7941)
    • [BREAKING] wifi: remove pseudo-modes for shutdown, expose ::[resumeFrom]shutdown() (#7956)
    • [BREAKING] Disable WiFi at boot by default (#7902)
    • Added broadcastIP method to WiFiSTA class (#7899)
    • WIFI_RESUME improve speed and example (#7877)
    • WiFiServer.cpp: Fix warning (#7755)
    • update documentation example (#7697)
    • Refactor WiFi scan example (#7655)
    • BREAKING: Change return type of channel() (#7656)
    • BREAKING: Change return type of RSSI() (#7657)
    • Reduce codesize of setOutputPower (#7572)

    Library - TLS/SSL

    • Fix a warning (#8014)
    • Adding comment to ignore SSL certificate in sample code. (#7994)
    • Update Root Certificate in example (#7932)
    • Adds the method setSSLVersions() also to WiFiClientSecure in order to use that new feature. (#7925)
    • Add setSSLVersion call to SSL object (#7920)
    • Allow users to inherit and override CertStore (#7827)
    • Reduce BearSSL code size by not -O2 FSMs (#7807)
    • WiFiServerSecure: Cache SSL sessions (#7774)
    • WiFiClientSecure: use context (#7680)
    • Update to latest BearSSL as of Nov 2020 (#7732)
    • Add Stream loaders for BearSSL (#7675)
    • Catch and display SSL errors for fatal alerts (#7681)
    • Fix error when debug enabled but no port chosen (#7648)
    • Remove stray axtls refs, deprecated compat funcs (#7626)
    • Fix error message typo (#7581)
    • Update DigestAuthorization.ino (Simple example update) (#7579)
    • Update certs-from-mozilla.py (#7573, #7578)
    • Use root cert, not fingerprint for api.github.com (#7490)
    • Update FP for tls.mbed.org (#7479)
    • Change BSSL_CertStore test URL (#7370)
    • Update to BearSSL version lost in GCC10 update (#7453)

    Library - Webserver

    • ESP8266WebServer: Add variadic template version of collectHeaders() (#7296)
    • Fix header FSM in webserver, fix Windows uploads (#7805)
    • ETag support for WebServer (#7709)
    • Rewrite multipart boundary detection (#7728)
    • Fixed bug in parsing POST file uploads (#7543)
    • Fix long password validation in WebServer (#7676)
    • FIX MIME-Type for txt-suffix (#7608)
    • FIX StaticRequestHandler crashes when cache_header is null and DEBUG_ESP_CORE is enabled (#7609)
    • Avoid #includes with a surrounding namespace (#7560)
    • webserver hook: allow to handle external http protocol (#7459, #7492, #7515)
    • Made ESP8266WebServer::client() return a reference (fixes #7075) (#7080)
    • WebServer: Allow client to send many requests on the same connection (#7414)
    • webserver: do not count "plain" in argument list (#6768)
    • webserver: string optimization (#7446)

    Libraries - others

    • Resolve "PWM-locked" / "phase-locked" waveform merge leftover in Servo lib (#7978)
    • Add I2S class support (#7874)
    • At MDNS.end() also release services (#7859)
    • AVRISP: Prevent nullptr dereference on OOM (#7823)
    • HTTPClient: fix error handling (#7811)
    • LEAmDNS: one instance for all interfaces (#7786 - #7540 #7615 #7636 #7640)
    • Add the missing 'rename' method wrapper in SD library. (#7766)
    • Update to ESP8266HTTPClient.cpp for no Content-Length (#7691)
    • BREAKING: Change servo defaults to safer defaults (#7023)
    • Hook up custom timestamp proc for SD/SDFS (#7686)
    • BREAKING: Change return EEPROM.end() to bool (#7630)
    • httpclient: remove deprecated API (#7617)
    • Avoid float-double-conversion (#7559)
    • Use direct member initialization instead of ctr initialisation (#7556)
    • Basic authentication with ESP8266httpUpdate (#7190)

    Documentation

    • doc: analogRead must not be called to frequently with WiFi is on (#7981)
    • comments in ClientContext::connect() (#7961)
    • Fix typo in EEPROM debug message (#7934)
    • Fix link to ESP8266 NonOS SDK (#7914)
    • Update a02-my-esp-crashes.rst (#7739)
    • Clarified implementation of the signed OTA implementation (#7736)
    • Specify where Additional Boards Manager URLs is (#7733)
    • update documentation example (#7697)
    • Revive a dead link (#7679)
    • Update OTA HTTP Server Header Information (#7633)
    • Pull deprecated axtls link (#7624)
    • Update README.md (#7623)
    • Update path of gdb (#7603)
    • Fixup weird combination of oneline/multi line comments (#7566)
    • Fix spelling typo under doc/faq (#7538)
    • doc: gcc handles duplicate literal strings (#7531)
    • Fix and add details to Serial doc (#7521)
    • Fix spelling typos in files under doc/esp8266wifi (#7520)
    • Typo (#7502)
    • Mention OTA Update class blocks flash mode changes (#7321)
    • Fix spelling typos in readme.rst (#7447)
    • Grammar fixes (#7441)

    CI

    • Fix ESP8266SdFat architecture, Windows CI (#7866)
    • upgrade arduino in CI (#7716)
    • Use smarter cache key, cache Arduino IDE (#7791)
    • Remove Travis-CI configuration (#7674)
    • Allow test framework to use cores/esp8266/Arduino.h directly (#7377)
    • ci: apt update (#7596)
    • Properly replace toolchain in PlatformIO CI script (#7580)
    • PIO: Delete owner field (#7563)
    • Add CI test for eboot build (#7546)
    • Update PIO CI to be less chatty, fix CI fail (#7530)
    • CI: on host: force 64 bit mode like make -j2 CI implicitly does (#7513)
    • Add valgrind mocked test to CI (#7501)
    • Clean up minor warnings from LGTM.com (#7500)
    • Small update to ease manual release generation (#7467)
    • Fix typo in platform.txt causing device test fails (#7463)
    • Transition from TravisCI to GitHub CI (#7444)
    • Fix spelling typos in files under packages dir (#7439)
    • Remove wget dump during CI (#7438)

    Build options

    • board manager: wemos d1 clones: new entry with menus for flash mode and flash freq (#7989)
    • board manager: + Agrumino lemon v4 (#7883)
    • Fix improper GENERIC board IDs (#7839)
    • boards.txt: sort by displayed name (#7670)
    • add sdk options to "generic esp8285 module" (#7550)

    Build system

    • Update board-specific defines (#7875)
    • Add a check for all URLs in the package file (#7848)
    • Fix typo in 32-bit Windows package JSON (#7847)
    • PIO: Dynamically configure exceptions support (#7834)
    • platform.txt: instruct GCC to perform more aggressive optimization (#7770)
    • makecorever.py: Hide GIT error messages. Fixes #7744 (#7745)
    • Normalize platform.txt pattern numbers (#7752)
    • Fix platform.txt issue for Windows (#7750)
    • Update to pyserial 3.5, esptool 3.0 (#7737)
    • Added GZipped OTA support in elf2bin and PlatformIO (#7727)
    • Use -std=gnu17 instead of -std=c17 for GCC and test (#7588)
    • Compile failure fix with FS_NO_GLOBALS flag (#7685)
    • Update to GCC 10.2 (#7607)
    • Upgrade to GCC 10.1 toolchain (#6294)

    Emulation on host

    • minor host fix found while compiling arduinoJson (#8009)
    • emulation on host: millis()/micros() now start at 0 (#7810)
    • mock: +hexdump() from debug.cpp (#7789)
    • emulation on host: makefile rework: only one build dir (#7738, #7740, #7741)
    • emulation on host makefile update, allowing to pass more options (#7552)
    Source code(tar.gz)
    Source code(zip)
    esp8266-3.0.2.zip(36.43 MB)
    package_esp8266com_index.json(155.84 KB)
  • 3.0.1(Jun 26, 2021)

    Breaking Changes

    • BREAKING: "i2s.h" removed, I2S library added (#8108)

    Core

    • Make String reallocation warning more descriptive (#8131)
    • Normalize core header's include guard. (#8110)
    • makeword: sync header and implementation (#8097)
    • Use optimal bundled library names (#8088) (#8098)
    • Added IRAM_ATTR to _stopPWM() so that digitalWrite() would work inside ISR. Fixes #8043 (#8044) (#8048)
    • makecorever.py: restore ARDUINO_ESP8266_GIT_VER even without .git/ (#8138)

    IDE

    • Update debug level list link (#8172)
    • Add missing menu.UploadTool name definition (#8153)

    Libraries - LittleFS

    • Re-add mklittlefs to package.json, fixing "ESP8266 LittleFS Data Upload" (#8060)
    • Don't crash when including LittleFS.h w/no FS (#8173)

    Libraries - SD/SDFS

    • SDFS: fix AvailableForWrite: do not always return 0 when space is available (#8167)

    Libraries - ESP8266httpUpdate

    • ESP266httpUpdate: remove dead API and fix doc (#8063)

    Libraries - ESP8266WiFi

    • Fix stopAllExcept with WiFiClientSecure (#8136)
    • LwipIntfDev.h - apply static DNS config (#8076)

    Libraries - SoftwareSerial

    • Update EspSoftwareSerial to bug fix release 6.12.6

    Libraries - ESP8266HTTPClient

    • ESP8266HTTPClient: remove old example (#8111)
    • Change protocol detection so uppercase or lowercase works (#8137)

    Toolchain

    • Update toolchain to gcc 10.3 w/patches (#8104) (#8103)
    • Update toolchain to fix pgm_read_float_unaligned (#8091)
    • Remove include and lib folders removed since 3.0.0 core (#8125)
    • Add errors on invalid/missing function return type (#8165)
    • GNU source: honoring libc requirements (#8147)

    PlatformIO

    • PIO: use CCFLAGS for -Werror (#8175) (#8092)
    • Documentation: Note about options on PIO (#8174)

    Documentation

    • Fix readthedoc python dependencies (#8166)
    • Documentation: Arduino IDE options: fix hyperlinks and format, options (#8158) (#8154)

    CI / Release / Environment

    • Add code-spell spelling checks to CI (#8067)
    • Release script: protect bash variables and add logs, major/minor/rev macro addition, BASH fix (#8074) (#8126) (#8127) (#8168)
    • Remove some no longer applicable artifacts from .gitignore (#8170)

    Release 3.0.0 Notes

    Great additions

    • PoC cache configuration control (aka +16KB heap!) (#7060)
    • Hardware WDT Stack Dump Tool (#7010)
    • Update to GCC 10.2 (#7607)

    Breaking: Deprecation - Removal

    • BREAKING: httpclient: remove deprecated API (#7617)
    • BREAKING: Update Arduino.h, remove TIM_DIV265 (#7440)
    • BREAKING: Remove lwip-v1.4 specific code (#7436)
    • BREAKING: Remove axTLS from code and documentation (#7437)

    Breaking changes summary

    • BREAKING: WString: return bool instead of unsigned char (#7939)
    • BREAKING: wifi: remove pseudo-modes for shutdown, expose ::[resumeFrom]shutdown() (#7956)
    • BREAKING: Disable WiFi at boot by default (#7902, #7990, #7993)
    • BREAKING: base64::encode() compat with esp32: no newlines by default (#7910)
    • BREAKING: Use IRAM_ATTR in place of ICACHE_RAM_ATTR (#7921)
    • BREAKING: Upgrade to upstream newlib 4.0.0 release (64 bits time_t) (#7708)
    • BREAKING: Change servo defaults to safer defaults (#7023)
    • BREAKING: Add Print::availableForWrite method (#7658)
    • BREAKING: Change return EEPROM.end() to bool (#7630)
    • BREAKING: Change return type of channel() (#7656)
    • BREAKING: Change return type of RSSI() (#7657)
    • BREAKING: Add Wrong Password wifi status case (#7652)
    • BREAKING: analogWriteRange 8-bit default (#7456)
    • BREAKING: HTTPClient: RequestHandler: Pass String by const reference (#6583)

    Boot

    • eboot: .RODATA, upstream uzlib, move CRC, save 112 bytes (#7844)
    • Update eboot to build with C17, not C99 standard (#7837, #7838)
    • Fix eboot crash with exception 28. ets_printf() should take pointer argument. (#7666)
    • Use 32b loads to set print strings (#7545)
    • Comment out verify step in eboot.c (#7468)

    Core

    • BREAKING: WString: return bool instead of unsigned char (#7939)
    • ESP class should be a singleton: make all member functions static. (#8006)
    • Updated HWDT to use IRAM_ATTR instead of ICACHE_RAM_ATTR. (#8013, #8018)
    • Hardware WDT Stack Dump Tool (#7010)
    • WString: direct operator overloads instead of StringSumHelper (#7781)
    • Clean up ICACHE_RAM_ATTR in VM PR (#7924)
    • Added ESP32 compatible methods for setting/getting sleep mode (#7901)
    • Enable 128K virtual memory via external SPI SRAM (#6994)
    • Stream::send() (#6979, #7935, #7951, #7987, #7995)
    • [BREAKING] base64::encode() compat with esp32: no newlines by default (#7910)
    • BREAKING - Use IRAM_ATTR in place of ICACHE_RAM_ATTR (#7921)
    • OOM debug: warn about String reallocation (#7908)
    • OOM: avoid warn when calling *alloc(0) (#7909)
    • String: add missing long long operator implementations (#7888)
    • Support to reboot into UART download mode (#7854, #7897)
    • String: compatibility with 64 bits scalars (#7863)
    • Update toolchain to support std::remainder (#7849)
    • allow to set pin to OUTPUT_OPEN_DRAIN in analogWriteMode (#7841)
    • Add 24-bit mode to I2S (#7835)
    • Hexdump fix&update (#7831)
    • improve silicon aes_unwrap (#7773)
    • Supersede #3856, remove undef min/max (#7824)
    • Add stub for analogReference() (#7809)
    • UART: add yield (#7799)
    • BREAKING - Upgrade to upstream newlib 4.0.0 release (#7708)
    • Update to latest uzlib upstream (#7776, #7782)
    • i2s: adds i2s_rxtxdrive_begin(enableRx, enableTx, driveRxClocks, driveTxClocks) (#7748)
    • PoC cache configuration control (#7060, #7754, #7767, #7768, #7812, #7816, #7820, #7790)
    • Receiving no data in Updater is an error (#7729)
    • PROGMEM compatibility changes to String (#7724)
    • schedule_recurrent_function_us should be in iram (#7713)
    • Re-implement PWM generator (#7715, #7712, #7022, #7231, #7800, #7996)
    • WString: Optimize a bit (#7553)
    • Fix sntp_get_real_time prototype in header (#7707)
    • Provide String::indexOf for a char* needle (#7706)
    • Fix newlib to support <+-nn> timezone names (#7699, #7702)
    • BREAKING: Add Print::availableForWrite method (#7658)
    • settimeofday_cb: distinguish from user or sntp (#7637)
    • Add Copyright notice to Schedule.h (#7653)
    • BREAKING: Add Wrong Password wifi status case (#7652)
    • New flash writing method with offset/memory/size alignment handling (#7514)
    • Add missing sntp_init/sntp_stop (#7628)
    • Use direct member initialization instead of ctr initialisation (#7558)
    • Prevent rewriting Updater_Signing.h if content unchanged (#7627)
    • WString: c_str() returns null pointer after move (#7611)
    • WString: mark move ctor as noexcept (#7610)
    • sntp: use one time source and fix unsynchronized sntp time stamp (#7595)
    • Add clear method to IPAddress (#7586)
    • Check also if IP is not IPADDR_NONE (#7585)
    • Fix gzip+signed OTA error (#7577)
    • new w/ OOM now aborts by defaults, or throw an exception (#7536)
    • getCpuFreqMHz(): fix when F_CPU is not defined (#7554)
    • Updater MD5 cleanup on begin (#7534)
    • Add synthetic IntegerDivideByZero exception (#7496)
    • avoid circular #include dependence for PolledTimeout (#7356)
    • base64 class uses String, adding harmless #include (#7517)
    • sys/pgmspace.h: Refactor inline asm (#7510)
    • Add SerialEvent() callback to loop processing (#7505)
    • Remove warnings when building NoAssert (#7499)
    • BREAKING - analogWriteRange 8-bit default (#7456)
    • BREAKING - Pass String by const reference [3.0] (#6583)

    Libraries - softserial

    • Maintenance release 6.12.3: better dependency declarations for Platformio (#8030)
    • EspSoftwareSerial 6.12.2: Inlining push() functions that must be in IRAM for calling from ISRs (#7986)
    • Bug-fix release 6.12.1: a documentation error was reported by a user; dropped bit-patterns that masked the stop-bit fixed. (#7938)
    • EspSoftwareSerial minor release 6.12.0 completes adaptation to new Stream::send() (#7923)
    • Minor EspSoftwareSerial release 6.11.7, for deprecated ICACHE_RAM_ATTR in upcoming ESP8266 Arduino core 3.0.0. (#7922)
    • EspSoftwareSerial, bump up Arduino library manager related files 6.11.6 (#7891)
    • Update to EspSoftwareSerial 6.11.5 (#7889)
    • EspSoftwareSerial bug-fix release 6.11.4 (#7862)
    • Update to EspSoftwareSerial 6.11.3: prepares for ESP8266 Arduino core PR 6979. (#7840)
    • EspSoftwareSerial 6.11.2: Delegate<> assign operators added. (#7815)
    • Minor EspSoftwareSerial release 6.11.1 (#7804)
    • Minor EspSoftwareSerial release 6.11.0 (#7802)
    • EspSoftwareSerial bug fix release 6.10.1: preciseDelay() could delay() for extremely long time, if period duration was exceeded on entry. (#7771)
    • EspSoftwareSerial 6.10.0: override keyword for recent Print::availableForWrite() addition (#7710)
    • EspSoftwareSerial 6.9.0: data/strings in flash alignment handling fix. Yielding during write() improvement. (#7604)

    Libraries - FS

    • Update mklittlefs executable (#7906)
    • Track creation time of LittleFS FS (#7873)
    • Invalid read return value fix (#7817)
    • Update to SdFat 2.0.2, speed SD access (#7779)
    • Rationalize File timestamp callback (#7785)
    • Update to LittleFS v2.3 (#7787)

    Libraries - Network

    • added ArduinoWiFiServer with send-to-all-clients functionality (#7612)
    • internal: rename ClientContext::wait_until_sent() to wait_until_acked() (#7896)
    • Added ESP32 compatible methods for setting/getting hostname (#7900)
    • AP & dhcp-server: fix uninitialized variables (#7905)
    • Netdump: Avoid UB and abort on nullptr buffer (#7822)
    • lwip2: use pvPortXalloc/vPortFree and "-free -fipa-pta" (#7793)
    • more lwIP physical interfaces (#6680)
    • Netump (#7527, #7659)
    • replace old Ethernet Arduino-library with v2, submoduled (#6812)

    Library - WiFi

    • WiFi: clean up AP SSID setter & getter, support 32 chars (#7941)
    • [BREAKING] wifi: remove pseudo-modes for shutdown, expose ::[resumeFrom]shutdown() (#7956)
    • [BREAKING] Disable WiFi at boot by default (#7902)
    • Added broadcastIP method to WiFiSTA class (#7899)
    • WIFI_RESUME improve speed and example (#7877)
    • WiFiServer.cpp: Fix warning (#7755)
    • update documentation example (#7697)
    • Refactor WiFi scan example (#7655)
    • BREAKING: Change return type of channel() (#7656)
    • BREAKING: Change return type of RSSI() (#7657)
    • Reduce codesize of setOutputPower (#7572)

    Library - TLS/SSL

    • Fix a warning (#8014)
    • Adding comment to ignore SSL certificate in sample code. (#7994)
    • Update Root Certificate in example (#7932)
    • Adds the method setSSLVersions() also to WiFiClientSecure in order to use that new feature. (#7925)
    • Add setSSLVersion call to SSL object (#7920)
    • Allow users to inherit and override CertStore (#7827)
    • Reduce BearSSL code size by not -O2 FSMs (#7807)
    • WiFiServerSecure: Cache SSL sessions (#7774)
    • WiFiClientSecure: use context (#7680)
    • Update to latest BearSSL as of Nov 2020 (#7732)
    • Add Stream loaders for BearSSL (#7675)
    • Catch and display SSL errors for fatal alerts (#7681)
    • Fix error when debug enabled but no port chosen (#7648)
    • Remove stray axtls refs, deprecated compat funcs (#7626)
    • Fix error message typo (#7581)
    • Update DigestAuthorization.ino (Simple example update) (#7579)
    • Update certs-from-mozilla.py (#7573, #7578)
    • Use root cert, not fingerprint for api.github.com (#7490)
    • Update FP for tls.mbed.org (#7479)
    • Change BSSL_CertStore test URL (#7370)
    • Update to BearSSL version lost in GCC10 update (#7453)

    Library - Webserver

    • ESP8266WebServer: Add variadic template version of collectHeaders() (#7296)
    • Fix header FSM in webserver, fix Windows uploads (#7805)
    • ETag support for WebServer (#7709)
    • Rewrite multipart boundary detection (#7728)
    • Fixed bug in parsing POST file uploads (#7543)
    • Fix long password validation in WebServer (#7676)
    • FIX MIME-Type for txt-suffix (#7608)
    • FIX StaticRequestHandler crashes when cache_header is null and DEBUG_ESP_CORE is enabled (#7609)
    • Avoid #includes with a surrounding namespace (#7560)
    • webserver hook: allow to handle external http protocol (#7459, #7492, #7515)
    • Made ESP8266WebServer::client() return a reference (fixes #7075) (#7080)
    • WebServer: Allow client to send many requests on the same connection (#7414)
    • webserver: do not count "plain" in argument list (#6768)
    • webserver: string optimization (#7446)

    Libraries - others

    • Resolve "PWM-locked" / "phase-locked" waveform merge leftover in Servo lib (#7978)
    • Add I2S class support (#7874)
    • At MDNS.end() also release services (#7859)
    • AVRISP: Prevent nullptr dereference on OOM (#7823)
    • HTTPClient: fix error handling (#7811)
    • LEAmDNS: one instance for all interfaces (#7786 - #7540 #7615 #7636 #7640)
    • Add the missing 'rename' method wrapper in SD library. (#7766)
    • Update to ESP8266HTTPClient.cpp for no Content-Length (#7691)
    • BREAKING: Change servo defaults to safer defaults (#7023)
    • Hook up custom timestamp proc for SD/SDFS (#7686)
    • BREAKING: Change return EEPROM.end() to bool (#7630)
    • httpclient: remove deprecated API (#7617)
    • Avoid float-double-conversion (#7559)
    • Use direct member initialization instead of ctr initialisation (#7556)
    • Basic authentication with ESP8266httpUpdate (#7190)

    Documentation

    • doc: analogRead must not be called to frequently with WiFi is on (#7981)
    • comments in ClientContext::connect() (#7961)
    • Fix typo in EEPROM debug message (#7934)
    • Fix link to ESP8266 NonOS SDK (#7914)
    • Update a02-my-esp-crashes.rst (#7739)
    • Clarified implementation of the signed OTA implementation (#7736)
    • Specify where Additional Boards Manager URLs is (#7733)
    • update documentation example (#7697)
    • Revive a dead link (#7679)
    • Update OTA HTTP Server Header Information (#7633)
    • Pull deprecated axtls link (#7624)
    • Update README.md (#7623)
    • Update path of gdb (#7603)
    • Fixup weird combination of oneline/multi line comments (#7566)
    • Fix spelling typo under doc/faq (#7538)
    • doc: gcc handles duplicate literal strings (#7531)
    • Fix and add details to Serial doc (#7521)
    • Fix spelling typos in files under doc/esp8266wifi (#7520)
    • Typo (#7502)
    • Mention OTA Update class blocks flash mode changes (#7321)
    • Fix spelling typos in readme.rst (#7447)
    • Grammar fixes (#7441)

    CI

    • Fix ESP8266SdFat architecture, Windows CI (#7866)
    • upgrade arduino in CI (#7716)
    • Use smarter cache key, cache Arduino IDE (#7791)
    • Remove Travis-CI configuration (#7674)
    • Allow test framework to use cores/esp8266/Arduino.h directly (#7377)
    • ci: apt update (#7596)
    • Properly replace toolchain in PlatformIO CI script (#7580)
    • PIO: Delete owner field (#7563)
    • Add CI test for eboot build (#7546)
    • Update PIO CI to be less chatty, fix CI fail (#7530)
    • CI: on host: force 64 bit mode like make -j2 CI implicitly does (#7513)
    • Add valgrind mocked test to CI (#7501)
    • Clean up minor warnings from LGTM.com (#7500)
    • Small update to ease manual release generation (#7467)
    • Fix typo in platform.txt causing device test fails (#7463)
    • Transition from TravisCI to GitHub CI (#7444)
    • Fix spelling typos in files under packages dir (#7439)
    • Remove wget dump during CI (#7438)

    Build options

    • board manager: wemos d1 clones: new entry with menus for flash mode and flash freq (#7989)
    • board manager: + Agrumino lemon v4 (#7883)
    • Fix improper GENERIC board IDs (#7839)
    • boards.txt: sort by displayed name (#7670)
    • add sdk options to "generic esp8285 module" (#7550)

    Build system

    • Update board-specific defines (#7875)
    • Add a check for all URLs in the package file (#7848)
    • Fix typo in 32-bit Windows package JSON (#7847)
    • PIO: Dynamically configure exceptions support (#7834)
    • platform.txt: instruct GCC to perform more aggressive optimization (#7770)
    • makecorever.py: Hide GIT error messages. Fixes #7744 (#7745)
    • Normalize platform.txt pattern numbers (#7752)
    • Fix platform.txt issue for Windows (#7750)
    • Update to pyserial 3.5, esptool 3.0 (#7737)
    • Added GZipped OTA support in elf2bin and PlatformIO (#7727)
    • Use -std=gnu17 instead of -std=c17 for GCC and test (#7588)
    • Compile failure fix with FS_NO_GLOBALS flag (#7685)
    • Update to GCC 10.2 (#7607)
    • Upgrade to GCC 10.1 toolchain (#6294)

    Emulation on host

    • minor host fix found while compiling arduinoJson (#8009)
    • emulation on host: millis()/micros() now start at 0 (#7810)
    • mock: +hexdump() from debug.cpp (#7789)
    • emulation on host: makefile rework: only one build dir (#7738, #7740, #7741)
    • emulation on host makefile update, allowing to pass more options (#7552)
    Source code(tar.gz)
    Source code(zip)
    esp8266-3.0.1.zip(36.42 MB)
    package_esp8266com_index.json(142.30 KB)
  • 3.0.0(May 16, 2021)

    Great additions

    • PoC cache configuration control (aka +16KB heap!) (#7060)
    • Hardware WDT Stack Dump Tool (#7010)
    • Update to GCC 10.2 (#7607)

    Breaking: Deprecation - Removal

    • BREAKING: httpclient: remove deprecated API (#7617)
    • BREAKING: Update Arduino.h, remove TIM_DIV265 (#7440)
    • BREAKING: Remove lwip-v1.4 specific code (#7436)
    • BREAKING: Remove axTLS from code and documentation (#7437)

    Breaking changes summary

    • BREAKING: WString: return bool instead of unsigned char (#7939)
    • BREAKING: wifi: remove pseudo-modes for shutdown, expose ::[resumeFrom]shutdown() (#7956)
    • BREAKING: Disable WiFi at boot by default (#7902, #7990, #7993)
    • BREAKING: base64::encode() compat with esp32: no newlines by default (#7910)
    • BREAKING: Use IRAM_ATTR in place of ICACHE_RAM_ATTR (#7921)
    • BREAKING: Upgrade to upstream newlib 4.0.0 release (64 bits time_t) (#7708)
    • BREAKING: Change servo defaults to safer defaults (#7023)
    • BREAKING: Add Print::availableForWrite method (#7658)
    • BREAKING: Change return EEPROM.end() to bool (#7630)
    • BREAKING: Change return type of channel() (#7656)
    • BREAKING: Change return type of RSSI() (#7657)
    • BREAKING: Add Wrong Password wifi status case (#7652)
    • BREAKING: analogWriteRange 8-bit default (#7456)
    • BREAKING: HTTPClient: RequestHandler: Pass String by const reference (#6583)

    Boot

    • eboot: .RODATA, upstream uzlib, move CRC, save 112 bytes (#7844)
    • Update eboot to build with C17, not C99 standard (#7837, #7838)
    • Fix eboot crash with exception 28. ets_printf() should take pointer argument. (#7666)
    • Use 32b loads to set print strings (#7545)
    • Comment out verify step in eboot.c (#7468)

    Core

    • BREAKING: WString: return bool instead of unsigned char (#7939)
    • ESP class should be a singleton: make all member functions static. (#8006)
    • Updated HWDT to use IRAM_ATTR instead of ICACHE_RAM_ATTR. (#8013, #8018)
    • Hardware WDT Stack Dump Tool (#7010)
    • WString: direct operator overloads instead of StringSumHelper (#7781)
    • Clean up ICACHE_RAM_ATTR in VM PR (#7924)
    • Added ESP32 compatible methods for setting/getting sleep mode (#7901)
    • Enable 128K virtual memory via external SPI SRAM (#6994)
    • Stream::send() (#6979, #7935, #7951, #7987, #7995)
    • [BREAKING] base64::encode() compat with esp32: no newlines by default (#7910)
    • BREAKING - Use IRAM_ATTR in place of ICACHE_RAM_ATTR (#7921)
    • OOM debug: warn about String reallocation (#7908)
    • OOM: avoid warn when calling *alloc(0) (#7909)
    • String: add missing long long operator implementations (#7888)
    • Support to reboot into UART download mode (#7854, #7897)
    • String: compatibility with 64 bits scalars (#7863)
    • Update toolchain to support std::remainder (#7849)
    • allow to set pin to OUTPUT_OPEN_DRAIN in analogWriteMode (#7841)
    • Add 24-bit mode to I2S (#7835)
    • Hexdump fix&update (#7831)
    • improve silicon aes_unwrap (#7773)
    • Supersede #3856, remove undef min/max (#7824)
    • Add stub for analogReference() (#7809)
    • UART: add yield (#7799)
    • BREAKING - Upgrade to upstream newlib 4.0.0 release (#7708)
    • Update to latest uzlib upstream (#7776, #7782)
    • i2s: adds i2s_rxtxdrive_begin(enableRx, enableTx, driveRxClocks, driveTxClocks) (#7748)
    • PoC cache configuration control (#7060, #7754, #7767, #7768, #7812, #7816, #7820, #7790)
    • Receiving no data in Updater is an error (#7729)
    • PROGMEM compatibility changes to String (#7724)
    • schedule_recurrent_function_us should be in iram (#7713)
    • Re-implement PWM generator (#7715, #7712, #7022, #7231, #7800, #7996)
    • WString: Optimize a bit (#7553)
    • Fix sntp_get_real_time prototype in header (#7707)
    • Provide String::indexOf for a char* needle (#7706)
    • Fix newlib to support <+-nn> timezone names (#7699, #7702)
    • BREAKING: Add Print::availableForWrite method (#7658)
    • settimeofday_cb: distinguish from user or sntp (#7637)
    • Add Copyright notice to Schedule.h (#7653)
    • BREAKING: Add Wrong Password wifi status case (#7652)
    • New flash writing method with offset/memory/size alignment handling (#7514)
    • Add missing sntp_init/sntp_stop (#7628)
    • Use direct member initialization instead of ctr initialisation (#7558)
    • Prevent rewriting Updater_Signing.h if content unchanged (#7627)
    • WString: c_str() returns null pointer after move (#7611)
    • WString: mark move ctor as noexcept (#7610)
    • sntp: use one time source and fix unsynchronized sntp time stamp (#7595)
    • Add clear method to IPAddress (#7586)
    • Check also if IP is not IPADDR_NONE (#7585)
    • Fix gzip+signed OTA error (#7577)
    • new w/ OOM now aborts by defaults, or throw an exception (#7536)
    • getCpuFreqMHz(): fix when F_CPU is not defined (#7554)
    • Updater MD5 cleanup on begin (#7534)
    • Add synthetic IntegerDivideByZero exception (#7496)
    • avoid circular #include dependence for PolledTimeout (#7356)
    • base64 class uses String, adding harmless #include (#7517)
    • sys/pgmspace.h: Refactor inline asm (#7510)
    • Add SerialEvent() callback to loop processing (#7505)
    • Remove warnings when building NoAssert (#7499)
    • BREAKING - analogWriteRange 8-bit default (#7456)
    • BREAKING - Pass String by const reference [3.0] (#6583)

    Libraries - softserial

    • Maintenance release 6.12.3: better dependency declarations for Platformio (#8030)
    • EspSoftwareSerial 6.12.2: Inlining push() functions that must be in IRAM for calling from ISRs (#7986)
    • Bug-fix release 6.12.1: a documentation error was reported by a user; dropped bit-patterns that masked the stop-bit fixed. (#7938)
    • EspSoftwareSerial minor release 6.12.0 completes adaptation to new Stream::send() (#7923)
    • Minor EspSoftwareSerial release 6.11.7, for deprecated ICACHE_RAM_ATTR in upcoming ESP8266 Arduino core 3.0.0. (#7922)
    • EspSoftwareSerial, bump up Arduino library manager related files 6.11.6 (#7891)
    • Update to EspSoftwareSerial 6.11.5 (#7889)
    • EspSoftwareSerial bug-fix release 6.11.4 (#7862)
    • Update to EspSoftwareSerial 6.11.3: prepares for ESP8266 Arduino core PR 6979. (#7840)
    • EspSoftwareSerial 6.11.2: Delegate<> assign operators added. (#7815)
    • Minor EspSoftwareSerial release 6.11.1 (#7804)
    • Minor EspSoftwareSerial release 6.11.0 (#7802)
    • EspSoftwareSerial bug fix release 6.10.1: preciseDelay() could delay() for extremely long time, if period duration was exceeded on entry. (#7771)
    • EspSoftwareSerial 6.10.0: override keyword for recent Print::availableForWrite() addition (#7710)
    • EspSoftwareSerial 6.9.0: data/strings in flash alignment handling fix. Yielding during write() improvement. (#7604)

    Libraries - FS

    • Update mklittlefs executable (#7906)
    • Track creation time of LittleFS FS (#7873)
    • Invalid read return value fix (#7817)
    • Update to SdFat 2.0.2, speed SD access (#7779)
    • Rationalize File timestamp callback (#7785)
    • Update to LittleFS v2.3 (#7787)

    Libraries - Network

    • added ArduinoWiFiServer with send-to-all-clients functionality (#7612)
    • internal: rename ClientContext::wait_until_sent() to wait_until_acked() (#7896)
    • Added ESP32 compatible methods for setting/getting hostname (#7900)
    • AP & dhcp-server: fix uninitialized variables (#7905)
    • Netdump: Avoid UB and abort on nullptr buffer (#7822)
    • lwip2: use pvPortXalloc/vPortFree and "-free -fipa-pta" (#7793)
    • more lwIP physical interfaces (#6680)
    • Netump (#7527, #7659)
    • replace old Ethernet Arduino-library with v2, submoduled (#6812)

    Library - WiFi

    • WiFi: clean up AP SSID setter & getter, support 32 chars (#7941)
    • [BREAKING] wifi: remove pseudo-modes for shutdown, expose ::[resumeFrom]shutdown() (#7956)
    • [BREAKING] Disable WiFi at boot by default (#7902)
    • Added broadcastIP method to WiFiSTA class (#7899)
    • WIFI_RESUME improve speed and example (#7877)
    • WiFiServer.cpp: Fix warning (#7755)
    • update documentation example (#7697)
    • Refactor WiFi scan example (#7655)
    • BREAKING: Change return type of channel() (#7656)
    • BREAKING: Change return type of RSSI() (#7657)
    • Reduce codesize of setOutputPower (#7572)

    Library - TLS/SSL

    • Fix a warning (#8014)
    • Adding comment to ignore SSL certificate in sample code. (#7994)
    • Update Root Certificate in example (#7932)
    • Adds the method setSSLVersions() also to WiFiClientSecure in order to use that new feature. (#7925)
    • Add setSSLVersion call to SSL object (#7920)
    • Allow users to inherit and override CertStore (#7827)
    • Reduce BearSSL code size by not -O2 FSMs (#7807)
    • WiFiServerSecure: Cache SSL sessions (#7774)
    • WiFiClientSecure: use context (#7680)
    • Update to latest BearSSL as of Nov 2020 (#7732)
    • Add Stream loaders for BearSSL (#7675)
    • Catch and display SSL errors for fatal alerts (#7681)
    • Fix error when debug enabled but no port chosen (#7648)
    • Remove stray axtls refs, deprecated compat funcs (#7626)
    • Fix error message typo (#7581)
    • Update DigestAuthorization.ino (Simple example update) (#7579)
    • Update certs-from-mozilla.py (#7573, #7578)
    • Use root cert, not fingerprint for api.github.com (#7490)
    • Update FP for tls.mbed.org (#7479)
    • Change BSSL_CertStore test URL (#7370)
    • Update to BearSSL version lost in GCC10 update (#7453)

    Library - Webserver

    • ESP8266WebServer: Add variadic template version of collectHeaders() (#7296)
    • Fix header FSM in webserver, fix Windows uploads (#7805)
    • ETag support for WebServer (#7709)
    • Rewrite multipart boundary detection (#7728)
    • Fixed bug in parsing POST file uploads (#7543)
    • Fix long password validation in WebServer (#7676)
    • FIX MIME-Type for txt-suffix (#7608)
    • FIX StaticRequestHandler crashes when cache_header is null and DEBUG_ESP_CORE is enabled (#7609)
    • Avoid #includes with a surrounding namespace (#7560)
    • webserver hook: allow to handle external http protocol (#7459, #7492, #7515)
    • Made ESP8266WebServer::client() return a reference (fixes #7075) (#7080)
    • WebServer: Allow client to send many requests on the same connection (#7414)
    • webserver: do not count "plain" in argument list (#6768)
    • webserver: string optimization (#7446)

    Libraries - others

    • Resolve "PWM-locked" / "phase-locked" waveform merge leftover in Servo lib (#7978)
    • Add I2S class support (#7874)
    • At MDNS.end() also release services (#7859)
    • AVRISP: Prevent nullptr dereference on OOM (#7823)
    • HTTPClient: fix error handling (#7811)
    • LEAmDNS: one instance for all interfaces (#7786 - #7540 #7615 #7636 #7640)
    • Add the missing 'rename' method wrapper in SD library. (#7766)
    • Update to ESP8266HTTPClient.cpp for no Content-Length (#7691)
    • BREAKING: Change servo defaults to safer defaults (#7023)
    • Hook up custom timestamp proc for SD/SDFS (#7686)
    • BREAKING: Change return EEPROM.end() to bool (#7630)
    • httpclient: remove deprecated API (#7617)
    • Avoid float-double-conversion (#7559)
    • Use direct member initialization instead of ctr initialisation (#7556)
    • Basic authentication with ESP8266httpUpdate (#7190)

    Documentation

    • doc: analogRead must not be called to frequently with WiFi is on (#7981)
    • comments in ClientContext::connect() (#7961)
    • Fix typo in EEPROM debug message (#7934)
    • Fix link to ESP8266 NonOS SDK (#7914)
    • Update a02-my-esp-crashes.rst (#7739)
    • Clarified implementation of the signed OTA implementation (#7736)
    • Specify where Additional Boards Manager URLs is (#7733)
    • update documentation example (#7697)
    • Revive a dead link (#7679)
    • Update OTA HTTP Server Header Information (#7633)
    • Pull deprecated axtls link (#7624)
    • Update README.md (#7623)
    • Update path of gdb (#7603)
    • Fixup weird combination of oneline/multi line comments (#7566)
    • Fix spelling typo under doc/faq (#7538)
    • doc: gcc handles duplicate literal strings (#7531)
    • Fix and add details to Serial doc (#7521)
    • Fix spelling typos in files under doc/esp8266wifi (#7520)
    • Typo (#7502)
    • Mention OTA Update class blocks flash mode changes (#7321)
    • Fix spelling typos in readme.rst (#7447)
    • Grammar fixes (#7441)

    CI

    • Fix ESP8266SdFat architecture, Windows CI (#7866)
    • upgrade arduino in CI (#7716)
    • Use smarter cache key, cache Arduino IDE (#7791)
    • Remove Travis-CI configuration (#7674)
    • Allow test framework to use cores/esp8266/Arduino.h directly (#7377)
    • ci: apt update (#7596)
    • Properly replace toolchain in PlatformIO CI script (#7580)
    • PIO: Delete owner field (#7563)
    • Add CI test for eboot build (#7546)
    • Update PIO CI to be less chatty, fix CI fail (#7530)
    • CI: on host: force 64 bit mode like make -j2 CI implicitly does (#7513)
    • Add valgrind mocked test to CI (#7501)
    • Clean up minor warnings from LGTM.com (#7500)
    • Small update to ease manual release generation (#7467)
    • Fix typo in platform.txt causing device test fails (#7463)
    • Transition from TravisCI to GitHub CI (#7444)
    • Fix spelling typos in files under packages dir (#7439)
    • Remove wget dump during CI (#7438)

    Build options

    • board manager: wemos d1 clones: new entry with menus for flash mode and flash freq (#7989)
    • board manager: + Agrumino lemon v4 (#7883)
    • Fix improper GENERIC board IDs (#7839)
    • boards.txt: sort by displayed name (#7670)
    • add sdk options to "generic esp8285 module" (#7550)

    Build system

    • Update board-specific defines (#7875)
    • Add a check for all URLs in the package file (#7848)
    • Fix typo in 32-bit Windows package JSON (#7847)
    • PIO: Dynamically configure exceptions support (#7834)
    • platform.txt: instruct GCC to perform more aggressive optimization (#7770)
    • makecorever.py: Hide GIT error messages. Fixes #7744 (#7745)
    • Normalize platform.txt pattern numbers (#7752)
    • Fix platform.txt issue for Windows (#7750)
    • Update to pyserial 3.5, esptool 3.0 (#7737)
    • Added GZipped OTA support in elf2bin and PlatformIO (#7727)
    • Use -std=gnu17 instead of -std=c17 for GCC and test (#7588)
    • Compile failure fix with FS_NO_GLOBALS flag (#7685)
    • Update to GCC 10.2 (#7607)
    • Upgrade to GCC 10.1 toolchain (#6294)

    Emulation on host

    • minor host fix found while compiling arduinoJson (#8009)
    • emulation on host: millis()/micros() now start at 0 (#7810)
    • mock: +hexdump() from debug.cpp (#7789)
    • emulation on host: makefile rework: only one build dir (#7738, #7740, #7741)
    • emulation on host makefile update, allowing to pass more options (#7552)
    Source code(tar.gz)
    Source code(zip)
    esp8266-3.0.0.zip(36.23 MB)
    package_esp8266com_index.json(128.82 KB)
  • 2.7.4(Aug 2, 2020)

  • 2.7.3(Jul 27, 2020)

  • 2.7.2(Jul 7, 2020)

    Changes since 2.7.1 (to 2.7.2)

    Boot

    • Xmc flash 2 (#7317) (fixes #6725 #7277)

    Core

    • Add namespace to FS references in CertStore (#7413)
    • For UMM_CRITICAL_METRICS fixed time_stats initializer. (#7390)
    • Add a "-- CUT HERE --" marker to exception output (#7369)
    • CallbackList API: improve to facilitate executer to know the number of active callbacks (#7361)
    • umm_malloc manual merge with upstream (#7337)
    • Fix sign in configTime(tz,dst,) (#7320)
    • Bring SPIFFS up to latest version (#7276)
    • Allow non-aligned PSTR() (#7275)
    • Crypto: Add required BearSSL include in header (#7310)

    Build system

    • Use a prebuild, portable Python3 for OSX (#7348)
    • Recognize MSYS(MINGW) as Windows for toolchain get (#7358)
    • elf2bin.py objcopy cleanup (#7351)

    Libraries

    • WiFiMulti: Ability to set connect timeout in WifiMulti->run (#7420)
    • BearSSL: Add namespace to FS references in CertStore (#7413)
    • httpclient: fix error meaning (#7401)
    • EspSoftwareSerial 6.8.5: fixes parity for TX with odd word size modes (#7399, #7367, #7354)
    • Add ESP8266WebServerTemplate::enableCORS(bool _ec) (#7388)
    • SPI: abs -> std::abs and cast fixes (#7362)
    • Fix oversight for ap gw (#7366)
    • ESP8266WiFiAP: fix IP address in some cases (#7363)
    • LittleFS: Return FALSE on seek past EOF (#7324)
    • Webserver: Flash size reduction for mime-type (#7312)
    • BearSSL: Allocate stack for SigningVerifier (#7291)
    • ESP8266HTTPClient fixes (#6476)

    Examples

    • Update GitHub cert fingerprint in example (#7397)
    • Multi-client Server Sent Event (aka EventSource) demo (#7012)
    • Webserver: Graph example (#7299)

    Documentation

    • Add some pending methods to generic-class docs (#7427)
    • doc fixes for LittleFS (#7385)
    • Fix typo in readme.rst (#7379)
    • Add documentation on recovering from deep sleep with WAKE_RF_DISABLED (#7338)
    • Add FTP client/server lib link (#7336)
    • Document ESP.getMaxFreeBlockSize() != max malloc size (#7328)

    Boards

    • modwifi: I2C pin assignment fix (#7416)

    Building on host

    • emulation on host: option for FS persistence location (#7424)
    • emulation on host: FS: minor reset fix (#7417)
    • emulation on host: missing mock functions, improve host interface handling (#7404)
    • emulation on host: lwIP always receive multicast packets, enable and fix multicast udp server (#7386)
    • emulation on host: fix binding from a particular interface (#7372)
    • emulation on host: various fixes (#7355)

    Changes since 2.7.0 (to 2.7.1)

    Hotfixes

    • Revert XMC changes in eboot that were causing OTA failure (#7277)
    • Revert MDNS listen the current iface causing MDNS death (#7266)

    Core (FS)

    • Deprecate SPIFFS, move examples to LittleFS (#7263)

    Documentation

    • Document USTX in USS/UxS not working as expected (#7265)

    Changes since 2.6.3 (to 2.7.0)

    Breaking Changes

    None

    Great additions

    • Allow GZIP compressed flash updates (#6820)
    • Add CryptoInterface library (#6961, #7252)

    Core

    • Added missing "if (umm_heap == NULL) {..." to umm_free_heap_size_lw (#6929)
    • Code size optimisations for ESP.getFullVersion() (#6936)
    • I2C: allow clocks below 100KHz (#6934)
    • Reduce mem footprint of ESP.getResetInfo() (#7030)
    • Code size optimisation of ESP.getResetReason() (#7029)
    • Low-Power demo (#6989)
    • Fix WMath's map() implementation for inverse/round-trip mapping (#7027)
    • Fix optimistic_yield to not yield on each call after x µs (#6804)
    • Updated stack offsets for postmortem stack dump (#7066)
    • Corrected stack start and end in stack_thunk_dump_stack() (#7085)
    • configTime(tzsec,dstsec,): fix UTC/local management (#6993)
    • dtostrf: round fix (#7068, #7093)
    • simple TZ api: bypass sprintf/sscanf (= do not use 7KB flash) (#7109)
    • Pull GPIO initialization into its own 'weak' function. (#7044)
    • Attribute __real_system_restart_local() as (noreturn) (#7167)
    • Move floating point from libgcc out of IRAM (#7180, #7188)
    • Tone: extend to 20KHz (#7179)
    • Add CryptoInterface library (#6961, #7252)
    • Fix for MD5 leak bug (#7197, #7208)
    • Use F_CPU if (?) CPU frequency switch is compile-time only (#6833)
    • expose setTZ() (#7234)
    • XMC flash support - WIP (#6725)
    • Allow waveforms to be specified in clock cycles (#7211)
    • Waveforms: cherry pick nice changes from ongoing #7122 (#7218)
    • Allow stopWaveform to stop timed-out waveforms (#7236)
    • Hold transmitter in reset during rate change (#7248)
    • Fix minor GCC10 static analyzer warnings (#7255)

    Core (FS)

    • Skip . and .. on LittleFS::dir::rewind() (#6959)
    • Only update LittleFS timestamp when opened write (#6956)
    • Update LittleFS to latest upstream head (#6986)
    • Add SDFS::Dir::fileTime callback (#6985)
    • Add LittleFS support to ESP8266WebServer.serveStatic() (#6987)
    • Fix boolean/logical & mixup in LittleFS open (#6996)
    • Add fileCreation/getCreation create-time accessors (#7000)
    • Improve LittleFS support (#7071)
    • Update to LittleFS v2.2.0 (#7240)

    Network (Core, Library/ESP8266WiFi)

    • lwip2: no more git sub-sub-module deps, faster checksum, backlog limitation and other fixes (#6887)
    • Fix/enable UDP packet reassembly (#7036, #7132)
    • SNTP: backport espressif sntp api for lwip2 (#7097)
    • TCP: fixes backlog limit handling, and allows ephemeral TCP connections (#7096)
    • lwip2 update: stop dhcp when interface goes down (#7114)
    • Fix UDP send to IPv6 link local addresses (#6541)
    • Fix TCP send to IPv6 link local addresses (#7207)
    • Updating _port to really used port and made _port accessible (#7003)
    • Make DNS resolution order selectable during runtime or compile time (#6865)
    • WiFi: ARP gratuitous API for wifi station mode (#6889, #7203)
    • fix null pointer call from WiFiClient::localIP() to IPAddress (#7221)

    Library - ESP8266WiFi (SSL/TLS)

    • Update BearSSL, increase SSL stack (#6980)
    • Remove memory leak on multiple calls to initCertStore (#7021)
    • Update to latest BearSSL (#7098)
    • Abort if BearSSL stack allocation fails (#7152)

    Flashing - OTA - Updater

    • Allow GZIP compressed flash updates (#6820)
    • Add documentation for compressed OTA, fix bug (#6924)
    • Add a CRC32 over progmem and ESP.checkFlashCRC (#6566)
    • Fix Updater potential overflow, add host tests (#6954)
    • allow ".bin.gz" filter in HTTP updater file selector (#7026)
    • Updater: prevent closing webserver (option) (#6969)
    • Use 2nd stack for update signature verification (#7149)
    • Fix espota completion success/fail check (#7204)

    Library - SoftwareSerial

    • EspSoftwareSerial release 6.8.1 (#6922, #6932, #6943, #7034, #7133, #7139, #7205)

    Library - ESP8266WebServer

    • PROGMEM footprint cleanup for responseCodeToString (#6950)
    • Fix search order for index.htm(l)(.gz) files (#7069)
    • Add Uri with support for regexUri and globUri (#6696)
    • Add flash helper constructor to Uri (#7105)
    • Expose webserver's chunk api (#7134)
    • Make getContentType available for 3rd party usage (#7254)

    Library - ESP8266HTTPClient

    • Reduce temporary string creation in HTTPClient::sendHeader (#6937)
    • Move a couple larger strings from rodata to flash (#6976)
    • clear _canReuse in setUrl if its not a local redirect (#7039)
    • Fixes large payload issues for sendRequest (#7051)
    • Better follow redirection for HTTPClient (#7157)

    Library - mDNS

    • Update LEAmDNS.cpp (fix issue #6982) (#7025)
    • use STA as default interface in mDNS (#7042)
    • Additions to UdpContext needed for LEAmDNS2 (#7048)
    • mDNS: protect MDNSResponder::queryService against misuse (#7216)
    • Add isRunning getter to check is ::begin already called (#7219)
    • Changing listen to listen the current iface only instead of 0 (#7217)

    Library - Servo

    • Define MAX_SERVOS to 12, like original Servo.h (#6999)

    Libraries

    • Various String handling cleanups (Libraries&Core) (#6945)
    • Set a value for SSDP notify interval (#7110)

    Documentation

    • Installation guide for PlatformIO (#7142)
    • Fix RST links for PlatformIO (#7143)
    • (STA) Fixed misplacement of back quotes (#7247)

    CI

    • Fix Windows CI build (#6927)
    • fix CI: switch to python3 for pio (#7035)
    • update to new prebuilt win sed version (#7062)
    • Switch espressif8266 platform to development branch in PlatformIO build (#7170)
    • fix style checking: (#7222)

    Examples

    • CaptivePortal: improve HTML quality (#7227)
    • ESP8266WebServer: Revamp of the FSBrowser and SDWebServer examples (#7182)

    Boards

    • Made changes to include "ESP8266_" with ITEAD board names, {build.board}, (#7024)
    • Add support for eduino wifi (#6554)
    • Add 2MB obtion to 8285 generic board (#7163)
    • esp8285: properly initialize free gpio as input (#7165)

    Build System

    • Add back mklittlefs for linux32 target (#7011)
    • Use a python3 script to call python3 (#6960)
    • boards.txt.py: Use correct file name when writing (#7018)
    • PIO: Allow using custom linker scripts (#7078)
    • package builder: updates for alpha releases (#7088)
    • Switch espressif8266 platform to development branch in PlatformIO build (#7170)
    • Use F_CPU if (?) CPU frequency switch is compile-time only (#6833)

    Device tests

    • device tests: some of them can be run on host (#6912)
    • Add test for FS::open("w+") (#7241)

    Boot

    • eboot: fix linking and padding (#7047)
    • Allow GZIP compressed flash updates (#6820)

    Building on host

    • host build: optimistic_yield() wrongly delays() instead of avoiding excessive yields (#6802)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.7.2.zip(32.87 MB)
    package_esp8266com_index.json(108.12 KB)
  • 2.7.1(May 7, 2020)

    Changes since 2.7.0 (to 2.7.1)

    Hotfixes

    • Revert XMC changes in eboot that were causing OTA failure (#7277)
    • Revert MDNS listen the current iface causing MDNS death (#7266)

    Core (FS)

    • Deprecate SPIFFS, move examples to LittleFS (#7263)

    Documentation

    • Document USTX in USS/UxS not working as expected (#7265)

    Changes since 2.6.3 (to 2.7.0)

    Breaking Changes

    None

    Great additions

    • Allow GZIP compressed flash updates (#6820)
    • Add CryptoInterface library (#6961, #7252)

    Core

    • Added missing "if (umm_heap == NULL) {..." to umm_free_heap_size_lw (#6929)
    • Code size optimisations for ESP.getFullVersion() (#6936)
    • I2C: allow clocks below 100KHz (#6934)
    • Reduce mem footprint of ESP.getResetInfo() (#7030)
    • Code size optimisation of ESP.getResetReason() (#7029)
    • Low-Power demo (#6989)
    • Fix WMath's map() implementation for inverse/round-trip mapping (#7027)
    • Fix optimistic_yield to not yield on each call after x µs (#6804)
    • Updated stack offsets for postmortem stack dump (#7066)
    • Corrected stack start and end in stack_thunk_dump_stack() (#7085)
    • configTime(tzsec,dstsec,): fix UTC/local management (#6993)
    • dtostrf: round fix (#7068, #7093)
    • simple TZ api: bypass sprintf/sscanf (= do not use 7KB flash) (#7109)
    • Pull GPIO initialization into its own 'weak' function. (#7044)
    • Attribute __real_system_restart_local() as (noreturn) (#7167)
    • Move floating point from libgcc out of IRAM (#7180, #7188)
    • Tone: extend to 20KHz (#7179)
    • Add CryptoInterface library (#6961, #7252)
    • Fix for MD5 leak bug (#7197, #7208)
    • Use F_CPU if (?) CPU frequency switch is compile-time only (#6833)
    • expose setTZ() (#7234)
    • XMC flash support - WIP (#6725)
    • Allow waveforms to be specified in clock cycles (#7211)
    • Waveforms: cherry pick nice changes from ongoing #7122 (#7218)
    • Allow stopWaveform to stop timed-out waveforms (#7236)
    • Hold transmitter in reset during rate change (#7248)
    • Fix minor GCC10 static analyzer warnings (#7255)

    Core (FS)

    • Skip . and .. on LittleFS::dir::rewind() (#6959)
    • Only update LittleFS timestamp when opened write (#6956)
    • Update LittleFS to latest upstream head (#6986)
    • Add SDFS::Dir::fileTime callback (#6985)
    • Add LittleFS support to ESP8266WebServer.serveStatic() (#6987)
    • Fix boolean/logical & mixup in LittleFS open (#6996)
    • Add fileCreation/getCreation create-time accessors (#7000)
    • Improve LittleFS support (#7071)
    • Update to LittleFS v2.2.0 (#7240)

    Network (Core, Library/ESP8266WiFi)

    • lwip2: no more git sub-sub-module deps, faster checksum, backlog limitation and other fixes (#6887)
    • Fix/enable UDP packet reassembly (#7036, #7132)
    • SNTP: backport espressif sntp api for lwip2 (#7097)
    • TCP: fixes backlog limit handling, and allows ephemeral TCP connections (#7096)
    • lwip2 update: stop dhcp when interface goes down (#7114)
    • Fix UDP send to IPv6 link local addresses (#6541)
    • Fix TCP send to IPv6 link local addresses (#7207)
    • Updating _port to really used port and made _port accessible (#7003)
    • Make DNS resolution order selectable during runtime or compile time (#6865)
    • WiFi: ARP gratuitous API for wifi station mode (#6889, #7203)
    • fix null pointer call from WiFiClient::localIP() to IPAddress (#7221)

    Library - ESP8266WiFi (SSL/TLS)

    • Update BearSSL, increase SSL stack (#6980)
    • Remove memory leak on multiple calls to initCertStore (#7021)
    • Update to latest BearSSL (#7098)
    • Abort if BearSSL stack allocation fails (#7152)

    Flashing - OTA - Updater

    • Allow GZIP compressed flash updates (#6820)
    • Add documentation for compressed OTA, fix bug (#6924)
    • Add a CRC32 over progmem and ESP.checkFlashCRC (#6566)
    • Fix Updater potential overflow, add host tests (#6954)
    • allow ".bin.gz" filter in HTTP updater file selector (#7026)
    • Updater: prevent closing webserver (option) (#6969)
    • Use 2nd stack for update signature verification (#7149)
    • Fix espota completion success/fail check (#7204)

    Library - SoftwareSerial

    • EspSoftwareSerial release 6.8.1 (#6922, #6932, #6943, #7034, #7133, #7139, #7205)

    Library - ESP8266WebServer

    • PROGMEM footprint cleanup for responseCodeToString (#6950)
    • Fix search order for index.htm(l)(.gz) files (#7069)
    • Add Uri with support for regexUri and globUri (#6696)
    • Add flash helper constructor to Uri (#7105)
    • Expose webserver's chunk api (#7134)
    • Make getContentType available for 3rd party usage (#7254)

    Library - ESP8266HTTPClient

    • Reduce temporary string creation in HTTPClient::sendHeader (#6937)
    • Move a couple larger strings from rodata to flash (#6976)
    • clear _canReuse in setUrl if its not a local redirect (#7039)
    • Fixes large payload issues for sendRequest (#7051)
    • Better follow redirection for HTTPClient (#7157)

    Library - mDNS

    • Update LEAmDNS.cpp (fix issue #6982) (#7025)
    • use STA as default interface in mDNS (#7042)
    • Additions to UdpContext needed for LEAmDNS2 (#7048)
    • mDNS: protect MDNSResponder::queryService against misuse (#7216)
    • Add isRunning getter to check is ::begin already called (#7219)
    • Changing listen to listen the current iface only instead of 0 (#7217)

    Library - Servo

    • Define MAX_SERVOS to 12, like original Servo.h (#6999)

    Libraries

    • Various String handling cleanups (Libraries&Core) (#6945)
    • Set a value for SSDP notify interval (#7110)

    Documentation

    • Installation guide for PlatformIO (#7142)
    • Fix RST links for PlatformIO (#7143)
    • (STA) Fixed misplacement of back quotes (#7247)

    CI

    • Fix Windows CI build (#6927)
    • fix CI: switch to python3 for pio (#7035)
    • update to new prebuilt win sed version (#7062)
    • Switch espressif8266 platform to development branch in PlatformIO build (#7170)
    • fix style checking: (#7222)

    Examples

    • CaptivePortal: improve HTML quality (#7227)
    • ESP8266WebServer: Revamp of the FSBrowser and SDWebServer examples (#7182)

    Boards

    • Made changes to include "ESP8266_" with ITEAD board names, {build.board}, (#7024)
    • Add support for eduino wifi (#6554)
    • Add 2MB obtion to 8285 generic board (#7163)
    • esp8285: properly initialize free gpio as input (#7165)

    Build System

    • Add back mklittlefs for linux32 target (#7011)
    • Use a python3 script to call python3 (#6960)
    • boards.txt.py: Use correct file name when writing (#7018)
    • PIO: Allow using custom linker scripts (#7078)
    • package builder: updates for alpha releases (#7088)
    • Switch espressif8266 platform to development branch in PlatformIO build (#7170)
    • Use F_CPU if (?) CPU frequency switch is compile-time only (#6833)

    Device tests

    • device tests: some of them can be run on host (#6912)
    • Add test for FS::open("w+") (#7241)

    Boot

    • eboot: fix linking and padding (#7047)
    • Allow GZIP compressed flash updates (#6820)

    Building on host

    • host build: optimistic_yield() wrongly delays() instead of avoiding excessive yields (#6802)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.7.1.zip(32.85 MB)
    package_esp8266com_index.json(104.52 KB)
  • 2.7.0(May 1, 2020)

    Changes since 2.6.3 (to 2.7.0)

    Breaking Changes

    None

    Great additions

    • Allow GZIP compressed flash updates (#6820)
    • Add CryptoInterface library (#6961, #7252)

    Core

    • Added missing "if (umm_heap == NULL) {..." to umm_free_heap_size_lw (#6929)
    • Code size optimisations for ESP.getFullVersion() (#6936)
    • I2C: allow clocks below 100KHz (#6934)
    • Reduce mem footprint of ESP.getResetInfo() (#7030)
    • Code size optimisation of ESP.getResetReason() (#7029)
    • Low-Power demo (#6989)
    • Fix WMath's map() implementation for inverse/round-trip mapping (#7027)
    • Fix optimistic_yield to not yield on each call after x µs (#6804)
    • Updated stack offsets for postmortem stack dump (#7066)
    • Corrected stack start and end in stack_thunk_dump_stack() (#7085)
    • configTime(tzsec,dstsec,): fix UTC/local management (#6993)
    • dtostrf: round fix (#7068, #7093)
    • simple TZ api: bypass sprintf/sscanf (= do not use 7KB flash) (#7109)
    • Pull GPIO initialization into its own 'weak' function. (#7044)
    • Attribute __real_system_restart_local() as (noreturn) (#7167)
    • Move floating point from libgcc out of IRAM (#7180, #7188)
    • Tone: extend to 20KHz (#7179)
    • Add CryptoInterface library (#6961, #7252)
    • Fix for MD5 leak bug (#7197, #7208)
    • Use F_CPU if (?) CPU frequency switch is compile-time only (#6833)
    • expose setTZ() (#7234)
    • XMC flash support - WIP (#6725)
    • Allow waveforms to be specified in clock cycles (#7211)
    • Waveforms: cherry pick nice changes from ongoing #7122 (#7218)
    • Allow stopWaveform to stop timed-out waveforms (#7236)
    • Hold transmitter in reset during rate change (#7248)
    • Fix minor GCC10 static analyzer warnings (#7255)

    Core (FS)

    • Skip . and .. on LittleFS::dir::rewind() (#6959)
    • Only update LittleFS timestamp when opened write (#6956)
    • Update LittleFS to latest upstream head (#6986)
    • Add SDFS::Dir::fileTime callback (#6985)
    • Add LittleFS support to ESP8266WebServer.serveStatic() (#6987)
    • Fix boolean/logical & mixup in LittleFS open (#6996)
    • Add fileCreation/getCreation create-time accessors (#7000)
    • Improve LittleFS support (#7071)
    • Update to LittleFS v2.2.0 (#7240)

    Network (Core, Library/ESP8266WiFi)

    • lwip2: no more git sub-sub-module deps, faster checksum, backlog limitation and other fixes (#6887)
    • Fix/enable UDP packet reassembly (#7036, #7132)
    • SNTP: backport espressif sntp api for lwip2 (#7097)
    • TCP: fixes backlog limit handling, and allows ephemeral TCP connections (#7096)
    • lwip2 update: stop dhcp when interface goes down (#7114)
    • Fix UDP send to IPv6 link local addresses (#6541)
    • Fix TCP send to IPv6 link local addresses (#7207)
    • Updating _port to really used port and made _port accessible (#7003)
    • Make DNS resolution order selectable during runtime or compile time (#6865)
    • WiFi: ARP gratuitous API for wifi station mode (#6889, #7203)
    • fix null pointer call from WiFiClient::localIP() to IPAddress (#7221)

    Library - ESP8266WiFi (SSL/TLS)

    • Update BearSSL, increase SSL stack (#6980)
    • Remove memory leak on multiple calls to initCertStore (#7021)
    • Update to latest BearSSL (#7098)
    • Abort if BearSSL stack allocation fails (#7152)

    Flashing - OTA - Updater

    • Allow GZIP compressed flash updates (#6820)
    • Add documentation for compressed OTA, fix bug (#6924)
    • Add a CRC32 over progmem and ESP.checkFlashCRC (#6566)
    • Fix Updater potential overflow, add host tests (#6954)
    • allow ".bin.gz" filter in HTTP updater file selector (#7026)
    • Updater: prevent closing webserver (option) (#6969)
    • Use 2nd stack for update signature verification (#7149)
    • Fix espota completion success/fail check (#7204)

    Library - SoftwareSerial

    • EspSoftwareSerial release 6.8.1 (#6922, #6932, #6943, #7034, #7133, #7139, #7205)

    Library - ESP8266WebServer

    • PROGMEM footprint cleanup for responseCodeToString (#6950)
    • Fix search order for index.htm(l)(.gz) files (#7069)
    • Add Uri with support for regexUri and globUri (#6696)
    • Add flash helper constructor to Uri (#7105)
    • Expose webserver's chunk api (#7134)
    • Make getContentType available for 3rd party usage (#7254)

    Library - ESP8266HTTPClient

    • Reduce temporary string creation in HTTPClient::sendHeader (#6937)
    • Move a couple larger strings from rodata to flash (#6976)
    • clear _canReuse in setUrl if its not a local redirect (#7039)
    • Fixes large payload issues for sendRequest (#7051)
    • Better follow redirection for HTTPClient (#7157)

    Library - mDNS

    • Update LEAmDNS.cpp (fix issue #6982) (#7025)
    • use STA as default interface in mDNS (#7042)
    • Additions to UdpContext needed for LEAmDNS2 (#7048)
    • mDNS: protect MDNSResponder::queryService against misuse (#7216)
    • Add isRunning getter to check is ::begin already called (#7219)
    • Changing listen to listen the current iface only instead of 0 (#7217)

    Library - Servo

    • Define MAX_SERVOS to 12, like original Servo.h (#6999)

    Libraries

    • Various String handling cleanups (Libraries&Core) (#6945)
    • Set a value for SSDP notify interval (#7110)

    Documentation

    • Installation guide for PlatformIO (#7142)
    • Fix RST links for PlatformIO (#7143)
    • (STA) Fixed misplacement of back quotes (#7247)

    CI

    • Fix Windows CI build (#6927)
    • fix CI: switch to python3 for pio (#7035)
    • update to new prebuilt win sed version (#7062)
    • Switch espressif8266 platform to development branch in PlatformIO build (#7170)
    • fix style checking: (#7222)

    Examples

    • CaptivePortal: improve HTML quality (#7227)
    • ESP8266WebServer: Revamp of the FSBrowser and SDWebServer examples (#7182)

    Boards

    • Made changes to include "ESP8266_" with ITEAD board names, {build.board}, (#7024)
    • Add support for eduino wifi (#6554)
    • Add 2MB obtion to 8285 generic board (#7163)
    • esp8285: properly initialize free gpio as input (#7165)

    Build System

    • Add back mklittlefs for linux32 target (#7011)
    • Use a python3 script to call python3 (#6960)
    • boards.txt.py: Use correct file name when writing (#7018)
    • PIO: Allow using custom linker scripts (#7078)
    • package builder: updates for alpha releases (#7088)
    • Switch espressif8266 platform to development branch in PlatformIO build (#7170)
    • Use F_CPU if (?) CPU frequency switch is compile-time only (#6833)

    Device tests

    • device tests: some of them can be run on host (#6912)
    • Add test for FS::open("w+") (#7241)

    Boot

    • eboot: fix linking and padding (#7047)
    • Allow GZIP compressed flash updates (#6820)

    Building on host

    • host build: optimistic_yield() wrongly delays() instead of avoiding excessive yields (#6802)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.7.0.zip(32.85 MB)
    package_esp8266com_index.json(100.93 KB)
  • 2.6.3(Dec 16, 2019)

    Changes since 2.6.2 (to 2.6.3)

    Breaking Change

    none

    eboot

    • Rebuild eboot.elf to include #6823 changes (#6890)

    Core

    • I2C: put inline helpers in IRAM for slave ISRs (#6898)
    • Add hh (byte) format for printf and scanf (#6896)
    • sntp callback: use a recurrent schedule function (#6888)
    • Use 128B chunks instead of 1B writes in Print::print(FlashStringHelper) (#6893)
    • updater: Only set flashmode byte when uploading an executable (#6891)
    • sdk:22x-191122 (optional, non default) (#6879)
    • removed TWI_CLOCK_STRETCH_MULTIPLIER (#6867)
    • added clock stretch yield, [issue 2162] fixed twi::status (#6860)
    • sntp: fix conflict with pre-included Arduino.h (#6853)

    Libraries

    • udp: limit buffer depth (#6895)
    • Fix sending headers in #send_P(int, PGM_P, PGM_P, size_t) (#6881)
    • EspSoftwareSerial 6.4.0: Non-parity modes save 56 bytes of heap memory (#6882)
    • Webserver: Handle HEAD requests for static files correctly (#6837)
    • Webserver: fix sending char* (#6878)
    • Remove user_interface.h from gdbstub includes (#6862)

    Documentation

    • Update PROGMEM.rst (#6872)

    Examples

    • POST http client example (#2704)

    Boards

    • fix NodeMCU v1.0 board option "Builtin Led" (#6905)

    Build System

    • fix device tests (#6861)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.6.3.zip(32.67 MB)
    package_esp8266com_index.json(93.75 KB)
  • 2.6.2(Nov 28, 2019)

    Changes since 2.6.1 (to 2.6.2)

    Breaking Change

    Arduino IDE FS plugin must be updated (#6807)

    Build System

    • switch to firmware 2.2.x-190703 by default (#6826)

    eboot

    • Move eboot_command_clear to after firmware copy (#6823)

    Core

    • HWSerial: uninitialized stack object can have unintended bad values (#6846)
    • [BREAKING] Update FS plugin info for python3 compat (#6807)
    • FS upload: Make upload.py compatible with existing FS upload (#6788)
    • configTime: reset artificial timezone when using newlib (#6828)
    • Implement invert for HardwareSerial (#6816)
    • Mark esp_schedule IRAM_ATTR to make it ISR safe (#6809)
    • Weak binding lessens version dependency between ESP8266 and MT library CoopTask. (#6790)
    • Add stdint, move headers up in core_features.h (#6793)

    Libraries

    • HTTPClient: Allow for POSTs larger than a few 100 bytes (#6800, #6830)
    • HTTPClient: fix in beginInternal() (#6786)
    • WiFi: use wificlient.available() where relevant (#6827)
    • EspSoftwareSerial: ctor/begin() compatibility to AVR/ESP8266/ESP32 (#6814)
    • BearSSL: Expand BSSL stack (#6819)
    • Add callbacks for ESP8266HTTPUpdate (#6796)
    • Add const char* content to ESP8266WebServer::send() (#6797)
    • WebServer: Only add "l" to XX.htm URLs if XX.html exists (#6794)
    • SSDP: add schema(Print &) const (#6798)
    • WiFiClient: Fix typo in mode timeout loop (#6801)
    • Update SdFat to not undefine F() macro (#6787)

    Documentation

    • Add/unify comments for target and source sites of async scheduling via delay()/esp_yield()/esp_schedule() (#6780)
    • Change Sphinx version to latest (#6817)

    Emulation on host

    • Using clockCyclesPerMicrosecond() in host build fails (#6844)
    • F_CPU is available and is 80000000 (#6841)

    Examples

    • Terminate (fix) the chunked printDirectory (#6808)
    • Root page should be of type text/html (#6776)
    • Add missing "LittleFS.begin()" in LittleFS_Timestamp example. (#6762)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.6.2.zip(31.90 MB)
    package_esp8266com_index.json(90.46 KB)
  • 2.6.1(Nov 14, 2019)

    Changes since 2.6.0 (to 2.6.1)

    Breaking Changes

    none

    Build System

    • esptool.py: single command for erasing and flashing (#6765)
    • release script: remove makecorever.py call in released version (#6747)

    Core

    • Fix issue with functions scheduled from scheduled functions (#6770)
    • Update String::concat(char*, len) to allow non null-term strings (#6754)
    • Update to LittleFS 2.1.3 (#6757)
    • WString explicit converters to reduce Flash size (#6759)
    • Add ipv4_addr_t for espconn/LwIP1.4 compat (#6740)

    Libraries

    • Minimize header use, move Ticker function definitions into cpp file (#6496)
    • EspSoftwareSerial release 6.1.1, "9bit" support (#6761)
    • Updated EspSoftwareSerial brings backward compatibility for ctor/begin() pair (only for the common cases with complete default argument use) (#6746)

    Boards

    • board NodeMCUv1 menu: led selection (2, 16) (#6743, #6748)

    Documentation

    • Add some useful links (#6744)
    • Mention erasing arduino15 contents before installing git (#6741)
    • document how to get POST body in ESP8266WebSever (#6736)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.6.1.zip(31.90 MB)
    package_esp8266com_index.json(87.17 KB)
  • 2.6.0(Nov 9, 2019)

    Changes since 2.5.2 (to 2.6.0)

    Breaking Changes

    • SoftwareSerial constructor - will be fixed in 2.6.1

    Great additions

    • Ets intr lock nest (#6484) This great fixing PR has - among others - closed the old infamous #2330
    • Add LittleFS as an optional filesystem w/subdirectories, API compatible w/SPIFFS and SDFS (but not on-flash-format compatible) (#5511)

    Build System

    • Update esptool reset method (#6429)
    • Fix Python3 errors for device tests (#6670)
    • Dynamically find the Python3 dir on Windows (#6646)
    • esptool-2.7 (#6634)
    • CI: trusty (u14.04) -> bionic (u18.04) (#6627)
    • remove esptool.py --trace option (#6606)
    • prepare alpha channel release builder (#6512)
    • Move all PSTRs to own section, allow string dedup (#6565)
    • use arduino IDE stable in CI (#6572)
    • Add 20/26MHz Flash frequencies for slow/cheap flash chips on the Generic ESP board (#6552)
    • Add segment size printout to standard build process (#6525)
    • Fix tool name to point to proper JSON entry (#6513)
    • Run makecorever.py before specific prebuild hooks. (#6504)
    • Add Win32 build to CI system (#6493)
    • Add OSX build to CI, fix OSX builds (#6492)
    • Fix the python3 directory so scripts work on Win32 (#6472)
    • Move all scripts and documentation to Python3 (#6378)
    • fix arduino builder command line (#6461)
    • Prevent rewriting core_version.h if content unchanged (#6414)
    • esptool: 3M-baud serial upload speed (#6399)
    • Move to -std=g++11 from -std=c++11 (#6339)
    • Upgrade to 2.5.0-4 toolchain w/improved pgm_read_x, C++ exceptions (#6273)
    • Clean tools key of obsolete version on next release (#6258)
    • esptool.py: disable 9600bauds in menu for flash upload serial speed (#6292)
    • Prepare signing before sketch is compiled (#6287)
    • Refactored to avoid compiler warning (#6278)
    • Make SPIFFS be an integer number of blocks (#5989, #6537)
    • Updater signature validation - format incompatible w/RFC8017 (#6250)
    • Fix device test environment variables (#6229)
    • Expand gitignore to cover files created by Visual Micro (#6231)
    • Update mklittlefs to match library (#6230)
    • filter weird characters from esp output to python (#6226)
    • Add some more CI tests for String::replace (#6193)
    • IDE menu info: change SPIFFS -> FS and show max OTA size (#6159)
    • emulation on host updates (#6210, #6211, #6248, #6327, #6342, #6507)

    Core

    • Add missing time.h include, use relative include path on time.h includes (#6730)
    • Save 16 bytes RAM by placing esp8266_gpioToFn (core_esp8266_wiring_digital.cpp) array in PROGMEM (#6703)
    • precache() - preload code into the flash cache (#6628, #6674)
    • Double I2C read in one transaction skips a clock pulse (#5528) (#6654)
    • Move cont_run/cont_yield out of IRAM (#6617)
    • NTP-TZ-DST example: list SNTP servers (#6611)
    • Remove duplication and incompatible declarations in sntp.h (#6610)
    • cleanups in ESPClass (#6608)
    • Cleanup base64::encode functions (#6607)
    • use a scheduled function for settimeofday_cb (#6600)
    • Fix pgm_read_float_unaligned macro (#6593)
    • Base64::encode : const correctness / String by reference passing (#6581)
    • Replace ASM block w/C macro for PSTR (#6577)
    • Speed up empty String creation slightly (#6573)
    • const correctness / String by reference passing cleanups (#6571)
    • Remove duplicated sha1 implementation (Fixes #6568) (#6569)
    • Add typedef for putc1, fn_putc1_t. (#6550)
    • Add time to filesystem API (#6544)
    • Add memmove_P, use it in String to ensure F() safety (#6514)
    • Support FS update in two steps (#6505)
    • Add ::updateBaudRate(unsigned long baud) to change the baudrate after begin was called (#6494)
    • Update UART selection for Boot ROM ets_putc, when debug port is selected. (#6489)
    • Wakeup delayed scheduling (#6485)
    • Inline ESP::getCycleCount() to make it safe to call from ISRs (#6477)
    • move timer functions to iram (#6466)
    • Allow Print::println() to work with PROGMEM strings (#6450)
    • Update core with upstream umm_malloc (#6438)
    • Remove ROM routines from libc.a, save progmem (#6432)
    • Fix reverse dependency core Updater -> library ESP8266WiFi (#6398)
    • ensure consistency for gdb hooks signatures (#6391)
    • Uncouple uart from GDBStub library (#6390)
    • fix _min and _max macros (#6374)
    • time: import IANA timezone definitions, expose SNTP API (#6373)
    • Refactor HardwareSerial.cpp for consistent use of PolledTimeout (#6371)
    • wstring: fix concatenation from flash (#6368)
    • enable puya support by default (can be disabled with -DPUYA_SUPPORT=0) (#6362, #6619)
    • Preserve prior bitrate for I2S begin (#6349)
    • Add a FS::check() optional method (#6340)
    • tools: fixed bug to select signed bin (#6334)
    • exceptions: optionally enforce c++ standards (#6333)
    • Reduce the IRAM usage of I2C code by 600-1500 bytes (#6326)
    • Clear updater state on any error (#6325)
    • Add using fs::SPIFFSConfig to FS.h (#6324)
    • Don't throw exceptions from operator new by default (#6312)
    • Make delay() and loop_end() weak functions (#6306)
    • Added memory fence to xt_rsil() (#6301)
    • Fix for future GCC 9.1 warnings (except Ticker.h, gdbstub) (#6298)
    • Create (set/is)empty methods for String class (#6293)
    • Fix raise_exception() (#6288)
    • proposed umm_malloc improvements (#6274)
    • Clean up code to build under GCC7, fix pgm_read_unaligned (#6270)
    • Clean up trivial gcc -wextra warnings (#6254)
    • using std::nothrow instead of malloc (#6251)
    • Do not call yield() from timedRead() or timedPeek() when _timeout is set to 0. (#6242)
    • Put InterruptLock (from interrupts.h) into namespace esp8266 to fix now and future (#6225)
    • Move umm_malloc back to IRAM (#6161)
    • Make SSO support \0s, use memmove, add test (#6155)
    • Add FS::info64 call for filesystems > 4GB (#6154)
    • Bugfix: attach interrupt (#6049) (#6048)
    • add regular scheduled functions (#6039, #6137, #6147, #6158, #6214, #6228, #6233)
    • Implementation of a generic CallBackList (#5710)
    • Serial.flush modification (#5293)

    Style

    • Style (#6653)
    • Allman style: mDNS (#6629)

    SDK

    • sync with upstream NONOS-SDK branch 2.2.x (#6257, #6272, #6672, #6724)

    Boards

    • board filter support (+ iTead sonoff, ESP-Mx boards) (#6643)
    • Adds SparkFun Blynk Board (#6713)
    • Fix espduino verbose upload (#6426)
    • Allow use of LED16 for generic boards (#6343)

    Library - ESP8266WiFi

    • Add wait loop at the end of WiFi::mode (+refactor can_yield) (#6721)
    • ClientContext: restore use of two different pending booleans for connect and write #6483
    • standardizes processing of _delaying in lwIP callbacks (remove assert) (#6460)
    • lwIP-1.4: use fixed locking functions (#6455)
    • ClientContext: break timeout delays also on error while writing or connecting (#6454)
    • new network feature: NAPT (widely known as NAT) (#6360)
    • Experimental: add new WiFi (pseudo) modes: WIFI_SHUTDOWN & WIFI_RESUME (#6356)
    • udp remote pbuf helper: honor fragmented packets (#6222, #6263)
    • TCP connect and send delay fix (#6213)
    • lwip2: fix setting static ip address (#6194)
    • Add timeout to STA::waitForConnectResult (#5371)
    • added public cleanAPlist() function (#4107)

    Library - ESP8266WiFi (SSL/TLS)

    • Fix WiFiClientSecure::available() blocking on dropped connections (#6449)
    • Set method _connectSSL as protected (#6424)
    • SSL: Fix Crash with basic ciphers (#6402)
    • Update to latest BearSSL (#6337)
    • SSL: Add a dump of received FP and CERT when in debug mode (#6300)
    • Update axtls libs with fix for #6260 (#6262)
    • Fix mixup with boolean/bitwise or for BSSL probing (#6252)
    • Add an EC keyed certificat to BearSSL Server example (#6202)
    • Obey the BASIC_SSL request for TLS servers (#6187)
    • Added BR_OPT_NO_RENEGOTIATION flag to forbid TLS renegotiation (#6165)
    • 64 bytes more free by moving DES init constants to flash (#6160)
    • Save 484 bytes of heap foe BSSL applications (#6157)
    • Add basic canary check to BSSL stack thunk (#6156)
    • Expand BSSL stack to 5750 bytes (#6153)
    • Make CertStore natively use File interface (#6131)

    Library - ESP8266WebServer

    • Fix trivial extra "\n" on web update success (#6350)
    • Add HTTP_HEAD to HTTPMethod and parse it (#6413)
    • Add plain char* signatures WebServer::sendContent (#6341)
    • webserver: restore legacy request handler (#6321)
    • allow for authentication with H(A1) with example (#6020)
    • Convert ESP8266WebServer* into templatized model (#5982)
    • fallback onto index.html if index.htm fails (#2614)
    • POST web server example (#2705)

    Library - ESP8266HTTPClient

    • Fix build with -DHTTPCLIENT_1_1_COMPATIBLE=0 (#6597)
    • Fix setURL() handling of path-only parameters (#6570)
    • BasicHttpsClient: Updated demo certificate fingerprint (#6462)
    • Bugfix/esp8266 http client (#6176)
    • Infinite loop while passing File(FS.h) resolved (#5038)
    • Added possibility of sending POST with empty payload (#4275)

    Library - mDNS

    • fix legacy unicast responses (#6613)
    • Clean up remaining non-LeaMDNS diffs from gcc4.8 to gcc7.2 (#6279)
    • fix random crash on startup (#6261)
    • restriction to a single interface (#6224)

    Library - SPI

    • Set SPI_HAS_TRANSACTION to 1 (#6591)
    • Spi slave improvments (#6580)
    • SPI: wrong value for setFrequency() (#6409)

    Library - Ticker

    • Ticker: Fix callback casting. (#6282)
    • Ticker: Use placement new for ETSTimer - no heap fragmentation (#6164)
    • The use of bind in Ticker.h is prone to type inference failure (#6129)

    Libraries

    • EspSoftwareSerial release 5.4.0 with performance/error rate improvement in TX (#6722)
    • Update EEPROM.cpp (#6556, #6599)
    • Put more string literals into PROGMEM (#6588)
    • add or improve some debug messages (#6508)
    • OTA: fixed no "OK" ACK for Signed Update (#6351)
    • FS: Update LittleFS/SdFat to current project head (#6345)
    • ConfigFile: Updated Example to use ArduinoJson6 (#6203)
    • DNSServer: Add support for newer mobile OS changes. (#5529)
    • ESP8266HTTPUpdate: Added Chip ID into HTTP header in lib (#3877)
    • ESP8266HTTPUpdate: Allow Filesystem update (#3732)

    Documentation

    • Re-wording of ATOMIC_FS_UPDATE documentation (#6693)
    • Update installing.rst (#6625)
    • Installing (#6624)
    • Minor FS documentation change from #2904 (#6563)
    • Add interrupt section to docs (#6560)
    • Add info about installing python3 on Mac, Linux (#6558)
    • Update EEPROM library documentation (#6548)
    • Edited OTA readme, added Stream Interface snippet (#6487)
    • Fix the number of examples (#6407)
    • Grammar edits in documentation (#6401)
    • fix documented parameter (#6392)
    • Update WiFiServer docs for ::write(all clients) (#6338)
    • Fix typo in doc (#6313)
    • Minor doc update, "How to make a PR" link (#6297)
    • add documentation to scheduled functions (#6234)
    • Fix editing, typos and grammatical errors (#6207)
    • Document ISRs need ICACHE_RAM_ATTR before them (#6141)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.6.0.zip(31.89 MB)
    package_esp8266com_index.json(83.88 KB)
  • 2.5.2(May 20, 2019)

    Changes since 2.5.1 (to 2.5.2)

    Core

    • Add explicit Print::write(char) (#6101)

    Build system

    • Fix typo in elf2bin for QOUT binary generation (#6116)
    • Support PIO Wl-T and Arduino -T linking properly (#6095)
    • Allow *.cc files to be linked into flash by default (#6100)
    • Use custom "ElfToBin" builder for PIO (#6091)
    • Fail if generated JSON file cannot be read (#6076)
    • Moved 'Dropping' print from stdout to stderr in drop_versions.py (#6071)
    • Fix PIO issue when build environment contains spaces (#6119)

    Libraries

    • Remove deadlock when server is not acking our data (#6107)
    • Bugfix for stuck in write method of WiFiClient and WiFiClientSecure until the remote peer closed connection (#6104)
    • Re-add original SD FAT info access methods (#6092)
    • Make FILE_WRITE append in SD.h wrapper (#6106)
    • Drop X509 after connection, avoid hang on TLS broken (#6065)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.5.2.zip(28.86 MB)
    package_esp8266com_index.json(69.45 KB)
  • 2.5.1(May 11, 2019)

    Changes since 2.5.0 (to 2.5.1)

    Breaking changes

    • Hardware SPI: unswap mode 2 and 3 for portability (#5948)
    • Revert to nonos-sdk 2.2.1, new sdk-switching option in IDE menu for generic board only (#5763)

    Great Additions

    • SD Filesystem compatible with 8266 File, using latest SdFat (#5525, #5861)
    • Unification of SPIFFS and SD, into single compatible FS, File, and Dir objects (#5525)
    • Use esptool.py to handle sketch upload, make python available on Windows, too (#5635)
    • Small String Optimization (SSO) (#5690)

    Documentation

    • Clarify analog output doc for pwm limits (#6051)
    • Upgrade to https: serving for JSON, links in docs (#5992)
    • Added notice to update submodules to test README (#6008)
    • Add note about needing 0.4 esp8266fs uploader (#5976)
    • UDP: Correct out of bounds condition and remove an unnecessary cast (#5924)
    • submodules: git command for updating (#5882)
    • Update adruino link in platform.txt (#5900)

    Core

    • Use "bool" for "boolean" type (#5693)
    • Migrate configTime() to use sntp_set_timezone_in_seconds() to correctly allow timezone spec in seconds without rounding (#5835)
    • Test for StreamString SSO bug (#6035) (#6041)
    • Fix StreamString SSO bug (#6035)
    • Use original ESP8266-specific speeds for SPI speeds (#6023)
    • restore proper arduino Client:: & Wire:: API (#5969)
    • ISR code must be in ICACHE_RAM (#6002)
    • ISR: check for address in IRAM (#5995)
    • Add String::toDouble from upstream Arduino core (#5986)
    • Unaligned access support for pgm_read_word/dword (#5692)
    • Make SPIFFS garbage collection publicly available (#5944)
    • Fix String.replace overlapping strcpy (#5966)
    • Split IRAM into 2 linker sections to move std::fcn to IRAM (#5922)
    • Hardware SPI: unswap mode 2 and 3 for portability (#5948)
    • polledTimeout: add option to use CPU count instead of millis() (#5870)
    • use static_assert to check on fw structure changes over updates (#5937, #5939)
    • Fix String::replace() garbage at end of string (#5897)
    • fix DEBUG macros (all stringsin flash) (#5728)
    • Fix Serial.write(0) overloading (#5878)
    • SD Filesystem compatible with 8266 File, using latest SdFat (#5525, #5861)
    • const for Ticker::active() (#5850)
    • Remove redundant check for zero size SPIFFS partition (#5841)
    • Implement sntp_get|set_timezone_in_seconds() (#5828)
    • Fix repaintable stack calculation (#5821)
    • Revert to nonos-sdk 2.2.1, new sdk-switching option in IDE menu for generic board only (#5763)
    • prepare allman style (#5774)
    • fix UdpContext::(connect,listen) signature by using IPAddress (#5742)
    • Small String Optimization (#5690)
    • Fix pgm_read_ptr() (#5735)
    • Use "bool" for "boolean" type (#5693)

    SSL-TLS:

    • Fix MFLN probe and allow returning whether MFLN succeeded or not after a connection. (#6000)
    • BearSSL Max Fragment Length Negotation and Node.js server (#5929)
    • example: Fix the changed structure of the input file (#5891)
    • Add OOM check and debug message in CertStore (#5820)
    • Add debug messages on BSSL errors (#5723)
    • New menu option to minimize BearSSL ROM with only RSA (#6006)

    Libraries: MDNS

    • MDNS Callback setting needs std::bind parameter by reference instead of by value (#6037)
    • Fix OTA in AP mode (#5894)
    • LEAmDNS: remove implicit debug statements (#5895)

    Libraries: WiFi

    • WiFi: fix switching to static address after WiFi.begin() with lwip2 (#6026)
    • udp: restore correct address/port when parsing packet (#6011)
    • reenable ARP queuing in lwIP2 (#5978)
    • lwIP-v2: new patch to randomize tcp source ports (#5906)
    • bugfix: restore WiFi::setSleepMode functionality with sdk-2.2.x (#5919)
    • Fix SSID reporting for 32-char SSIDs (#5889)
    • Allow to disable DHCP gateway offer when set up of AP. (#4421)
    • lwip2: ipv6: fix udp_new() #5744 (#5752)
    • UdpContext::setMulticastInterface(): fix for IPv6 (#5743)

    Libraries:

    • SPISlave: Fix spi slave timing (#6022)
    • Fix ssdp (#5750)
    • optionally allow redirects on HTTPClient & OTA updates (#5009)
    • OTA: Add progress callback to Updater class. (#5754)
    • Fix hardcoded dependency of ArduinoOTA on mDNS (#5768)
    • change ESP8266WebServer::send_P to function the same as ::send (#5507)
    • Honor timeout in HTTPClient (#6056)

    Examples

    • Fix example DigestAuthorization.ino: Fix WiFiClient vs. HttpClient declaration order (#6029)
    • Fix example StreamHttpClient.ino: Fix WiFiClient vs. HttpClient declaration order (#6030)

    Emulation on Host:

    • Various fixes (#5764, #5765, #5766, #5771, #5772, #5802, #5809, #5840, #5829, #5994, #6013)
    • emulation on host: Add full UART driver emulation. (#5785)

    Submodules:

    • SoftwareSerial: version 5.0.4 (#5965, #5977, #5993, #5981)
    • SoftwareSerial: fix for inverse logic mode (#5972)

    Boards:

    • boards: Invent One: fix analog pin (#5741)

    Build system, Toolchain & Newlib

    • Fix default git version for non git users (#6044)
    • git clean honors .gitignore, tools downloaded by tools/get.py in place (#6036)
    • PlatformIO: generate core_version.h when using feature/stage (#5917)
    • Fix boards-manager install issues on Linux and Windows (#5898)
    • Fix crash in certain PMEM printf format parsing (#5968)
    • fix boards.txt.py with python3 (#5887)
    • add optional espressif fw nonos-sdk 2.2.x (19.03.13) (#5873)
    • Adjust python module search path to avoid picking up pre-existing pyserial/esptool instead of one under tools/ (#5854)
    • PlatformIO: Append FLASHMODE_* macro (#5813)
    • Make signing.py Python2.6+ and Python3+ compat (#5807)
    • PlatformIO: Make exceptions off by default #5538 (#5814)
    • Clean up uploader.py, use implied paths (#5805)
    • Use Pythonic way of calling esptool, avoid fork(#5797)
    • Use local copy of python distro to include a subdir (#5796)
    • Use esptool.py to handle sketch upload, make python available on Windows, too (#5635)
    • Move __PRETTY_FUNCTION__ to progmem (#5758)
    • msys2 support for tools/get.py (#5751)
    • Wrap get.py's "if __name__ == '__main__':" into a function so it can be externally called (#4475)
    • Move .C to .CPP in the code (#5696)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.5.1.zip(28.86 MB)
    package_esp8266com_index.json(66.26 KB)
  • 2.5.0(Feb 6, 2019)

    Changes since 2.4.2 (to 2.5.0)

    Breaking change

    • Arduino FQBN has changed since release 2.4.2 (issue #5572)
    • SSL/TLS API (BearSSL)

    Great additions

    • overall stability and performance improvements
    • modern SSL/TLS with BearSSL (now default)
    • new mDNS library rewrite (aka LEA version is default)
    • nonos-SDK pre-3.0.0 (#5210)
    • C++ Exceptions (experimental, not enabled by default)
    • newlib update (fixes + *printf accepts fmt and args from flash)
    • IPv6 support
    • sketch execution on mock Arduino environment on host computer (experimental)

    Core

    • Improved readString() for File (#5445)
    • stop lwIP dhcp client when WiFi goes off. (#5703)
    • Fix pgm_read_float() macro definitions (#5666)
    • Release buffer/cache on SPIFFS.end() (#5651)
    • GDB support w/new toolchain and UART driver (#5559)
    • hardwareSerial: add missing include (#5648)
    • Changed I2C buffer from 32 to 128 bytes to match Espressif's ESP32 Arduino core (#3576)
    • Remove broken ltoa/ultoa, call itoa/utoa (#5625)
    • Make waveform generator a NMI to run always, increase accuracy (#5578)
    • Remove interrupt disable around flash operations (#5577)
    • Make exceptions off by default (#5538)
    • Rewrite PUYA patch to be more universal and mem friendly. (#5504)
    • Increase free IRAM (#5499)
    • better compatibility for IPAddress changes with external libraries (#5438)
    • Make exceptions a configurable menu (#5434)
    • Use Python JSON to format packages.json file (#5429)
    • Fix pgmspace 32-bit read macros (#5425)
    • fix inconsistent block size for spiffs in board.txt. and ld files (#5412)
    • Split AddrList into object-iterator-container components (#5410)
    • weak hook preinit() #2111 #2133 #2136 (#5395)
    • fix espconn and err_t (#5392)
    • Pass string objects by reference (#5378)
    • Fix rtc mem bounds check (#5372)
    • Check for WEP when setting authmode (#5364)
    • i2s can send now buffers (#5349)
    • cleanup/unify flash sector size define value (#5327)
    • deprecate RTC_REG macros in favor of TIMER_REG macros (old typo in macro names) (#5326)
    • Only stop waveforms actually running in ISR (#5308)
    • Use "PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY" as default lwIP profile for @PlatformIO (#5305)
    • Add missing decrement operator to I2C clockCount (#5292)
    • Fix arg type in Wire to size_t (#5289)
    • constexpr helpers to identify core version (#5269)
    • Allow override of macros in core_version.h (#5268)
    • fix md5 comparison (#5265)
    • fix SPIFFS when not enabled in build options (#5249)
    • Make stopWaveform call interrupt callable (#5248)
    • I2C slave support (originally by bjoham) (#5226)
    • Add stack repainting call to ESP class (#5221)
    • Fix led-pin in updater, also no need to backup LED state (#5217)
    • Update to the last version of nonos-sdk V2, WiFi addons (#5210)
    • PolledTimeout Class for wrapping millis() loops (#5198)
    • cleanly restore spiffs data in boards.txt (#5195)
    • IPv6 and major IPAddress changes (#5136)
    • Allow GPIO 9 and 10 for waveform generation (#5055)
    • Consolidate .iram.text matcher in linker to wildcard matcher (#4356)
    • implement EspClass::getFreeContStack method (#5133)
    • restore SPIFFS symbols when null-sized (#5122)
    • Make unique sections for ICACHE_* variables (#5117)
    • metric for heap fragmentation (#5090)
    • revert e02932f (#619 works now without it) (#5056)
    • Add instantly option to deepSleep (#5052)
    • Move some exception strings to PROGMEM (#5050)
    • Enclose PROGMEM segment names in quotes (#5049)
    • Move all PROGMEM to their own section (#5048)
    • Fix iostream related issues (#5047)
    • uart: BW improvements (#4620)

    Library - mDNS

    • Functional update, host and service probes (#5653)
    • LEAmDNS fixes #3 (#5689)
    • Undo move of keywords.txt and readme.rst for ESP8266mDNS library (#5495)
    • LEAmDNS Fixes (#5641, #5619, #5563)
    • Update mDNS examples to use HTTP Server instead of TCP Server (#5589)
    • use newlib api in new mDNS, fix host using mDNS (#5545)
    • mDNS: Add support for String arg to begin() (#5542)
    • LEAmDNS - Multicast DNS Responder rewrite (#5442)

    Library - ESP8266WiFi

    • Add capability to have light static DHCP lease (#5594)
    • dynamic WiFi.hostname("newname") (#5652)
    • decorate as override virtual methods in WiFiUDP (#5637)
    • WiFiClient::remoteIP: fix nullptr crash (#5634)
    • turn off random delay before sntp request (#5567)
    • fix dhcp6 in upstream lwIP (#5560)
    • fixes for IPv6, added in CI (#5557)
    • add 1 more IPAddress constructor for IPv6 (#5551)
    • Add support for String args to softAP and begin (#5295)
    • let lwIP route packets, do not let SDK teaching how to do so (#5526)
    • in sta mode, empty passphrase should not use secure auth mode (#5516)
    • Implement for ssid a similar approach as for passphrase (#5411)
    • Move WiFi debug messages to PMEM (#5388)
    • Check if AP exists before adding it (#5373)
    • Check for WEP when setting authmode (#5364)
    • Set authmode if passphrase is provided (#5317)
    • Fix: WiFiClient::flush() yields but can be called from events (#5254)
    • Add cryptographically signed update support (#5213)
    • WiFi: improve WiFiClient(Basic) examples (#5197)
    • ClientContext: restore TCP PuSH flasg when needed (#5176)
    • fix: tcp_output() should always be called after tcp_write(), does not break nagle (+ doc) (#5172)
    • Fix TCP race condition, remove fixed delay in CC (#5167)
    • automatically WiFiClient::flush before ::stop (#5135)
    • read all lines from slow servers (#5113)
    • ClientContext (tcp) updates (#5089)

    Library - ESP8266WiFi (SSL/TLS)

    • Fix memory related issues w/BearSSL server/client (#5706)
    • Fix BearSSL Server WDT (#5702)
    • Update to latest BearSSL code. (#5669)
    • Silently eat \rs in PEM decoder in BearSSL (#5598)
    • Update to latest BearSSL w/EC25519 fix (#5468)
    • fix compilation error - can't find axTLS::WiFiServerSecure (#5407)
    • Don't clear authentication options on a ::stop (#5386)
    • Remove obsolete BSSL debug print routines (#5368)
    • Deprecate axTLS, update examples (#5366)
    • Move BearSSLHelpers into BearSSL namespace (#5315)
    • Patch axTLS CVEs and fix CA verification (#5270)
    • Add warning when no authenticator, drop verify() (#5205)
    • Add BearSSL::setFingerprint(char* fp) (#5204)
    • Really free stack after last BearSSL obj destroyed (#5185)
    • Move BearSSL _cipher* init to _clear() for consistency (#5178)
    • Clear cipher list on server creation, fix crash (#5171)
    • Move BearSSL from STACK_PROXY to a real, thunked 2nd stack (#5168)
    • Add SSL Session capability to speed reconnections (#5160)
    • Allow cipher specification for BearSSL (#5151)
    • Move SSLContext to its own header (#5121)
    • Update axTLS to e634adf (#5125)
    • Fix connection options and update github pubkey (#5120)
    • Add WiFiClient parameter to HTTPClient (#4980)

    Library - ESP8266WebServer

    • update HTTPCLIENT_1_1_COMPATIBLE (#5389)
    • fix http parsing (#5262)
    • Fix webserver unresponsiveness (#5259)
    • Improved parameter validation (#5256)
    • fix parseArgument #2 (#5252)
    • fix typo (#5189)
    • Added naive content length to upload struct (#5142)
    • Expose post args during upload (#4935)

    Library - ESP8266HTTPClient

    • Save 2.3K in HTTPClient debug mode by PSTR (#5387)
    • Bugfix/esp8266 http client (#5250)
    • ESP8266httpClient crash-on-destructor bugfix (#5220)
    • Update api.github.com certificate signature (#5145)
    • ESP8266HTTPClient: allow getString() more than once (#5091)
    • Support for concatenation of headers (#4864)

    Other Libraries

    • Update ArduinoOTA and examples with MDNS.update() calls (#5494)
    • DNS: CaptivePortalAdvanced example: Fix compatibility with Android (#5069)
    • Wire Examples based on AVR ones of the same name (#5713)
    • SPI: Allow unaligned input/output to SPI::transferBytes (#5709)
    • Release referenced resources in the destructor for ESP8266SSDP (#5607)
    • Rework DNSServer to be more robust (#5573)
    • Fix negative SPIFFS size (#5522)
    • Webserver: some clients were not able to authenticate using DIGEST_AUTH (#5506)
    • OTA (espota.py) (#5454)
    • Add SD.end() method, including arg to leave SPI up (#5402)
    • (SSDP) usn and udn differences cause issues with smarthings (#5401)
    • Fix debug provision for DNSServer (#5329)
    • Update ESP8266HTTPUpdateServer library (#5297)
    • examples code cleanup (#5290)
    • Dns server cleanup (#5194)
    • Add missing keywords.txt files to bundled libraries (#5183)
    • WiFi Mesh Update 2.1 (#5157)
    • Create library.properties (#5129 #5128 #5127 #5119)
    • Fix min and max for Servo library (#5064)
    • Hash: make actual SHA1 result and comment consistent (#5057)
    • Implementation of Functional and Scheduled option in Ticker lib (#5030)
    • CaptivePortalAdvanced: Change debug print to println (#5000)
    • SD: Implement readBytes (#4931)

    Build system, Toolchain & Newlib

    • Update to toolchain 2.5.0-3 JSON (#5502)
    • Move libstdc++-nox out of IRAM (#5492)
    • fix lwip selection in tests/device Makefile (#5643)
    • Split common.sh into separate scripts for each job (#5569)
    • make CI starts with (longer) PIO jobs, also move (shorter) host job later (#5599)
    • Add Linux i686 (32bit) architecture toolchain (#5586)
    • Speed up CI builds with caching hacks (#5539)
    • emulation on host: fixes and updates (#5537, #5633, #5605)
    • Update to Newlib c0f3596 with regexp/fnmatch (#5457)
    • Update toolchain and bins to 2.5.0-2 autobuild(#5441)
    • Add 64-bit %ll printf format support (#5435)
    • Add in Win64 pointers to Win32 tools (#5427)
    • Add %z and %x to printf backend (#5424)
    • Enable exceptions, update to optimized newlib, migrate to new toolchain (#5376)
    • Move ICACHE_* to unique sections, local LD script (#5150)
    • Add full debug builds for all tests (#5146)
    • build: place generated ld script into build directory (#5043)
    • Automatic stack location selection (SYS or HEAP), enable per library AR-chive in arduino build system (#5018)
    • Switch to isolated build flags per framework (#5028)

    Package builder

    • Keep signing commands in platform.txt on release (#5491)
    • package: add version to board package name (#5046)
    • Minor fixes for #4999 (#5003)

    Upstream dependency - BearSSL

    • Update BearSSL to latest toolchain (#5449)
    • Update to BearSSL 0.6+ release, add AES_CCM modes (#5164)

    Upstream dependency - lwIP-v2

    • lwip2: 3 sntp servers, autoip (169.254), esp-ping, espconn (#5444)
    • update to lwIP-2.1.0: partial SACK support by default (de-selectable in menu) (#5126)

    Documentation

    • Update conf.py from git tag, fix sphinx warnings (#5716)
    • Update release instructions README.md (#5482)
    • Update conf.py (#5518)
    • Correct 'git submodule' syntax (#5654)
    • Correct link to Arduino Board Manager info (#5650)
    • Add fix for SoftwareSerial submodule errors to documentation (#5602)
    • Add specific instructions for breaking changes (#5581)
    • clarify some points, add links, add doc/conf.py (#5519)
    • Mention eboot use of rtc memory (#5439)
    • Add doc for ESP8266WebServer (#5400)
    • documentation: add quick links (#5391)
    • document wificlient loop (#5355)
    • Update generic-class.rst (#5338)
    • Fix doc for ESP8266WiFi (#5325)
    • Update libraries.rst with ESP-NOW (#5322)
    • typo fix (#5319)
    • Add BearSSL documentation (#5311)
    • Add missing decrement operator to I2C clockCount (#5292)
    • Update debugging.rst (#5234)
    • Fix Readme Link (#5215)
    • Add BearSSL license info to README.md (#5211)
    • Revert "Wrong directory for installation??" (#5199)
    • fix doc link (#5190)
    • Make softAP documentation state the correct min value (0) for the max_connection argument. (#5165)
    • Wrong directory for installation?? (#5163)
    • Require sphinx 1.7 due to bugs with new v1.8 (#5132)
    • Fix formatting of bullet lists (#5098)
    • Update a05-board-generator.rst (#5093)
    • Update readme.rst (#5092)
    • Soft-AP documentation update (#5088)
    • Format lists for readability (#5082)
    • doc: improve WiFi.persistent documentation (#5081)
    • Analog input voltage can be 3.3V (#5020)

    Boards

    • XinaBox CW01: DIO flash mode (#5720)
    • generic esp8266 board: Use flash mode DOUT by default, in place of QIO (#5601)
    • ESPectro Core board support (#5419)
    • Added 2M generic boards (#5404)
    • support new board (invent one) (#5286)
    • Fix NUM_ANALOG_INPUTS for Amperka WiFi slot (#5219)
    • Fix boards.txt.py compatible with python3 (#4998)
    • Update ESPduino pin definitions (#4828)

    Tests / CI

    • device test updates (ping, test_millis_mm) (#5455)
    • fix device test test_http_server (#5414)
    • Split PIO job into even and odd builds (#5405)
    • Move from container to VM per Travis requirements (#5367)
    • Class mocks for sketch emulation on host (#5342)
    • Fix device/test_http_client tests (#5309)
    • reduce git load in travis (#5490)
    • ci: fix checking CI_GITHUB_API_KEY, refactoring (#5496)
    • ci: use travis jobs to structure the CI flow
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.5.0.zip(19.35 MB)
    package_esp8266com_index.json(76.02 KB)
  • 2.5.0-beta3(Jan 26, 2019)

    Breaking change

    • Arduino FQBN has changed since release 2.4.2 (issue #5572)

    Core

    • Fix pgm_read_float() macro definitions (#5666)
    • Release buffer/cache on SPIFFS.end() (#5651)
    • GDB support w/new toolchain and UART driver (#5559)
    • hardwareSerial: add missing include (#5648)
    • Changed I2C buffer from 32 to 128 bytes to match Espressif's ESP32 Arduino core (#3576)
    • Remove broken ltoa/ultoa, call itoa/utoa (#5625)
    • Make waveform generator a NMI to run always, increase accuracy (#5578)
    • Remove interrupt disable around flash operations (#5577)
    • Make exceptions off by default (#5538)
    • Rewrite PUYA patch to be more universal and mem friendly. (#5504)

    Library - ESP8266WiFi (SSL/TLS)

    • Update to latest BearSSL code. (#5669)
    • Silently eat \rs in PEM decoder in BearSSL (#5598)

    Library - ESP8266WiFi

    • Add capability to have light static DHCP lease (#5594)
    • dynamic WiFi.hostname("newname") (#5652)
    • decorate as override virtual methods in WiFiUDP (#5637)
    • WiFiClient::remoteIP: fix nullptr crash (#5634)
    • turn off random delay before sntp request (#5567)
    • fix dhcp6 in upstream lwIP (#5560)
    • fixes for IPv6, added in CI (#5557)
    • add 1 more IPAddress constructor for IPv6 (#5551)
    • Add support for String args to softAP and begin (#5295)
    • let lwIP route packets, do not let SDK teaching how to do so (#5526)
    • in sta mode, empty passphrase should not use secure auth mode (#5516)

    Library - mDNS

    • LEAmDNS Fixes (#5641, #5619, #5563)
    • Update mDNS examples to use HTTP Server instead of TCP Server (#5589)
    • use newlib api in new mDNS, fix host using mDNS (#5545)
    • mDNS: Add support for String arg to begin() (#5542)

    Other Libraries

    • Release referenced resources in the destructor for ESP8266SSDP (#5607)
    • Rework DNSServer to be more robust (#5573)
    • Fix negative SPIFFS size (#5522)
    • Webserver: some clients were not able to authenticate using DIGEST_AUTH (#5506)

    Build system, Toolchain & Newlib -

    • fix lwip selection in tests/device Makefile (#5643)
    • Split common.sh into separate scripts for each job (#5569)
    • make CI starts with (longer) PIO jobs, also move (shorter) host job later (#5599)
    • Add Linux i686 (32bit) architecture toolchain (#5586)
    • Speed up CI builds with caching hacks (#5539)
    • emulation on host: fixes and updates (#5537, #5633, #5605)

    Boards

    • generic esp8266 board: Use flash mode DOUT by default, in place of QIO (#5601)

    Documentation

    • Update conf.py (#5518)
    • Correct 'git submodule' syntax (#5654)
    • Correct link to Arduino Board Manager info (#5650)
    • Add fix for SoftwareSerial submodule errors to documentation (#5602)
    • Add specific instructions for breaking changes (#5581)
    • clarify some points, add links, add doc/conf.py (#5519)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.5.0-beta3.zip(19.35 MB)
    package_esp8266com_index.json(72.82 KB)
  • 2.5.0-beta2(Dec 16, 2018)

    Changes since 2.5.0-beta1:

    Core

    • Increase free IRAM (#5499)

    Library - mDNS

    • Undo move of keywords.txt and readme.rst for ESP8266mDNS library (#5495)

    Library - ArduinoOTA

    • Update ArduinoOTA and examples with MDNS.update() calls (#5494)

    Build system, Toolchain & Newlib

    • Update to toolchain 2.5.0-3 JSON (#5502)
    • Move libstdc++-nox out of IRAM (#5492)

    Package Builder

    • Keep signing commands in platform.txt on release (#5491)

    Documentation

    • Update release instructions README.md (#5482)

    Tests / CI

    • reduce git load in travis (#5490)
    • ci: fix checking CI_GITHUB_API_KEY, refactoring (#5496)
    • ci: use travis jobs to structure the CI flow
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.5.0-beta2.zip(19.30 MB)
    package_esp8266com_index.json(68.33 KB)
  • 2.5.0-beta1(Dec 12, 2018)

    Changes since 2.4.2:

    Core

    • better compatibility for IPAddress changes with external libraries (#5438)
    • Make exceptions a configurable menu (#5434)
    • Use Python JSON to format packages.json file (#5429)
    • Fix pgmspace 32-bit read macros (#5425)
    • fix inconsistent block size for spiffs in board.txt. and ld files (#5412)
    • Split AddrList into object-iterator-container components (#5410)
    • weak hook preinit() #2111 #2133 #2136 (#5395)
    • fix espconn and err_t (#5392)
    • Pass string objects by reference (#5378)
    • Fix rtc mem bounds check (#5372)
    • Check for WEP when setting authmode (#5364)
    • i2s can send now buffers (#5349)
    • cleanup/unify flash sector size define value (#5327)
    • deprecate RTC_REG macros in favor of TIMER_REG macros (old typo in macro names) (#5326)
    • Only stop waveforms actually running in ISR (#5308)
    • Use "PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY" as default lwIP profile for @PlatformIO (#5305)
    • Add missing decrement operator to I2C clockCount (#5292)
    • Fix arg type in Wire to size_t (#5289)
    • constexpr helpers to identify core version (#5269)
    • Allow override of macros in core_version.h (#5268)
    • fix md5 comparison (#5265)
    • fix SPIFFS when not enabled in build options (#5249)
    • Make stopWaveform call interrupt callable (#5248)
    • I2C slave support (originally by bjoham) (#5226)
    • Add stack repainting call to ESP class (#5221)
    • Fix led-pin in updater, also no need to backup LED state (#5217)
    • Update to the last version of nonos-sdk V2, WiFi addons (#5210)
    • PolledTimeout Class for wrapping millis() loops (#5198)
    • cleanly restore spiffs data in boards.txt (#5195)
    • IPv6 and major IPAddress changes (#5136)
    • Allow GPIO 9 and 10 for waveform generation (#5055)
    • Consolidate .iram.text matcher in linker to wildcard matcher (#4356)
    • implement EspClass::getFreeContStack method (#5133)
    • restore SPIFFS symbols when null-sized (#5122)
    • Make unique sections for ICACHE_* variables (#5117)
    • metric for heap fragmentation (#5090)
    • revert e02932f (#619 works now without it) (#5056)
    • Add instantly option to deepSleep (#5052)
    • Move some exception strings to PROGMEM (#5050)
    • Enclose PROGMEM segment names in quotes (#5049)
    • Move all PROGMEM to their own section (#5048)
    • Fix iostream related issues (#5047)
    • uart: BW improvements (#4620)

    Library - mDNS

    • LEAmDNS - Multicast DNS Responder rewrite (#5442)

    Library - ESP8266WiFi

    • Implement for ssid a similar approach as for passphrase (#5411)
    • Move WiFi debug messages to PMEM (#5388)
    • Check if AP exists before adding it (#5373)
    • Check for WEP when setting authmode (#5364)
    • Set authmode if passphrase is provided (#5317)
    • Fix: WiFiClient::flush() yields but can be called from events (#5254)
    • Add cryptographically signed update support (#5213)
    • WiFi: improve WiFiClient(Basic) examples (#5197)
    • ClientContext: restore TCP PuSH flasg when needed (#5176)
    • fix: tcp_output() should always be called after tcp_write(), does not break nagle (+ doc) (#5172)
    • Fix TCP race condition, remove fixed delay in CC (#5167)
    • automatically WiFiClient::flush before ::stop (#5135)
    • read all lines from slow servers (#5113)
    • ClientContext (tcp) updates (#5089)

    Library - ESP8266WiFi (SSL/TLS)

    • Update to latest BearSSL w/EC25519 fix (#5468)
    • fix compilation error - can't find axTLS::WiFiServerSecure (#5407)
    • Don't clear authentication options on a ::stop (#5386)
    • Remove obsolete BSSL debug print routines (#5368)
    • Deprecate axTLS, update examples (#5366)
    • Move BearSSLHelpers into BearSSL namespace (#5315)
    • Patch axTLS CVEs and fix CA verification (#5270)
    • Add warning when no authenticator, drop verify() (#5205)
    • Add BearSSL::setFingerprint(char* fp) (#5204)
    • Really free stack after last BearSSL obj destroyed (#5185)
    • Move BearSSL _cipher* init to _clear() for consistency (#5178)
    • Clear cipher list on server creation, fix crash (#5171)
    • Move BearSSL from STACK_PROXY to a real, thunked 2nd stack (#5168)
    • Add SSL Session capability to speed reconnections (#5160)
    • Allow cipher specification for BearSSL (#5151)
    • Move SSLContext to its own header (#5121)
    • Update axTLS to e634adf (#5125)
    • Fix connection options and update github pubkey (#5120)
    • Add WiFiClient parameter to HTTPClient (#4980)

    Library - ESP8266WebServer

    • update HTTPCLIENT_1_1_COMPATIBLE (#5389)
    • fix http parsing (#5262)
    • Fix webserver unresponsiveness (#5259)
    • Improved parameter validation (#5256)
    • fix parseArgument #2 (#5252)
    • fix typo (#5189)
    • Added naive content length to upload struct (#5142)
    • Expose post args during upload (#4935)

    Library - ESP8266HTTPClient

    • Save 2.3K in HTTPClient debug mode by PSTR (#5387)
    • Bugfix/esp8266 http client (#5250)
    • ESP8266httpClient crash-on-destructor bugfix (#5220)
    • Update api.github.com certificate signature (#5145)
    • ESP8266HTTPClient: allow getString() more than once (#5091)
    • Support for concatenation of headers (#4864)

    Other Libraries

    • OTA (espota.py) (#5454)
    • Add SD.end() method, including arg to leave SPI up (#5402)
    • (SSDP) usn and udn differences cause issues with smarthings (#5401)
    • Fix debug provision for DNSServer (#5329)
    • Update ESP8266HTTPUpdateServer library (#5297)
    • examples code cleanup (#5290)
    • Dns server cleanup (#5194)
    • Add missing keywords.txt files to bundled libraries (#5183)
    • WiFi Mesh Update 2.1 (#5157)
    • Create library.properties (#5129 #5128 #5127 #5119)
    • Fix min and max for Servo library (#5064)
    • Hash: make actual SHA1 result and comment consistent (#5057)
    • Implementation of Functional and Scheduled option in Ticker lib (#5030)
    • CaptivePortalAdvanced: Change debug print to println (#5000)
    • SD: Implement readBytes (#4931)

    Build system, Toolchain & Newlib

    • Update to Newlib c0f3596 with regexp/fnmatch (#5457)
    • Update toolchain and bins to 2.5.0-2 autobuild(#5441)
    • Add 64-bit %ll printf format support (#5435)
    • Add in Win64 pointers to Win32 tools (#5427)
    • Add %z and %x to printf backend (#5424)
    • Enable exceptions, update to optimized newlib, migrate to new toolchain (#5376)
    • Move ICACHE_* to unique sections, local LD script (#5150)
    • Add full debug builds for all tests (#5146)
    • build: place generated ld script into build directory (#5043)
    • Automatic stack location selection (SYS or HEAP), enable per library AR-chive in arduino build system (#5018)
    • Switch to isolated build flags per framework (#5028)

    Package builder

    • package: add version to board package name (#5046)
    • Minor fixes for #4999 (#5003)

    Upstream dependency - BearSSL

    • Update BearSSL to latest toolchain (#5449)
    • Update to BearSSL 0.6+ release, add AES_CCM modes (#5164)

    Upstream dependency - lwIP-v2

    • lwip2: 3 sntp servers, autoip (169.254), esp-ping, espconn (#5444)
    • update to lwIP-2.1.0: partial SACK support by default (de-selectable in menu) (#5126)

    Documentation

    • Mention eboot use of rtc memory (#5439)
    • Add doc for ESP8266WebServer (#5400)
    • documentation: add quick links (#5391)
    • document wificlient loop (#5355)
    • Update generic-class.rst (#5338)
    • Fix doc for ESP8266WiFi (#5325)
    • Update libraries.rst with ESP-NOW (#5322)
    • typo fix (#5319)
    • Add BearSSL documentation (#5311)
    • Add missing decrement operator to I2C clockCount (#5292)
    • Update debugging.rst (#5234)
    • Fix Readme Link (#5215)
    • Add BearSSL license info to README.md (#5211)
    • Revert "Wrong directory for installation??" (#5199)
    • fix doc link (#5190)
    • Make softAP documentation state the correct min value (0) for the max_connection argument. (#5165)
    • Wrong directory for installation?? (#5163)
    • Require sphinx 1.7 due to bugs with new v1.8 (#5132)
    • Fix formatting of bullet lists (#5098)
    • Update a05-board-generator.rst (#5093)
    • Update readme.rst (#5092)
    • Soft-AP documentation update (#5088)
    • Format lists for readability (#5082)
    • doc: improve WiFi.persistent documentation (#5081)
    • Analog input voltage can be 3.3V (#5020)

    Boards

    • ESPectro Core board support (#5419)
    • Added 2M generic boards (#5404)
    • support new board (invent one) (#5286)
    • Fix NUM_ANALOG_INPUTS for Amperka WiFi slot (#5219)
    • boards generator: updates (#5103)
    • Fix boards.txt.py compatible with python3 (#4998)
    • Update ESPduino pin definitions (#4828)

    Tests / CI

    • device test updates (ping, test_millis_mm) (#5455)
    • fix device test test_http_server (#5414)
    • Split PIO job into even and odd builds (#5405)
    • Move from container to VM per Travis requirements (#5367)
    • Class mocks for sketch emulation on host (#5342)
    • Fix device/test_http_client tests (#5309)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.5.0-beta1.zip(20.68 MB)
    package_esp8266com_index.json(57.00 KB)
  • 2.4.2(Aug 3, 2018)

    Changes since 2.4.1.

    Core

    • Correct millis() drift (#3078, #4264)
    • Raise exception when assert happens (#4480, #4482)
    • Fix stack trace unwinding within continuation library (#4385)
    • Return from Print::write(buffer, size) if any byte fails to write (#4527)
    • Warn if inefficient Print::write implementation is not overridden (#4537)
    • String: fix overlapping memcpy call in String::trim (#4938)
    • String: fix creation and concat issues (#4955, #4962)
    • Increase available DRAM by moving exception/panic messages into IRAM, assert strings and file names into flash. (#4187)
    • Increase available IRAM by moving cont_init from into flash (#4384)
    • Save 192 bytes of RAM bytes when attachInterrupt is not used (#4601)
    • Move continuation stack from .bss onto sys stack, saving 4kB of RAM, if WPS is not needed (#4622)
    • Allow changing vtables location (#4567, #4582)
    • Add linker MAP artifact to standard build process (#4186)
    • Record information on failed allocation, dump it to UART on a panic (#4220)
    • Fix OOM debug support for Arduino 1.9 (#4357)
    • HardwareSerial: RX fifo latency fix (#4328)
    • HardwareSerial: improve UART FIFO overrun handling and stability (#4536, #4568)
    • HardwareSerial: add functions for baud rate detection (#4978)
    • Add support for hardware Sigma Delta generator (#4119, #4494)
    • New waveform generation code supporting multiple analogWrite, Servo, Tone at the same time (#4640, #4872)
    • Scheduled interrupt handler support (#4609, #4879, #4890)
    • Allow using GPIO16 for analogWrite (#4895)
    • Fix digitalPinToBitMask(), portOutputRegister(), portInputRegister() for GPIO16 (#4964)
    • I2S: add callbacks on DMA reads (#4205)
    • I2S: multiple fixes for IRQs, protocol, factoring (#4574)
    • I2S: add input API and examples (#4539)
    • Updater: fix overflow in binary size check (#4552)
    • Updater: copy the existing flash mode over the one set in an OTA update image (#4876, #4877)
    • Allow sending debug information to classes other than HardwareSerial (#4611)
    • Add ESP.deepSleepMax() function to get maximum possible deep sleep time (#4627)
    • Add avr/pgmspace.h and handling of __PROG_TYPES_COMPAT__ for compatibility (#4619)
    • Force ARDUINO macro to 10805
    • Fix base64_encode_expected_len returning value which is not large enough (#4773, #4786, #4934)
    • Add extra parens in SDK macro definitions (#2617, #4508)

    ESP8266WiFi

    • Fix memory leak when reusing WiFiClient object (#4497, #4516, #4549)
    • Fix issues around WiFi.persistent handling (#3798)
    • Add WiFi.getAutoReconnect() function (#4359)
    • Fix random crash in ClientContext::write(Stream) and write_P(PGM_P buf, size_t size) (#2504, #4530)
    • Add softAP SSID & PSK query API (#4138)
    • Fix WiFiClient not detecting connection reset by peer (#4626)
    • Allow scanning on specific channel or for specific SSID (#4636)
    • lwip2 Update (#4729)
    • lwip2: Fix static address management (#4677)
    • lwip2: fix disconnection, fix reconnection (#4851)
    • Add new WiFiClientSecure and WiFiServerSecure implementations based on BearSSL, offering lower memory consumption and higher robustness (#4273)
    • WiFiClientSecure: report connected when any bytes are available for read (#4754)

    Other Libraries

    • ESP8266mDNS: support for compressed DNS messages (#3769, #4648, #4752)
    • ESP8266mDNS: return bool from addServiceTxt (#4507)
    • ESP8266mDNS: clear previous result when queryService() is called (#4893, #4894)
    • SPISlave: add end method (#4248)
    • ESP8266WebServer: fix WebServerSecure streamFile() (#4545)
    • SPI: const-ify input buffers (#4552)
    • SPI: Support Arduino API's SPI::transfer(void*, size), optimized (#4925)
    • I2C: improve bus recovery procedure (#4070)
    • I2C: add support for 50kHz clock (#3401)
    • I2C: clock frequency set by setClock now survives re-initialization (#3389)
    • Add ESP_EEPROM to list of ESP libraries (#4529)
    • SoftwareSerial: update to version to 3.4.1 (#4623)
    • ESP8266HTTPUpdate: make timeout configurable (#4705)
    • ESP8266HTTPUpdateServer: allow to update credentials after setup is performed (#4789)
    • ESP8266SSDP: add setUUID method (#4981)
    • ESP8266WiFiMesh: new version (#4718)

    Documentation

    • Documentation improvements and fixes (#4502, #4503, #4504, #4512, #4532, #4131, #4534, #4621, #4671, #4730, #4753, #4794, #4933, #4949, #4958, #4971)
    • Remove reference to an arrow/_right that doesn't exist (#4401)
    • Add Windows 10 installation instructions (#4797)
    • Improve the compatibility of links between Github and readthedocs (#4800)

    Boards

    • Support 4M2M board option (#4454)
    • Support 512k32k board option (#4871, #4880)
    • Define SDA and SCL pins for Olimex MOD-WIFI-ESP8266(-DEV) (#4562)
    • Add WiFiduino board (#4590)
    • Change flash mode from QIO to DIO for gen4iod board (#4616)
    • A0 pin number can be changed in the variants (#4778)
    • Add WiFi Slot board (#3916)
    • Wemos D1 Mini Lite documentation update (#4809)
    • NodeMCU documentation update (#4715)
    • Add XinaBox board (#4929)
    • Add Seeed Wio Link board (#4943)
    • Change "WeMos" to new brand name "LOLIN" (#4984)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.4.2.zip(15.03 MB)
    package_esp8266com_index.json(45.67 KB)
  • 2.4.1(Mar 8, 2018)

    Changes since 2.4.0.

    Core

    • Move C++ vtables into IRAM, out of heap (#4179)
    • Update I2S base frequency and frequency dividers to real ones (#4031)
    • umm_malloc: fix calloc by clearing block only if malloc succeeds
    • Esp.deepSleep: change argument from uint32_t to uint64_t to match SDK
    • Add Esp.deepSleepMax, which returns maximum possible deep sleep time
    • SPIFFS: Fix lseek typo for seek_end (#4287)
    • Fix access past end of the buffer in RTCmem example (#4288)
    • Deprecate TIM_DIV265, add TIM_DIV256 instead (#4326)
    • If Debug Port is set, displaye version info after Serial.begin (#4467)
    • UpdaterClass::printError now accepts the Print object

    ESP8266WiFi

    • Add SSL enabled WiFiServer, Updater, WebServer
    • WiFiClient: add keepalive api (default 2h,75s,9 not enabled) (#3937)
    • WiFiClient: don’t destroy ClientContext on ::stop
    • WifiServer: Add begin(uint16_t port) method, listening port can be changed at runtime (#4123)
    • WiFi: fix support for WPA pre-shared key in station mode, add support for PSK to WiFiMulti (#4076)
    • WiFi: fix Arduino compatibility of WiFi.config (#4145)
    • WiFiMulti: add timeout to WiFi connection loop (#4146)
    • lwip2: fix watchdog reset, fix WiFi reconnection (#4105)
    • lwip2: lower ram and flash footprint (by disabling old asserts)
    • lwip2: use only wifi_station_get_hostname() to set netif hostname (#4299)
    • lwip2: fix disconnection/reconnection issue
    • ClientContext:_write_some: release buffer once data really accepted for sending (#4265)

    Other libraries

    • ESP8266HTTPClient: add digest authentication example (#4112)
    • ESP8266WebServer: Add begin(port) method
    • ESP8266WebServer: Move some strings to flash to increase available heap (#4148, #4338, #4371)
    • ESP8266mDNS: Fix mdns buffer overrun by 1 (#4317)
    • ArduinoOTA: don't crash on unrecognized packets (#4086)
    • Ticker: add bool active() (#2722)
    • Wire: check that pins needed by Wire are defined at compile-time (#4261)

    Boards

    • boards.txt generator (#3722)
    • Case change and and 'none' reset option for Digistump Oak (#4143)
    • LED_BUILTIN is now a #define (#4276)
    • boards: Wemos D1 R1 needs a separate defined identifier (#4304)

    Tools and SDK

    • sdk: update to v2.2.0-3-gf8f27ce
    • esptool: update to 0.4.13

    Build and test

    • Add menu to control what gets erased during upload
    • Warnings cleanup (-Wall, -Wextra), check for warnings in CI (#4274, #4369)
    • Add support for @PlatformIO Core 3.5.0
    • Drop PlatformIO lines from LD script; append object suffix to the end of target name (#4355)
    • tests/device: add make target to generate test reports
    • update testing documentation

    Documentation

    • Fix dead links in docs (#4221, #4293, #4408)
    • Document tcpCleanup workaround (#4314)
    • Update issue template (#4474)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.4.1.zip(12.48 MB)
    package_esp8266com_index.json(42.62 KB)
  • 2.4.0(Jan 2, 2018)

    Changes since 2.4.0-rc2

    Core

    • Prevent endless loop in run_scheduled_functions (#4048)
    • Pure virtual Stream::flush() moved to empty virtual Print::flush() to follow arduino API (#4029)
    • Allow disabling global Serial and Serial1 object (#2807)
    • Export pgmspace symbols with C linkage (#3955)
    • cbuf: fix boundary condition on resize (#4016)
    • time: add micros64, support for gettimeofday and settimeofday.
    • Remove min, max, isnan, isinf macros, use tempmlates from std:: instead.
    • Updater: added constant time string comparison to avoid possible time-based attacks. (#3836)
    • Board definitions updated

    ESP8266WiFi

    • ESP8266WiFiMulti: Add count function (#3073)
    • Added String hostname support to WiFiClient and WiFiClientSecure (#3349)
    • WiFiClientSecure: don't use the broken max_fragment_length extension (#4033)
    • WiFiClientSecure: configurable connect timeout, better default value (#4027)
    • WiFiClientSecure: don't trash unread decrypted data when writing (#4024)
    • Fix WiFiClient::availableForWrite() with no connection (#3985)
    • WiFiUDP: fix crash when calling destinationIP with no packet available (#4036)
    • Fix flush() to wait for empty send buffer (#1002) (#3967)
    • Add compatibility check for config() method with Arduino arg order (#3860)

    Third party libraries

    • Use lwip v2 by default
    • SDK: update to v2.1.0-14-g33f234f
    • SDK: rename hostname and default_hostname symbols (#1281)
    • Add extern C blocks to SDK header files (#1352) (#4044)
    • SoftwareSerial: update to 3.3.0 (#3727)

    Other libraries

    • ESP8266WebServer: fix URL parameter decoding in web server (#3313)
    • ESP8266WebServer: allocate HTTPUpload struct on demand (#2557)
    • ESP8266WebServer: send empty chunk when done sending chunked response
    • ESP8266WebServer: add CONTENT_LENGTH_UNKNOWN keyword
    • ESP8266HTTPClient: increase HTTP SEND/POST timeout to 5s (#3971)
    • ESP8266HTTPClient: handle empty URI correctly
    • ESP8266HTTPClient: allow changing connection timeout using setTimeout (#4038)
    • EEPROM: Added length and operator[] methods, added some constness, missed dirty clear (#3855)
    • EEPROM: Clear dirty flag in begin and reallocate only if necessary, add getConstDataPtr method (#2217) (#3849)
    • Set architecture=esp8266 for bundled SD and Ethernet libraries (#4035)

    Examples

    • Wait for NTP to be set in example (#4000)
    • Put WiFi into station mode in examples (#3731)

    Documentation for 2.4.0

    Documentation for this release is hosted on readthedocs.org: http://arduino-esp8266.readthedocs.io/en/2.4.0/

    Source code(tar.gz)
    Source code(zip)
    esp8266-2.4.0.zip(11.36 MB)
    package_esp8266com_index.json(37.47 KB)
  • 2.4.0-rc2(Oct 15, 2017)

    Core

    • Redefine pgm_read_byte, pgm_read_word as macros to fix detection by libraries (#3140)
    • Move ASSERT() macro file text to PROGMEM (#3477)
    • Manifest for PlatformIO
    • Move debug constant strings to PROGMEM (#3478)
    • Initial support for attaching std::function to interrupts
    • Link airkiss library
    • Mask GPIO interrupts while attaching/detaching ISR handler (#3598)
    • Expand varargs correctly in printf_P (#2819)
    • Zero out memory in strncpy_P (#2633)
    • Fix erase size in ESP.eraseConfig
    • Add a workaround-delay in Serial.flush() (#3714)

    ESP8266WebServer

    • Move MIME type table into PROGMEM to save RAM (#3475)
    • Parse parameters in the URL of a POST with empty content (#3398)
    • Digest Authentication support (#3053)

    ESP8266WiFi

    • WiFiClient: apply write timeout to single chunk (#3273)
    • WiFiClientSecure: don’t send close alert when opening new session
    • Replace r_rand with os_random for LWIP_RAND() (#3499)
    • WiFiClientSecure: add loadCACert function (#3610)
    • WiFiClientSecure: add option to allow self-signed certificates
    • WiFiClientSecure: add support for keys and certificates in PROGMEM
    • Don't remove persistent WiFi settings when doing scan (#2946)

    Upstream dependencies

    • axTLS: update to 2.1.4
      • Memory optimization: constants moved to PROGMEM, bigint cache cleared for loaded certificates
      • Fix certificate chain verification issues
    • sdk: update to v2.1.0-10-g509eae8
    • esptool: update to 0.4.12
      • Support for 8MB, 16MB flash sizes (image generation and uploading)
      • Fix for uploading on OS X with Apple FTDI driver
      • Fixes for error reporting
    • spiffs: update to 0.3.7+ (f5e26c4)
    • mkspiffs: update to 0.2.0
    • SoftwareSerial: update to 3.2.3

    Boards

    • Add DigiStump Oak pins & board
    • Add Crystal Frequency menu item for generic board
    • Enable 8M and 16M flash sizes for generic board

    Documentation for 2.4.0-rc2

    Documentation for this pre-release is hosted on readthedocs.org: http://arduino-esp8266.readthedocs.io/en/2.4.0-rc2/

    Obtaining 2.4.0-rc2 pre-release

    To install this pre-release using boards manager, follow the instructions, with the package URL replaced with the following one:

    https://github.com/esp8266/Arduino/releases/download/2.4.0-rc2/package_esp8266com_index.json
    
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.4.0-rc2.zip(10.08 MB)
    package_esp8266com_index.json(35.09 KB)
  • 2.4.0-rc1(May 22, 2017)

    This is a pre-release in preparation for release 2.4.0. It comes with many fixes accumulated over the past year, and includes many new features.

    This is the list of changes compared to 2.3.0.

    Core

    • Const-correctness for MD5Builder (#3222)
    • detect division by zero in map() to prevent exceptions (#2397)
    • digitalWrite and digitalRead cancel analogWrite enabled on a pin (#2328)
    • Fix incorrect usage of memset() in PWM code which leads to incomplete initialization of struct
    • Fix libb64 decoder (#2883)
    • Force core_version to be added to compiled binary
    • Prevent divide by zero error causing tone() to crash (#2780)
    • progmem: replace C version of pgm_read_{word,byte} with assembly
    • SPIFFS: fix unaligned read in HAL (#3261)
    • Add Arduino File standard seek call
    • Add support to Print::printf for printing from flash (#2266)
    • Allow global object instances be switched off with defines (#2344)
    • Base64: add option to disable any newlines in output (#3208)
    • Enable floating point formatting in sprintf/sscanf (#1179)
    • Updated String library to use C++11 iterators. (#2267)
    • Use libc from newlib (#1752)
    • move libstdc++ to flash (#2804)
    • Link ESP-NOW library

    ESP8266mDNS:

    • Fix link list bug (#2347)
    • Fix crash in mDNS destructor (#2389)
    • Optimize MDNS to prevent overflow and endless loop (#2333)
    • Improve compliance with DNS-SD RFC6763 (#3145)
    • Support AP and STA interfaces at the same time
    • Support multiple interfaces in query code
    • Use the provided IP in the mDNS begin method (#2349)

    OTA

    • Updater: fail if there is not enough space to fit the new firmware (#2405)
    • ArduinoOTA: forward errors from Update.begin to espota.py
    • Add getCommand() api for OTA update type (#2259)
    • Updater: check boot mode before starting update
    • Add support for hashed OTA password (#2292)
    • Exposed sketch MD5 through HTTP headers (#2236)

    ESP8266WebServer

    • Fix missing separator between get and post arguments (#2222)
    • Fix plain post content containing special chars being parsed as arguments (#2241)
    • Fix urlDecode points (#2212)
    • Match headers using equalsIgnoreCase (#2474)
    • Allow for overridable value for HTTP_UPLOAD_BUFLEN
    • Add chunked encoding support (#2199)
    • Add application/json content type

    ESP8266HTTPClient

    • Add PUT Request to HTTP Client (#2310)

    ESP8266WiFi

    • WiFi: add SoftAPModeProbeRequestReceived event handler (#2917)
    • Set DHCP subnet correctly for softAP (#2648)
    • Use WIFI_STA in WiFiClient-examples
    • Optimize WifiClient::write performance (#2177)
    • WiFiClient: add support for connect and write timeout (#1420, #3247, #2120)
    • WiFiClientSecure: add example of setCACert/verifyCertChain (#1851)
    • WiFiClientSecure: Add support for CA root cert verification
    • WiFiClientSecure: match CN and SANs ignoring case (#2978)
    • Allow usage of byte arrays to set RootCAs (#2968)
    • Add onComplete event handler support for the asynchronous network scanning. (#2287)

    New features

    • Add an LLMNR responder implementation (#2880)
    • Implement Async NBNS (NetBIOS) name resolution for Windows (#2275)
    • Implement Serial RX Buffer (#2239)
    • Initial SPI Slave implementation and examples (#2234)
    • Add support for HSPI overlap mode (#1062)

    Documentation

    • Documentation is now hosted on readthedocs.org
    • Initial release of FAQ / Troubleshooting section (#2207)
    • Documenting of ESP.getFlashChipRealSize() (#2210)
    • Use stable documentation of PlatformIO (#2337)
    • ESP8266WiFi library documentation (#2388)
    • Add PROGMEM docs
    • Add instructions how to re-enable DHCP (#2600)
    • Add a section on filesystem limitations (#2858)

    Upstream dependencies

    • axTLS: update to 2.1.2 (includes TLS 1.2 support)
    • Update SDK to 2.0.0

    Boards

    • Host toolchains on Github
    • Addition of gen4-IoD Range boards (#3202)
    • Arduino boards with ESP8266 (#3121)
    • Add 1M (No SPIFFS) board option (#3203)
    • Update keywords.txt for coloring syntax (#2892)

    Documentation for 2.4.0-rc1

    Documentation for this pre-release is hosted on readthedocs.org: http://arduino-esp8266.readthedocs.io/en/2.4.0-rc1/

    Obtaining 2.4.0-rc1 pre-release

    To install this pre-release using boards manager, follow the instructions, with the package URL replaced with the following one:

    https://github.com/esp8266/Arduino/releases/download/2.4.0-rc1/package_esp8266com_index.json
    
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.4.0-rc1.zip(9.91 MB)
    package_esp8266com_index.json(27.75 KB)
  • 2.3.0(Jun 23, 2016)

    Core

    • Fix NMI interrupt handler alignment
    • Update SDK to 1.5.3
    • umm_malloc: print block start address before heap corruption callback is triggered
    • If GDBStub library is used, break into gdb on assert and panic
    • Add option to keep FS classes in namespace (#2030)
    • Add SPIFFS::end (#1657)
    • Add ArduinoOTA::getHostname() interface
    • Add __throw_out_of_range
    • Add support for RTC user memory in ESP-specific APIs. (#1836)
    • Expose RTC_USER_MEM in esp8266_peri.h
    • Remove DISABLED macro (#2072)
    • Execute global constructors in correct order (#2074)
    • Real board name available in Sketch/MDNS/OTA (#2054)
    • Add DOUT/QOUT flash modes
    • Add ESP8285 entry in boards menu
    • Move timer detachInterrupt functions into IRAM (#2083)
    • Make Updater be able to run inside async callbacks (#2096)
    • Add new boards Phoenix 1.0 & Phoenix 2.0 (#2088)
    • Store git version of the core in the compiled binary (#2099)
    • Rebuild libstdc++ with mlongcalls and link against it (#1983)
    • Add mechanism for posting functions to the main loop (#2082)
    • MD5Builder::addStream: fixed falsy calculated hash for len > filelength (#2126)
    • Fix SPIFFS.openDir("") (#2143)
    • Bring back old semantics to random and randomSeed, add secureRandom (#1710) (#2142)
    • Add missing pgm_read_ptr{_near/_far} macros (#2160)
    • Add macro for maximum open SPIFFS files, settings it to 1 saves about 1k heap. (#2167)
    • Fix UART pins setting (#2098)
    • Fix ESP.getSketchSize, add ESP.getSketchMD5 (#2158)
    • Add Serial.baudRate() to get current baud rate (#2079)

    Libraries

    • SNI support in WiFiClientSecure (#1285)
    • HTTPClient: return error when HTTPClient::begin is called with HTTPS URL without certificate fingerprint (#1941)
    • HTTPClient: fix default port not being set
    • HTTPClient: fix handling of chunked transfer encoding (#1975)
    • ESP8266SSDP: switch SSDP send arguments around
    • ESP8266WiFi: fix UdpContext::peek to return int (#1946)
    • ESP8266WiFi: fix WiFiSleepType_t values to match SDK ones
    • LwIP: use gcc-built LwIP by default (#1926)
    • LwIP: fix crash in igmp_start_timer (#1826)
    • HTTPClient: include non-standard ports in Host: header
    • ESP8266WiFi: Prevent WiFi config corruption (#1997 #1856 #1699 #1675)
    • GDBStub: fix section attribute for core gdbstub functions
    • Wire: I2C bus reset with info to user
    • ESP8266HTTPClient: allow HTTP header value without LWS
    • ESP8266mDNS: Fix mDNS doesn't accept queryService responses from avahi-daemon (#2015)
    • Add MFRC522 to supported libraries (#2044)
    • Update axTLS to ab516f7 (1.5.3+)
    • Mention ESP8266Ping library
    • ESP8266HTTPClient: fix duplicate Content-Length headers (#1902)
    • ESP8266HTTPUpdateServer: make HTTP Update Server more secure (#2104)
    • ESP8266WiFi: add virtual destructor to WiFiServer class (#2116)
    • ESP8266WiFi: fix error when calling WiFiServer::close more than once
    • ESP8266WiFi: WiFi event handling refactoring (#2119)
    • ESP8266mDNS: restart listening when WiFi STA is connected/disconnected (#1828)
    • ESP8266WiFi: allow DHCP client to be re-enabled using WiFi.config(0U, 0U, 0U) (#1896)
    • ESP8266WiFi: enable SO_REUSE in LwIP and WiFiServer (#1431)
    • ESP8266WebServer: make ESP8266WebServer::urlDecode public (#1419)
    • LwIP: sntp_localtime: return -1 in tm_isdst field (#2010)
    • ESP8266WiFi: fix for crash in WiFiClientSecure when WiFi is disconnected (#2139)
    • SD: Prevent WDT resets in SD library (#1815)
    • ESP8266WiFi: Fix issue when WiFi.begin(ssid, pass) is called right after WiFi.mode(WIFI_OFF)

    Tools

    • Python 3 compatibility for get.py
    • Device side test library and test runner
    • Fix ARM toolchain files permissions (#2004)
    • Update esptool to 0.4.9
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.3.0.zip(8.19 MB)
    linux32-xtensa-lx106-elf.tar.gz(31.21 MB)
    linux64-xtensa-lx106-elf-gb404fb9.tgz(28.86 MB)
    linuxarm-xtensa-lx106-elf-g46f160f-2.tar.gz(33.31 MB)
    osx-xtensa-lx106-elf-gb404fb9-2.tar.gz(33.74 MB)
    package_esp8266com_index.json(25.39 KB)
    win32-xtensa-lx106-elf-gb404fb9-2.tar.gz(146.41 MB)
  • 2.3.0-rc2(Jun 24, 2016)

    Core

    • Add option to keep FS classes in namespace (#2030)
    • Add SPIFFS::end (#1657)
    • Add ArduinoOTA::getHostname() interface
    • Add __throw_out_of_range
    • Add support for RTC user memory in ESP-specific APIs. (#1836)
    • Expose RTC_USER_MEM in esp8266_peri.h
    • Remove DISABLED macro (#2072)
    • Execute global constructors in correct order (#2074)
    • Real board name available in Sketch/MDNS/OTA (#2054)
    • Add DOUT/QOUT flash modes
    • Add ESP8285 entry in boards menu
    • Move timer detachInterrupt functions into IRAM (#2083)
    • Make Updater be able to run inside async callbacks (#2096)
    • Add new boards Phoenix 1.0 & Phoenix 2.0 (#2088)
    • Store git version of the core in the compiled binary (#2099)
    • Rebuild libstdc++ with mlongcalls and link against it (#1983)
    • Add mechanism for posting functions to the main loop (#2082)
    • MD5Builder::addStream: fixed falsy calculated hash for len > filelength (#2126)
    • Fix SPIFFS.openDir("") (#2143)
    • Bring back old semantics to random and randomSeed, add secureRandom (#1710) (#2142)

    Libraries

    • Wire: I2C bus reset with info to user
    • ESP8266HTTPClient: allow HTTP header value without LWS
    • ESP8266mDNS: Fix mDNS doesn't accept queryService responses from avahi-daemon (#2015)
    • Add MFRC522 to supported libraries (#2044)
    • Update axTLS to ab516f7 (1.5.3+)
    • Mention ESP8266Ping library
    • ESP8266HTTPClient: fix duplicate Content-Length headers (#1902)
    • ESP8266HTTPUpdateServer: make HTTP Update Server more secure (#2104)
    • ESP8266WiFi: add virtual destructor to WiFiServer class (#2116)
    • ESP8266WiFi: fix error when calling WiFiServer::close more than once
    • ESP8266WiFi: WiFi event handling refactoring (#2119)
    • ESP8266mDNS: restart listening when WiFi STA is connected/disconnected (#1828)
    • ESP8266WiFi: allow DHCP client to be re-enabled using WiFi.config(0U, 0U, 0U) (#1896)
    • ESP8266WiFi: enable SO_REUSE in LwIP and WiFiServer (#1431)
    • ESP8266WebServer: make ESP8266WebServer::urlDecode public (#1419)
    • LwIP: sntp_localtime: return -1 in tm_isdst field (#2010)
    • ESP8266WiFi: fix for crash in WiFiClientSecure when WiFi is disconnected (#2139)
    • SD: Prevent WDT resets in SD library (#1815)
    • ESP8266WiFi: Fix issue when WiFi.begin(ssid, pass) is called right after WiFi.mode(WIFI_OFF)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.3.0-rc2.zip(8.20 MB)
    package_esp8266com_index.json(26.72 KB)
  • 2.3.0-rc1(May 11, 2016)

    Core

    • Fix NMI interrupt handler alignment
    • Update SDK to 1.5.3
    • umm_malloc: print block start address before heap corruption callback is triggered
    • If GDBStub library is used, break into gdb on assert and panic

    Libraries

    • SNI support in WiFiClientSecure (#1285)
    • Update axTLS to 139914f
    • HTTPClient: return error when HTTPClient::begin is called with HTTPS URL without certificate fingerprint (#1941)
    • HTTPClient: fix default port not being set
    • HTTPClient: fix handling of chunked transfer encoding (#1975)
    • ESP8266SSDP: switch SSDP send arguments around
    • ESP8266WiFi: fix UdpContext::peek to return int (#1946)
    • ESP8266WiFi: fix WiFiSleepType_t values to match SDK ones
    • LwIP: use gcc-built LwIP by default (#1926)
    • LwIP: fix crash in igmp_start_timer (#1826)
    • HTTPClient: include non-standard ports in Host: header
    • ESP8266WiFi: Prevent WiFi config corruption (#1997 #1856 #1699 #1675)
    • GDBStub: fix section attribute for core gdbstub functions

    Tools

    • Python 3 compatibility for get.py
    • Device side test library and test runner
    • Fix ARM toolchain files permissions (#2004)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.3.0-rc1.zip(5.73 MB)
    package_esp8266com_index.json(24.46 KB)
  • 2.2.0(Apr 18, 2016)

    Core

    • Leverage realloc() in String::changeBuffer()
    • Clean up core files
    • Add host side tests
    • Fix possible null pointer in umm_malloc
    • Remove "Upload Using" option from Tools menu
    • Move attachInterrupt and detachInterrupt into IRAM (#1734)
    • Implement strstr_P
    • Allow indefinite duration for tone()
    • Fix crashes when using tone()
    • Fix RF_MODE and ADC_MODE
    • Move micros, delayMicroseconds, millis to IRAM (#1326)
    • Fix pulseIn (#1072, #1149)
    • Accept both named constant and ADC channel number in analogRead (#1766)
    • Enable heap poisoning only when debug options are enabled (#1800)
    • Bootloader: don't touch RTC memory if it doesn't contain a valid command (#619)
    • Update SDK to 1.5.2 (#1653)
    • Clean up variants, fix digitalPinHasPWM definition (#1831)
    • Don't set RF mode on boot unless it was overridden
    • Change build.board property for boards which renumber pins like NodeMCU (#1878)
    • Fix Exception 2 when using printf or vprintf

    Libraries

    • Update axTLS to 5b4be7d
    • WiFiClientSecure: implement connection timeout, fix connected method behavior
    • WiFiClient: fix write behavior when connection is closed by remote side
    • ESP8266HTTPServer: add font MIME types, fix #1601
    • ESP8266mDNS: add client support
    • Update SPIFFS to 82aeac6
    • Servo: move some functions into IRAM (#1742)
    • Update SoftwareSerial to version 3.1.0
    • ESP8266SSDP: change templates to include deviceType
    • ESP8266WebServer: handle more file types
    • SPI: add CPOL setting
    • ESP8266WebServer: Fix buffer overflow in ESP8266WebServer::authenticate (#1790)
    • ESP8266WiFi: fix undefined behavior in WiFiServer::setNoDelay (#1695)
    • Servo: use peripheral clock frequency when calculating FRC1 tick count (#1789)
    • ESP8266WiFi: avoid multiple instances of INADDR_NONE
    • Add LwIP binary built with gcc
    • ESP8266WiFi: Allow PSK instead of passphrase in WiFiSTA::begin
    • SPI: Fix SPI.transfer16() using wrong endianness
    • HTTPClient: decouple transport layer handling + save some RAM
    • ESP8266httpUpdate: decouple HTTPS overloads + save some RAM
    • Update and move lwIP headers, add options to use different lwIP build
    • ESP8266WebServer: wait for data to arrive
    • ESP8266WebServer: save RAM by moving response strings to flash (#1732)
    • SPI: Speed up SPI.writePattern()

    Tools

    • Add ARM tools (#269)
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.2.0.zip(5.70 MB)
    package_esp8266com_index.json(20.63 KB)
  • 2.1.0(Feb 27, 2016)

    Core

    • Add function to know last reset reason.
    • Allow control of enabling debug and debug level from IDE
    • Add espduino board
    • Rework StreamString::write to use String internal buffer directly (#1289)
    • Add function to measure stack high water mark
    • Fix RAM corruption caused by our hook of register_chipv6_phy(init_data*).
    • Optimize PWM interrupt handler for better precision
    • Add warning levels configurable through Preferences
    • SPIFFS: check if path length is valid (#1089)
    • Set CPU frequency before running setup
    • Add core_esp8266_features.h to be able to detect the features and libraries included in the ESP core
    • Add ESPino to supported boards
    • Fix pwm first step getting skipped
    • Update SDK to 1.5.1_16_01_08
    • Bufferless and interruptless HardwareSerial
    • HardwareSerial: allow mapping of UART0 TX to GPIO2
    • Add 128K SPIFFS for 512KB modules
    • Reduce stack usage by Print::printf
    • Fix a crash in String::changeBuffer()
    • Implement static initialization guards (#500)
    • Implementation of Tone API using timer1
    • Use umm_malloc for heap management
    • Configurable I2C clock stretching limit
    • Add a new board entry for the SparkFun Thing Dev

    Libraries

    • ESP8266HTTPClient: add CHUNKED encoding support (#1324)
    • Fixed crash bug with mDNS where a string buffer could be used uninitialized
    • Add WiFi TX power control
    • Add WiFi sleep management
    • Allow to hook into WiFi events from sketch
    • Allow setting TCP timeout
    • Add setSleepMode + getSleepMode and setPhyMode + getPhyMode to WiFi
    • Update GDBStub library with the source of esp-gdbstub
    • Servo: fix detach and attach
    • ESP8266mDNS: refactoring, add TXT support
    • Add HTTP Basic Auth to WebServer and libb64 (base64) to core
    • Fix link-time dependency of ESP8266WebServer on SPIFFS (#862)
    • Allow setting client side TLS key and certificate
    • Replace chain of UDP pbufs with a single pbuf before sending (#1009)
    • Unique Built-In libraries library.properties name
    • Improvements for MD5Builder with Stream
    • ESP8266SSDP: fixing TTL to 2 per spec
    • ESP8266WebServer: a content length of zero should also be sent
    • Use SoftwareSerial version 2.2
    • EEPROM: optimised _dirty flag
    • ESP8266mDNS: advertise all hosted services
    • Remove bundled OneWire - ESP8266 support has been merged in the official OneWire sources
    • WiFiClientSecure: don't panic if memory allocation fails
    • Verify domain name in WiFiClientSecure::verify
    • Speed up WiFi.hostByName when the hostname is actually an IP
    • Fix WiFi scan issue (#1355)
    • Workaround for LwIP not handling ERR_ABRT
    • Servo value read and write fixes

    Tools

    • espota.py: add support for manually selecting ip and port for host side
    • Update esptool to 0.4.8
    • Make espota compatible with python 3.5
    Source code(tar.gz)
    Source code(zip)
    esp8266-2.1.0.zip(5.50 MB)
    package_esp8266com_index.json(17.37 KB)
Owner
ESP8266 Community Forum
ESP8266 Community Forum
Arduino core for GD32 devices, community developed, based on original GigaDevice's core

GD32 Arduino Core (New) This is a Arduino core is based off of the original GigaDevice core that was provided by the company in early June 2021 (see h

null 37 Jul 20, 2022
This project design to mine Duino-Coin using an Esp8266 as a master and Arduino as a slave.

DuinoCoinI2C This project design to mine Duino-Coin using an Esp8266/Esp32 as a master and Arduino as a slave. Using the I2C communication to connect

Luiz Henrique Cassettari 143 Jul 23, 2022
Arduino and Nodemcu(esp8266)

Iot-based-project Using Arduino and Nodemcu(esp8266) We read temperature and humidity from DHT11 sensor with the help of ardunio uno and send that dat

Naman Rajani 4 Sep 25, 2021
json file config for ESP8266 arduino framework

Description Every project I have is the same architecture and appconf is one of the components I use every time. This is an attempt at making a public

Garkusnko Nick 1 Nov 9, 2021
ESP32 and ESP8266 Arduino wifi template

ESP wifi template ESP32 and ESP8266 Arduino wifi template Features Popular WiFI AP mode WiFI STA mode ETH mode DNS server for AP mode Async DDNS clien

Tien Huy Huynh 5 Jun 20, 2022
ESP32, ESP8266 based MIDI Organ using the ML_SynthTools library (little example arduino project)

esp32_esp8266_organ ESP32, ESP8266 based MIDI Organ using the ML_SynthTools library (little example arduino project) link to the video The required li

Marcel 13 Jul 16, 2022
ESP32, ESP8266 based MIDI Organ using the ML_SynthTools library (little example arduino project)

ml_synth_organ_example MIDI Organ using the ML_SynthTools library (little example arduino project) link to the video This project is an example suppor

Marcel 14 Aug 4, 2022
Raspberry Pi Pico Arduino core, for all RP2040 boards

Arduino-Pico Raspberry Pi Pico Arduino core, for all RP2040 boards This is a port of the RP2040 (Raspberry Pi Pico processor) to the Arduino ecosystem

Earle F. Philhower, III 632 Aug 3, 2022
Arduino Core for Deneyap DevKits

Deneyap Kart Arduino Core FOR TURKISH VERSION Deneyap Kart, designed and manufactured in Turkey, is a powerful development board with its strong MCU,

Deneyap Kart 31 Jul 13, 2022
Voltage Controlled Digital Core Multimode Oscillator using Mozzi library on Arduino

Arduino-VDCO Voltage Controlled Digital Core Multimode Oscillator using Mozzi library on Arduino Its a digital Oscillator/Voice for the Eurorack Stand

null 41 Aug 8, 2022
🖱️⌨️ Arduino Input Proxying for PC (.NET Core)

SerialProxy SerialProxy is a complete MiTM solution for modifying ??️ mouse & ⌨️ keyboard input against highly sophisticated FPS anti-cheats (ESEA/Fac

earthlion 39 Apr 22, 2022
A Fingerprint Door Lock using a microprocessor named Arduino UNO and programming through Arduino IDE

INSTRUCTIONS - The codes for the Fingerprint Door lock are present in the Code For Fingerprint Door Lock folder The instructions of how to operate the

Akhil Sahukaru 15 Mar 3, 2022
Arduino M-BUS Master node for Arduino MKR M-BUS Shield

Arduino M-BUS Master node for Arduino MKR M-BUS Shield This software will read out a M-BUS device connected to an Arduino MKR board equipped with our

null 5 Jul 25, 2022
Sensirion Mass Flow Sensor Arduino library, modified from MyElectrons and Nabilphysics Arduino repositories for SFM3300 Digital Mass Flow Sensor

Sensirion Mass Flow Sensor Arduino library, modified from MyElectrons and Nabilphysics Arduino repositories for SFM3300 Digital Mass Flow Sensor. When the sensor data gets stuck, the library has a hard reset function to ensure that it is read continuously.

Paul Ryan Santiago 3 Apr 11, 2022
Internet of things created using arduino IoT cloud, consisting of esp and arduino boards

Internet of things created using arduino IoT cloud, consisting of esp and arduino boards. Goal of the project is to create a 3D printed RFID protected (with PIN) lock, including surveillance.

null 2 May 11, 2022
Web Server based on the Raspberry Pico using an ESP8266 with AT firmware for WiFi

PicoWebServer This program runs on a Raspberry Pico RP2040 to provide a web server when connected to an Espressif ESP8266. This allows the Pico to be

null 46 Jul 19, 2022
Control Heidelberg Wallbox Energy Control over WiFi using ESP8266 and configure your own local load management

< scroll down for English version and additional information > wbec WLAN-Anbindung der Heidelberg WallBox Energy Control über ESP8266 Die Heidelberg W

null 75 Jul 30, 2022
ESP8266 software USB host through general IO pins. We can connect up to 2 USB-LS HID (keyboard mouse joystick) devices simultaneously.

esp8266_usb_soft_host Test for esp8266 usb host . Works with ESP-IDF v3.4 80MHz and 160MHz. WorkInProgress Test run with mouse & combined mouse & keyb

Samsonov Dima 27 Jul 30, 2022
Automated hydroponics with Home Assistant & ESP8266 controllers

ESPonics Automated hydroponics with ESP8266 microcontrollers & Home Assistant I absolutely want to credit Reddit user u/ghoofman for both the inspirat

jjensn 15 Jun 17, 2022