README.md 6.8 KB
Newer Older
1
# Arduino core for ESP32 WiFi chip
M
Me No Dev 已提交
2

M
Me No Dev 已提交
3 4
[![Build Status](https://travis-ci.org/espressif/arduino-esp32.svg?branch=master)](https://travis-ci.org/espressif/arduino-esp32)

M
Me No Dev 已提交
5
## Need help or have a question? Join the chat at [![https://gitter.im/espressif/arduino-esp32](https://badges.gitter.im/espressif/arduino-esp32.svg)](https://gitter.im/espressif/arduino-esp32?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
T
The Gitter Badger 已提交
6

7
- [Development Status](#development-status)
M
Me No Dev 已提交
8 9 10 11 12 13
- [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)
14 15
  + [Using PlatformIO](#using-platformio)
  + [Using as ESP-IDF component](#using-as-esp-idf-component)
16
- [ESP32Dev Board PINMAP](#esp32dev-board-pinmap)
17 18

## Development Status
M
Me No Dev 已提交
19 20
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
M
me-no-dev 已提交
21
- 8 channels [SigmaDelta](https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/esp32-hal-sigmadelta.h) which uses SigmaDelta modulation
M
Me No Dev 已提交
22
- 2 channels [DAC](https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/esp32-hal-dac.h) which gives real analog output
M
Me No Dev 已提交
23

M
Me No Dev 已提交
24 25 26
## Installation Instructions

### Using through Arduino IDE
M
Me No Dev 已提交
27

F
Fabian Affolter 已提交
28
#### [Instructions for Windows](doc/windows.md)
M
Me No Dev 已提交
29

M
Me No Dev 已提交
30
#### Instructions for Mac
M
Me No Dev 已提交
31 32 33 34 35 36 37 38 39 40 41 42
- 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

M
Me No Dev 已提交
43
#### Instructions for Debian/Ubuntu Linux
M
Me No Dev 已提交
44 45 46 47 48 49
- 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 && \
50 51 52
  wget https://bootstrap.pypa.io/get-pip.py && \
  sudo python get-pip.py && \
  sudo pip install pyserial && \
M
Me No Dev 已提交
53 54 55 56 57 58 59
  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
M
Me No Dev 已提交
60

F
Fabian Affolter 已提交
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
#### Instructions for Fedora
- Install the latest Arduino IDE from [arduino.cc](https://www.arduino.cc/en/Main/Software). `$ sudo dnf -y install arduino` will most likely install an older release.
- Open Terminal and execute the following command (copy->paste and hit enter):

  ```bash
  sudo usermod -a -G dialout $USER && \
  sudo dnf install git python3-pip python3-pyserial && \
  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

M
Me No Dev 已提交
76 77 78 79 80
#### Decoding exceptions

You can use [EspExceptionDecoder](https://github.com/me-no-dev/EspExceptionDecoder) to get meaningful call trace.

### Using PlatformIO
81 82 83 84 85 86 87 88 89 90 91 92

[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)
93
- [Using "Stage" (Git) version of Arduino Core](http://docs.platformio.org/page/platforms/espressif32.html#using-arduino-framework-with-staging-version)
94

95 96 97 98 99
### 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.

M
Me No Dev 已提交
100
### Using as ESP-IDF component
M
Me No Dev 已提交
101 102 103
- 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
M
Murat Ambarkutuk 已提交
104

M
Me No Dev 已提交
105 106 107 108
    ```bash
    mkdir -p components && \
    cd components && \
    git clone https://github.com/espressif/arduino-esp32.git arduino && \
M
Murat Ambarkutuk 已提交
109
    cd .. && \
M
Me No Dev 已提交
110 111 112 113 114
    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
M
Murat Ambarkutuk 已提交
115

M
Me No Dev 已提交
116 117 118
          ```arduino
          //file: main.cpp
          #include "Arduino.h"
M
Murat Ambarkutuk 已提交
119

M
Me No Dev 已提交
120 121 122
          void setup(){
            Serial.begin(115200);
          }
M
Murat Ambarkutuk 已提交
123

M
Me No Dev 已提交
124 125 126 127 128
          void loop(){
            Serial.println("loop");
            delay(1000);
          }
          ```
129

M
Me No Dev 已提交
130
        - Else you need to implement ```app_main()``` and call ```initArduino();``` in it.
M
Murat Ambarkutuk 已提交
131

132 133
          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.
M
Murat Ambarkutuk 已提交
134

M
Me No Dev 已提交
135 136 137
          ```arduino
          //file: main.cpp
          #include "Arduino.h"
M
Murat Ambarkutuk 已提交
138

M
Me No Dev 已提交
139 140 141
          extern "C" void app_main()
          {
              initArduino();
M
Murat Ambarkutuk 已提交
142
              pinMode(4, OUTPUT);
M
Me No Dev 已提交
143 144 145 146 147 148 149 150 151 152 153
              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

154 155
## ESP32Dev Board PINMAP

M
Me No Dev 已提交
156
![Pin Functions](doc/esp32_pinmap.png)
I
Ion 已提交
157 158 159 160 161

## Hint

Sometimes to program ESP32 via serial you must keep GPIO0 LOW during the programming process