diff --git a/README.md b/README.md index 826b39fcb..3f4a6e83b 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ This project brings support for ESP8266 chip to the Arduino environment. ESP8266 ### Downloads ### -| OS | Build status | Latest release | -| --- | ------------ | -------------- | -| Linux | [![Linux build status](http://img.shields.io/travis/igrr/Arduino.svg)](https://travis-ci.org/igrr/Arduino) | [arduino-1.6.1-linux64.tar.xz](../../releases/download/1.6.1-esp8266-1/arduino-1.6.1-linux64.tar.xz) | -| Windows | [![Windows build status](http://img.shields.io/appveyor/ci/igrr/Arduino.svg)](https://ci.appveyor.com/project/igrr/Arduino) | [arduino-1.6.1-p1-windows.zip](https://github.com/igrr/Arduino/releases/download/1.6.1-esp8266-1/arduino-1.6.1-p1-windows.zip) | -| OS X | | [arduino-1.6.1-macosx-java-latest-signed.zip](../../releases/download/1.6.1-esp8266-1/arduino-1.6.1-macosx-java-latest-signed.zip) | +| OS | Build status | Latest release | Alpha Version | +| --- | ------------ | -------------- | --------------- | +| Linux | [![Linux build status](http://img.shields.io/travis/igrr/Arduino.svg)](https://travis-ci.org/igrr/Arduino) | [arduino-1.6.1-linux64.tar.xz](../../releases/download/1.6.1-esp8266-1/arduino-1.6.1-linux64.tar.xz) | | +| Windows | [![Windows build status](http://img.shields.io/appveyor/ci/igrr/Arduino.svg)](https://ci.appveyor.com/project/igrr/Arduino) | [arduino-1.6.1-p1-windows.zip](https://github.com/igrr/Arduino/releases/download/1.6.1-esp8266-1/arduino-1.6.1-p1-windows.zip) | [appveyor Build](https://ci.appveyor.com/project/igrr/Arduino/build/artifacts) | +| OS X | | [arduino-1.6.1-macosx-java-latest-signed.zip](../../releases/download/1.6.1-esp8266-1/arduino-1.6.1-macosx-java-latest-signed.zip) | | ### Building from source ### @@ -44,6 +44,10 @@ Pin interrupts are supported through ```attachInterrupt```, ```detachInterrupt`` Interrupts may be attached to any GPIO pin, except GPIO16. Standard Arduino interrupt types are supported: ```CHANGE```, ```RISING```, ```FALLING```. +#### Pin Functions #### + +![Pin Functions](https://raw.githubusercontent.com/Links2004/Arduino/esp8266/docs/pin_functions.png) + #### Timing and delays #### ```millis``` and ```micros``` return the number of milliseconds and microseconds elapsed after reset, respectively. diff --git a/boards.txt b/boards.txt index 5fbd7bdd7..3045736dd 100644 --- a/boards.txt +++ b/boards.txt @@ -56,6 +56,62 @@ generic.menu.FlashSize.2M.build.flash_size=2M generic.menu.FlashSize.4M=4M generic.menu.FlashSize.4M.build.flash_size=4M +############################################################## +nodemcu.name=NODEMCU ESP8266 Module (v0.9) + +nodemcu.upload.tool=esptool +nodemcu.upload.speed=115200 +nodemcu.upload.resetmethod=ck +nodemcu.upload.maximum_size=524288 +nodemcu.upload.wait_for_upload_port=true +nodemcu.serial.disableDTR=true +nodemcu.serial.disableRTS=true + +nodemcu.build.mcu=esp8266 +nodemcu.build.f_cpu=80000000L +nodemcu.build.board=ESP8266_ESP12 +nodemcu.build.core=esp8266 +nodemcu.build.variant=nodemcu +nodemcu.build.flash_mode=qio +nodemcu.build.flash_size=512K +nodemcu.build.flash_freq=40 + +nodemcu.menu.CpuFrequency.80=80 MHz +nodemcu.menu.CpuFrequency.80.build.f_cpu=80000000L +nodemcu.menu.CpuFrequency.160=160 MHz +nodemcu.menu.CpuFrequency.160.build.f_cpu=160000000L + +nodemcu.menu.UploadSpeed.115200=115200 +nodemcu.menu.UploadSpeed.115200.upload.speed=115200 +nodemcu.menu.UploadSpeed.9600=9600 +nodemcu.menu.UploadSpeed.9600.upload.speed=9600 +nodemcu.menu.UploadSpeed.57600=57600 +nodemcu.menu.UploadSpeed.57600.upload.speed=57600 +nodemcu.menu.UploadSpeed.256000.windows=256000 +nodemcu.menu.UploadSpeed.256000.upload.speed=256000 +nodemcu.menu.UploadSpeed.230400.linux=230400 +nodemcu.menu.UploadSpeed.230400.macosx=230400 +nodemcu.menu.UploadSpeed.230400.macosx=230400 +nodemcu.menu.UploadSpeed.230400.upload.speed=230400 +nodemcu.menu.UploadSpeed.460800.linux=460800 +nodemcu.menu.UploadSpeed.460800.macosx=460800 +nodemcu.menu.UploadSpeed.460800.upload.speed=460800 +nodemcu.menu.UploadSpeed.512000.windows=512000 +nodemcu.menu.UploadSpeed.512000.upload.speed=512000 +nodemcu.menu.UploadSpeed.921600=921600 +nodemcu.menu.UploadSpeed.921600.upload.speed=921600 + +nodemcu.menu.FlashSize.512K=512K +nodemcu.menu.FlashSize.512K.build.flash_size=512K +nodemcu.menu.FlashSize.256K=256K +nodemcu.menu.FlashSize.256K.build.flash_size=256K +nodemcu.menu.FlashSize.1M=1M +nodemcu.menu.FlashSize.1M.build.flash_size=1M +nodemcu.menu.FlashSize.2M=2M +nodemcu.menu.FlashSize.2M.build.flash_size=2M +nodemcu.menu.FlashSize.4M=4M +nodemcu.menu.FlashSize.4M.build.flash_size=4M + ############################################################## # wifio.name=Wifio # diff --git a/cores/esp8266/Esp.h b/cores/esp8266/Esp.h index 78b468163..b3d836c79 100644 --- a/cores/esp8266/Esp.h +++ b/cores/esp8266/Esp.h @@ -42,6 +42,9 @@ typedef enum { #define wdt_disable() ESP.wdtDisable() #define wdt_reset() ESP.wdtFeed() +#define cli() ets_intr_lock() // IRQ Disable +#define sei() ets_intr_unlock() // IRQ Enable + enum WakeMode { WAKE_RF_DEFAULT = 0, // RF_CAL or not after deep-sleep wake up, depends on init data byte 108. WAKE_RFCAL = 1, // RF_CAL after deep-sleep wake up, there will be large current. diff --git a/doc/ESP01_connect.jpg b/doc/ESP01_connect.jpg new file mode 100644 index 000000000..6b0c24088 Binary files /dev/null and b/doc/ESP01_connect.jpg differ diff --git a/doc/pin_functions.png b/doc/pin_functions.png new file mode 100644 index 000000000..ac7fc0f9c Binary files /dev/null and b/doc/pin_functions.png differ diff --git a/libraries/OneWire/OneWire.cpp b/libraries/OneWire/OneWire.cpp index 631813f8e..593053794 100644 --- a/libraries/OneWire/OneWire.cpp +++ b/libraries/OneWire/OneWire.cpp @@ -119,7 +119,7 @@ sample code bearing this copyright. OneWire::OneWire(uint8_t pin) { - pinMode(pin, INPUT); + pinMode(pin, INPUT_PULLUP); bitmask = PIN_TO_BITMASK(pin); baseReg = PIN_TO_BASEREG(pin); #if ONEWIRE_SEARCH diff --git a/libraries/SPI/SPI.cpp b/libraries/SPI/SPI.cpp index fefd5ce2b..347259f4d 100644 --- a/libraries/SPI/SPI.cpp +++ b/libraries/SPI/SPI.cpp @@ -57,7 +57,7 @@ void SPIClass::setDataMode(uint8_t dataMode) { } void SPIClass::setBitOrder(uint8_t bitOrder) { - if (bitOrder == MSBFIRST){ + if (bitOrder == MSBFIRST) { SPI1C &= ~(SPICWBO | SPICRBO); } else { SPI1C |= (SPICWBO | SPICRBO); @@ -76,3 +76,25 @@ uint8_t SPIClass::transfer(uint8_t data) { return (uint8_t)(SPI1W0 & 0xff); } +uint16_t SPIClass::transfer16(uint16_t data) { + union { + uint16_t val; + struct { + uint8_t lsb; + uint8_t msb; + }; + } in, out; + in.val = data; + + if((SPI1C & (SPICWBO | SPICRBO))) { + //MSBFIRST + out.msb = transfer(in.msb); + out.lsb = transfer(in.lsb); + } else { + //LSBFIRST + out.lsb = transfer(in.lsb); + out.msb = transfer(in.msb); + } + return out.val; +} + diff --git a/libraries/SPI/SPI.h b/libraries/SPI/SPI.h index d62d96df3..5ff10d3a3 100644 --- a/libraries/SPI/SPI.h +++ b/libraries/SPI/SPI.h @@ -80,6 +80,7 @@ public: void setClockDivider(uint32_t clockDiv); void beginTransaction(SPISettings settings); uint8_t transfer(uint8_t data); + uint16_t transfer16(uint16_t data); void endTransaction(void); }; diff --git a/variants/nodemcu/pins_arduino.h b/variants/nodemcu/pins_arduino.h new file mode 100644 index 000000000..3a0e8f2f8 --- /dev/null +++ b/variants/nodemcu/pins_arduino.h @@ -0,0 +1,81 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + Modified for ESP8266 platform by Ivan Grokhotkov, 2014-2015. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $ +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#define EXTERNAL_NUM_INTERRUPTS 16 +#define NUM_DIGITAL_PINS 17 +#define NUM_ANALOG_INPUTS 1 + +#define analogInputToDigitalPin(p) ((p > 0)?NOT_A_PIN:0) +#define digitalPinToInterrupt(p) (((p) < EXTERNAL_NUM_INTERRUPTS)?p:NOT_A_PIN) +#define digitalPinHasPWM(p) (((p) < NUM_DIGITAL_PINS)?p:NOT_A_PIN) + +static const uint8_t SDA = 4; +static const uint8_t SCL = 5; + +static const uint8_t SS = 15; +static const uint8_t MOSI = 13; +static const uint8_t MISO = 12; +static const uint8_t SCK = 14; + +static const uint8_t BUILTIN_LED = 1; + +static const uint8_t A0 = 17; + +static const uint8_t D0 = 16; +static const uint8_t D1 = 5; +static const uint8_t D2 = 4; +static const uint8_t D3 = 0; +static const uint8_t D4 = 2; +static const uint8_t D5 = 14; +static const uint8_t D6 = 12; +static const uint8_t D7 = 13; +static const uint8_t D8 = 15; +static const uint8_t D9 = 3; +static const uint8_t D10 = 1; + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_USBVIRTUAL Serial +#define SERIAL_PORT_HARDWARE Serial +#define SERIAL_PORT_HARDWARE_OPEN Serial + +#endif /* Pins_Arduino_h */