物联网实验

news2025/6/23 17:30:43

实验1 基于ZStack光敏传感器实验

1.实验目的

我们通过上位机发指令给协调器,协调器把串口接收到的指令通过Zigbee协议无线发送给带有光敏传感器的终端节点,获取到数据以后把数据返回给上位机,实现无线获取数据的目的。

2.实验设备

硬件:ZigBee节点二个,CC Debugger仿真器一套;

软件:IAR Embedded WorkBench,ZStack协议栈,Keil开发软件;

3.实验原理

3.1  光敏传感器介绍

首先我们的光敏传感器用到的是光敏电阻,光敏电阻器是一种对光敏感的元件,它的电阻值能随着外界光照强弱(明暗)变化而变化,即光敏电阻器是利用半导体光电导效应制成的一种特殊电阻器,对光线十分敏感。它在无光照射时,呈高阻状态;当有光照射时,其电阻值迅速减小。

3.2  光敏传感器的电路图

光敏传感器的电路如图3.1所示。

一般情况下光敏电阻的暗电阻为1M~~2MΩ,亮电阻为1K~~15KΩ,则可以根据D3处的电压分为两种情况:暗电阻(没有光照)与亮电阻(有光照)

暗电阻下:3.3V * 10K/ ( 2000 K+ 10K) = 0.016V

亮电阻下:3.3V * 10K/ ( 15 K+ 10K) = 1.3V

我们这里使用的STM32的PA4是12位ADC,根据上面的计算结果,我们可以算出亮电阻下的ADC值为1.3*1024 /3.3 = 1613 ,则我们可以通过采集ADC1的值作为临界值,当ADC1的值大于1613时表明有光,小于1613则无光。

3.3 Modbus数据格式举例:

详细的描述请参考官方资料:配套光盘\附件\ModBus协议;

下面举一个例子:

发送指令02 03 00 2C 00 01 45 f0

02 :表示设备地址

03 :功能码,表示读取数据

00 2C:读取开始的地址

00 01:表示读取多少个寄存器,1个寄存器有2个字节

45 f0: 由前面数据通过CRC-16计数得来的校验码

返回数据:02 03 02 00 00 FC 44

02 :表示从地址为02的设备返回

03 :表示返回的数据是读取

02 :表示2个有效字节

00 00 :就是2个有效字节

FC 44 :由前面数据通过CRC-16计数得来的校验码

3.3 光敏传感器数据获取设想

我们通过上位机发指令给协调器,协调器把串口接收到的指令通过Zigbee协议无线发送给带有光敏传感器的终端节点,获取到数据以后把数据返回给上位机,实现无线获取数据的目的。

3.3 获取光敏传感器数据大概流程

第一步:上位机(电脑)通过串口发送获取光敏传感器数据的指令给协调器。

第二步:协调器由串口接收到指令以后,通过Zigbee协议无线把指令发送给终端节点。

第三步:终端节点接收到指令以后,通过串口把指令发给终端节点上面的STM32芯片。

第四步:STM32芯片串口接收到指令以后,作出响应,然后把带有光敏传感器数值的数据通过串口返回给终端节点上面的CC2530芯片。

第五步:终端节点CC2530芯片串口接收到光敏传感器数据以后,通过Zigbee协议无线把数据发送给协调器(CC2530芯片)。

第六步:协调器(CC2530芯片)无线接收到光敏传感器数据以后,通过串口把数据返回给上位机。

4.实验步骤

4.1 编写实验源代码及下载代码

第一步: 将光敏传感器安装在节点上,打开Keil集成开发环境,打开配套光盘\源代码\Zigbee无线传感网原理与应用\实验8 基于ZStack光敏传感器实验-V20170222\STM32固 件库V3.5移植--实验8 光敏传感器实验\RVMDK的Test.uvproj工程文件。

实验中找到源代码编译,发现报错后,后来查阅资料后发现是因为C51中没有ARM环境,于是将ARM所在的内容复制到C51中,重新编译程序,编译成功了。

第二步:点击左上角的Rebuild按键

,编译整个工程,将生成Test.hex可执行文件,该可执行文件自动保存在路径下源代码\传感器原理及应用\实验8 光敏传感器实验-V20170222\STM32固件库V3.5移植--实验8 光敏传感器实验\RVMDK\Output目录下。(注意:请根据该目录下 Test.hex文件的生成时间,判断该文件是否是自己刚刚编译完成的。)

实验中找到了该文件路径所在的位置,并成功编译和运行了文件。

第三步:把J-LINK与节点、电脑连接,点击左上角的【LOAD】

将程序下载到节点板,使用配套的串口线将计算机串口与节点的DB9串口接头相连,如图4.1所示,注意,将节点右下角上的白色三位拨打开关拨至左边,给节点重新上电,打开配套光盘\第三方应用软件\串口调试及CRC软件\串口调试工具.exe程序,打开正确的端口,进行9600-8-N-1设置,打开串口,就可以与芯片进行数据交互。

连接好的图如下:

注意:要连接好下载器再进行下载,并且确保三位开关已经拨到最左边。(这里是实验成功的关键。)

进行下载:

                        

第四步:配置节点地址,如下图。

发送:FF 30 00 08 00 01

返回:FF 30 00 08 00 01

第五步:获取传感器数据

发送:08 03 00 2A 00 01 a5 5b

返回:08 03 02 0E 72 E0 00 ,其中0E 72就是采集光敏传感器的AD值,不同光照条件下这个值会相应不同。如图4.3.

 

第六步:解压缩配套光盘\源代码\Zigbee无线传感网原理与应用下的实验8 基于ZStack光敏传感器实验-V20170222文件到电脑磁盘第一级目录,建议放在桌面,因为我们的配套光盘目录比较深,如果直接在配套光盘打开Zigbee工程文件的话,会出现图4.4所示报错等原因而打不开工程。

后来找到了文件路径解决了这个问题。

第六步:在电脑桌面打开刚解压以后的文件实验8 基于ZStack光敏传感器实验-V20170222\ZStack-CC2530-2.5.0\Projects\zstack\Samples\GenericAppV2.3\CC2530DB下的IAR工程文件“GenericApp.eww”。如图4.5

第七步:实验的协调器与终端采用默认的PANID = 0xFF11(同一个地方多人实验最好设置自己独立一个PANID0~FFFF),与他人不同,所以实验时候是随便设置的,这个不是很影响;在编译下载协调器程序和终端节点程序前,修改PANID和信道方法如图4.6所示简单点说就是每次打开IAR工程时候,先修改自己的PANID号,然后再分别选择协调器、路由器、终端相应的工程,然后分别编译下载就可以,即协调器、路由器、终端的PANID是相同的,我们只要一开始打开IAR工程修改即可。

修改第58行的ID值

第八步: 选择不同项目进行编译下载,首先选择协调器的项目,如图4.7所示;

第九步: 点击上边工具栏project->Rebuild All,编译整个工程,将生成GenericApp.hex可执行文件,该可执行文件自动保存在 实验8 基于ZStack光敏传感器实验-V20170222\ZStack-CC2530-2.5.0\Projects\zstack\Samples\GenericAppV2.3\CC2530DB\CoordinatorEB\Exe目录下。(注意:请根据该目录下GenericApp.hex文件的生成时间,判断该文件是否是自己刚刚编译完成的。)编译成功,则下边信息栏会提示0错误。如图4.8所示。

第十步:使用CCDebugger仿真器将电脑与协调器节点下载接口相连。(注意观察CCDebugger仿真器的灯是否变绿,如果是红色则按仿真器的复位键;让仿真器灯变绿)如图4.9所示。

第十一步:  点击工具栏的下载按钮,将程序下载到CC2530上,然后点击

如图4.10所示。

图4.10 下载程序

第十二步: 在IAR里面选择“EndDeviceEB”工程,如图4.11。重复第九步到第十一步的步骤下载“EndDeviceEB”工程代码到节点。

图4.11

第十三步:把节点的三档开关拨打到中间,如图4.12

图4.12

第十四步:重新打开或按Reset复位节点底板。用公母直连串口线将协调器节点的串口与电脑的的9针COM口相连,协调器的开关S1拨打到右边,让DB9和CC2530相连。如图4.13所示。

图4.13

第十五步:打开串口调试助手,串口参数:9600-8-N-1,如图4.14

发送:08 03 00 2A 00 01 a5 5b

返回:08 03 02 0A C1 A3 75,其中0A C1就是采集光敏传感器的AD值,不同光照条件下这个值会相应不同。如图4.14.

4.2 源码分析

第一步:在GenericAPP.c里面

协调器接收到上位机发送的指令:HalUARTRead(0,From_Pc_Cmd,Rx_Count);如图4.15

图4.15

第二步:在GenericAPP.c里面

协调器把接收到的指令通过Zigbee无线发送给终端节点:

GenericApp_SendTheMessage(From_Pc_Cmd, Rx_Count);,如图4.15

第三步:在“Enddevice.c”里终端节点接收到指令以后,把指令通过串口发送给STM32芯片,如图4.16

图4.16

第四步:STM32芯片串口接收到数据以后,处理指令,然后通过串口把带有光敏传感器数值的数据返回给终端节点。

第五步:在“Enddevice.c”里,终端节点通过串口接收到数据以后通过无线把数据发送给协调器。如图4.17.

图4.17

第六步:在GenericAPP.c里面,协调器接收到无线数据,并把数据通过串口发送给上位机。如图4.18

图4.18

5.实验结果

这次实验在小组成员的合作下顺利完成了。

6.实验总结

首先,在对所学的理论课而言,实验给了我们一个很好的把理论应用到实践的平台,让我们能够很好的把书本知识转化到实际能力,提高了对于理论知识的理解,认识和掌握。 其次,对于个人能力而言,实验很好的解决了我们实践能力不足且得不到很好锻炼机会的矛盾,通过实验,提高了自身的实践能力和思考能力,并且能够通过实验很好解决自己对于理论的学习中存在的一些知识盲点。 对于团队协作与待人处事方面,实验让我们懂得了团队协作的重要性,教导我们以谦虚严谨的态度对待生活中的人与事,以认真负责的态度对待队友,通过实验的积极的讨论,理性的争辩,可以让我们更加接近真理。

   实验中应注意的有几点。

一是一定要先弄清楚原理。 这样在做实验,才能做到心中有数,从而把实验做好做细。一开始,实验比较简单,可能会不注重此方面,但当实验到后期,需要思考和理解的东西增多,个人能力拓展的方面占一定比重时,如果还是没有很好的做好预习和远离学习工作,那么实验大部分会做的很不尽人意。

二是在养成习惯方面。 一定要真正的做好实验前的准备工作,把预习报告真正的学习研究过,并进行初步的实验数据的估计和实验步骤的演练,这样才能在真正实验中手到擒来,做到了然于心。

不过说实话,在做试验之前,我以为不会难做,就像以前做的实验一样,操作应该不会很难,做完实验之后两下子就将实验报告写完,直到做完实验后,我才知道其实并不容易做,要注意其中的很多细节,而且要真正的领悟其中的道理,而不是无脑跟着视频操作,这样我们不会有真正的收获的。它真的不像我想象中的那么简单,天真的以为自己把平时的理论课学好就可以很顺利的完成实验,事实证明我错了。

在实验中,我更是受益匪浅。在做实验设计的时候,本着实践性,创新性,可行性和有意义性的原则,完成了这个实验。实验本身的原理并不是很复杂,但那只针对有过相关学习的同学,对于我这样的初学者,对于实验原理的掌握本身就是一个挑战。通过翻阅有关书籍和查阅相关的资源,加深自己对功能的理解,,将实验和理论相结合,并且在同学和老师的帮助下完成了实验。本次实验给我留下最深刻的是:严谨以及求实。努力的弄懂原理,还要进行再创造。能做好的事就要把它做到,把生活工作学习当成是在雕刻一件艺术品,真正把心投入其中,最终命运会为你证明你的努力不会白费。

最后,感谢老师的辛苦指导和同学的热心帮助!

其他实验按需自行下载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1584576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue2和Vue3组件通信:父子与兄弟间的桥梁

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

Chatgpt掘金之旅—有爱AI商业实战篇|在线辅导业务|(十三)

演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 一、AI技术创业播客剧本写作服务有哪些机会? 人工智能(AI)技术作为当今科技创新的前沿领域,为创业者提供了广阔的机会和挑战。…

分类模型绘制决策边界、过拟合、评价指标

文章目录 1、线性逻辑回归决策边界1.2、使用自定义函数绘制决策边界1.3、三分类的决策边界1.4、多项式逻辑回归决策边界 2、过拟合和欠拟合2.2、欠拟合2.3、过拟合 3、学习曲线4、交叉验证5、泛化能力6、混淆矩阵7、PR曲线和ROC曲线 x2可以用x1来表示 1、线性逻辑回归决策边界 …

TQ15EG开发板教程:在MPSOC上运行ADRV9009

首先需要在github上下载两个文件,本例程用到的文件以及最终文件我都会放在网盘里面, 地址放在最后面。在github搜索hdl选择第一个,如下图所示 GitHub网址:https://github.com/analogdevicesinc/hdl/releases 点击releases选择版…

Vue 读取后台二进制文件流转为图片显示

Vue 读取后台二进制文件流转为图片显示 后台返回格式 <img :src"payImg" id"image" style"width: 150px;height: 150px;" alt"">axios写法 重点 responseType: ‘blob’ &#xff0c; 使用的是res中的data blob this.$axios.…

科学计算最新成果!基于多分支物理信息深度算子神经网络的快速通用热仿真模型...

热仿真在各个领域中起着至关重要的作用&#xff0c;通常涉及复杂的偏微分方程&#xff08;PDE&#xff09;仿真以进行热优化。为了解决通过传统方法求解复杂的偏微分方程所面临的挑战&#xff0c;我们利用神经网络进行热预测&#xff0c;尤其是采用深度神经网络作为PDE的通用求…

HTML5学习记录

简介 超文本标记语言&#xff08;HyperText Markup Language&#xff0c;简称HTML&#xff09;&#xff0c;是一种用于创建网页的标准标记语言。 编辑器 下载传送门https://code.visualstudio.com/ 下载编辑器插件 标题 标题通过 <h1> - <h6> 标签进行定义。 …

花样鼠标悬停特效

代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style&…

头歌-机器学习 第9次实验 随机森林

第1关&#xff1a;Bagging 任务描述 本关任务&#xff1a;补充 python 代码&#xff0c;完成 BaggingClassifier 类中的 fit 和 predict 函数。请不要修改 Begin-End 段之外的代码。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 什么是 Bagging&#xf…

python 有哪些函数

Python内置的函数及其用法。为了方便记忆&#xff0c;已经有很多开发者将这些内置函数进行了如下分类&#xff1a; 数学运算(7个) 类型转换(24个) 序列操作(8个) 对象操作(7个) 反射操作(8个) 变量操作(2个) 交互操作(2个) 文件操作(1个) 编译执行(4个) 装饰器(3个) …

PHP自助建站系统,小白也能自己搭建网站

无需懂代码&#xff0c;用 自助建站 做企业官网就像做PPT一样简单&#xff0c;您可以亲自操刀做想要的效果&#xff01; 自助建站是一款简单、快捷、高效的工具&#xff0c;可以帮助您制作响应式网站。我们的自助建站系统&#xff0c;将传统的编码工作转化为直观的拖拽操作和文…

功能测试_验证两个两位数整数边界数据的求和_边界值分析法

验证两个两位数整数边界数据的求和 上点&#xff1a;刚好等于边界的值 &#xff08;取值不考虑开闭区间&#xff09; 离点&#xff1a;刚好小于/大于边界上的值 &#xff08;取值类型看需求&#xff09; 内点&#xff1a;边界范围内的任何取值 &#xff08;取中间的值&#…

2024年 前端JavaScript 进阶 第4天 End 笔记

4.1-内容和浅拷贝 4.2-递归函数 4.3-深拷贝实现 4.4-利用lodash和JSON实现深 4.5-异常处理-throw和try、catch 4.6-普通函数和箭头函数的this 4.7-call方法改变this指向 4.8-apply方法 4.9-bind方法以及总结 4.10-什么是防抖以及底层实现 4.11-什么是节流以及底层实现 4.12-节流…

【教学类-50-07】20240411“数一数”图片中四种图形出现的数量随机或固定

背景需求 今天孩子们点数时&#xff0c;我核对答案&#xff0c;突然发现有两张图片上的三角、正方、椭圆、圆形只有1个&#xff0c;我感觉这个随机的概率有问题。 仔细点数后发现以下代码生成的几何图形数量是相同的 &#xff08;如果三角有3个&#xff0c;那么正方形、圆形…

LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回

背景描述 这一节内容比较复杂&#xff1a; 涉及到使用工具进行百科的检索&#xff08;有现成的插件&#xff09;有AgentExecutor来帮助我们执行后续由于上下文过大&#xff0c; 我们通过计算num_tokens&#xff0c;来控制我们的上下文 安装依赖 pip install --upgrade --qu…

上海亚商投顾:创业板指低开低走 低空经济概念股尾盘拉升

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日集体调整&#xff0c;沪指午后跌超1%&#xff0c;深成指、创业板指盘中跌超2%&#xff0c;尾盘跌…

【机器学习】数学基础详解

线性代数&#xff1a;构建数据的骨架 数学对象 标量&#xff08;Scalar&#xff09; 标量是最基本的数学对象&#xff0c;代表了单个的数值&#xff0c;无论是整数还是实数。在机器学习中&#xff0c;标量可以用来表示一个模型的单个参数&#xff0c;如偏差&#xff08;bias&…

appium driver install uiautomator2 安装失败

报错 Installing ‘uiautomator2’ using NPM install spec ‘appium-uiautomator2-driver’ Error: Encountered an error when installing package: npm command ‘install --save-dev --no-progress --no-audit --omitpeer --save-exact --global-style --no-package-lock…

深度学习之使用BP神经网络识别MNIST数据集

目录 补充知识点 torch.nn.LogSoftmax() torchvision.transforms transforms.Compose transforms.ToTensor transforms.Normalize(mean, std) torchvision.datasets MNIST&#xff08;手写数字数据集&#xff09; torch.utils.data.DataLoader torch.nn.NLLLoss() to…

LVM逻辑卷管理器

LVM是Linux系统对硬盘分区进行管理的一种机制&#xff0c;在硬盘分区和文件系统之间添加了一个逻辑层&#xff0c;它提供了一个抽象的卷组&#xff0c;可以把多块硬盘进行卷组合并。这样&#xff0c;用户无需关心物理硬盘设备的底层架构和布局&#xff0c;就可以实现对硬盘分区…