## Using PlatformIO

- Install [PlatformIO](http://platformio.org)
- Initialise new project

```bash
#
# Create empty directory
#
mkdir myproject
cd myproject

#
# Find type of supported boards
#
platformio boards espressif

# Platform: espressif
# --------------------------------------------------------------------------------------------------------
# Type                  MCU            Frequency  Flash   RAM    Name
# --------------------------------------------------------------------------------------------------------
# huzzah                esp8266        80Mhz     4096Kb  80Kb   Adafruit HUZZAH ESP8266
# espino                esp8266        80Mhz     4096Kb  80Kb   ESPino
# esp12e                esp8266        80Mhz     4096Kb  80Kb   Espressif ESP8266 ESP-12E
# esp01_1m              esp8266        80Mhz     1024Kb  80Kb   Espressif Generic ESP8266 ESP-01 1M
# esp01                 esp8266        80Mhz     512Kb   80Kb   Espressif Generic ESP8266 ESP-01 512k
# nodemcu               esp8266        80Mhz     4096Kb  80Kb   NodeMCU 0.9 & 1.0
# modwifi               esp8266        80Mhz     2048Kb  80Kb   Olimex MOD-WIFI-ESP8266(-DEV)
# thing                 esp8266        80Mhz     512Kb   80Kb   SparkFun ESP8266 Thing
# esp210                esp8266        80Mhz     4096Kb  80Kb   SweetPea ESP-210
# d1                    esp8266        80Mhz     4096Kb  80Kb   WeMos D1
# d1_mini               esp8266        80Mhz     4096Kb  80Kb   WeMos D1 mini
# ...
#
# The rest of Board/MCU variations with the different Flash/SPIFFS can be customized using extra LD Script.
# PlatformIO contains the popular LD scripts.
# See http://docs.platformio.org/en/latest/platforms/espressif.html#custom-flash-size
#

#
# Initialise base project
#
platformio init --board %TYPE%(see above)
# for example, initialise project for Espressif Generic ESP8266 ESP-01
platformio init --board esp01

# The next files/directories will be created in myproject
# platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-|
# src - Put your source files here
# lib - Put here project specific (private) libraries
# Do you want to continue? [y/N]: Y
```

- Place your source code to `src` directory
- Build/Upload project

```bash
# process/build project
platformio run

# build+upload firmware
platformio run --target upload
```

## Advanced documentation

- [OTA update](http://docs.platformio.org/en/latest/platforms/espressif.html#ota-update)
  * [Authentication and upload options](http://docs.platformio.org/en/latest/platforms/espressif.html#authentication-and-upload-options)
- [Custom CPU Frequency and Upload Speed](http://docs.platformio.org/en/latest/platforms/espressif.html#custom-cpu-frequency-and-upload-speed)
- [Custom Flash Size](http://docs.platformio.org/en/latest/platforms/espressif.html#custom-flash-size)
- [IDE Integration](http://docs.platformio.org/en/latest/ide.html) (Atom, CLion, Eclipse, Qt Creator, Sublime Text, VIM, Visual Studio)
- [Project Examples](http://docs.platformio.org/en/latest/platforms/espressif.html#examples)

## Demo of Over-the-Air (OTA) ESP8266 programming using PlatformIO

http://www.penninkhof.com/2015/12/1610-over-the-air-esp8266-programming-using-platformio/

[![Over-the-Air ESP8266 programming using PlatformIO](http://img.youtube.com/vi/lXchL3hpDO4/0.jpg)](http://www.youtube.com/watch?v=lXchL3hpDO4 "Over-the-Air ESP8266 programming using PlatformIO")