From ea8068e001f0732e613785ff3223ccdf1cc87b70 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Thu, 14 Nov 2019 12:42:50 +0100 Subject: [PATCH] Switch to 115200 baud upload if 460800 fails (#856) * Switch to 115200 baud upload if 460800 fails * Update __main__.py --- esphome/__main__.py | 27 +++++++++++++++++++-------- esphome/util.py | 2 ++ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/esphome/__main__.py b/esphome/__main__.py index 3bc681afba..e43d371a86 100644 --- a/esphome/__main__.py +++ b/esphome/__main__.py @@ -165,16 +165,27 @@ def compile_program(args, config): def upload_using_esptool(config, port): path = CORE.firmware_bin - cmd = ['esptool.py', '--before', 'default_reset', '--after', 'hard_reset', - '--baud', str(config[CONF_ESPHOME][CONF_PLATFORMIO_OPTIONS].get('upload_speed', 460800)), - '--chip', 'esp8266', '--port', port, 'write_flash', '0x0', path] + first_baudrate = config[CONF_ESPHOME][CONF_PLATFORMIO_OPTIONS].get('upload_speed', 460800) - if os.environ.get('ESPHOME_USE_SUBPROCESS') is None: - import esptool - # pylint: disable=protected-access - return run_external_command(esptool._main, *cmd) + def run_esptool(baud_rate): + cmd = ['esptool.py', '--before', 'default_reset', '--after', 'hard_reset', + '--baud', str(baud_rate), + '--chip', 'esp8266', '--port', port, 'write_flash', '0x0', path] - return run_external_process(*cmd) + if os.environ.get('ESPHOME_USE_SUBPROCESS') is None: + import esptool + # pylint: disable=protected-access + return run_external_command(esptool._main, *cmd) + + return run_external_process(*cmd) + + rc = run_esptool(first_baudrate) + if rc == 0 or first_baudrate == 115200: + return rc + # Try with 115200 baud rate, with some serial chips the faster baud rates do not work well + _LOGGER.info("Upload with baud rate %s failed. Trying again with baud rate 115200.", + first_baudrate) + return run_esptool(115200) def upload_program(config, args, host): diff --git a/esphome/util.py b/esphome/util.py index 098d5e52da..b8e65cd576 100644 --- a/esphome/util.py +++ b/esphome/util.py @@ -184,6 +184,7 @@ def run_external_command(func, *cmd, **kwargs): except Exception as err: # pylint: disable=broad-except _LOGGER.error(u"Running command failed: %s", err) _LOGGER.error(u"Please try running %s locally.", full_cmd) + return 1 finally: sys.argv = orig_argv sys.exit = orig_exit @@ -216,6 +217,7 @@ def run_external_process(*cmd, **kwargs): except Exception as err: # pylint: disable=broad-except _LOGGER.error(u"Running command failed: %s", err) _LOGGER.error(u"Please try running %s locally.", full_cmd) + return 1 finally: if capture_stdout: # pylint: disable=lost-exception