通过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);
相关文章:
通过python读取并发送二进制文件到串口
代码 #!python.exe """ filename send_bin.py brief According to the users input, read bin file, subpackage and send the file by UART. HowToUse send_bin.py -h author shadowThreeDgmail.com data 20220224 &q…...
前端笔记-day07
学成在线网站 文章目录 效果图代码展示index.htmlindex.cssbase.css 效果图 代码展示 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…...
【MySQL精通之路】INFORMATION_SCHEMA库-INNODB_METRICS表
INNODB_METRICS表提供了各种各样的INNODB性能信息,补充了INNODB性能模式表的特定重点领域。通过简单的查询,您可以检查系统的整体运行状况。通过更详细的查询,您可以诊断诸如性能瓶颈、资源短缺和应用程序问题等问题。 每个监视器表示InnoDB…...
React Native 之 定义全局状态管理库(九)
假设你正在使用基于单页面应用(SPA)的微前端框架。以下简化一个应用之间共享状态的例子。 1. 使用发布/订阅模式 // globalStateManager.js class GlobalStateManager { constructor() { this.subscribers {}; this.state {}; } subscribe(key…...
java线程池实战应用总结
一、线程池的创建方式 方式(一):通过构造函数ThreadPoolExecutor()方式创建线程池 步骤1:先构建线程池 public class AsyncTaskExecutor {/*** 核心线程数*/private static final int corePoolSize 10;/*** 最大线程数*/priva…...
部署 harbor 创建私有项目
一在 Docker harbor 节点(192.168.11.)上操作 1 关闭防火墙防护 systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 2 安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-ma…...
在Linux系统中解决Java生成海报文字乱码和缺少字体文件的问题
在Linux系统中,如果缺少特定的字体文件,可以通过以下几种方法来解决: 1. 安装系统字体包 大多数Linux发行版提供了各种字体包,可以通过包管理器安装这些字体包。例如,在Debian/Ubuntu系统上,可以使用以下命令安装常见的字体包: # 安装基本的字体包 sudo apt-get updat…...
升级版网创教程wordpress插件自动采集并发布
主要功能: wordpress 插件主题系列支持自动采集并发布。 主要采集: 福缘,中创,冒泡 自动采集各大项目网进行整合发布到自己个人网站 插件话更新,减少网络请求,提升稳定性 代码完美开源 傻瓜式操作,一…...
MySQL 视图(1)
常用视图语句 -- 创建视图 CREATE VIEW t1_view AS SELECT * FROM t1; CREATE VIEW v AS VALUES ROW(1,2);-- 查询视图 SELECT * FROM t1_view;-- 查询视图的相关系统视图 SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = test AND TABLE_NAME =…...
在排序数组中查找元素的一个位置和最后一个位置-力扣
第一此次想到的解法是首先使用二分查找在排序数组中查找到一个指定元素,随后对该元素左右进行遍历,找到起始位置和结束位置,代码如下: class Solution { public:vector<int> searchRange(vector<int>& nums, int…...
系统分析师-案例分析-数据库
系统分析师-案例分析-数据库 更多软考资料 https://ruankao.blog.csdn.net/ 文章目录 系统分析师-案例分析-数据库数据库考察知识点规范化函数依赖范式1NF2NF3NF 规范化问题不规范化反规范化设计反规范化设计同步问题 并发控制性能优化完整性约束视图安全分布式数据库特点优点…...
【RabbitMQ】使用SpringAMQP的消息队列(Hello Word)和工作队列(Work Queue)
SpringAMQP SpringAMQP中文文档 Hello Word **案例1:**利用SpringAMQP实现HelloWord中的集成消息队列功能 项目结构,如图: 1.引入AMQP依赖(父工程中) <!--AMQP依赖,包含RabbitMQ--> <dependen…...
项目集成SkyWalking,基于k8s搭建
一、搭建SkyWalking 官方文档(英文):skywalking/docs at master apache/skywalking 中文可以使用:GitHub - SkyAPM/document-cn-translation-of-skywalking: [已过期,请使用官网AI文档] The CN translation version of Apache…...
mysql-差异备份流程
4.差异备份流程 差异备份流程(重要) 第一次完整备份 innobackupex /xtrabackup innobackupex --userroot --password123456 /xtrabackup2024-05-23_20-25-05 第一次完整备份 2024-05-23_20-40-55 第二次差异备份 2024-05-23_20-47-37 第三次差异备份再往数据库里面…...
基于动态规划算法的DNA序列比对函数,给出两条序列(v和w)的打分矩阵
一.什么是动态规划算法 1.1总体思想 动态规划算法与分治法类似,基本思想也是将待求解的问题分成若干个子问题 经过分解得到的子问题往往不是互相独立的,有些子问题被重复计算多次 如果能够保存已解决的子问题答案,在需要时再找出来已求得…...
Tailwind CSS快速入门
文章目录 初识安装Tailwindcss试用安装快速书写技巧扩展好处Todo 初识 只需书写 HTML 代码,无需书写 CSS,即可快速构建美观的网站 Tailwind CSS 是一个功能类优先的 CSS 框架,它通过提供大量的原子类(utility classes)…...
Postman使用技巧
Postman是一款广泛使用的API开发和测试工具,专为简化Web服务API的开发、测试、文档编制和协作过程而设计。它支持各种HTTP请求方法,包括GET、POST、PUT、DELETE等,允许用户轻松地构建和发送请求,以及检查响应。 本文介绍几个提升效…...
sqli-labs靶场
less---11 1.求闭合字符 输入1报错说明存在注入点 存在注入点 2.查库名 使用报错注入查库名 admin” and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)y)# //floor函数报错 3.查表名 admin and upd…...
基于springboot的大创管理系统
摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了大创管理系统的开发全过程。通过分析大创管理系统管理的不足,创建了一个计算机管理大创管理系统的方案。文章介绍了大创管理系统的系统分析部分&…...
常用torch.nn
目录 一、torch.nn和torch.nn.functional二、nn.Linear三、nn.Embedding四、nn.Identity五、Pytorch非线性激活函数六、nn.Conv2d七、nn.Sequential八、nn.ModuleList九、torch.outer torch.cat 一、torch.nn和torch.nn.functional Pytorch中torch.nn和torch.nn.functional的区…...
League Akari:英雄联盟玩家的终极效率工具集,免费提升游戏体验
League Akari:英雄联盟玩家的终极效率工具集,免费提升游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit …...
指尖藏趣,抽享惊喜——扭蛋机抽赏盲盒小程序前端功能详解
抽赏盲盒所带来的未知惊喜与收集乐趣,深受不同年龄段用户的喜爱,扭蛋机抽赏盲盒小程序则打破线下场景限制,让这份乐趣随时可及。该小程序前端功能以“简约操作、趣味体验”为核心,聚焦用户可直接操作的功能板块,简化流…...
Mac能够连接校园网,但是无法上网
Mac电脑能够正常连接校园网,但是无法上网解决步骤:打开系统设置,网络,WI-FI,DNS把现有的删掉重置它。原因分析:应该是在使用代理时、访问什么网站被自动篡改了 DNS 设置,导致连接的 DNS 无法解析…...
【Linux信号】Linux进程信号(上):信号产生方式和闹钟
🎬 个人主页:艾莉丝努力练剑❄专栏传送门:《C语言》《数据结构与算法》《C/C干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》⭐️为天地立心,为生民立命…...
OpenClaw故障自愈方案:Qwen3-32B镜像异常重启监控
OpenClaw故障自愈方案:Qwen3-32B镜像异常重启监控 1. 问题背景与解决思路 上周我的OpenClaw自动化助手突然"罢工"了——原本应该定时执行的日报生成任务没有按时完成。排查后发现是底层Qwen3-32B模型服务因OOM异常退出。这种情况在长期运行的AI服务中并…...
物理海洋学入门:从海浪到海流,一文搞懂海水运动的7种形式
物理海洋学入门:从海浪到海流,一文搞懂海水运动的7种形式 海洋覆盖了地球71%的表面积,这片蔚蓝的水域从未停止过运动。当我们站在海边,看着潮起潮落、浪花拍岸,或许会好奇:这些看似简单的海水运动背后&…...
基于springboot图书综合服务平台设计与开发(源码+精品论文+答辩PPT等资料)
博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...
OpenClaw对接GLM-4.7-Flash:模型版本管理指南
OpenClaw对接GLM-4.7-Flash:模型版本管理指南 1. 为什么需要关注模型版本管理 上周我在调试一个自动化文档处理流程时,遇到了一个奇怪的现象:同样的OpenClaw脚本,前一天还能完美运行的文档摘要功能,第二天突然开始输…...
SpeedyStepper Forked:嵌入式步进电机硬实时控制库解析
1. SpeedyStepper Forked:面向嵌入式实时控制的高性能步进电机驱动库深度解析1.1 库定位与工程价值SpeedyStepper Forked 是一个专为嵌入式平台(尤其是基于Arduino生态的MCU)设计的轻量级、高精度步进电机运动控制库。其核心目标并非提供图形…...
springboot框架-美妆化妆品商城进货系统
目录系统架构设计技术选型与依赖数据库设计核心功能实现库存预警机制前端交互建议测试与部署扩展性考虑项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作系统架构设计 采用SpringBoot MyBatis-Plus MySQL构建后端,…...
