This is a known issue with the included esptool, and for the Arduino IDE there are quite a few blog posts to be found on this problem. But most are outdated, and are not applicable when using PlatformIO with some other IDE. So, February 2016:
Install esptool.py
git clone https://github.com/themadinventor/esptool/
(or download the ZIP file)
cd esptool
sudo python setup.py install
When using Arduino IDE
- Open
~/Library/Arduino15/packages/esp8266/hardware/esp8266/2.0.0/platform.txt
.
Find the line tools.esptool.upload.pattern
and disable that by prefixing with a hash. Check that your version only mentions -ca 0x00000
, not -ca 0x10000
as well (like in most outdated blog posts):
# tools.esptool.upload.pattern="{path}/{cmd}" {upload.verbose} -cd {upload.resetmethod} -cb {upload.speed} -cp "{serial.port}" -ca 0x00000 -cf "{build.path}/{build.project_name}.bin"
Add the following, referring to the esptool.py
you installed above and also using different command line parameters:
# Fix for espcomm_send_command: cant receive slip payload data
tools.esptool.upload.pattern="/path/to/new/esptool.py" --port "{serial.port}" --baud {upload.speed} write_flash 0x00000 "{build.path}/{build.project_name}.bin"
Restart the IDE.
(One might be tempted to just change tools.esptool.path
and tools.esptool.cmd
instead, but beware that the command line parameters need changing as well.)
When using PlatformIO
You will find the same platform.txt
file somewhere in ~/.platformio/packages/framework-arduinoespressif/platform.txt
, but that file is not used for the upload. Instead:
In platformio.ini
add:
# ...or whatever your port is named
upload_port = /dev/cu.usbserial
extra_script = /path/to/platformio_extra_script.py
Create a new file /path/to/platformio_extra_script.py
:
# Custom settings, as referred to as "extra_script" in platformio.ini
#
# See http://docs.platformio.org/en/latest/projectconf.html#extra-script
# See https://github.com/platformio/platformio/issues/426
from SCons.Script import DefaultEnvironment
env = DefaultEnvironment()
# Must be full path, or use
# https://docs.python.org/2/library/os.path.html#os.path.expanduser
env.Replace(
LOCAL_UPLOADER="/Users/arjan/path/to/new/esptool.py",
LOCAL_UPLOADERFLAGS=[
"--port", "$UPLOAD_PORT",
"--baud", "$UPLOAD_SPEED",
"write_flash", "0x00000",
],
UPLOADCMD='$LOCAL_UPLOADER $LOCAL_UPLOADERFLAGS $SOURCE'
)