micropython/esp8266
Paul Sokolovsky 777232c9a5 esp8266: Disallow recursive calls to REPL.
Before this change, if REPL blocked executing some code, it was possible
to still input new statememts and excuting them, all leading to weird,
and portentially dangerous interaction.

TODO: Current implementation may have issues processing input accumulated
while REPL was blocked.
2016-04-01 12:53:50 +03:00
..
scripts esp8266: Add support for frozen modules 2015-05-06 22:04:20 +01:00
tests esp8266/tests: Add neopixel.py test. 2016-03-26 10:55:29 +02:00
Makefile esp8266: Let esp8266 "os" messages go to standard (REPL) UART. 2016-03-29 21:10:10 +03:00
README.md esp8266/README: Update for the current status of the port. 2016-03-27 16:10:58 +03:00
eagle.rom.addr.v6.ld esp8266: Add alternative event loop implementation. 2016-03-11 09:13:31 +07:00
esp8266.ld esp8266/esp8266.ld: Put FatFs to FlashROM. 2016-03-27 17:15:25 +03:00
esp_mphal.c esp8266: Implement input part of dupterm handling. 2016-03-31 19:49:55 +03:00
esp_mphal.h esp8266: Implement input part of dupterm handling. 2016-03-31 19:49:55 +03:00
espneopixel.c esp8266: Add esp.neopixel_write function to bit-bang WS2812 data. 2016-03-26 10:55:21 +02:00
espneopixel.h esp8266: Add esp.neopixel_write function to bit-bang WS2812 data. 2016-03-26 10:55:21 +02:00
esppwm.c esp8266/esppwm.c: Fix IRQ handler prototype. 2016-03-26 00:34:28 +02:00
esppwm.h esp8266: Add PWM support. 2016-03-26 00:32:37 +02:00
ets_alt_task.c esp8266/ets_alt_task: Make FIRST_PRIO=0 to cover all task priorities. 2016-03-17 16:28:06 +00:00
ets_alt_task.h esp8266: Add alternative event loop implementation. 2016-03-11 09:13:31 +07:00
etshal.h esp8266: Implement os.urandom function. 2016-03-29 10:29:57 +03:00
fatfs_port.c esp8266: Enable FatFs support. 2016-03-27 17:13:47 +03:00
gccollect.c esp8266: Don't gc-collect BSS. 2016-03-08 10:16:06 +07:00
gccollect.h esp8266: Fix garbage collector by hard-coding stack end address. 2015-05-06 14:01:07 +01:00
gchelper.s esp8266: New port of Micro Python to ESP8266 wifi module. 2014-11-27 20:30:33 +00:00
lexerstr32.c esp8266: Store frozen modules in FlashROM. 2016-03-17 23:06:47 +08:00
main.c esp8266: Reset term_obj on reboot. 2016-03-31 19:56:52 +03:00
makeimg.py esp8266: New port of Micro Python to ESP8266 wifi module. 2014-11-27 20:30:33 +00:00
modesp.c esp8266: Move PHY mode constants from modesp to modnetwork. 2016-04-01 12:10:11 +03:00
modmachine.c esp8266: Link ADC class into machine module. 2016-03-26 00:41:37 +02:00
modnetwork.c esp8266: Move PHY mode constants from modesp to modnetwork. 2016-04-01 12:10:11 +03:00
modonewire.c esp8266: Add onewire helper functions as C module. 2016-03-24 17:33:42 +02:00
modpyb.c esp8266: Move pyb.freq to machine.freq. 2016-03-09 09:03:59 +07:00
modpyb.h esp8266: Add PWM support. 2016-03-26 00:32:37 +02:00
modpybadc.c py: Change first arg of type.make_new from mp_obj_t to mp_obj_type_t*. 2016-01-11 00:49:27 +00:00
modpybi2c.c esp8266: Implement bit-bang I2C read, and add i2c.readfrom method. 2016-03-24 11:46:05 +02:00
modpybpin.c esp8266: Expose pin object as a public structure for use as C pin API. 2016-03-24 11:07:41 +02:00
modpybpwm.c esp8266: Add PWM support. 2016-03-26 00:32:37 +02:00
modpybrtc.c esp8266: Reset "virtual RTC" on power on. 2016-03-04 16:49:01 +02:00
modpybrtc.h esp8266: Add utime and pyb.RTC 2015-05-13 00:12:54 +01:00
modpybspi.c esp8266: Implement software SPI class. 2016-03-25 23:28:13 +02:00
moduos.c esp8266: Enable uos.dupterm() method. 2016-03-29 11:41:23 +03:00
modutime.c esp8266/modutime: Support float argument to time.sleep(). 2016-03-04 16:52:30 +02:00
mpconfigport.h esp8266: Fix issue when current repl line was garbage-collected. 2016-03-30 18:13:03 +03:00
qstrdefsport.h esp8266: Add esp.neopixel_write function to bit-bang WS2812 data. 2016-03-26 10:55:21 +02:00
strtoll.c esp8266: Change bignum from mpz to longlong; move some rodata to iram. 2014-11-28 14:58:25 +00:00
uart.c esp8266: Disallow recursive calls to REPL. 2016-04-01 12:53:50 +03:00
uart.h esp8266/uart: Add uart_flush() function. 2016-03-05 22:13:26 +02:00
uart_register.h esp8266: New port of Micro Python to ESP8266 wifi module. 2014-11-27 20:30:33 +00:00
user_config.h esp8266: New port of Micro Python to ESP8266 wifi module. 2014-11-27 20:30:33 +00:00
utils.c esp8266: Add esp.socket class, with ESP-style socket functionality. 2015-05-04 11:48:40 +01:00
utils.h esp8266: Add esp.socket class, with ESP-style socket functionality. 2015-05-04 11:48:40 +01:00

README.md

MicroPython port to ESP8266

This is a highly experimental port of MicroPython for the WiFi modules based on Espressif ESP8266 chip.

WARNING: The port is highly experimental and any APIs are subject to change.

Currently implemented features include:

  • REPL (Python prompt) over UART0.
  • Garbage collector, exceptions.
  • Unicode support.
  • Builtin modules: gc, array, collections, io, struct, sys, esp, network, many more.
  • Arbitrary-precision long integers and 30-bit precision floats.
  • Basic WiFi support.
  • Sockets using modlwip.
  • GPIO and bit-banging I2C, SPI support.
  • 1-Wire and WS2812 (aka Neopixel) protocols support.

On the TODO list:

  • Full wifi support.
  • Internal filesystem using the flash.
  • ...

Build instructions

The tool chain required for the build is the OpenSource ESP SDK, which can be found at https://github.com/pfalcon/esp-open-sdk. Clone this repository and run make in its directory to build and install the SDK locally. Make sure to add toolchain bin directory to your PATH.

Add the external dependencies to the MicroPython repository checkout:

$ git submodule update --init

See the README in the repository root for more information about external dependencies.

Then, to build MicroPython for the ESP8266, just run:

$ cd esp8266
$ make

This should produce binary images in the build/ subdirectory. To flash them to your ESP8266, use:

$ make deploy

This will use the esptool.py script to download the images. You must have your ESP module in the bootloader, and connected to a serial port on your PC. The default serial port is /dev/ttyACM0. To specify another, use, eg:

$ make PORT=/dev/ttyUSB0 deploy

The images that are built are:

  • firmware.elf-0x00000.bin: to be flashed at 0x00000
  • firmware.elf-0x10000.bin: to be flashed at 0x10000

There is also a combined image, made up of the above 2 binary files with the appropriate padding:

  • firmware-combined.bin: to be flashed at 0x00000