当前位置: 首页 > news >正文

HNU工训--计算机串口数据收发与测量

本文参考:HNU-电子测试平台与工具2-串口实验5次_湖南大学学习通电子测试平台-CSDN博客 

 甘青学长就是强

一、实验目的

1、了解Linux下io函数read、write和epoll等

2、熟练处理流式通信数据

二、实验过程

1、向STC单片机下载下面的程序

下载程序后,单片机将使用1200波特率发送自身序列号,格式同上一节课(4.3节内容)相同。请记录下该序列号。

(1)判断有没有连接串口

(2)打开程序文件

(3)下载/编程

(4)找到串口助手

(5)打开串口,接受缓冲区就会输出序列号,从AA55到AA55是一个完整的序列号

2、向串口写入自己的学号,格式为

    0xAA 0x55 十二位学号数字

例如学号20220110203,应该通过串口发送以下数据

    AA 55 02 00 02 02 00 01 01 01 00 02 00 03

(1)发送缓冲区输入AA 55 + 自己的学号

(2)打开串口

(3)点击发送数据

这时候接收缓冲区就会输出一串新密码

我这里接收到的是 E4 88 D5 16

3、解析密码

  1. STC单片机接收到学号后会发送第一串密码,密码长度为4字节。请将解析出该串密码并原样发回给串口。STC单片机收到返回后会继续发送下一串密码,请继续解析出该串密码并原样发回给串口。以此往复,将收到的最后一串密码记录下来。

首先在主机里重新执行第一步,重新下载程序到板子里,注意不需要把学号发送到串口,这是关键,再次下板子就是为了清除之前发送学号的影响。然后打开虚拟机

打开虚拟机选项,找到可移动设备, 如果板子还插在电脑上应该可以看到:Qing Heng USB2.0-Serial的选项,打开这个选项,点击连接,板子就从电脑主机连接到虚拟机了

打开终端:

ls /dev/tty*

找到 USB名字

我这里是ttyUSB0

 修改python代码里的串口名字为 /dev/ttyUSB0

 python代码如下:

import serial.tools.list_ports
# 字符串转字符串
def b2s(data):return ''.join([f'{ch:0>2x}' for ch in data]).upper()
# 连接设备
ser = serial.Serial("/dev/ttyUSB6", 1200)
# 判断是否连接到设备
assert (ser != None)
# 输入学号
studentID = input("学号:")
# 判断学号是否正确
assert (studentID.isdigit() and len(studentID) == 12)
# 读入序列号
number = b2s(ser.read(13))
# 断言魔数为AA55
assert (number[:4] == "AA55")
# 取出序列号
number = number[4:]
assert (len(number) == 11 * 2)
print(f'序列号:{number}')
# 使用学号构造即将发送的字节数据
startData = b'\xaa\x55' + bytes([ord(ch) - ord('0') for ch in studentID])
# 写入设备
ser.write(startData)
password = b''  # 读到的密码
i = 0  # 循环次数
# 开启永真循环,直到ctrl+c被按下
while i < 270:# 读1位,探测魔数t = b2s(ser.read(1))# 第一个魔数应该是AAif t != "AA":continue# 再读一位t = b2s(ser.read(1))# 第二个魔数应该是55if t != "55":continue# 判断魔数后可以放心读取数据# 读入密码开始位置的索引index = list(ser.read(1))[0]# 若索引大于4,则表明中间有无关字节,吸收掉无关字节if index - 4 > 0:ser.read(index - 4)# 读入四字节的密码password = ser.read(4)print(f'[{i}]密码:{b2s(password)}')# 使用这次读到的密码构造数据,发送给设备以读取下一次的密码ser.write(b'\xaa\x55' + password)i += 1

 执行python程序

在终端进入文件目录,执行

sudo python3 py.py # py.py 第一个py是文件名,,第二个py是文件后缀

如果你遇到下面问题,恭喜遇到问题,缺少名字叫做serial的模块 

解决方法也很简单,下载一个就行了,你可以执行下面的命令 

sudo apt install python3-serial

但是如果你下载成功之后再次输入sudo python3 py.py运行程序 发现还是报这个错,告诉你缺少serial模块怎么办,那我问你?

查阅资料发现:出现这种情况不是你serial模块有问题,而是你的系统里面有两个python,一个是ubuntu系统自带的,另一个是你自己下载的(估计是操作系统实验一惹的祸),你可以通过如下命令查看python3的指向

ls -l $(which python3)

 如果发现python3指向/usr/local/bin/python3,恭喜你,确实是因为你下载了两个python,因为ubuntu系统自带的python在目录/usr/bin/python3里面

 解决方法有两个:

  • 删除自己下载的python3
ls -l /usr/local/bin/python*
sudo rm /usr/local/bin/python*
  • 添加软连接(强力推荐)
sudo rm /usr/bin/python   # 删除旧的软链接(谨慎!)
sudo ln -s /usr/bin/python3 /usr/bin/python # 添加新链接

添加完后, 你就可以使用sudo python py.py来执行程序

当然,聪明的你可能会想到把python改的简单点,比如py

# sudo rm /usr/bin/python   # 这里你可以删除旧链接也可以选择不删,并不影响py命令
sudo ln -s /usr/bin/python3 /usr/bin/py # 添加新链接

 接下来就是运行

观察得知:第256次(第0次不是密码,那是串口上次保存的信息)得到不变的密码:AE3035A5 

告诉大家一个冷知识,当终端一直输出,你想结束终端的输出时,你可以键盘输入ctrl + z

4、将学号、序列号、最后一串密码发送到课程后台

上送命令语法为

curl "132.232.98.70:6363/checkSecret?id=学号&v=序列号&s=密码"

序列号是AA55A01D55387576E3A83034A5(记得删掉AA55),学号是202308040106,最后一串密码为AE3035A5,那么上报结果命令为:

curl "132.232.98.70:6363/checkSecret?id=202308040106&v=A01D55387576E3A83034A5&s=AE3035A5"

注意不要有空格,有空格输出是0

http://www.xdnf.cn/news/475669.html

相关文章:

  • 安科瑞AcrelEMS3.0企业微电网智慧能源平台-安科瑞 蒋静
  • .NET Core liunx二进制文件安装
  • 22、能源监控与优化 - 数据中心模拟 - /能源管理组件/data-center-energy-monitoring
  • CSS面试题汇总
  • 中文分词与数据可视化02
  • 接触感知 钳位电路分析
  • [模型部署] 3. 性能优化
  • 我的 PDF 工具箱:CodeBuddy 打造 PDFMagician 的全过程记录
  • Java 并发编程归纳总结(可重入锁 | JMM | synchronized 实现原理)
  • 【LeetCode 热题 100】动态规划 系列
  • 从 Vue3 回望 Vue2:生命周期的清晰化——从混乱钩子到明确时机
  • 2025年渗透测试面试题总结-安恒[实习]安全服务工程师(题目+回答)
  • git克隆github项目到本地的三种方式
  • Vue百日学习计划Day16-18天详细计划-Gemini版
  • matlab建立整车模型,求汽车的平顺性
  • 【Golang笔记01】Goland基础语法规则
  • Leaflet 自定义瓦片地图与 PHP 大图切图算法 解决大图没办法在浏览器显示的问题
  • 容器编排利器-k8s入门指南
  • 移植RTOS,发现任务栈溢出怎么办?
  • 哪个品牌的智能对讲机好用?推荐1款,能扛事更智能
  • MySQL基础
  • Jenkins教程
  • 2025云智算技术白皮书
  • 青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块
  • rust语言,与c,go语言一样也是编译成二进制文件吗?
  • Claude Prompt-Caching 方案调研
  • 6 任务路由与负载均衡
  • 【MySQL】索引太多会怎样?
  • apisix透传客户端真实IP(real-ip插件)
  • 【计算机网络】HTTP/1.0,HTTP/1.1,HTTP/2,HTTP/3汇总讲解,清晰表格整理面试重点对比