So I finally got around to using my two ESP8266 modules. This is just some notes that I’ve collected whilst working on them.

If you’re interested in the boot data, it uses a different baud rate from the main interface. It might be briefly caught if the right baud rate is chosen, ie

The esp-open-sdk from is perfectly functional, and all it takes is a ‘make STANDALONE=y’
Once compiled, ensure that esp-open-sdk/bin is in your $PATH, ie /home/bagpuss/src/esp-open-sdk/xtensa-lx106-elf/bin

To flash the ESP8266 from Linux, from works great. Just ensure you have sufficient privileges to write to the serial port.

Whilst nodemcu-firmware could be pulled from it’s just easier to grab the precompiled firmware from

Good pinout diagram here
Keep CH_PD pulled high all the time.
Pull GPIO0 to GND in order to enter flashing mode.
Power it up
./ –port /dev/ttyUSB0 write_flash 0x00000 ../nodemcu_latest.bin
Reboot it when done

When talking to it, at least with the original firmware, you need a serial terminal that does newlines and carriage returns. The Arduino serial monitor works well for this. With nodemcu installed, /usr/bin/screen works just fine.

After a flash of nodemcu, do a file.format() to clear the flash

Use luatool from to upload lua scripts to the device.

If the device isn’t responding, wipe and start again… this set of commands have repeatedly gotten out of a ‘bricked’ device state.

./ –port /dev/ttyUSB0 write_flash 0x00000 ../esp-open-sdk/esp_iot_sdk_v1.0.1/bin/boot_v1.2.bin
./ –port /dev/ttyUSB0 write_flash 0x00000 ../esp-open-sdk/esp_iot_sdk_v1.0.1/bin/at/
./ –port /dev/ttyUSB0 write_flash 0x01000 ../esp-open-sdk/esp_iot_sdk_v1.0.1/bin/at/
./ –port /dev/ttyUSB0 write_flash 0x7e000 ../esp-open-sdk/esp_iot_sdk_v1.0.1/bin/blank.bin
./ –port /dev/ttyUSB0 write_flash 0xfe000 ../esp-open-sdk/esp_iot_sdk_v1.0.1/bin/blank.bin
./ –port /dev/ttyUSB0 write_flash 0x00000 ../nodemcu_latest.bin