通过python读取并发送二进制文件到串口

代码

#!python.exe
"""
@filename       send_bin.py
@brief          According to the user's input, read bin file, subpackage and send the file by UART.
@HowToUse       send_bin.py -h
@author         shadowThreeD@gmail.com
@data           20220224
"""
from asyncio.windows_events import NULL
from importlib.metadata import files
from socket import timeout
import sys
import os
from time import sleep
import serial
import crcmodglobal fileName;
global fileSize;
global pkgSize;
global needAck;
global pkgInterval;def main(argv):global fileName;        # 将需要使用的 global 变量引入,不然默认使用局部变量,即使变量名相同global fileSize;global pkgSize;global needAck;global pkgInterval;checkParams(argv);crc32_func = crcmod.mkCrcFun(0x18005, rev=True, initCrc=0, xorOut=0x0000)try:pFile = open(fileName, "rb");#tempFile = open("temp.bin", "wb");except:print('bin file read error...');port = 'COM3';baudRate = 115200;try:com = serial.Serial(port, baudRate, timeout=2);     # 设置超时时间为 5sexcept:print(port + ' open failed...');sys.exit();else:print(port + ' open succ, baudrate is ' + str(baudRate));# 发送字符串#subFile = "ABCD\r\n".encode();      # 将 str 编码成 Bytes#com.write(subFile);#print(com.read_until(b'\r\n').decode());    # 将 Bytes 解码成 str# 发送二进制indexFile = 0;isEnd = 0;curPkgSize = pkgSize-4;MAC_addr = bytes([0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]);      # start and MACwhile isEnd == 0 :if indexFile != 0:subFile = pFile.read(pkgSize-4);curPkgSize = len(subFile);if curPkgSize != pkgSize-4 :isEnd = 1;print('curPkgSize: ' + str(curPkgSize));curSend = MAC_addr;         # start + MACif indexFile == 0:CRC_part = int(14).to_bytes(4, 'little');       # RS485 Lengthelse:CRC_part = (curPkgSize+10).to_bytes(4, 'little');       #CRC_part += int(5).to_bytes(1, 'little');               # Msg type:CRC_part += int(4).to_bytes(1, 'little');               # Sensor type: NTCCRC_part += indexFile.to_bytes(2, 'little');            # pkg IDif indexFile == 0:CRC_part += (4<<2 | needAck<<1 | isEnd).to_bytes(2, 'little');      # 4 is sizeof(uint32_t) for fileSize lengthCRC_part += fileSize.to_bytes(4, 'little');else:CRC_part += (curPkgSize<<2 | needAck<<1 | isEnd).to_bytes(2, 'little');CRC_part += subFile;curSend += CRC_part;     curSend += crc32_func(CRC_part).to_bytes(2, 'big');print(curSend.hex());com.write(curSend);curRecv = com.read_until(b'\r\n');#if curRecv is not NULL:if len(curRecv) == 20 and curRecv[17] == 0:print(curRecv.decode());indexFile += 1;else:print(len(curRecv));#tempFile.write(curSend);pFile.close();#tempFile.close();return;def checkParams(argv):global fileName;global fileSize;global pkgSize;global needAck;global pkgInterval;try:fileName = argv[1];if fileName == '-h':showHelp();raise SystemExit;         # 导致程序触发 SystemExit 异常。这里也可以用 sys.exit();pkgSize = int(argv[2]);if argv[3] != '1':needAck = 0;pkgInterval = int(argv[4]);else:needAck = 1;except SystemExit:sys.exit();except:print('Params error...');showHelp();sys.exit();else:fileSize = os.path.getsize(fileName);print('fileName:    ' + fileName);print('fileSize:    ' + str(fileSize));print('pkgSize:     ' + str(pkgSize));print('needAck:     ' + str(needAck));if needAck == 'false':print('pkgInterval: ' + str(pkgInterval));return;def showHelp():print("""Usage:1. send_bin.py test.bin 1500 12. send_bin.py test.bin 1500 0 1000- test.bin:     the file name of bin file.- 1500:         is the package size, unit in Bytes.- 0:            whether need ack after send eack package; 1 meaning need, 0 meaning NO need.- 1000:         if last param is true, this is ignored; otherwise meaning the interval of two package, unit in ms.""");return;if __name__ == "__main__":main(sys.argv);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulhub——ActiveMQ漏洞

文章目录 一、CVE-2015-5254(反序列化漏洞)二、CVE-2016-3088&#xff08;任意文件写入漏洞&#xff09;2.1 漏洞原理2.2 写入webshell2.3 写入crontab 三、CVE-2022-41678&#xff08;远程代码执行漏洞&#xff09;方法一方法2 四、CVE-2023-46604&#xff08;反序列化命令执行…

升级版网创教程wordpress插件自动采集并发布

主要功能&#xff1a; wordpress 插件主题系列支持自动采集并发布。 主要采集: 福缘&#xff0c;中创&#xff0c;冒泡 自动采集各大项目网进行整合发布到自己个人网站 插件话更新&#xff0c;减少网络请求&#xff0c;提升稳定性 代码完美开源 傻瓜式操作&#xff0c;一…

【MySQL】MySQL的安装和基本概念

MySQL的安装和基本概念 一、环境安装1、环境及配置2、下载安装 二、基本概念1、主流数据库2、mysql和mysqld的区别和概念&#xff08;1&#xff09;概念1&#xff1a;了解CS结构&#xff08;2&#xff09;概念2&#xff1a;数据库指的是什么&#xff08;3&#xff09;概念3&…

【Linux】:进程切换

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux进程切换的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精…

【AI副业教程】日赚5000+涨粉3000,自媒体新玩法!

​StartAI是一款专为设计师打造的基于Photoshop的AI工具&#xff0c;它提供了一系列强大的AI功能如&#xff1a;文生图、生成相似图、线稿上色、无损放大、局部重绘、扩图、艺术融合、提示词、智能擦除、风格选择等。https://www.istarry.com.cn/?sfromHGtsRq 你们能想象吗&a…

【Android安全】AOSP版本对应编号| AOSP版本适配Pixel或Nexus型号 | 驱动脚本下载地址

AOSP版本对应编号 https://source.android.com/docs/setup/about/build-numbers?hlzh-cn#source-code-tags-and-builds 例如android-8.1.0_r1 对应的编号是OPM1.171019.011 可以适配Pixel 2 XL AOSP驱动脚本下载 编译AOSP时&#xff0c;需要Google的驱动&#xff0c;后面才…

【分享】3种方法取消PPT的“限制保护”

PPT如果设置了有密码的“只读方式”&#xff0c;每次打开PPT&#xff0c;都会出现对话框&#xff0c;提示需要输入密码才能修改文件&#xff0c;否则只能以“只读方式”打开。 以“只读方式”打开的PPT就会被限制&#xff0c;无法进行编辑修改等操作。那如果后续不需要“限制保…

SpringBoot+layuimini实现角色权限菜单增删改查(layui扩展组件 dtree)

角色菜单 相关组件方法效果图代码实现资源菜单树组件实现权限树方法js这里我先主要实现权限树的整体实现方法&#xff0c;如果是直接查看使用的话可以只看这里&#xff01; 后端代码Controlle层代码Service代码及实现类代码Service代码ServiceImpl代码 resourceMapper 代码role…

从零开始傅里叶变换

从零开始傅里叶变换 1 Overview2 傅里叶级数2.1 基向量2.2 三角函数系表示 f ( t ) f(t) f(t)2.2.1 三角函数系的正交性2.2.2 三角函数系的系数 2.3 复指数函数系表示 f ( t ) f(t) f(t)2.3.1 复指数函数系的系数2.3.2 复指数函数系的正交性 2.4 傅里叶级数总结 3 傅里叶变换…

如何将手机中的音乐转移到 SD 卡上?轻松传输音乐

概括 如何将音乐从手机转移到 SD 卡&#xff1f;我们的智能手机可以充当个人点唱机&#xff0c;因此有效管理我们的音乐库变得至关重要。无论您是存储空间不足还是只是想整理您的音乐收藏&#xff0c;将音乐从手机传输到 SD 卡都是一个实用的解决方案。 在本指南中&#xff0…

二叉树的递归实现及例题

目录 遍历方式 示例 原理 前序遍历示例 二叉树的节点个数 原理 层序遍历 原理 这样做的目的是 判断完全二叉树 例题 ​编辑 思路 代码 遍历方式 二叉树的遍历方式可分为&#xff1a; 前序遍历&#xff1a;先访问根&#xff0c;访问左子树&#xff0c;在访问右子…

浏览器的下载行为基本原理

浏览器解析 在使用浏览器访问某些资源时&#xff0c;有些资源是直接下载有些资源是直接打开。例如前端的html&#xff0c;xml&#xff0c;css&#xff0c;图片等资源都是直接打开&#xff0c;而txt&#xff0c;excel等文件是直接下载。那么如何控制访问一个资源时是下载文件还…

App Inventor 2 如何接入ChatGPT:国内访问OpenAI的最佳方式

如何接入OpenAI 由于国内无法访问OpenAI&#xff0c;KX上网可选大陆及香港&#xff08;被屏蔽&#xff09;以外才行。因此对于大多数人来说&#xff0c;想体验或使用ChatGPT就不太便利&#xff0c;不过App Inventor 2 为我们提供了相对便利的一种方式&#xff0c;即“试验性质…

C# run Node.js

C# run nodejs Inter-Process Communication&#xff0c;IPC Process类 启动Node.js进程&#xff0c;通过标准输入输出与其进行通信。 // n.js// 监听来自标准输入的消息 process.stdin.on(data, function (data) {// 收到消息后&#xff0c;在控制台输出并回复消息console.l…

连锁服装门店补货一般怎样的流程

连锁服装门店的补货流程通常包括以下四个关键步骤&#xff1a; 分析销售数据和库存情况 首先&#xff0c;连锁服装门店需要定期分析销售数据和库存情况。通过销售数据可以了解各款商品的销售情况、热销款式和滞销款式等信息。同时&#xff0c;需要检查每个门店的库存情况&…

06Django项目--用户管理系统--新增

对应视频链接点击直达 06Django项目--用户管理系统--新增 对应视频链接点击直达模块构思a&#xff0c;用户信息的构成&#xff08;表结构设计&#xff09;b&#xff0c;models里面的设计 用户新增页面设计a&#xff0c;先在模版里面选一个新增的样式b&#xff0c;然后删除该页面…

win32-鼠标消息、键盘消息、计时器消息、菜单资源

承接前文&#xff1a; win32窗口编程windows 开发基础win32-注册窗口类、创建窗口win32-显示窗口、消息循环、消息队列 本文目录 键盘消息键盘消息的分类WM_CHAR 字符消息 鼠标消息鼠标消息附带信息 定时器消息 WM_TIMER创建销毁定时器 菜单资源资源相关菜单资源使用命令消息的…

网络原理3

运营商路由器&#xff0c;也可以把它当做一个NAT设备它就会对中间经过的数据包&#xff0c;进行网络地址转换当内网设备经过运营商路由器访问外网的时候就会把IP数据包中的源ip&#xff0c;替换成它自己的ip. 我的电脑要发送一个数据给cctalk服务器此时&#xff0c;我的电脑上就…

论文精读--InstructGPT

模型效果取决于数据效果&#xff0c;但在精细度上控制不够&#xff0c;只是大力出奇迹&#xff0c;这样有很大的问题&#xff1a; &#xff08;1&#xff09;数据量太多或者没有这方面的数据&#xff0c;模型学不会怎么办 &#xff08;2&#xff09;安全性问题&#xff0c;模…

大模型的实践应用24-LLaMA-Factory微调通义千问qwen1.5-1.8B模型的实例

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用24-LLaMA-Factory微调通义千问qwen1.5-1.8B模型的实例, LLaMA-Factory是一个专门用于大语言模型微调的框架,它支持多种微调方法,如LoRA、QLoRA等,并提供了丰富的数据集和预训练模型,便于用户进行模型微调。通义千问…