紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
[FishBot]Windows/Linux下无界面下烧录和配置FishBot教程
-
很多小伙伴使用虚拟机进行主控板和雷达板烧录和配置都遇到了通讯异常等问题,小鱼就做了windows或mac版本的烧录工具,工具比较简陋,但是功能都有,使用方法如下:
首先以管理员的权限打开Powershell
1. 安装 Python
Windows 输入下面这句话
wget -O C:\Python_setup.exe https://www.python.org/ftp/python/3.11.0/python-3.11.0rc1.exe ;cmd /c C:\Python_setup.exe /quiet TargetDir=C:\Python311 InstallAllUsers=1 PrependPath=1 Include_test=0
Linux-Ubuntu 下输入下面这句话
sudo apt install python3-pip
2. 安装依赖库
pip install pyserial esptool
3.运行脚本
新建文件 download.py
复制粘贴如下内容
import serial #导入模块 import serial.tools.list_ports import os import sys import requests import time def check_installation(package_name): try: __import__(package_name) print(f'{package_name} 已安装') return True except ImportError: print(f'{package_name} 未安装') return False def install_package(package_name): print(f'请使用: pip install {package_name} 安装 {package_name}') def list_serial_ports(): port_list = list(serial.tools.list_ports.comports()) if len(port_list) == 0: print('无可用串口,请插入串口设备') return False else: print('当前可用串口有:') for i in range(0,len(port_list)): print(port_list[i].name) return True def download_firmware(firmware_path): print('将测到固件在HTTP路径上,开始下载') response = requests.get(firmware_path, stream=True) response.raise_for_status() filename = os.path.basename(firmware_path) with open(filename, 'wb') as file: for chunk in response.iter_content(chunk_size=1024): if chunk: file.write(chunk) print(f'下载完成:{filename}') return filename def flash_firmware(): firmware_path = 'firmware.bin' while not os.path.exists(firmware_path): print(f"提示:{firmware_path}固件文件不存在,请重新输入") firmware_path = input("请输入固件文件路径(可以是网址): ") if firmware_path.startswith('http'): firmware_path = download_firmware(firmware_path) while list_serial_ports()==False: time.sleep(1) port = input("请输入要烧录的串口设备名称: ") flash_command = f'esptool.py --port {port} write_flash 0x00000 {firmware_path}' os.system(flash_command) def config_board(key: str, value: str, port='/dev/ttyUSB0', baudrate=115200): try: ser = serial.Serial(port, baudrate) except: return {"error": "串口打开异常,请检查设备是否被占用"} config_str = f"${key}={value}\n".encode() print(f"发送 {str(config_str)} 到 {ser.port}") ser.write(config_str) start_time_timeout = time.time() recv_avaliable_data = False while (time.time()-start_time_timeout < 5) and (not recv_avaliable_data): print("开始接收...") try: recv = ser.read_all().decode() print(f"尝试接收..{recv}") time.sleep(0.5) if len(recv) > 0: print(f"接收到有效数据 :{recv}") recv_avaliable_data = True except Exception as e: print(e) if len(recv) == 0: return {"error": "串口数据异常,请确认设备在配置模式"} result = {} lines = recv.splitlines() for line in lines: if len(line) > 0 and line[0] == '$': split_result = line[1:].split("=") if len(split_result) == 2: result[split_result[0]] = split_result[1] ser.close() if len(result) == 0: return {"error": "串口数据异常,请确认设备在配置模式"} return result def restart_device_bt_rst(port): try: ser = serial.Serial(port, baudrate=74880) ser.setRTS(False) ser.setDTR(False) time.sleep(0.2) ser.setRTS(True) ser.setDTR(True) time.sleep(0.2) time.sleep(0.1) return "[提示]发送RTS成功!" except Exception as e: ser.close() print(e) return {"error": "串口打开异常,请检查设备是否被占用"} def print_help(): print("使用方法:") print(" python download.py list_port - 列出可用的串口") print(" python download.py flash - 下载固件") print(" python download.py read_config COMX - 读取配置,COMX替换为设备编号") print(" python download.py config name value - 设置配置项") print(" python download.py - 打印帮助信息") def main(): # required_packages = ['esptool', 'pyserial'] # for package in required_packages: # if not check_installation(package): # install_package(package) if len(sys.argv) == 1: print_help() elif sys.argv[1] == 'list_port': list_serial_ports() elif sys.argv[1] == 'flash': flash_firmware() elif sys.argv[1] == 'read_config': if len(sys.argv)!=3: print('请在read_config后添加你要读取的设备串口号') return all_configs = config_board("command", "read_config", port=sys.argv[2], baudrate=115200) print(all_configs) elif sys.argv[1] == 'config': if len(sys.argv)!=5: print('请在config后添加你的:设备号 配置项 配置值') return result = config_board(sys.argv[3], sys.argv[4], port=sys.argv[2], baudrate=115200) print(result) else: print("未知的命令") print_help() if __name__ == "__main__": main()
根据脚本提示下载和配置即可
-
-
-
@小鱼 请问,我出现了下载了esptool但是在下载固件时找不着的问题
-
@515261725 windows使用的一个常见问题,安装的这个路径不在path中:
所以会找不到,想办法把安装目录加到path中,或者激活coonda试试
-
-