实验环境

(1)硬件环境

人工智能实训平台:具备串口通信功能的实验设备
警报器设备:支持闪光和声音报警功能的硬件设备
串口连接线:用于连接计算机与警报器设备的通信线缆
计算机:安装有Windows系统,用于运行控制程序和虚拟机

(2)软件环境

Vmware虚拟环境:用于运行Ubuntu系统的虚拟化平台
Python 3.x 环境:支持串口通信库运行的编程语言环境
pyserial库:用于Python串口通信的第三方库
设备管理器:Windows系统自带的硬件管理工具,用于查看串口号

实验步骤

说明:本实验通过解析源码文件夹下的alarm.py文件,学习警报器的串口通信控制方法。以下是具体步骤和代码解析。

1. 导入必要的模块

import serial
import time

说明:serial模块提供串口通信功能,time模块用于处理时间相关操作。

2. 配置串口号

SERIAL_PORT1 = 'COM3'
SERIAL_PORT2 = 'COM4'

说明:定义两个串口号,分别对应不同的警报器设备,实际使用时需根据电脑端口进行修改。

3. 打开两个串口

ser1 = serial.Serial(SERIAL_PORT1, 9600, timeout=0.5)
ser2 = serial.Serial(SERIAL_PORT2, 9600, timeout=0.5)

参数说明:

  • 第一个参数:串口号(如'COM3')
  • 第二个参数:波特率(9600,需与设备保持一致)
  • 第三个参数:超时时间(0.5秒,读取数据时的超时设置)

4. 定义控制指令

LIGHT_BUZZ1="0110001A000101CE18"   # 闪光+声音1
LIGHT_BUZZ2="0110001A0001040E1B"   # 闪光+声音2
LIGHT="0110001A0001028E19"         # 闪光
BUZZ1="0110001A0001034FD9"         # 声音1
BUZZ2="0110001A000105CFDB"         # 声音2
BUZZ_CMD_CLOSE ="0110001A0001000FD8"  # 关闭声音和闪光
指令变量 功能描述
LIGHT_BUZZ1 启动闪光+声音1模式
LIGHT_BUZZ2 启动闪光+声音2模式
LIGHT 仅启动闪光模式
BUZZ1 仅启动声音1模式
BUZZ2 仅启动声音2模式
BUZZ_CMD_CLOSE 关闭所有声音和闪光

5. 定义发送指令的函数

def sendCmdToDevice(cmd, ser):
    cmdd = bytes.fromhex(cmd)
    ser.write(cmdd)
    ser.close()

函数说明:

  • bytes.fromhex(cmd):将十六进制字符串转换为字节流
  • ser.write(cmdd):通过串口发送指令
  • ser.close():发送完成后关闭串口

6. 主程序部分

if __name__ == '__main__':
    sendCmdToDevice(LIGHT , ser1)
    # sendCmdToDevice(BUZZ_CMD_CLOSE, ser1)  # 关闭警报
    # sendCmdToDevice(LIGHT , ser2)         # 控制第二个警报器
    # sendCmdToDevice(BUZZ_CMD_CLOSE, ser2)

7. 确定串口号与警报器的对应关系

  1. 查看电脑实际串口号:右击"此电脑"→点击"管理"→点击"设备管理器"→找到"端口(COM和LPT)",记录本机对应的串口号。
  2. 修改alarm.py中的SERIAL_PORT1和SERIAL_PORT2为实际串口号。
  3. 运行代码发送LIGHT指令到ser1,观察哪个警报器闪光,确定SERIAL_PORT1对应的警报器序号。
  4. 运行sendCmdToDevice(BUZZ_CMD_CLOSE, ser1)停止闪光。
  5. 将ser1替换为ser2运行代码,确定SERIAL_PORT2对应的警报器序号。
注意:端口号是根据电脑实际端口进行设置的。右击“此电脑”,点击“管理”,点击“设备管理器”,找到端口(COM和LPT),即能发现本机对应串口号,再通过 alarm.py 发送指令,如下图:
寻找本机对应串口号

实验结果

左侧警报器正在闪烁
左侧警报器停止闪烁