first commit
410
Lab/0_EnOceanLab/Lab1/material/Enocean实验上_第9组_柯劲帆_李桦炅_王子励_李志民.md
Normal file
@@ -0,0 +1,410 @@
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 目录
|
||||
|
||||
[TOC]
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 实验分工
|
||||
|
||||
| 姓名 | 学号 | 分工 |
|
||||
| :----: | :------: | :----------------------------------------------------------- |
|
||||
| 柯劲帆 | 21281280 | 主要负责完成实验一二三的操作,对实验器材与软件进行测试,在测试中发现问题并与队员协作解决,在实验中也发现部分模块有损坏无法正常使用。 |
|
||||
| 李桦炅 | 21281282 | 主要负责队员之间的沟通协作,协助完成实验并对实验过程中发现的问题进行记录,再进行沟通完善报告的描述。 |
|
||||
| 王子励 | 21281292 | 负责实验报告的撰写,查阅背景知识资料工作。 |
|
||||
| 李志民 | 20281146 | 中途加入小组,完成了实验一的环境配置后,协助了实验中遇到问题的解决。 |
|
||||
|
||||
|
||||
|
||||
# **实验一** 环境搭建
|
||||
|
||||
## 1.1. 实验目的
|
||||
|
||||
安装必要的开发工具、烧写工具,构建EnOcean模块开发环境,以便进行模块开发及实验。
|
||||
|
||||
## 1.2. 工具/原料
|
||||
|
||||
- 计算机(Windows操作系统)
|
||||
- IAR FOR ARM 7.20安装包
|
||||
- TI-TM4C-SDK工具包
|
||||
- DolphinView安装包
|
||||
- J-link安装包
|
||||
|
||||
## 1.3. 实验步骤
|
||||
|
||||
实验一的实验步骤在实验指导书上非常详细,只需要按照配图和文字执行即可。因此我们在本实验报告中仅简单概括一下实验的步骤,并说明我们对每个步骤在本物联网项目中在架构与技术上的理解。
|
||||
|
||||
1. 安装IAR FOR ARM 7.20
|
||||
|
||||
IAR软件作为项目的IDE软件,主要用于编写程序代码、搭建软件工程、调用JTAG工具烧写硬件,以及进行DEBUG等。
|
||||
|
||||
2. 破解IAR软件
|
||||
|
||||
~~IAR软件是商业收费软件。~~
|
||||
|
||||
3. 安装SDK工具包
|
||||
|
||||
SDK工具包是使用软件驱动硬件的依赖文件,是厂商设计的与硬件通信的接口,由硬件制造厂商提供。
|
||||
|
||||
4. 重建SDK驱动程序库
|
||||
|
||||
为了使IAR能在新的安装路径中找到SDK驱动程序,需要重建SDK驱动程序库。
|
||||
|
||||
在这个步骤我们遇到了困难。排查原因发现是由于项目文件路径含有中文字符导致。由于编译机器使用MinGW作为C语言编译器,MinGW不支持中文路径。
|
||||
|
||||
5. 安装J-link驱动
|
||||
|
||||
J-link是PC机与物联网模块进行烧写和DEBUG等的工具。作为外接的额外硬件,需要在PC机上安装J-link的驱动以实现让PC机调用J-link的接口进行控制。
|
||||
|
||||
6. 安装DolphinView软件
|
||||
|
||||
DolphinView软件能够与后面烧写的Sniffer进行联动,显示EnOcean_Sniffer程序采集的数据包。
|
||||
|
||||
## 1.4. 实验结果
|
||||
|
||||
我们最后成功将实验环境配置完成。
|
||||
|
||||
## 1.5. 实验感想
|
||||
|
||||
通过此次实验,我们对物联网系统开发流程有了更直观的了解。在配置开发环境过程中,我们安装了IAR、JLink等开发和调试所需的软硬件工具,并解决了编译链接和烧录时遇到的问题。这使我们对物联网设备固件的编译、烧录等开发过程有了直接的体会。
|
||||
|
||||
|
||||
|
||||
# 实验二 EnOcean Sniffer 实验
|
||||
|
||||
## 2.1. 实验目的
|
||||
|
||||
将一个易能森设备配置为嗅探器(Sniffer),抓取易能森通信数据包,以便分析数据。
|
||||
|
||||
## 2.2. 工具/原料
|
||||
|
||||
- 计算机(WINDOWS操作系统)
|
||||
- 2个OURS-EnOcean实验模块
|
||||
- IAR for ARM 7.20软件
|
||||
- J-link仿真器一个
|
||||
- DolphinView软件
|
||||
- 调试单板模块(转接板)一个
|
||||
|
||||
## 2.3. 预备知识
|
||||
|
||||
1. Sniffer,嗅探器,是一种基于被动侦听原理的网络分析方式。使用这种技术方式,可以监视网络的状态、数据流动情况以及网络上传输的信息。
|
||||
2. TCM310F工作于模式0(单向)时,模块将无线接收到的数据,可以通过串口发送到外部主机;TCM310F工作于模式1(双向)时,模块将无线接收到的数据,可以通过串口发送到外部主机;同时可将外部主机串口发送的数据或命令通过无线发射出去。
|
||||
3. 利用DolphinView 可以实现Sniffer的检测。
|
||||
|
||||
## **2.4**. 核心代码
|
||||
|
||||
大致阅读代码,将代码的大致思想写在下面的注释中。
|
||||
|
||||
```c
|
||||
void EnOceanUARTIntHandler(void) {
|
||||
uint32_t ui32Ints; // 用于存储UART中断标志的变量
|
||||
uint8_t data; // 用于存储接收到的数据字节
|
||||
|
||||
static uint8_t PacketHeader = 0; // 表示数据包头部的标志
|
||||
static uint32_t PacketLen = 0; // 用于存储预期数据包长度的变量
|
||||
|
||||
//
|
||||
// Get and clear the current interrupt source(s)
|
||||
//
|
||||
|
||||
// 获取并清除当前的中断源
|
||||
ui32Ints = ROM_UARTIntStatus(ENOCEAN_UART_BASE, true);
|
||||
ROM_UARTIntClear(ENOCEAN_UART_BASE, ui32Ints); // 清除已处理的中断
|
||||
|
||||
//
|
||||
// Handle receive interrupts.
|
||||
//
|
||||
|
||||
// 处理接收中断。
|
||||
if (ui32Ints & (UART_INT_RX | UART_INT_RT)) { // 检查RX FIFO非空或者超时中断是否发生
|
||||
data = ROM_UARTCharGetNonBlocking(ENOCEAN_UART_BASE); // 从UART中读取一个字符
|
||||
|
||||
// 检查接收缓冲区是否有空间,并且数据包接收不在进行中
|
||||
if (EnOceanRxCount < ENOCEAN_RX_BUFFER_SIZE && (!EnOceanTelegramRxflags)) {
|
||||
EnOceanRxBuffer[EnOceanRxCount++] = data; // 将接收到的数据存储到缓冲区中
|
||||
|
||||
// 检查数据包头部是否已经被检测到
|
||||
if (!PacketHeader) {
|
||||
// 检查数据包的第一个字节是否是头部(0x55)
|
||||
if (EnOceanRxBuffer[0] != 0x55) EnOceanRxCount = 0; // 如果头部不符合预期,重置缓冲区
|
||||
else {
|
||||
// 检查是否已经接收到6个字节(头部 + 数据长度 + 校验和)
|
||||
if (EnOceanRxCount == 6) {
|
||||
// 使用接收到的数据计算预期的数据包长度
|
||||
if (GetCheckSum(&EnOceanRxBuffer[1], 4) == EnOceanRxBuffer[5]) {
|
||||
PacketLen = 7 + (EnOceanRxBuffer[1] << 8) + EnOceanRxBuffer[2] + EnOceanRxBuffer[3];
|
||||
PacketHeader = 1; // 设置数据包头部标志
|
||||
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0); // 将引脚写为0
|
||||
} else {
|
||||
EnOceanRxCount = 0; // 如果校验和验证失败,重置缓冲区
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (EnOceanRxCount == PacketLen) {
|
||||
EnOceanTelegramRxflags = 1; // 设置表示完整数据包接收的标志
|
||||
PacketHeader = 0; // 重置数据包头部标志
|
||||
PacketLen = 0; // 重置预期数据包长度
|
||||
}
|
||||
} else {
|
||||
// 如果缓冲区已满或者接收到无效的数据包,重置接收缓冲区和数据包头部信息
|
||||
EnOceanRxCount = 0;
|
||||
PacketHeader = 0;
|
||||
PacketLen = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 2.5. 实验步骤
|
||||
|
||||
### 2.5.1. 步骤一 连接模块
|
||||
|
||||
OURS-EnOcean模块的CN1接口和调试单板模块的CN2接口相连,此实验需要给EnOcean-CORE下载程序。
|
||||
|
||||
给EnOcean-CORE下载,用20PIN排线将J-Link与节点调试转接板上CORE接口相连。
|
||||
|
||||
### 2.5.2. 步骤二 加载工程文件
|
||||
|
||||
加载EnOcean_Sniffer工程:打开IAR FOR ARM,点击“File”->“Open”->“Workspace”,选择本机中“EnOcean\EnOcean_CODE\1.1EnOcean_Sniffer\IAR_Files”目录下的“EnOcean_Sniffer.eww”工程文件,点击“打开”。
|
||||
|
||||
### 2.5.3. 步骤三 编译并下载
|
||||
|
||||
**设置:**
|
||||
|
||||
执行以下步骤设置工程选项:
|
||||
|
||||
- 右键工程->“Options”,在“General Options”->“Target”选择“TI TM4c123GH6PM”
|
||||
|
||||
- 点击“Debugger”->“Setup”选择Driver为“J-Link/J-Trace”
|
||||
- 完成设置后,点击“OK”。
|
||||
|
||||
**编译:**
|
||||
|
||||
点击菜单栏中“Project”->“Rebuild All”选项编译程序,也可在工程上右键“Rebuild All”。
|
||||
|
||||
**烧录:**
|
||||
|
||||
编译没有错误后,点击菜单栏“Project”->“DownLoad and Debug”。
|
||||
|
||||
在这里我们遇到了问题。在完成上述设置后,我们还是遇到了烧录错误,报错截图如下:
|
||||
|
||||
<img src="picture1.png" alt="picture1" style="zoom: 67%;" />
|
||||
|
||||
上网查阅资料后,我们对比发现,设置中的Interface默认为SWD,但是我们实验使用的工具为JATG,所以需要选择JATG。更改如下:
|
||||
|
||||
<img src="picture2.png" alt="picture2" style="zoom:67%;" />
|
||||
|
||||
更改该选项之后,成功烧录程序。
|
||||
|
||||
**加载一位翘板开关工程Rocker_Switch工程:**
|
||||
|
||||
点击工具栏的红叉退出调试,拔掉下载EnOcean_Sniffe程序的OURS-EnOcean模块电源,用同样的方法向另一块OURS-EnOcean模块加载1.4Rocker_Switch工程。
|
||||
|
||||
|
||||
|
||||
### 2.5.4. 步骤四 安装USB Serial Port
|
||||
|
||||
将下载EnOcean Sniffer程序的OURS_EnOcean模块,用一根micro USB线和PC机相连,用于供电和传输数据。
|
||||
|
||||
在这里我们再次遇到了问题。
|
||||
|
||||
用一根micro USB线将OURS_EnOcean模块和PC机相连后,PC机并没有如实验指导书所述弹出驱动安装提示窗口。且在设备管理器中可以看到,PC机没有正确识别OURS_EnOcean设备,如下图所示:
|
||||
|
||||
<img src="picture3.png" alt="picture3" style="zoom:67%;" />
|
||||
|
||||
我们在网上查找新版本的设备驱动程序。将驱动程序版本从“TivaWare_C_Series-2.1.4.178”升级到了“TivaWare_C_Series-2.2.0.295”。在设备管理器右键设备->点击“属性”->点击“驱动程序”->点击“更新驱动程序”->点击“浏览我的电脑以查找驱动程序”->点击“浏览”->选择新驱动的安装目录->点击“确定”,即可让PC机更新驱动。现在PC机能正确识别OURS_EnOcean设备了:
|
||||
|
||||
<img src="picture4.png" alt="picture4" style="zoom:67%;" />
|
||||
|
||||
### 2.5.5. 步骤五 实验结果
|
||||
|
||||
1. 打开DolphinView软件,正确选择串口(与设备管理器中一致),点击连接。
|
||||
2. 将下载Rocker_Switch工程的OURS_EnOcean模块,用一根micro USB线和PC机相连(用于供电)。
|
||||
|
||||
3. 摁下下载Rocker_Switch工程的OURS_EnOcean模块S3/S4按键,观察DolphinView软件的显示结果。
|
||||
|
||||
|
||||
|
||||
## 2.6. 实验结果
|
||||
|
||||
按下烧有Rocker_Switch工程的OURS-EnOcean模块的S3、S4按键,观察到DolphinView窗口显示烧有EnOcean_Sniffer工程的OURS-EnOcean模块接收到数据包。按下S4键,数据包的Data为00;按下S3键,数据包的Data为10。
|
||||
|
||||
<img src="picture5.png" alt="picture5" style="zoom:67%;" />
|
||||
|
||||
在这个过程中,我们将烧有Rocker_Switch工程的OURS-EnOcean模块脱离连接着Sniffer的PC机,使用手机充电器供电,也能在Sniffer上接收到Rocker_Switch的数据包,这验证了数据包是无线传输的。
|
||||
|
||||
## 2.7. 实验感想
|
||||
|
||||
在Sniffer实验中,我们通过串口抓取了EnOcean无线模块之间的通信数据包,并在DolphinView可视化软件中查看。这帮助我们理解和掌握了Sniffer嗅探器的工作原理。同时,阅读Sniffer源码也加深了我们对EnOcean通信协议和TM4C单片机串口通信的理解。
|
||||
|
||||
在实验过程中,我们学习到了解决实验问题的方法。当遇到困难时,我们会小组讨论分析问题原因,充分利用网络资源查阅相关资料,在助教的帮助下最终找到解决办法。这种经验对我们今后独立分析和解决问题具有重要的启示意义。
|
||||
|
||||
本次实验采用小组合作形式。通过分工协作,不仅提高了工作效率,也培养了我们的团队协作能力。今后我们会继续提升合作中各成员的配合水平。
|
||||
|
||||
|
||||
|
||||
# 实验三 EnOcean温度采集实验
|
||||
|
||||
## 3.1. 实验目的
|
||||
|
||||
学习易能森协议栈温度传感器采集Profile,模拟一个温度数据以温度采集Profile发送出去,利用Sniffer进行抓包。
|
||||
|
||||
## 3.2. 工具/原料
|
||||
|
||||
- 计算机(WINDOWS操作系统)
|
||||
- 2个OURS-EnOcean实验模块
|
||||
- IAR for ARM 7.20软件
|
||||
- J-link仿真器一个
|
||||
- DolphinView软件
|
||||
- 调试单板模块(转接板)一个
|
||||
|
||||
## 3.3. 预备知识
|
||||
|
||||
1. 温度传感器是指能感受温度并转换成可用输出信号的传感器
|
||||
2. TCM310F工作于模式0(单向)时,模块将无线接收到的数据,可以通过串口发送到外部主机;TCM310F工作于模式1(双向)时,模块将无线接收到的数据,可以通过串口发送到外部主机;同时可将外部主机串口发送的数据或命令通过无线发射出去。
|
||||
3. STM330F为一个室内光能供电的温度传感器。
|
||||
4. 利用DolphinView 可以实现温度传感器的检测。
|
||||
|
||||
## 3.4. 核心代码
|
||||
|
||||
大致阅读代码,将代码的大致思想写在下面的注释中。
|
||||
|
||||
```c
|
||||
uint8_t SendSensorValue(void)
|
||||
{
|
||||
uint8_t datalen = FIRST_DATA_SEQ; // 用于存储数据包长度的变量,初始值为数据包中第一个数据的索引
|
||||
ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0); // 设置GPIO引脚电平为0,表示开始发送数据
|
||||
|
||||
uint8_t randtemp = g_ui32SysTickCount & 0x3f; // 生成一个随机数模拟温度传感器值
|
||||
|
||||
// 设置数据包的各个字段
|
||||
EnOceanTelegramBuf[SYNC_BYTE_SEQ] = SYNC_BYTE; // 同步字节
|
||||
EnOceanTelegramBuf[DATA_LENGTH_H_SEQ] = 0x00; // 数据包长度高位字节
|
||||
EnOceanTelegramBuf[DATA_LENGTH_L_SEQ] = 0x0a; // 数据包长度低位字节
|
||||
EnOceanTelegramBuf[OPTION_LENGTH_SEQ] = 0x07; // 选项字段长度
|
||||
EnOceanTelegramBuf[PACKET_TYPE_SEQ] = PACKET_TYPES_RADIO; // 数据包类型为无线电包
|
||||
EnOceanTelegramBuf[HEADER_CRC8_SEQ] = GetCheckSum(&EnOceanTelegramBuf[DATA_LENGTH_H_SEQ], PACKET_HEADER_LEN); // 头部的CRC校验
|
||||
|
||||
// 数据字段
|
||||
EnOceanTelegramBuf[datalen++] = EN_DEVICE_RORG; // EnOcean设备类型
|
||||
EnOceanTelegramBuf[datalen++] = 0x00; // 数据1
|
||||
EnOceanTelegramBuf[datalen++] = 0x00; // 数据2
|
||||
EnOceanTelegramBuf[datalen++] = randtemp; // 随机温度传感器值
|
||||
EnOceanTelegramBuf[datalen++] = 0x08; // 数据3
|
||||
for (uint8_t i = 0; i < 4; i++) {
|
||||
EnOceanTelegramBuf[datalen++] = TCM310F_BaseID[i]; // 发送者ID
|
||||
}
|
||||
EnOceanTelegramBuf[datalen++] = 0x80; // 状态
|
||||
|
||||
// 选项数据
|
||||
EnOceanTelegramBuf[datalen++] = 0x03; // 子电报号
|
||||
for (uint8_t i = 0; i < 4; i++) {
|
||||
EnOceanTelegramBuf[datalen++] = 0xFF; // 目标ID
|
||||
}
|
||||
EnOceanTelegramBuf[datalen++] = 0xFF; // dBm,发送功率:FF
|
||||
EnOceanTelegramBuf[datalen++] = 0x00; // 安全级别为0,表示电报未加密
|
||||
|
||||
// 计算并设置数据段CRC校验和
|
||||
EnOceanTelegramBuf[datalen] = GetCheckSum(&EnOceanTelegramBuf[FIRST_DATA_SEQ], datalen - FIRST_DATA_SEQ);
|
||||
|
||||
// 检查数据包长度是否正确
|
||||
if (CONVERT_UINT16(EnOceanTelegramBuf[DATA_LENGTH_H_SEQ], EnOceanTelegramBuf[DATA_LENGTH_L_SEQ]) +
|
||||
EnOceanTelegramBuf[OPTION_LENGTH_SEQ] == datalen - FIRST_DATA_SEQ) {
|
||||
ENOCEAN_UARTSend(EnOceanTelegramBuf, BASE_PACKET_LEN + (datalen - FIRST_DATA_SEQ)); // 通过UART发送数据包
|
||||
}
|
||||
else return 1; // 如果数据包长度不符合预期,返回错误代码
|
||||
|
||||
// 等待数据包接收完成
|
||||
while (!EnOceanTelegramRxflags);
|
||||
memcpy(EnOceanTelegramBuf, EnOceanRxBuffer, EnOceanRxCount); // 将接收到的数据复制到发送缓冲区
|
||||
EnOceanRxCount = 0; // 重置接收缓冲区计数
|
||||
EnOceanTelegramRxflags = 0; // 重置数据包接收完成标志
|
||||
ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2); // 将引脚写为1,表示数据传输完成
|
||||
|
||||
// 检查接收到的数据包是否包含返回OK的标志
|
||||
if (EnOceanTelegramBuf[FIRST_DATA_SEQ] == RET_OK) return 0; // 如果包含返回OK的标志,返回成功代码
|
||||
return 1; // 否则返回错误代码
|
||||
}
|
||||
```
|
||||
|
||||
这个函数的作用是生成并发送一个EnOcean数据包,其中包含了模拟的温度传感器值和一些固定的字段。函数通过UART发送数据包,然后等待接收到带有返回OK标志的响应。
|
||||
|
||||
## 3.5. 实验步骤
|
||||
|
||||
### 3.5.1. 步骤一 连接模块
|
||||
|
||||
OURS-EnOcean模块的CN1接口和调试单板模块的CN2接口相连,此实验需要给EnOcean-CORE下载程序。
|
||||
|
||||
给EnOcean-CORE下载,用20PIN排线将J-Link与节点调试转接板上CORE接口相连。
|
||||
|
||||
### 3.5.2. 步骤二 加载工程文件
|
||||
|
||||
加载Temp_Sensor工程:打开IAR FOR ARM,点击“File”->“Open”->“Workspace”,选择本机中“EnOcean\EnOcean_CODE\1.1EnOcean_Sniffer\IAR_Files”目录下的“Temp_Sensor.eww”工程文件,点击“打开”。
|
||||
|
||||
### 3.5.3. 步骤三 编译并下载
|
||||
|
||||
**设置:**
|
||||
|
||||
执行以下步骤设置工程选项:
|
||||
|
||||
- 右键工程->“Options”,在“General Options”->“Target”选择“TI TM4c123GH6PM”
|
||||
|
||||
- 点击“Debugger”->“Setup”选择Driver为“J-Link/J-Trace”
|
||||
- 点击“J-Link/J-Trace”->“Connection”选择Interface为“JATG”
|
||||
- 完成设置后,点击“OK”。
|
||||
|
||||
**编译:**
|
||||
|
||||
点击菜单栏中“Project”->“Rebuild All”选项编译程序,也可在工程上右键“Rebuild All”。
|
||||
|
||||
**烧录:**
|
||||
|
||||
编译没有错误后,点击菜单栏“Project”->“DownLoad and Debug”。
|
||||
|
||||
**加载EnOcean_Sniffer工程:**
|
||||
|
||||
点击工具栏的红叉退出调试,拔掉下载Temp_Sensor程序的OURS-EnOcean模块电源,用同样的方法向另一块OURS-EnOcean模块加载EnOcean_Sniffer工程。
|
||||
|
||||
### 2.5.4. 步骤四 实验结果
|
||||
|
||||
1. 打开DolphinView软件,正确选择串口(与设备管理器中一致),点击连接。
|
||||
2. 将下载Temp_Sensor程序的OURS_EnOcean模块,用一根micro USB线和PC机相连(用于供电)。
|
||||
|
||||
3. 摁下下载Temp_Sensor程序的OURS_EnOcean模块S3/S4按键,观察DolphinView软件的显示结果。
|
||||
|
||||
## 3.6. 实验结果
|
||||
|
||||
按下烧有Temp_Sensor工程的OURS-EnOcean模块的S3、S4按键,观察到DolphinView窗口显示烧有EnOcean_Sniffer工程的OURS-EnOcean模块接收到数据包。按下S3键,数据包的Data为固定值:08 B0 01 87;按下S4键,数据包的Data始终变化。
|
||||
|
||||
<img src="picture6.png" alt="picture6" style="zoom:67%;" />
|
||||
|
||||
## 3.7. 实验感想
|
||||
|
||||
通过这次温度传感器数据采集实验,我们进一步理解和掌握了EnOcean无线通信模块的使用。我们学会了使用随机数模拟温度传感器值,并组装成符合EnOcean协议格式的数据包进行无线发送。在Sniffer端成功捕获了发送的温度数据包,验证了传输的正确性。
|
||||
|
||||
在阅读Temp_Sensor发送端代码时,我们学习到了如何按照通信协议格式组织数据,以及校验和的计算方法。这对我们后续开发EnOcean无线传感网络具有很好的指导意义。在配置和调用TM4C单片机外设(如GPIO、UART等)的过程中,也加深了我们对单片机外设编程的理解。
|
||||
|
||||
本次实验我们小组分工合作,分工明确,团队协作顺畅,实验效率得到提高。我们会在今后的项目中,继续提升团队协作能力,以适应未来更复杂的开发任务。
|
||||
BIN
Lab/0_EnOceanLab/Lab1/material/cover.png
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
Lab/0_EnOceanLab/Lab1/material/picture1.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
Lab/0_EnOceanLab/Lab1/material/picture2.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
Lab/0_EnOceanLab/Lab1/material/picture3.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
Lab/0_EnOceanLab/Lab1/material/picture4.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
Lab/0_EnOceanLab/Lab1/material/picture5.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
Lab/0_EnOceanLab/Lab1/material/picture6.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
100
Lab/0_EnOceanLab/Lab1/material/实验一.md
Normal file
@@ -0,0 +1,100 @@
|
||||

|
||||
|
||||
|
||||
|
||||
<h1><center>实验一 环境搭建</center></h1>
|
||||
|
||||
# 目录
|
||||
|
||||
[TOC]
|
||||
|
||||
---
|
||||
|
||||
# 实验分工
|
||||
|
||||
| 姓名 | 学号 | 分工 |
|
||||
| :----: | :------: | :----------------------------------------------------------- |
|
||||
| 柯劲帆 | 21281280 | 主要负责完成实验的组织与操作,对实验器材与软件进行测试,在测试中发现问题并与队员协作解决,在实验中也发现部分模块有损坏无法正常使用。 |
|
||||
| 李桦炅 | 21281282 | 主要负责队员之间的沟通协作,协助完成实验并对实验过程中发现的问题进行记录,再进行沟通完善报告的描述。 |
|
||||
| 王子励 | 21281292 | 负责实验报告的撰写,查阅背景知识资料工作。 |
|
||||
| 李志民 | 20281146 | 中途加入小组,完成了实验一的环境配置后,协助了实验中遇到问题的解决。 |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 1. 实验目的
|
||||
|
||||
安装必要的开发工具、烧写工具,构建EnOcean模块开发环境,以便进行模块开发及实验。
|
||||
|
||||
|
||||
|
||||
# 2. 工具/原料
|
||||
|
||||
- 计算机(Windows操作系统)
|
||||
- IAR FOR ARM 7.20安装包
|
||||
- TI-TM4C-SDK工具包
|
||||
- DolphinView安装包
|
||||
- J-link安装包
|
||||
|
||||
|
||||
|
||||
# 3. 实验步骤
|
||||
|
||||
实验一的实验步骤在实验指导书上非常详细,只需要按照配图和文字执行即可。因此我们在本实验报告中仅简单概括一下实验的步骤,并说明我们对每个步骤在本物联网项目中在架构与技术上的理解。
|
||||
|
||||
1. 安装IAR FOR ARM 7.20
|
||||
|
||||
IAR软件作为项目的IDE软件,主要用于编写程序代码、搭建软件工程、调用JTAG工具烧写硬件,以及进行DEBUG等。
|
||||
|
||||
2. 破解IAR软件
|
||||
|
||||
~~IAR软件是商业收费软件。~~
|
||||
|
||||
3. 安装SDK工具包
|
||||
|
||||
SDK工具包是使用软件驱动硬件的依赖文件,是厂商设计的与硬件通信的接口,由硬件制造厂商提供。
|
||||
|
||||
4. 重建SDK驱动程序库
|
||||
|
||||
为了使IAR能在新的安装路径中找到SDK驱动程序,需要重建SDK驱动程序库。
|
||||
|
||||
在这个步骤我们遇到了困难。排查原因发现是由于项目文件路径含有中文字符导致。由于编译机器使用MinGW作为C语言编译器,MinGW不支持中文路径。
|
||||
|
||||
5. 安装J-link驱动
|
||||
|
||||
J-link是PC机与物联网模块进行烧写和DEBUG等的工具。作为外接的额外硬件,需要在PC机上安装J-link的驱动以实现让PC机调用J-link的接口进行控制。
|
||||
|
||||
6. 安装DolphinView软件
|
||||
|
||||
DolphinView软件能够与后面烧写的Sniffer进行联动,显示EnOcean_Sniffer程序采集的数据包。
|
||||
|
||||
|
||||
|
||||
# 4. 实验结果
|
||||
|
||||
我们最后成功将实验环境配置完成。
|
||||
|
||||
|
||||
|
||||
# 5. 实验感想
|
||||
|
||||
通过此次实验,我们对物联网系统开发流程有了更直观的了解。在配置开发环境过程中,我们安装了IAR、JLink等开发和调试所需的软硬件工具,并解决了编译链接和烧录时遇到的问题。这使我们对物联网设备固件的编译、烧录等开发过程有了直接的体会。
|
||||
185
Lab/0_EnOceanLab/Lab1/material/实验三.md
Normal file
@@ -0,0 +1,185 @@
|
||||

|
||||
|
||||
|
||||
|
||||
<h1><center>实验三 EnOcean温度采集实验</center></h1>
|
||||
|
||||
# 目录
|
||||
|
||||
[TOC]
|
||||
|
||||
---
|
||||
|
||||
# 实验分工
|
||||
|
||||
| 姓名 | 学号 | 分工 |
|
||||
| :----: | :------: | :----------------------------------------------------------- |
|
||||
| 柯劲帆 | 21281280 | 主要负责完成实验的组织与操作,对实验器材与软件进行测试,在测试中发现问题并与队员协作解决,在实验中也发现部分模块有损坏无法正常使用。 |
|
||||
| 李桦炅 | 21281282 | 主要负责队员之间的沟通协作,协助完成实验并对实验过程中发现的问题进行记录,再进行沟通完善报告的描述。 |
|
||||
| 王子励 | 21281292 | 负责实验报告的撰写,查阅背景知识资料工作。 |
|
||||
| 李志民 | 20281146 | 中途加入小组,完成了实验一的环境配置后,协助了实验中遇到问题的解决。 |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 1. 实验目的
|
||||
|
||||
学习易能森协议栈温度传感器采集Profile,模拟一个温度数据以温度采集Profile发送出去,利用Sniffer进行抓包。
|
||||
|
||||
|
||||
|
||||
# 2. 工具/原料
|
||||
|
||||
- 计算机(WINDOWS操作系统)
|
||||
- 2个OURS-EnOcean实验模块
|
||||
- IAR for ARM 7.20软件
|
||||
- J-link仿真器一个
|
||||
- DolphinView软件
|
||||
- 调试单板模块(转接板)一个
|
||||
|
||||
|
||||
|
||||
# 3. 预备知识
|
||||
|
||||
1. 温度传感器是指能感受温度并转换成可用输出信号的传感器
|
||||
2. TCM310F工作于模式0(单向)时,模块将无线接收到的数据,可以通过串口发送到外部主机;TCM310F工作于模式1(双向)时,模块将无线接收到的数据,可以通过串口发送到外部主机;同时可将外部主机串口发送的数据或命令通过无线发射出去。
|
||||
3. STM330F为一个室内光能供电的温度传感器。
|
||||
4. 利用DolphinView 可以实现温度传感器的检测。
|
||||
|
||||
|
||||
|
||||
# 4. 核心代码
|
||||
|
||||
大致阅读代码,将代码的大致思想写在下面的注释中。
|
||||
|
||||
```c
|
||||
uint8_t SendSensorValue(void)
|
||||
{
|
||||
uint8_t datalen = FIRST_DATA_SEQ; // 用于存储数据包长度的变量,初始值为数据包中第一个数据的索引
|
||||
ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0); // 设置GPIO引脚电平为0,表示开始发送数据
|
||||
|
||||
uint8_t randtemp = g_ui32SysTickCount & 0x3f; // 生成一个随机数模拟温度传感器值
|
||||
|
||||
// 设置数据包的各个字段
|
||||
EnOceanTelegramBuf[SYNC_BYTE_SEQ] = SYNC_BYTE; // 同步字节
|
||||
EnOceanTelegramBuf[DATA_LENGTH_H_SEQ] = 0x00; // 数据包长度高位字节
|
||||
EnOceanTelegramBuf[DATA_LENGTH_L_SEQ] = 0x0a; // 数据包长度低位字节
|
||||
EnOceanTelegramBuf[OPTION_LENGTH_SEQ] = 0x07; // 选项字段长度
|
||||
EnOceanTelegramBuf[PACKET_TYPE_SEQ] = PACKET_TYPES_RADIO; // 数据包类型为无线电包
|
||||
EnOceanTelegramBuf[HEADER_CRC8_SEQ] = GetCheckSum(&EnOceanTelegramBuf[DATA_LENGTH_H_SEQ], PACKET_HEADER_LEN); // 头部的CRC校验
|
||||
|
||||
// 数据字段
|
||||
EnOceanTelegramBuf[datalen++] = EN_DEVICE_RORG; // EnOcean设备类型
|
||||
EnOceanTelegramBuf[datalen++] = 0x00; // 数据1
|
||||
EnOceanTelegramBuf[datalen++] = 0x00; // 数据2
|
||||
EnOceanTelegramBuf[datalen++] = randtemp; // 随机温度传感器值
|
||||
EnOceanTelegramBuf[datalen++] = 0x08; // 数据3
|
||||
for (uint8_t i = 0; i < 4; i++) {
|
||||
EnOceanTelegramBuf[datalen++] = TCM310F_BaseID[i]; // 发送者ID
|
||||
}
|
||||
EnOceanTelegramBuf[datalen++] = 0x80; // 状态
|
||||
|
||||
// 选项数据
|
||||
EnOceanTelegramBuf[datalen++] = 0x03; // 子电报号
|
||||
for (uint8_t i = 0; i < 4; i++) {
|
||||
EnOceanTelegramBuf[datalen++] = 0xFF; // 目标ID
|
||||
}
|
||||
EnOceanTelegramBuf[datalen++] = 0xFF; // dBm,发送功率:FF
|
||||
EnOceanTelegramBuf[datalen++] = 0x00; // 安全级别为0,表示电报未加密
|
||||
|
||||
// 计算并设置数据段CRC校验和
|
||||
EnOceanTelegramBuf[datalen] = GetCheckSum(&EnOceanTelegramBuf[FIRST_DATA_SEQ], datalen - FIRST_DATA_SEQ);
|
||||
|
||||
// 检查数据包长度是否正确
|
||||
if (CONVERT_UINT16(EnOceanTelegramBuf[DATA_LENGTH_H_SEQ], EnOceanTelegramBuf[DATA_LENGTH_L_SEQ]) +
|
||||
EnOceanTelegramBuf[OPTION_LENGTH_SEQ] == datalen - FIRST_DATA_SEQ) {
|
||||
ENOCEAN_UARTSend(EnOceanTelegramBuf, BASE_PACKET_LEN + (datalen - FIRST_DATA_SEQ)); // 通过UART发送数据包
|
||||
}
|
||||
else return 1; // 如果数据包长度不符合预期,返回错误代码
|
||||
|
||||
// 等待数据包接收完成
|
||||
while (!EnOceanTelegramRxflags);
|
||||
memcpy(EnOceanTelegramBuf, EnOceanRxBuffer, EnOceanRxCount); // 将接收到的数据复制到发送缓冲区
|
||||
EnOceanRxCount = 0; // 重置接收缓冲区计数
|
||||
EnOceanTelegramRxflags = 0; // 重置数据包接收完成标志
|
||||
ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2); // 将引脚写为1,表示数据传输完成
|
||||
|
||||
// 检查接收到的数据包是否包含返回OK的标志
|
||||
if (EnOceanTelegramBuf[FIRST_DATA_SEQ] == RET_OK) return 0; // 如果包含返回OK的标志,返回成功代码
|
||||
return 1; // 否则返回错误代码
|
||||
}
|
||||
```
|
||||
|
||||
这个函数的作用是生成并发送一个EnOcean数据包,其中包含了模拟的温度传感器值和一些固定的字段。函数通过UART发送数据包,然后等待接收到带有返回OK标志的响应。
|
||||
|
||||
|
||||
|
||||
# 5. 实验步骤
|
||||
|
||||
## 5.1. 步骤一 连接模块
|
||||
|
||||
OURS-EnOcean模块的CN1接口和调试单板模块的CN2接口相连,此实验需要给EnOcean-CORE下载程序。
|
||||
|
||||
给EnOcean-CORE下载,用20PIN排线将J-Link与节点调试转接板上CORE接口相连。
|
||||
|
||||
## 5.2. 步骤二 加载工程文件
|
||||
|
||||
加载Temp_Sensor工程:打开IAR FOR ARM,点击“File”->“Open”->“Workspace”,选择本机中“EnOcean\EnOcean_CODE\1.1EnOcean_Sniffer\IAR_Files”目录下的“Temp_Sensor.eww”工程文件,点击“打开”。
|
||||
|
||||
## 5.3. 步骤三 编译并下载
|
||||
|
||||
**设置:**
|
||||
|
||||
执行以下步骤设置工程选项:
|
||||
|
||||
- 右键工程->“Options”,在“General Options”->“Target”选择“TI TM4c123GH6PM”
|
||||
|
||||
- 点击“Debugger”->“Setup”选择Driver为“J-Link/J-Trace”
|
||||
- 点击“J-Link/J-Trace”->“Connection”选择Interface为“JATG”
|
||||
- 完成设置后,点击“OK”。
|
||||
|
||||
**编译:**
|
||||
|
||||
点击菜单栏中“Project”->“Rebuild All”选项编译程序,也可在工程上右键“Rebuild All”。
|
||||
|
||||
**烧录:**
|
||||
|
||||
编译没有错误后,点击菜单栏“Project”->“DownLoad and Debug”。
|
||||
|
||||
**加载EnOcean_Sniffer工程:**
|
||||
|
||||
点击工具栏的红叉退出调试,拔掉下载Temp_Sensor程序的OURS-EnOcean模块电源,用同样的方法向另一块OURS-EnOcean模块加载EnOcean_Sniffer工程。
|
||||
|
||||
## 5.4. 步骤四 实验结果
|
||||
|
||||
1. 打开DolphinView软件,正确选择串口(与设备管理器中一致),点击连接。
|
||||
2. 将下载Temp_Sensor程序的OURS_EnOcean模块,用一根micro USB线和PC机相连(用于供电)。
|
||||
|
||||
3. 摁下下载Temp_Sensor程序的OURS_EnOcean模块S3/S4按键,观察DolphinView软件的显示结果。
|
||||
|
||||
|
||||
|
||||
# 6. 实验结果
|
||||
|
||||
按下烧有Temp_Sensor工程的OURS-EnOcean模块的S3、S4按键,观察到DolphinView窗口显示烧有EnOcean_Sniffer工程的OURS-EnOcean模块接收到数据包。按下S3键,数据包的Data为固定值:08 B0 01 87;按下S4键,数据包的Data始终变化。
|
||||
|
||||
<img src="picture6.png" alt="picture6" style="zoom:67%;" />
|
||||
|
||||
|
||||
|
||||
# 7. 实验感想
|
||||
|
||||
通过这次温度传感器数据采集实验,我们进一步理解和掌握了EnOcean无线通信模块的使用。我们学会了使用随机数模拟温度传感器值,并组装成符合EnOcean协议格式的数据包进行无线发送。在Sniffer端成功捕获了发送的温度数据包,验证了传输的正确性。
|
||||
|
||||
在阅读Temp_Sensor发送端代码时,我们学习到了如何按照通信协议格式组织数据,以及校验和的计算方法。这对我们后续开发EnOcean无线传感网络具有很好的指导意义。在配置和调用TM4C单片机外设(如GPIO、UART等)的过程中,也加深了我们对单片机外设编程的理解。
|
||||
|
||||
本次实验我们小组分工合作,分工明确,团队协作顺畅,实验效率得到提高。我们会在今后的项目中,继续提升团队协作能力,以适应未来更复杂的开发任务。
|
||||
211
Lab/0_EnOceanLab/Lab1/material/实验二.md
Normal file
@@ -0,0 +1,211 @@
|
||||

|
||||
|
||||
|
||||
|
||||
<h1><center>实验二 EnOcean Sniffer 实验</center></h1>
|
||||
|
||||
# 目录
|
||||
|
||||
[TOC]
|
||||
|
||||
---
|
||||
|
||||
# 实验分工
|
||||
|
||||
| 姓名 | 学号 | 分工 |
|
||||
| :----: | :------: | :----------------------------------------------------------- |
|
||||
| 柯劲帆 | 21281280 | 主要负责完成实验的组织与操作,对实验器材与软件进行测试,在测试中发现问题并与队员协作解决,在实验中也发现部分模块有损坏无法正常使用。 |
|
||||
| 李桦炅 | 21281282 | 主要负责队员之间的沟通协作,协助完成实验并对实验过程中发现的问题进行记录,再进行沟通完善报告的描述。 |
|
||||
| 王子励 | 21281292 | 负责实验报告的撰写,查阅背景知识资料工作。 |
|
||||
| 李志民 | 20281146 | 中途加入小组,完成了实验一的环境配置后,协助了实验中遇到问题的解决。 |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 1. 实验目的
|
||||
|
||||
将一个易能森设备配置为嗅探器(Sniffer),抓取易能森通信数据包,以便分析数据。
|
||||
|
||||
|
||||
|
||||
# 2. 工具/原料
|
||||
|
||||
- 计算机(WINDOWS操作系统)
|
||||
- 2个OURS-EnOcean实验模块
|
||||
- IAR for ARM 7.20软件
|
||||
- J-link仿真器一个
|
||||
- DolphinView软件
|
||||
- 调试单板模块(转接板)一个
|
||||
|
||||
|
||||
|
||||
# 3. 预备知识
|
||||
|
||||
1. Sniffer,嗅探器,是一种基于被动侦听原理的网络分析方式。使用这种技术方式,可以监视网络的状态、数据流动情况以及网络上传输的信息。
|
||||
2. TCM310F工作于模式0(单向)时,模块将无线接收到的数据,可以通过串口发送到外部主机;TCM310F工作于模式1(双向)时,模块将无线接收到的数据,可以通过串口发送到外部主机;同时可将外部主机串口发送的数据或命令通过无线发射出去。
|
||||
3. 利用DolphinView 可以实现Sniffer的检测。
|
||||
|
||||
|
||||
|
||||
# 4. 核心代码
|
||||
|
||||
大致阅读代码,将代码的大致思想写在下面的注释中。
|
||||
|
||||
```c
|
||||
void EnOceanUARTIntHandler(void) {
|
||||
uint32_t ui32Ints; // 用于存储UART中断标志的变量
|
||||
uint8_t data; // 用于存储接收到的数据字节
|
||||
|
||||
static uint8_t PacketHeader = 0; // 表示数据包头部的标志
|
||||
static uint32_t PacketLen = 0; // 用于存储预期数据包长度的变量
|
||||
|
||||
//
|
||||
// Get and clear the current interrupt source(s)
|
||||
//
|
||||
|
||||
// 获取并清除当前的中断源
|
||||
ui32Ints = ROM_UARTIntStatus(ENOCEAN_UART_BASE, true);
|
||||
ROM_UARTIntClear(ENOCEAN_UART_BASE, ui32Ints); // 清除已处理的中断
|
||||
|
||||
//
|
||||
// Handle receive interrupts.
|
||||
//
|
||||
|
||||
// 处理接收中断。
|
||||
if (ui32Ints & (UART_INT_RX | UART_INT_RT)) { // 检查RX FIFO非空或者超时中断是否发生
|
||||
data = ROM_UARTCharGetNonBlocking(ENOCEAN_UART_BASE); // 从UART中读取一个字符
|
||||
|
||||
// 检查接收缓冲区是否有空间,并且数据包接收不在进行中
|
||||
if (EnOceanRxCount < ENOCEAN_RX_BUFFER_SIZE && (!EnOceanTelegramRxflags)) {
|
||||
EnOceanRxBuffer[EnOceanRxCount++] = data; // 将接收到的数据存储到缓冲区中
|
||||
|
||||
// 检查数据包头部是否已经被检测到
|
||||
if (!PacketHeader) {
|
||||
// 检查数据包的第一个字节是否是头部(0x55)
|
||||
if (EnOceanRxBuffer[0] != 0x55) EnOceanRxCount = 0; // 如果头部不符合预期,重置缓冲区
|
||||
else {
|
||||
// 检查是否已经接收到6个字节(头部 + 数据长度 + 校验和)
|
||||
if (EnOceanRxCount == 6) {
|
||||
// 使用接收到的数据计算预期的数据包长度
|
||||
if (GetCheckSum(&EnOceanRxBuffer[1], 4) == EnOceanRxBuffer[5]) {
|
||||
PacketLen = 7 + (EnOceanRxBuffer[1] << 8) + EnOceanRxBuffer[2] + EnOceanRxBuffer[3];
|
||||
PacketHeader = 1; // 设置数据包头部标志
|
||||
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0); // 将引脚写为0
|
||||
} else {
|
||||
EnOceanRxCount = 0; // 如果校验和验证失败,重置缓冲区
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (EnOceanRxCount == PacketLen) {
|
||||
EnOceanTelegramRxflags = 1; // 设置表示完整数据包接收的标志
|
||||
PacketHeader = 0; // 重置数据包头部标志
|
||||
PacketLen = 0; // 重置预期数据包长度
|
||||
}
|
||||
} else {
|
||||
// 如果缓冲区已满或者接收到无效的数据包,重置接收缓冲区和数据包头部信息
|
||||
EnOceanRxCount = 0;
|
||||
PacketHeader = 0;
|
||||
PacketLen = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
# 5. 实验步骤
|
||||
|
||||
## 5.1. 步骤一 连接模块
|
||||
|
||||
OURS-EnOcean模块的CN1接口和调试单板模块的CN2接口相连,此实验需要给EnOcean-CORE下载程序。
|
||||
|
||||
给EnOcean-CORE下载,用20PIN排线将J-Link与节点调试转接板上CORE接口相连。
|
||||
|
||||
## 5.2. 步骤二 加载工程文件
|
||||
|
||||
加载EnOcean_Sniffer工程:打开IAR FOR ARM,点击“File”->“Open”->“Workspace”,选择本机中“EnOcean\EnOcean_CODE\1.1EnOcean_Sniffer\IAR_Files”目录下的“EnOcean_Sniffer.eww”工程文件,点击“打开”。
|
||||
|
||||
## 5.3. 步骤三 编译并下载
|
||||
|
||||
**设置:**
|
||||
|
||||
执行以下步骤设置工程选项:
|
||||
|
||||
- 右键工程->“Options”,在“General Options”->“Target”选择“TI TM4c123GH6PM”
|
||||
|
||||
- 点击“Debugger”->“Setup”选择Driver为“J-Link/J-Trace”
|
||||
- 完成设置后,点击“OK”。
|
||||
|
||||
**编译:**
|
||||
|
||||
点击菜单栏中“Project”->“Rebuild All”选项编译程序,也可在工程上右键“Rebuild All”。
|
||||
|
||||
**烧录:**
|
||||
|
||||
编译没有错误后,点击菜单栏“Project”->“DownLoad and Debug”。
|
||||
|
||||
在这里我们遇到了问题。在完成上述设置后,我们还是遇到了烧录错误,报错截图如下:
|
||||
|
||||
<img src="picture1.png" alt="picture1" style="zoom: 67%;" />
|
||||
|
||||
上网查阅资料后,我们对比发现,设置中的Interface默认为SWD,但是我们实验使用的工具为JATG,所以需要选择JATG。更改如下:
|
||||
|
||||
<img src="picture2.png" alt="picture2" style="zoom:67%;" />
|
||||
|
||||
更改该选项之后,成功烧录程序。
|
||||
|
||||
**加载一位翘板开关工程Rocker_Switch工程:**
|
||||
|
||||
点击工具栏的红叉退出调试,拔掉下载EnOcean_Sniffe程序的OURS-EnOcean模块电源,用同样的方法向另一块OURS-EnOcean模块加载1.4Rocker_Switch工程。
|
||||
|
||||
|
||||
|
||||
## 5.4. 步骤四 安装USB Serial Port
|
||||
|
||||
将下载EnOcean Sniffer程序的OURS_EnOcean模块,用一根micro USB线和PC机相连,用于供电和传输数据。
|
||||
|
||||
在这里我们再次遇到了问题。
|
||||
|
||||
用一根micro USB线将OURS_EnOcean模块和PC机相连后,PC机并没有如实验指导书所述弹出驱动安装提示窗口。且在设备管理器中可以看到,PC机没有正确识别OURS_EnOcean设备,如下图所示:
|
||||
|
||||
<img src="picture3.png" alt="picture3" style="zoom:67%;" />
|
||||
|
||||
我们在网上查找新版本的设备驱动程序。将驱动程序版本从“TivaWare_C_Series-2.1.4.178”升级到了“TivaWare_C_Series-2.2.0.295”。在设备管理器右键设备->点击“属性”->点击“驱动程序”->点击“更新驱动程序”->点击“浏览我的电脑以查找驱动程序”->点击“浏览”->选择新驱动的安装目录->点击“确定”,即可让PC机更新驱动。现在PC机能正确识别OURS_EnOcean设备了:
|
||||
|
||||
<img src="picture4.png" alt="picture4" style="zoom:67%;" />
|
||||
|
||||
## 5.5. 步骤五 实验结果
|
||||
|
||||
1. 打开DolphinView软件,正确选择串口(与设备管理器中一致),点击连接。
|
||||
2. 将下载Rocker_Switch工程的OURS_EnOcean模块,用一根micro USB线和PC机相连(用于供电)。
|
||||
|
||||
3. 摁下下载Rocker_Switch工程的OURS_EnOcean模块S3/S4按键,观察DolphinView软件的显示结果。
|
||||
|
||||
|
||||
|
||||
# 6. 实验结果
|
||||
|
||||
按下烧有Rocker_Switch工程的OURS-EnOcean模块的S3、S4按键,观察到DolphinView窗口显示烧有EnOcean_Sniffer工程的OURS-EnOcean模块接收到数据包。按下S4键,数据包的Data为00;按下S3键,数据包的Data为10。
|
||||
|
||||
<img src="picture5.png" alt="picture5" style="zoom:67%;" />
|
||||
|
||||
在这个过程中,我们将烧有Rocker_Switch工程的OURS-EnOcean模块脱离连接着Sniffer的PC机,使用手机充电器供电,也能在Sniffer上接收到Rocker_Switch的数据包,这验证了数据包是无线传输的。
|
||||
|
||||
|
||||
|
||||
# 7. 实验感想
|
||||
|
||||
在Sniffer实验中,我们通过串口抓取了EnOcean无线模块之间的通信数据包,并在DolphinView可视化软件中查看。这帮助我们理解和掌握了Sniffer嗅探器的工作原理。同时,阅读Sniffer源码也加深了我们对EnOcean通信协议和TM4C单片机串口通信的理解。
|
||||
|
||||
在实验过程中,我们学习到了解决实验问题的方法。当遇到困难时,我们会小组讨论分析问题原因,充分利用网络资源查阅相关资料,在助教的帮助下最终找到解决办法。这种经验对我们今后独立分析和解决问题具有重要的启示意义。
|
||||
|
||||
本次实验采用小组合作形式。通过分工协作,不仅提高了工作效率,也培养了我们的团队协作能力。今后我们会继续提升合作中各成员的配合水平。
|
||||