def run_esphomeflasher(argv): args = parse_args(argv) port = select_port(args) if args.show_logs: serial_port = serial.Serial(port, baudrate=115200) show_logs(serial_port) return try: firmware = open(args.binary, 'rb') except IOError as err: raise EsphomeflasherError("Error opening binary: {}".format(err)) chip = detect_chip(port, args.esp8266, args.esp32) info = read_chip_info(chip) print() print("Chip Info:") print(" - Chip Family: {}".format(info.family)) print(" - Chip Model: {}".format(info.model)) if isinstance(info, ESP32ChipInfo): print(" - Number of Cores: {}".format(info.num_cores)) print(" - Max CPU Frequency: {}".format(info.cpu_frequency)) print(" - Has Bluetooth: {}".format( 'YES' if info.has_bluetooth else 'NO')) print(" - Has Embedded Flash: {}".format( 'YES' if info.has_embedded_flash else 'NO')) print(" - Has Factory-Calibrated ADC: {}".format( 'YES' if info.has_factory_calibrated_adc else 'NO')) else: print(" - Chip ID: {:08X}".format(info.chip_id)) print(" - MAC Address: {}".format(info.mac)) stub_chip = chip_run_stub(chip) flash_size = None if args.upload_baud_rate != 115200: try: stub_chip.change_baud(args.upload_baud_rate) except esptool.FatalError as err: raise EsphomeflasherError( "Error changing ESP upload baud rate: {}".format(err)) # Check if the higher baud rate works try: flash_size = detect_flash_size(stub_chip) except esptool.FatalError as err: # Go back to old baud rate by recreating chip instance print("Chip does not support baud rate {}, changing to 115200". format(args.upload_baud_Rate)) stub_chip._port.close() chip = detect_chip(port, args.esp8266, args.esp32) stub_chip = chip_run_stub(chip) if flash_size is None: flash_size = detect_flash_size(stub_chip) print(" - Flash Size: {}".format(flash_size)) mock_args = configure_write_flash_args(info, firmware, flash_size, args.bootloader, args.partitions, args.otadata) print(" - Flash Mode: {}".format(mock_args.flash_mode)) print(" - Flash Frequency: {}Hz".format(mock_args.flash_freq.upper())) try: stub_chip.flash_set_parameters(esptool.flash_size_bytes(flash_size)) except esptool.FatalError as err: raise EsphomeflasherError( "Error setting flash parameters: {}".format(err)) if not args.no_erase: try: esptool.erase_flash(stub_chip, mock_args) except esptool.FatalError as err: raise EsphomeflasherError( "Error while erasing flash: {}".format(err)) try: esptool.write_flash(stub_chip, mock_args) except esptool.FatalError as err: raise EsphomeflasherError("Error while writing flash: {}".format(err)) print("Hard Resetting...") stub_chip.hard_reset() print("Done! Flashing is complete!") print() if args.upload_baud_rate != 115200: stub_chip._port.baudrate = 115200 time.sleep(0.05) # get rid of crap sent during baud rate change stub_chip._port.flushInput() show_logs(stub_chip._port)
def run_esphomeflasher(argv): args = parse_args(argv) try: firmware = open(args.binary, 'rb') except IOError as err: raise EsphomeflasherError("Error opening binary: {}".format(err)) port = select_port(args) chip = detect_chip(port, args.esp8266, args.esp32) info = read_chip_info(chip) print() print("Chip Info:") print(" - Chip Family: {}".format(info.family)) print(" - Chip Model: {}".format(info.model)) if isinstance(info, ESP32ChipInfo): print(" - Number of Cores: {}".format(info.num_cores)) print(" - Max CPU Frequency: {}".format(info.cpu_frequency)) print(" - Has Bluetooth: {}".format('YES' if info.has_bluetooth else 'NO')) print(" - Has Embedded Flash: {}".format('YES' if info.has_embedded_flash else 'NO')) print(" - Has Factory-Calibrated ADC: {}".format( 'YES' if info.has_factory_calibrated_adc else 'NO')) else: print(" - Chip ID: {:08X}".format(info.chip_id)) print(" - MAC Address: {}".format(info.mac)) stub_chip = chip_run_stub(chip) flash_size = detect_flash_size(stub_chip) print(" - Flash Size: {}".format(flash_size)) mock_args = configure_write_flash_args(info, firmware, flash_size, args.bootloader, args.partitions, args.otadata) print(" - Flash Mode: {}".format(mock_args.flash_mode)) print(" - Flash Frequency: {}Hz".format(mock_args.flash_freq.upper())) try: stub_chip.flash_set_parameters(esptool.flash_size_bytes(flash_size)) except esptool.FatalError as err: raise EsphomeflasherError("Error setting flash parameters: {}".format(err)) if not args.no_erase: try: esptool.erase_flash(stub_chip, mock_args) except esptool.FatalError as err: raise EsphomeflasherError("Error while erasing flash: {}".format(err)) try: esptool.write_flash(stub_chip, mock_args) except esptool.FatalError as err: raise EsphomeflasherError("Error while writing flash: {}".format(err)) print("Hard Resetting...") stub_chip.hard_reset() print("Done! Flashing is complete!") print() print("Showing logs:") with stub_chip._port as ser: while True: try: raw = ser.readline() except serial.SerialException: print("Serial port closed!") return text = raw.decode(errors='ignore') text = ANSI_REGEX.sub('', text) line = text.replace('\r', '').replace('\n', '') time = datetime.now().time().strftime('[%H:%M:%S]') message = time + line try: print(message) except UnicodeEncodeError: print(message.encode('ascii', 'backslashreplace'))
def run_esphomeflasher(argv): args = parse_args(argv) port = select_port(args) if args.show_logs: serial_port = serial.Serial(port, baudrate=115200) show_logs(serial_port) return try: firmware = open(args.binary, 'rb') except IOError as err: raise EsphomeflasherError("Error opening binary: {}".format(err)) chip = detect_chip(port, args.esp8266, args.esp32) info = read_chip_info(chip) print() print("Chip Info:") print(" - Chip Family: {}".format(info.family)) print(" - Chip Model: {}".format(info.model)) if isinstance(info, ESP32ChipInfo): print(" - Number of Cores: {}".format(info.num_cores)) print(" - Max CPU Frequency: {}".format(info.cpu_frequency)) print(" - Has Bluetooth: {}".format( 'YES' if info.has_bluetooth else 'NO')) print(" - Has Embedded Flash: {}".format( 'YES' if info.has_embedded_flash else 'NO')) print(" - Has Factory-Calibrated ADC: {}".format( 'YES' if info.has_factory_calibrated_adc else 'NO')) else: print(" - Chip ID: {:08X}".format(info.chip_id)) print(" - MAC Address: {}".format(info.mac)) stub_chip = chip_run_stub(chip) flash_size = detect_flash_size(stub_chip) print(" - Flash Size: {}".format(flash_size)) mock_args = configure_write_flash_args(info, firmware, flash_size, args.bootloader, args.partitions, args.otadata) print(" - Flash Mode: {}".format(mock_args.flash_mode)) print(" - Flash Frequency: {}Hz".format(mock_args.flash_freq.upper())) try: stub_chip.flash_set_parameters(esptool.flash_size_bytes(flash_size)) except esptool.FatalError as err: raise EsphomeflasherError( "Error setting flash parameters: {}".format(err)) if not args.no_erase: try: esptool.erase_flash(stub_chip, mock_args) except esptool.FatalError as err: raise EsphomeflasherError( "Error while erasing flash: {}".format(err)) try: esptool.write_flash(stub_chip, mock_args) except esptool.FatalError as err: raise EsphomeflasherError("Error while writing flash: {}".format(err)) print("Hard Resetting...") stub_chip.hard_reset() print("Done! Flashing is complete!") print() show_logs(stub_chip._port)
def run_esphomeflasher(argv): args = parse_args(argv) port = select_port(args) if args.show_logs: serial_port = serial.Serial(port, baudrate=921600) show_logs(serial_port) return print("Starting firmware upgrade...") print("Getting latest firmware from fujinet.online..") print(fujinet_version_info(), end='') firmware = open_downloadable_binary(ESP32_DEFAULT_FIRMWARE) chip = detect_chip(port, args.esp8266, args.esp32) info = read_chip_info(chip) print() print("Chip Info:") print(" - Chip Family: {}".format(info.family)) print(" - Chip Model: {}".format(info.model)) if isinstance(info, ESP32ChipInfo): print(" - Number of Cores: {}".format(info.num_cores)) print(" - Max CPU Frequency: {}".format(info.cpu_frequency)) print(" - Has Bluetooth: {}".format( 'YES' if info.has_bluetooth else 'NO')) print(" - Has Embedded Flash: {}".format( 'YES' if info.has_embedded_flash else 'NO')) print(" - Has Factory-Calibrated ADC: {}".format( 'YES' if info.has_factory_calibrated_adc else 'NO')) else: print(" - Chip ID: {:08X}".format(info.chip_id)) print(" - MAC Address: {}".format(info.mac)) stub_chip = chip_run_stub(chip) if args.upload_baud_rate != 115200: try: stub_chip.change_baud(args.upload_baud_rate) except esptool.FatalError as err: raise EsphomeflasherError( "Error changing ESP upload baud rate: {}".format(err)) flash_size = detect_flash_size(stub_chip) print(" - Flash Size: {}".format(flash_size)) mock_args = configure_write_flash_args(info, firmware, flash_size, args.bootloader, args.partitions, args.otadata, args.spiffs) print(" - Flash Mode: {}".format(mock_args.flash_mode)) print(" - Flash Frequency: {}Hz".format(mock_args.flash_freq.upper())) try: stub_chip.flash_set_parameters(esptool.flash_size_bytes(flash_size)) except esptool.FatalError as err: raise EsphomeflasherError( "Error setting flash parameters: {}".format(err)) if not args.no_erase: try: esptool.erase_flash(stub_chip, mock_args) except esptool.FatalError as err: raise EsphomeflasherError( "Error while erasing flash: {}".format(err)) try: esptool.write_flash(stub_chip, mock_args) except esptool.FatalError as err: raise EsphomeflasherError("Error while writing flash: {}".format(err)) print("Hard Resetting...") stub_chip.hard_reset() print("Done! Flashing is complete!") print() if args.upload_baud_rate != 921600: stub_chip._port.baudrate = 921600 time.sleep(0.05) # get rid of crap sent during baud rate change stub_chip._port.flushInput() show_logs(stub_chip._port)