mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	use platformio upload
This commit is contained in:
		| @@ -298,45 +298,13 @@ def upload_using_platformio(config, port): | |||||||
|     return platformio_api.run_platformio_cli_run(config, CORE.verbose, *upload_args) |     return platformio_api.run_platformio_cli_run(config, CORE.verbose, *upload_args) | ||||||
|  |  | ||||||
|  |  | ||||||
| def update_progress(progress=0, done=False, log_message=""): | def nrf52_upload_using_platformio(config, port): | ||||||
|     import click |  | ||||||
|  |  | ||||||
|     del done, log_message  # Unused parameters |  | ||||||
|     if progress == 0: |  | ||||||
|         return |  | ||||||
|  |  | ||||||
|     if progress % 40 == 0: |  | ||||||
|         click.echo("#", nl=True) |  | ||||||
|     else: |  | ||||||
|         click.echo("#", nl=False) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def upload_adafruit_nrfutil(config, port): |  | ||||||
|     from esphome import platformio_api |     from esphome import platformio_api | ||||||
|     from pathlib import Path |  | ||||||
|     from nordicsemi.dfu.dfu_transport_serial import DfuTransportSerial |  | ||||||
|     from nordicsemi.dfu.dfu_transport import DfuEvent |  | ||||||
|     from nordicsemi.dfu.dfu import Dfu |  | ||||||
|     import serial |  | ||||||
|  |  | ||||||
|     idedata = platformio_api.get_idedata(config) |     upload_args = ["-t", "upload"] | ||||||
|     dfu_package = str(Path(idedata.firmware_elf_path).with_suffix(".zip")) |     if port is not None: | ||||||
|     ser = serial.Serial(port, 2400) |         upload_args += ["--upload-port", port] | ||||||
|     time.sleep(DfuTransportSerial.SERIAL_PORT_OPEN_WAIT_TIME) |     return platformio_api.run_platformio_cli_run(config, CORE.verbose, *upload_args) | ||||||
|     ser.setDTR(True) |  | ||||||
|     time.sleep(DfuTransportSerial.DTR_RESET_WAIT_TIME) |  | ||||||
|     ser.close() |  | ||||||
|  |  | ||||||
|     time.sleep(2) |  | ||||||
|  |  | ||||||
|     serial_backend = DfuTransportSerial(port) |  | ||||||
|     serial_backend.register_events_callback(DfuEvent.PROGRESS_EVENT, update_progress) |  | ||||||
|     dfu = Dfu(dfu_package, dfu_transport=serial_backend) |  | ||||||
|  |  | ||||||
|     try: |  | ||||||
|         dfu.dfu_send_images() |  | ||||||
|     except Exception as e: |  | ||||||
|         raise EsphomeError(f"Unable to send image: {e}") |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def upload_program(config, args, host): | def upload_program(config, args, host): | ||||||
| @@ -352,7 +320,7 @@ def upload_program(config, args, host): | |||||||
|             return upload_using_platformio(config, host) |             return upload_using_platformio(config, host) | ||||||
|  |  | ||||||
|         if CORE.target_platform in (PLATFORM_NRF52): |         if CORE.target_platform in (PLATFORM_NRF52): | ||||||
|             return upload_adafruit_nrfutil(config, host) |             return nrf52_upload_using_platformio(config, host) | ||||||
|  |  | ||||||
|         raise EsphomeError(f"Unknown target platform: {CORE.target_platform}") |         raise EsphomeError(f"Unknown target platform: {CORE.target_platform}") | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,12 +10,12 @@ void __wrap_tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) { | |||||||
|  |  | ||||||
|   // DTR = false is counted as disconnected |   // DTR = false is counted as disconnected | ||||||
|   if (!dtr) { |   if (!dtr) { | ||||||
|     // touch2400 only with first CDC instance (Serial) |     // touch1200 only with first CDC instance (Serial) | ||||||
|     if (itf == 0) { |     if (itf == 0) { | ||||||
|       cdc_line_coding_t coding; |       cdc_line_coding_t coding; | ||||||
|       tud_cdc_get_line_coding(&coding); |       tud_cdc_get_line_coding(&coding); | ||||||
|  |  | ||||||
|       if (coding.bit_rate == 2400) { |       if (coding.bit_rate == 1200) { | ||||||
|         goto_dfu = true; |         goto_dfu = true; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -81,3 +81,6 @@ async def to_code(config): | |||||||
|     cg.add_platformio_option("platform", conf[CONF_PLATFORM_VERSION]) |     cg.add_platformio_option("platform", conf[CONF_PLATFORM_VERSION]) | ||||||
|     # make sure that firmware.zip is created |     # make sure that firmware.zip is created | ||||||
|     cg.add_platformio_option("board_upload.protocol", "nrfutil") |     cg.add_platformio_option("board_upload.protocol", "nrfutil") | ||||||
|  |     cg.add_platformio_option("board_upload.use_1200bps_touch", "true") | ||||||
|  |     cg.add_platformio_option("board_upload.require_upload_port", "true") | ||||||
|  |     cg.add_platformio_option("board_upload.wait_for_upload_port", "true") | ||||||
|   | |||||||
| @@ -23,6 +23,8 @@ void arch_init() { | |||||||
| } | } | ||||||
| void arch_feed_wdt() { /* TODO */ } | void arch_feed_wdt() { /* TODO */ } | ||||||
|  |  | ||||||
|  | void arch_restart() { /* TODO */ } | ||||||
|  |  | ||||||
| void nrf52GetMacAddr(uint8_t *mac) | void nrf52GetMacAddr(uint8_t *mac) | ||||||
| { | { | ||||||
|     const uint8_t *src = (const uint8_t *)NRF_FICR->DEVICEADDR; |     const uint8_t *src = (const uint8_t *)NRF_FICR->DEVICEADDR; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user