2016-12-10 18:28:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# Arduino core for ESP32 WiFi chip
  
						 
					
						
							
								
									
										
										
										
											2016-10-06 14:36:15 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-28 14:15:42 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[](https://travis-ci.org/espressif/arduino-esp32)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-13 13:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Need help or have a question? Join the chat at [](https://gitter.im/espressif/arduino-esp32?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
  
						 
					
						
							
								
									
										
										
										
											2016-12-13 04:12:44 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-10 18:28:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  [Development Status ](#development-status ) 
						 
					
						
							
								
									
										
										
										
											2017-01-05 17:59:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  [Installation Instructions ](#installation-instructions ): 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  + [Using Arduino IDE ](#using-through-arduino-ide )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    + [Windows ](https://github.com/espressif/arduino-esp32/blob/master/doc/windows.md )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    + [Mac OS ](#instructions-for-mac )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    + [Debian/Ubuntu ](#instructions-for-debianubuntu-linux )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    + [Decoding Exceptions ](#decoding-exceptions )
							 
						 
					
						
							
								
									
										
										
										
											2016-12-10 18:28:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  + [Using PlatformIO ](#using-platformio )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  + [Using as ESP-IDF component ](#using-as-esp-idf-component )
							 
						 
					
						
							
								
									
										
										
										
											2017-01-28 14:19:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  [ESP32Dev Board PINMAP ](#esp32dev-board-pinmap ) 
						 
					
						
							
								
									
										
										
										
											2016-12-10 18:28:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Development Status
  
						 
					
						
							
								
									
										
										
										
											2016-12-30 03:00:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Most of the framework is implemented. Most noticable is the missing analogWrite. While analogWrite is on it's way, there are a few other options that you can use:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  16 channels [LEDC ](https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/esp32-hal-ledc.h ) which is PWM 
						 
					
						
							
								
									
										
										
										
											2017-01-09 17:57:17 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  8 channels [SigmaDelta ](https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/esp32-hal-sigmadelta.h ) which uses SigmaDelta modulation 
						 
					
						
							
								
									
										
										
										
											2016-12-30 03:00:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  2 channels [DAC ](https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/esp32-hal-dac.h ) which gives real analog output 
						 
					
						
							
								
									
										
										
										
											2016-10-07 11:32:35 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-05 17:59:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Installation Instructions
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### Using through Arduino IDE
  
						 
					
						
							
								
									
										
										
										
											2016-12-07 00:46:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-10 18:28:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								###[Instructions for Windows](doc/windows.md)
  
						 
					
						
							
								
									
										
										
										
											2016-12-07 00:46:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-05 17:59:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								#### Instructions for Mac
  
						 
					
						
							
								
									
										
										
										
											2016-12-07 00:46:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  Install latest Arduino IDE from [arduino.cc ](https://www.arduino.cc/en/Main/Software ) 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  Open Terminal and execute the following command (copy->paste and hit enter): 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ```bash
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  mkdir -p ~/Documents/Arduino/hardware/espressif & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cd ~/Documents/Arduino/hardware/espressif & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  git clone https://github.com/espressif/arduino-esp32.git esp32 & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cd esp32/tools/ & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  python get.py
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  Restart Arduino IDE 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-05 17:59:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								#### Instructions for Debian/Ubuntu Linux
  
						 
					
						
							
								
									
										
										
										
											2016-12-07 00:46:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  Install latest Arduino IDE from [arduino.cc ](https://www.arduino.cc/en/Main/Software ) 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  Open Terminal and execute the following command (copy->paste and hit enter): 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ```bash
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  sudo usermod -a -G dialout $USER & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  sudo apt-get install git & &  \
							 
						 
					
						
							
								
									
										
										
										
											2017-04-04 02:36:55 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  wget https://bootstrap.pypa.io/get-pip.py & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  sudo python get-pip.py & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  sudo pip install pyserial & &  \
							 
						 
					
						
							
								
									
										
										
										
											2016-12-07 00:46:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  mkdir -p ~/Arduino/hardware/espressif & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cd ~/Arduino/hardware/espressif & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  git clone https://github.com/espressif/arduino-esp32.git esp32 & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cd esp32/tools/ & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  python get.py
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  Restart Arduino IDE 
						 
					
						
							
								
									
										
										
										
											2016-10-06 14:36:15 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-05 17:59:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								#### Decoding exceptions
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								You can use [EspExceptionDecoder ](https://github.com/me-no-dev/EspExceptionDecoder ) to get meaningful call trace.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### Using PlatformIO
  
						 
					
						
							
								
									
										
										
										
											2016-12-10 18:28:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[PlatformIO ](http://platformio.org ) is an open source ecosystem for IoT
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								development with cross platform build system, library manager and full support
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								for Espressif ESP32 development. It works on the popular host OS: Mac OS X, Windows,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Linux 32/64, Linux ARM (like Raspberry Pi, BeagleBone, CubieBoard).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  [What is PlatformIO? ](http://docs.platformio.org/page/what-is-platformio.html ) 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  [PlatformIO IDE ](http://platformio.org/platformio-ide ) 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  Quick Start with [PlatformIO IDE ](http://docs.platformio.org/page/ide/atom.html#quick-start ) or [PlatformIO Core ](http://docs.platformio.org/page/core.html ) 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  [Integration with Cloud and Standalone IDEs ](http://docs.platformio.org/page/ide.html ) - 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Cloud9, Codeanywehre, Eclipse Che (Codenvy), Atom, CLion, Eclipse, Emacs, NetBeans, Qt Creator, Sublime Text, VIM and Visual Studio
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  [Project Examples ](https://github.com/platformio/platform-espressif32/tree/develop/examples ) 
						 
					
						
							
								
									
										
										
										
											2017-01-28 14:19:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  [Using "Stage" (Git) version of Arduino Core ](http://docs.platformio.org/page/platforms/espressif32.html#using-arduino-framework-with-staging-version ) 
						 
					
						
							
								
									
										
										
										
											2016-12-10 18:28:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-28 17:11:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### Building with make
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[makeEspArduino ](https://github.com/plerup/makeEspArduino ) is a generic makefile for any ESP8266/ESP32 Arduino project.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Using make instead of the Arduino IDE makes it easier to do automated and production builds.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-05 17:59:20 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### Using as ESP-IDF component
  
						 
					
						
							
								
									
										
										
										
											2016-12-09 00:34:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  Download and install [esp-idf ](https://github.com/espressif/esp-idf ) 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  Create blank idf project (from one of the examples) 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  in the project folder, create a folder called components and clone this repository inside 
						 
					
						
							
								
									
										
										
										
											2016-12-13 05:34:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-09 00:34:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ```bash
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mkdir -p components & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    cd components & &  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    git clone https://github.com/espressif/arduino-esp32.git arduino & &  \
							 
						 
					
						
							
								
									
										
										
										
											2016-12-13 05:34:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    cd .. & &  \
							 
						 
					
						
							
								
									
										
										
										
											2016-12-09 00:34:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    make menuconfig
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  ```make menuconfig` `` has some Arduino options 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    -  "Autostart Arduino setup and loop on boot"
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        -  If you enable this options, your main.cpp should be formated like any other sketch
							 
						 
					
						
							
								
									
										
										
										
											2016-12-13 05:34:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-09 00:34:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          ```arduino
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          //file: main.cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          #include  "Arduino.h"
							 
						 
					
						
							
								
									
										
										
										
											2016-12-13 05:34:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-09 00:34:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          void setup(){
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Serial.begin(115200);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          }
							 
						 
					
						
							
								
									
										
										
										
											2016-12-13 05:34:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-09 00:34:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          void loop(){
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Serial.println("loop");
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            delay(1000);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          ```
							 
						 
					
						
							
								
									
										
										
										
											2017-01-28 14:19:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-09 00:34:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        -  Else you need to implement ```app_main()` `` and call ` ``initArduino();` `` in it.
							 
						 
					
						
							
								
									
										
										
										
											2016-12-13 05:34:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-16 05:15:00 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          Keep in mind that setup() and loop() will not be called in this case.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          If you plan to base your code on examples provided in [esp-idf ](https://github.com/espressif/esp-idf/tree/master/examples ), please make sure move the app_main() function in main.cpp from the files in the example.
							 
						 
					
						
							
								
									
										
										
										
											2016-12-13 05:34:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-09 00:34:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          ```arduino
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          //file: main.cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          #include  "Arduino.h"
							 
						 
					
						
							
								
									
										
										
										
											2016-12-13 05:34:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-09 00:34:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          extern "C" void app_main()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              initArduino();
							 
						 
					
						
							
								
									
										
										
										
											2016-12-13 05:34:02 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              pinMode(4, OUTPUT);
							 
						 
					
						
							
								
									
										
										
										
											2016-12-09 00:34:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              digitalWrite(4, HIGH);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              //do your own thing
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          ```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    -  "Disable mutex locks for HAL"
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        -  If enabled, there will be no protection on the drivers from concurently accessing them from another thread/interrupt/core
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    -  "Autoconnect WiFi on boot"
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        -  If enabled, WiFi will start with the last known configuration
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        -  Else it will wait for WiFi.begin
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  ```make flash monitor` `` will build, upload and open serial monitor to your board 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-10 18:28:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## ESP32Dev Board PINMAP
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-06 14:36:15 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-05 14:48:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Hint
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Sometimes to program ESP32 via serial you must keep GPIO0 LOW during the programming process