import { ipcMain } from 'electron' import { execFile } from 'child_process' const ESP32_RELATIVE_PATH = process.env.NODE_ENV === 'development' ? './public/esp32/' : './esp32/' ipcMain.on('BURN', (event, {selectedPort, selectedFilePath, errsum, sucsum}) => { // event.reply('CLEAN_MSG') execFile(ESP32_RELATIVE_PATH + 'esptool.exe', ['--chip', 'esp32', '--port', selectedPort, '--baud', '921600', '--before', 'default_reset', '--after', 'hard_reset', 'write_flash', '-z', '--flash_mode', 'dio', '--flash_freq', '80m', '--flash_size', 'detect', '0xe000', ESP32_RELATIVE_PATH + 'boot_app0.bin', '0x1000', ESP32_RELATIVE_PATH + 'bootloader.bin', '0x10000', selectedFilePath, '0x8000', ESP32_RELATIVE_PATH + 'partitions.bin'], (error, stdout, stderr) => { if (error) { console.log('-----------------------------') console.error(error); console.log('-----------------------------') let errmsg let errget = /A fatal error occurred/ let porterr = /Failed to open port/ let pererr = /Permission denied/ let wrong = /SerialException: Cannot configure port, something went wrong. Original message: OSError/ if(errget.test(stdout)){ console.log('错误') let timeout = /Timed out waiting for packet header/ let nodata = /No serial data received/ let noise = /Possible serial noise or corruption/ let flash = /Failed to write compressed data to flash/ let md5err = /MD5 of file does not match data in flash/ let chiperr = /This chip is ESP32-S2 not ESP32. Wrong --chip argument/ if(timeout.test(stdout)){ console.log('esp32模组未正常进入下载模式或串口被占用') errmsg = '请检查串口调试助手工具查看是否有进入下载模式的打印或关闭串口后重新烧录' }else if(nodata.test(stdout)){ console.log('TX、RX引脚未连接或usb转串口工具硬件存在问题') errmsg = '请检查串口引脚连接是否正常或更换usb转串口工具后重新烧录' }else if(noise.test(stdout)){ console.log('usb电缆错误或开发板spi flash 引脚短路或电压不稳定') errmsg = '请尝试更换usb电缆、更换模组、更换开发板或更换稳压电源后重新烧录' }else if(flash.test(stdout)){ console.log('flah参数问题') errmsg = '请确保电源稳定、以及串口连接无异常,重试下载烧录程序后重新烧录' }else if(md5err.test(stdout)){ console.log('flash损坏或引脚焊接问题') errmsg = 'MD5文件与flash中的数据不匹配,请重试烧录' }else if(chiperr.test(stdout)){ console.log('串口连接的设备不是烧录设备') errmsg = '请确认串口连接的是烧录设备后重新烧录' } }else if(porterr.test(stdout)){ console.log('没有串口权限') errmsg = '请提升用户权限后重新烧录' }else if(pererr.test(stdout)){ console.log('串口被占用') errmsg = '请检查串口调试助手工具关闭串口后重新烧录' }else if(wrong.test(error)){ console.log('无法配置串口') errmsg = '请确保烧录设备已正确连接到计算机并检查串口配置后重新烧录' }else{ console.log('未知错误') errmsg = '未知错误,请重新烧录' } // event.reply('ALERT_MSG', errmsg) event.reply('ERR_SUM', errsum+1) // event.reply('APPEND_MSG', error.stack) console.log('-----------------------------') console.log(stdout); console.log('-----------------------------') // event.reply('APPEND_MSG', stdout) event.reply('APPEND_MSG', selectedPort + '烧录失败' + '\n' + error.stack + stdout) event.reply('FAILED_RESULT', selectedPort) event.reply('BURN_END') }else{ console.log('-----------------------------') console.log(stdout); console.log('-----------------------------') // event.reply('ALERT_MSG', '烧录成功!') event.reply('SUC_SUM', sucsum+1) // event.reply('APPEND_MSG', stdout) event.reply('APPEND_MSG', selectedPort + '烧录成功') event.reply('SUC_RESULT', selectedPort) event.reply('BURN_END') } }); })