通过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;反序列化命令执行…

【退役之重学Java】关于 Ribbon

一、负载均衡 Nginx 和 Ribbon 都能做负载均衡&#xff0c;区别在哪儿&#xff1f; Nginx 负责服务器负载均衡Ribbon 负责本地负载均衡 Nginx 是服务器负载均衡&#xff0c;客户端所有请求都会交给 Nginx&#xff0c;然后由 Nginx 实现转发请求。即负载均衡是由服务端实现的 Ri…

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

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

C++纯文字解谜游戏

1.前言 Hello,我是老六工作室,今天我们搞一个C++纯文字解谜游戏,后面有代码与解析。 感谢支持,点赞鼓励一下,谢谢! 2.代码时间 #include<iostream> #include<windows.h> #include<conio.h> int power=0,light=0; using namespace std; int main() …

C4.5算法【python,算法,机器学习】

优点 可以处理缺失值。特征只能使用一次。可以剪枝&#xff0c;可以避免过拟合问题。 缺点 不适合大数据集的训练&#xff0c;因为受内存大小影响。 计算流程 对于单个特征 A, 我们做如下假设&#xff1a; 有两个判断值yes和no, 概率分别为 p y p_y py​和 p n p_n pn​。…

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

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

记录:mac pro 16-inch,2019安装ubuntu双系统

需要的装备&#xff1a;u盘&#xff0c;扩展坞、有线键鼠、ext4硬盘 目的&#xff1a;编译aosp 11 1、首先是参照如下文章&#xff0c;分配空间&#xff0c;制作启动盘&#xff08;测试ubuntu20.04不行&#xff0c;ubuntu22.04正常&#xff09; https://blog.csdn.net/LBSGKD…

天堂W游戏内核驱动保护简单分析(五)

NP 双机调试分析 1. 调用了NtQuerySystemInformation(SystemKernelDebuggerInformation) 来检测os是否是调试模式的进程 PROCESS ffff920744e6c300 SessionId: 1 Cid: 1a34 Peb: bc82205000 ParentCid: 111c DirBase: 23c33c000 ObjectTable: ffffa9…

【Linux】:进程切换

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

PMP考试做对多少题才算及格?

2024年6月PMP考试即将来临&#xff0c;考生除了要复习好考试内容&#xff0c;也要提前了解考试后的成绩查询问题。顺利通过PMP考试是所有参加PMP认证考试考生的目标&#xff0c;那么2024年6月PMP考试怎么才算通过呢&#xff1f; PMP考试改版后试卷总共180道单选题多选题(改版前…

【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 傅里叶变换…

新人学习笔记之(变量)

一、变量概述 1.什么是变量 &#xff08;1&#xff09;白话&#xff1a;变量就是一个装东西的盒子 &#xff08;2&#xff09;通俗&#xff1a;变量是用于存放数据的容器。我们通过变量获取数据&#xff0c;甚至数据可以修改 2.变量在内存中的储存 &#xff08;1&#xff09;本…

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

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

目标检测YOLO实战应用案例100讲-【目标检测】机器视觉(五)

目录 算法原理 机器视觉硬件技术 一、镜头技术 二、摄像机技术 三、图像采集卡(Image Captu

二叉树的递归实现及例题

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

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

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