资源描述
本科毕业设计(论文)( 2018 届 )题 目: 基于单片机的无线通信系统 学 院: 数理与信息工程学院 专 业: 电子信息工程 学生姓名: 葛顺杰 学号: 14610120 指导教师: 张浩然 职称: 教授 合作导师: 职称: 完成时间: 2018 年 4 月 15 日 成 绩: 浙江师范大学本科毕业设计(论文)目录一、诚信承诺书二、正文三、浙江师范大学本科毕业设计(论文)任务书四、浙江师范大学本科毕业设计(论文)文献综述五、浙江师范大学本科毕业设计(论文)开题报告六、浙江师范大学本科毕业设计(论文)外文翻译七、浙江师范大学本科毕业设计(论文)指导记录八、浙江师范大学本科毕业设计(论文)中期检查表九、浙江师范大学本科毕业设计(论文)作品(实物)验收单十、浙江师范大学本科毕业设计(论文)结题答辩资格审查表十一、浙江师范大学本科毕业设计(论文)结题答辩记录十二、浙江师范大学本科毕业设计(论文)评审表浙江师范大学本科毕业设计(论文)诚信承诺书本人郑重承诺:我承诺所呈交的毕业设计(论文)是本人在指导教师的指导下,按照学校和学院的有关规定,独立研究完成的。本人在毕业设计(论文)写作过程中恪守学术道德和学术规范,设计(论文)中凡引用他人已经发表或未发表的成果、数据、观点等,均已注明并列出了有关文献的名称、作者、年份、刊物名称和出版文献的出版机构、出版地和版次等内容,除此之外均为本人的观点和研究成果。如有违反,本人愿接受处罚并承担一切责任。承诺人签名(手写): 年 月 日浙江师范大学本科毕业设计(论文)正文目 录摘要1Abstract11 引言21.1 研究的背景与意义21.2 国内外发展与研究现状21.3 主要研究内容32 系统方案分析与选择论证32.1 系统设计要求32.2 主控芯片方案32.3 无线通信模块方案42.4 温度传感方案42.5 显示模块方案43 系统硬件电路设计53.1 主控芯片最小系统板设计53.2 无线收发模块63.3 显示模块73.4 温度采集模块73.5 蓝牙模块83.6 报警模块103.7 电源模块104 软件部分设计与实现114.1 Keil软件介绍114.2 系统总体程序流程设计114.3 系统主机程序流程设计124.4 系统从机程序流程设计124.5 无线模块软件流程设计134.6 温度检测程序流程设计144.7 显示模块流程设计154.8 蓝牙APP模块设计155 系统调试与结果165.1 调试步骤165.2 测试环境165.3 测试设备165.4 测试目的175.5 测试结果176 结论18参考文献19致谢20附录2131基于单片机的无线通信系统数理与信息工程学院 电子信息工程 葛顺杰(14610120)指导老师:张浩然(教授)摘要:随着社会的进步和生产的需要,无论是在工业上,农业上,甚至是在日常中,无线通信得到了广泛的应用,可以说它已经逐渐融入了我们的生活,并取得了相当重要的地位。温度是常见的和最基本的物理量之一,生产生活中都需要对其进行调控来达到相应的目的。本文设计则是取温度这一物理量作为传输数据,使用单片机作为系统整体控制器件,通过nRF24L01无线模块进行无线通信。另外,本系统还可以通过蓝牙将数据发送到手机中,通过手机观察数据,免去了需要实时到现场收集的烦恼。关键词:STM32F03ZET6;nRF24L01;温度Wireless communication system based on single chip microcomputerTutor:Zhng Horn(College of Mathematics, Physics and Information Engineering,Electronics and Information Engineering,G Shnji,14610120)Abstract: With the progress of the society and the needs of the production, whether in industry, agriculture, even in daily, wireless communication has been widely used, it has gradually integrated into our lives, and has obtained the quite important position. Temperature is one of the most common and basic physical quantities, and it needs to be regulated in production and life to achieve the corresponding goal.The design of this paper is to take the physical quantity of temperature as the transmission data, using the single chip as the whole control device of the system, and wireless communication through the nRF24L01 wireless module. In addition, the system can also send data to the mobile phone via bluetooth, and the data can be observed through the mobile phone, which eliminates the need to collect the data in real timeKeywords:STM32F03ZET;nRF24L01;Temperature1 引言随着现代信息技术的不断发展,人们已经不再满足于有线通信,发展无线通信成为必然趋势。而同时无线通信技术也不断渗透到各个领域中,在人们的生产生活中越来越占据巨大的比重,因此对于无线通信系统的设计就具有十分巨大的现实与研究意义。1.1 研究的背景与意义随着社会的进步和生产的需要,无线通信已经逐渐融入了我们的生活,并逐渐取得了相当重要的地位。在工业生产上,由于生产环境恶劣,工作人员长时间待在恶劣的环境之中会产生健康问题,只能将传感器先安置在目标点之后,让机器先行采集数据后再传输数据到环境良好的室内,这样就需要解决传输问题。一般厂房或是工作室都离数据点有较远的距离,此时就需要很长的数据线来有线传输数据,但是这样就会有另一个问题,那就是材料浪费,占用过多空间,这时就需要利用无线传输的方式来收集数据,也显得十分便利与实用。在农业生产上,温室大棚进行温度检测,粮仓管理,一般目标分散,占地面积大,检测目标多,传统方法复杂,这时无线通信就能够解决很多问题,例如多点收集数据,进行温度监控并实时调控等。在日常生活中,用手机控制家里的电器,并用手机接收家中温度湿度,然后通过远程遥控调整家里的温度湿度,也是应用无线通信系统才能实现。综上所述,无论是生产劳动或者是日常生活中,无线通信都带来了便利与实用。无论是数据的采集预警,并对相关温度或是湿度进行控制,抑或是生活中的网上冲浪,看新闻视频,打电话与发短信,都是无线通信的功劳。因此,既然无线通信如此常见,对其进行学习研究就显得十分必要了。1.2 国内外发展与研究现状自从进入无线通信时代以来,国内外无不对无线通信研究投入巨大比重。从最早的1G,逐渐发展到现在的5G技术,这离不开国内外的共同研究。对于无线通信模块来说,主要分为蜂窝类与非蜂窝类。蜂窝类就是平时生活中用到的3G、4G通信,适合长距离通信。而非蜂窝类则是wifi、蓝牙、Zigbee等模块。对于单片机来说,使用蜂窝类的模块一般适用于现今比较火热的物联网等,而非蜂窝类已经能够满足其对于数据传输的要求。而在上述的非蜂窝类模块中,基本上是在2.4GHz非授权频段上,在这个频段上已经云集了多个标准无线协议。自Nordic等公司推出NRF24L01芯片之后,许多公司相继推出基于该芯片的无线模块,直到现在,Nordic还是在继续推出NRF系列的无线通信模块。相比较国外的无线模块,国内对于芯片的研究确实落后了一截,但是还是有一些公司开发出了属于自己的无线通信模块,例如上海博通的BK2411,虽然早功耗与传输距离上相对差了一些。从另一方面来说,国内的无线模块的应用确实得到了比较大的发展,无线通信与物联网最近开始变得热门起来,相应的无线模块的使用也必定会越来越多,对于无线模块的研究肯定做得比较多,同时,这也一定会让国内厂商在自主研发的道路上走得越来越好。因此,综上所述,本文采用了在2.4GHz频段上的nRF24L01作为无线传输模块,不仅具有丰富的学习与应用资源,同时还方便获得与使用。通过传感器DS18B20将数据送到STM32单片机进行处理后,通过nRF24L01模块将数据传输到接收端显示,最终实现温度的无线传输。1.3 主要研究内容本系统的设计主要采用Nordic公司推出的工作于2.4GHz频段的nRF24L01射频芯片,由STM32F103ZET6单片机作为主控芯片来实现短距离的无线数据通信。整个系统主要分为接收端与发送端两部分,在发送端主要以STM32F103ZET6单片机为核心,使用温度转换芯片DS18B20实时采集温度并通过无线模块nRF24L01将数据传输到接收端,然后在接收端的单片机则将数据显示在OLED上,并实现对温度过高或过低进行报警。另外,在接收端还通过HC05蓝牙模块将数据发送到手机APP中,方便浏览查阅。2 系统方案分析与选择论证2.1 系统设计要求根据本系统的应用环境,具体的技术要求如下:1.体积小巧。本系统主要是要用于短距离的无线数据通信,所以需要在尽可能的条件下控制大小,如果过大,会占据无谓的空间。同时,设计小巧可以在本系统的基础上再加上其他更多的外设,便于以后对于本系统的拓展与优化。2.传输可靠。本系统的主要功能就是无线通信,有别于传统的有线通信,将数据通过电磁波传播,会产生一定的安全问题,那么为了安全可靠性,设计一个完善的系统就十分重要。另一方面,空气之中存在许多电磁干扰,所以系统需要有一定的抗干扰能力。3.成本低。本系统的实现功能并不困难,并不需要使用昂贵的元器件与模块,所以在满足系统要求的条件下尽量节约成本,使其更加具有竞争性。2.2 主控芯片方案方案一:采用传统的AT89C51系列单片机作为主控芯片,价格低廉,体积较小,操作简单,功耗较低。方案二:采用ST公司生产的STM32F103ZET6单片机作为主控芯片,该芯片主频达72MHz并有8个定时器、计数器可供选择,功能强大、处理速度快、数据接口多、性价比高。在单片机开发中具有相当重要的地位。考虑到本毕业设计的要求,可能会用到多个串口,同时需要对无线模块进行配置,方案一中的单片机功能比较简单,并且容易出现差错,相对来说方案二中的单片机更加稳定与功能强大,另一方面,在大学课题设计中,使用后者频率更高,对其更加熟悉,所以选择方案二中的STM32系列单片机作为主控芯片,同时这样也比较容易实现拓展与完善。2.3 无线通信模块方案方案一:采用GSM模块进行通信,该模块需要使用手机卡,是通过移动卫星或是基站来传递信息,虽然每回传输的数据内容较多,且传输距离十分远,但是要内置SIM卡,通信过程收费,不仅成本高,而且在硬件与软件设计中也比较复杂。方案二:采用蓝牙模块进行通信,蓝牙模块主要是使用串口方式来进行数据传输,而串口方面是比较容易被其他设备连接的,容易对数据产生干扰。方案三:采用nRF24L01无线射频模块进行通信,该模块低功耗,价格便宜,同时采用SPI总线通信模式,操作简单。考虑到本毕业设计的要求,同时考虑到总体设计的复杂程度与个人实际情况,我们采用方案三作为本系统的通信模块。2.4 温度传感方案方案一:采用AD590单片集成两端感温电流源,该模块广泛应用于不同的温度控制场合,精度高、价格低、线性好。但是需要其他元器件进行辅助测试,电路设计比较复杂。方案二:采用美国公司生产的DS18B20可组网数字温度传感器芯片,该模块体积小巧、经济实惠,硬件连接简单,具有高实用性,同时采用一线总线方式,传输数据简单。在电路设计上,使用DS18B20的话,相关硬件电路设计简单,编程容易,而AD590需要其他辅助电路,线路复杂,编程困难。考虑到本设计的温度指标,DS18B20已经可以基本满足,所以选择方案二。2.5 显示模块方案方案一:采用液晶LCD1602显示信息,这是一款通过总线模式来传输数据的显示模块,容易控制但是显示的内容比较单一。方案二:采用LED7段数码显示管控制,单个数码管显示就需要连接需要较多引脚,同时占用总系统板的空间,显示内容也简单。方案三:采用OLED来显示,该显示模块体积小,价格便宜,显示精度高,且可以翻页,显示内容多。考虑到本毕业设计的要求,需要显示的内容比较多,且显示速度与精度要求比较高,所以我们采用方案三。3 系统硬件电路设计具体系统框图如下图3-1、3-2所示。图3-1 系统主机框图图3-2 系统从机框图从框图中可以看出,从机主要通过温度采集模块DS18B20来采集有关温度的数据,在OLED上显示之后,通过nRF24L01无线传输模块将数据发送出去,主机在接收到从机发送的数据之后,将温度在OLED上显示,同时判断报警模块是否工作。这样一来,就达到了通过无线通信来监控温度的目的。接下来,将分别具体介绍系统的各个模块。3.1 主控芯片最小系统板设计本系统主要使用ARM公司生产的基于Cortex-M3内核的STM32F103系列单片机作为控制核心,它具有性价比高、功耗低、处理速度快、功能强大等优点,主频达72MHz并有8个定时器、计数器可供选择,在本系统中的应用主要是对nRF24L01模块进行配置,选择发送的数据,对接收到的数据进行校验和解码,并将发送或接收的数据和其他有效信息控制显示在OLED显示屏即本课题的人机交互界面上,另外还要与手机APP进行通信。对于本系统来说,由于是直接使用系统板来操作,所以例如电源模块、复位电路、晶振电路等相关外设都已经集成在系统板上,对于设计来说更加方便了。最小系统板大小为5.2CM*6.2CM,共有四面排针引出的引脚,所以最小系统板引脚设计如下图所示:图3-1-1 单片机引脚图3.2 无线收发模块该模块主要使用有Nordic公司生产的nRF24L01模块构成,它使用SPI通信,能实现点对点或是1对6的无线通信,无线通信速度最高可达到2Mbps。它与蓝牙通信相比,优点是低功耗,传输速率快,抗干扰能力强,系统费用(低速微处理器也能进行高速射频发射)低,更适合近距离通信。对于SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。SPI接口主要应用在EEPROM,FLASH,实时时钟,A/D转换器,还有数字信号处理器和数字信号解码器之间。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,STM32也有多个SPI接口。nRF24L01无线模块工作于2.4GHz频段,主要有4种工作方式,这样在一定程度上更方便地进行节能设计。而工作方式的选择一般靠对几个寄存器的改变来实现。在实际应用中,需要对模块内部参数进行配置后,才能正常工作,使其无线收发。nRF24L01的具体硬件连接图如图3-2-1所示。实物模块如下图3-2-2所示。对于nRF24L01模块,其中2个引脚是电源输入;3个引脚是为了模块与单片机之间进行SPI通信,而另外三个引脚则是对模块进行相关配置需要的输入口。在软件设计时,需要对这些引脚进行初始化,使单片机使能引脚,再对相关函数进行初始化。图3-2-1 nRF24L01引脚图 图3-2-2 nRF24L01实物图3.3 显示模块OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display,OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。LCD都需要背光,而OLED不需要,因为它是自发光的。这样同样的显示,OLED效果要来得好一些。OLED具有多种尺寸大小,同时具有多种外接引脚方式,这样一来,就存在多种数据传输方式,例如8080总线与4线SPI接口方式。另外,OLED并不需要高压,直接接3.3V就可以工作了。OLED具体硬件连接如下图所示:图3-3-1 OLED模块硬件连接图3.4 温度采集模块该模块采用美国DALLAS公司推出的数字测温芯片DS18B20。它是一种“一线总线”接口的温度传感器,具有较强的抗干扰性。与传统的热敏电阻等测温元件相比,它体积小巧、简洁经济,可以使用外接连接线使其在不同环境位置下工作,大大提高实用性。同时它还可以使用相当宽的电压范围,只用一根总线进行数据传输也使其与单片机之间的接口简单,硬件设计方便。另外它测温范围广,从零下55摄氏度到125摄氏度均可,精度可达到0.5,在组建数字温度传感器网络方面具有十分重要的地位。与单片机连接组成系统时,它能直接读出被测温度,并且直接将数据传输给单片机处理。具体传感器引脚如下图所示:图3-4-1 DS18B20引脚图DS18B20具有多种封装方式,在本系统电路设计中,使用的是上图的左侧封装,因此只需要连接三个引脚即可。其中,GND引脚连接电源地,VDD引脚连接外接供电电源输入端,DQ引脚则是温度数据输出口,连接到单片机I/O口,传输检测到的原始温度数据。通过该模块测量目标地点的温度后,将数据送到从机中,然后从机将数据处理后在OLED上显示,并将数据发送到接收端。具体硬件连接如下图所示:图3-4-1 DS18B20硬件连接图3.5 蓝牙模块嵌入式蓝牙串口通讯模块具有两种工作模式:命令响应工作模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有AT命令,用户可向模块发送各种AT指令,为模块设定控制参数或发布控制命令。通过控制模块外部引脚输入电平,可以实现模块工作状态的动态转换。本系统蓝牙功能主要使用HC05蓝牙模块来实现。模块硬件连接如下图所示:图3-5-1 蓝牙模块硬件连接图对于本系统使用的蓝牙模块,可首先将其设置为命令响应模式,然后通过电脑上的软件来具体配置参数,之后直接连接到单片机时就能正常工作。具体操作位为当模块插入电脑时,紧紧按住模块表面上的按钮,当指示灯慢闪时,说明已经进入相应模式,此时松开按钮,即可通过串口助手等进行调试。这样就能够在串口助手等程序上使用AT指令来设置HC05蓝牙模块。蓝牙模块常用AT指令如下表所示:表3-5-1 常用AT指令指令功能响应参数AT测试用OK无AT+RESET模块复位或重启OK无AT+ORGL恢复默认状态OK无AT+NAME=模块命名OKParam:蓝牙设备名称AT+ROLE=设置模块角色OKParam:主要有:0从角色;1主角色;2回环角色AT+UART?询问串口参数例:9600,0,1三个数字分别对应波特率,停止位与校验位3.6 报警模块为了保证该系统具有一定的警示功能,本设计采用了电式蜂鸣器作为声音报警部分,体积小,方便安装。当检测到温度不在预定范围内时,蜂鸣器就会正常工作,发出声音。蜂鸣器作为发声元件,主要的类型可以分为有源蜂鸣器和无源蜂鸣器。无源蜂鸣器需要在两端施加直流电压就可以发出声音,而有源蜂鸣器则需要在两端施加具有一定周期的电压,例如正弦波或方波才可发出声音。根据不同的用户需求,需要选择不同的蜂鸣器种类,具体根据设计决定。本设计采用的是有源蜂鸣器,只需要通过一个三极管来驱动即可使蜂鸣器正产工作。具体硬件连接如下图所示:图3-6-1 报警模块硬件连接图3.7 电源模块电源电路提供系统所需电压如3.3V和5V。通过外接电源,接入大于5V的电压,然后通过LM7805芯片将电压稳到5V,之后再使用LM1117芯片将电压稳到3.3V从而达到本设计的要求电源。对于本系统来说,复位、晶振和指示电路已集成在STM32F103ZET6开发板上,所以只要通过充电宝直接供给单片机,就能得到相应电压。具体硬件连接如下图所示:图3-7-1 电源模块硬件连接图4 软件部分设计与实现4.1 Keil软件介绍本系统中的软件设计基本上都是通过Keil Vision5来编程实现的。Keil是一款功能强大的C语言软件开发系统,同时Keil与多个单片机公司之间具有合作关系,所以可以直接通过软件自带的内容来构建相应单片机的环境。与此同时,Keil在使用过程中简单方便,多处具有人性化设计,可以适应不同人的编程习惯。在软件设计过程中,该软件也可以自由导出导入相关的库文件,运行过程中也可以通过设计节点来探寻出现问题的地方。Keil还包含两个ARM公司的C/C+编译器、汇编器和连接器,同时高度优化的运行库能优化代码大小和性能。软件包能够随时被导入到MDK或DS-MDK中,使相关的设备能不需要通过工具链来获得技术支持,它们包括设备支持、CMSIS库、中间设备、板级支持、代码模板和示例项目。4.2 系统总体程序流程设计对于系统的总体设计,是对于无线通信的一个简要流程,主要是要做到主机与从机之间的有效连接以及对数据的处理与显示。首先是从机部分的温度采集,当数据进行处理后在OLED上显示,再通过nRF24L01无线模块传输到主机中,最后在主机当接收到数据后,进行处理后在OLED显示屏中显示温度数据等内容。其中,关键点在于数据传输过程中的误码乱码以及编码解码,这就需要做好主从机之间的通信协议。具体流程图如图4-2-1所示。图4-2-1 系统总体流程框图4.3 系统主机程序流程设计对于系统的主机程序流程,主要是对于数据的接收与处理。首先是对单片机进行初始化后,再对无线通信模块与OLED显示屏以及蓝牙模块初始化,然后设置无线模块为接收模式,使主机能与从机配对,让主机能够接受到从机发送的数据,最后将数据处理后显示到OLED显示屏上并判断是否触发报警模式,同时,将温度数据通过蓝牙串口发送到手机APP中。具体流程如下图所示:图4-3-1 系统主机流程框图4.4 系统从机程序流程设计对于系统的从机程序设计,主要是对于温度数据的处理与发送。总体思路与主机程序类似,首先对于单片机与OLED显示屏还有DS18B20温度传感器进行初始化,将无线模块设置为发送模式,之后由单片机读取温度数据,经过处理后显示在OLED上并通过nRF24L01无线传输模块发送出去。具体流程图如下图所示:图4-4-1 系统从机流程框图4.5 无线模块软件流程设计对于nRF24L01无线模块,并不像串口那样通信简单,对于其内部的寄存器需要配置好,才能实现具体的功能,不然只会出错。当发送数据时,首先需要将模块设置为发送模式,即配置TX_Mode,然后将接收处的地址与需要发送的数据写入缓冲区,之后将CE置为高后,就将数据包发出,此时发送端会进入接收模式,如果接收到应答信号,则此次发送数据成功,同时模块就会进入空闲模式,直到下次需要发送数据。否则会自动进行重发,直至达到最大重发次数,产生中断,通知单片机。具体流程如下图4-5-1所示。接收数据时,首先还是需要将模块配置为接收模式,即配置RX_Mode,此时就设置好了接收端的地址。然后等待数据的到来,此时就是类似于空闲模式,而当收到数据包后,首先会对相关的地址数据进行解析,只有当地址匹配时,才会将之后的数据包存入缓存区中,同时转变为发送模式,回传应答信号。这样就完成了一次数据包的正常通信。具体流程如下图4-5-2所示。图4-5-1 无线模块发送流程图 图4-5-2 无线模块接收流程图4.6 温度检测程序流程设计温度检测模块软件设计DS18B20的测温原理遵循严格的单总线协议,需要采用严格的信号时序,以保证数据的完整性。DS18B20一般有6种信号类型。单片机读取模块温度的过程一般为:复位,发SKIP ROM信号,发开始转换命令,延时,再复位,再发SKIP ROM信号,发读存储器命令,连续读出两个字节数据,最后结束。如此反复,完成所有操作,在实际程序设计中,一般先通过软件来检测温度模块是否存在,只有模块存在的条件才能进行下一步操作,之后就会上述步骤来读取温度数据,而在主程序中只要将函数的返回值设定为温度值就可以只用一个整合后的函数来读取温度。具体流程设计如图4-6-1所示:图4-6-1 温度流程图4.7 显示模块流程设计对于OLED显示模块,虽然采用是SPI接口方式,但是若想达到显示正确数据的目标,需要的操作并不难。首先需要对其余单片机相连的I/O口进行初始化,然后对模块进行初始化,最后只要通过函数将相关内容显示到模块上即可。在显示函数上,由于显示屏主要是由一个个点阵构成的,所以想要显示的内容都是由点亮相关点实现的。具体流程如下图所示:图4-6-1 OLED显示流程图4.8 蓝牙APP模块设计在主机中使用了HC05蓝牙模块,因可以使用此模块与手机APP进行通信,这也是本系统题目设计内容之一。蓝牙之间的通信主要是串口通信,所以在主机上需要占用两个串口I/O口,而手机APP的设计则借助于APPInventor。对于手机与模块之间的蓝牙通信,首先需要设置APP端为蓝牙服务器或是服务端,但是串口通信一般为双向的,只要串口连接上,之后就可以数据互传,所以,在本设计中将APP端设置为客户端,用来接收单片机发送的温度数据。其次,需要使单片机上的蓝牙模块与手机蓝牙连接,因为一旦连接上后,就能实现单片机与APP之间的串口通信,这样就需要配置蓝牙模块的相关参数,使其能够完整正确的传输数据。最后需要实现的就是APP对温度数据的显示与更新。具体流程设计如下图所示:图4-7-1 APP流程设计5 系统调试与结果5.1 调试步骤步骤一 完成硬件电路连接。步骤二 将OLED显示模块程序写入开发板,看是否能够正常显示字符。步骤三 将DS18B20温度传感器与OLED一起接入开发板,写入测温程序,看显示屏是否能够正常显示温度。步骤四 将DS18B20温度传感器与OLED显示模块一起接入开发板,写入测温程序,测试能否在OLED上同时显示。步骤五 将nRF24L01无线芯片分别与两块开发板连接,写入收发程序,测试是否能够正常收发。步骤八 将温度检测,报警模块,无线收发与显示,检测系统能否将发送端采集的温度时间数据测出并发送,在接收端的OLED显示屏上显示出来。5.2 测试环境基于单片机的无线通信系统的实物测试,在2018年3月20日在浙江师范大学数理与信息学院电子电工开放实验室内进行5.3 测试设备测试用的无线通信系统实物图如下图所示,所用电源为充电宝。具体测试结果如下图所示:图5-2-1 从机实际测试图图5-2-2 主机实际测试图从上述的实际测试图可以看出,从机通过DS18B20检测到室温并通过nRF24L01模块发送,主机接收到相关数据后显示在OLED上。主机显示屏上的温度数据与从机上显示的相同,可见,无线通信成功了。5.4 测试目的首先验证在从机中是否能够采集到当前室温,并且是否能在OLED显示屏上显示,其次,观察从机是否能够与主机进行通信,将数据发送给主机,最后观察主机是否能将正确数据显示在OLED显示屏上,并且相应的报警模式是否工作。另外,还有手机APP是否能接收到正确的温度数据。5.5 测试结果基于单片机的无线通信系统在实验室进行实际测试,得到以下结果:(1) 当接通电源后,单片机与其他模块均进行初始化,经过在10s内的一段时间后,在从机的显示屏上显示出当前室温。(2) 系统的主机在3s内接收到了从机发送的数据,并在显示屏上显示了与从机显示屏上相同的数据。(3) 当温度数据不在预定的范围内时,蜂鸣器进行警报。(4) 主机中蓝牙模块与手机进行配对后,手机能够收到主机发送的相关温度数据,并进行显示。6 结论对于本系统设计,我深深感到了自己的不足,也对于项目具有一定程度上的不自信,好在有指导老师张老师的帮助导下,经过努力,本论文已经基本完成了预期的目标,相关总结如下:无线通信一直是单片机甚至是日常生产生活中十分常见的领域,除了在生活中人们十分常用以外,生产中也是逐渐融入无线通信的内容。本系统设计的基于单片机的无线通信系统就是一个典型例子。本系统主要是采用了温度这一物理量来作为传输数据,是因为温度无处不在,无论是在日常生活或者是在工业生产上,都起着至关重要的作用,同时温度也是比较容易获取的物理量,而本系统的主要实现功能还是数据的无线通信。另外,还有对于蓝牙APP的设计,由于本身接触相关内容并不多,使用了易于上手的APPInventor来设计软件,由此也产生过许多问题,所幸在同学与老师帮助下成功达到了目标。在本系统的设计过程中也遇到了一些问题,比如单片机的编程比较复杂,需要将多个功能实现程序整合在一起,这样就得将整体程序进行比较好的分类与时序排列,使整个系统不出现问题。还有对于温度传感器的速率不够快与准确,无线传输模块的距离较短,传输数据具有误码乱码的等问题需要解决。在蓝牙程序设计方面,虽然是有易于上手的模块设计,但是不熟练也发生过一些问题,例如蓝牙客户端设置不能,无法正确显示数据等。另外,对nRF24L01无线传输模块传输程序的编程也具有一定难度。能够最终完成整个系统,离不开多次努力与尝试还有指导老师的帮助。通过这次的学习与设计,我学到了许多东西,例如对于温度传感器的应用,无线传输模块的使用以及无线传输数据出现问题时应该如何解决等,这些对于理论知识来说是完全不够的,是需要不断具体的实践与应用的,再次印证了只有实践才能出真理。与此同时,本系统设计也还具有一些不尽人意的地方,需要不断改进。参考文献1冉伟刚.温室大棚数据采集系统D.兰州大学,2010.2张家铭.基于手机蓝牙控制的智能电风扇J.通讯世界,2017(06):282-283.3孙永坚.基于无线传感器网络的智能家居远程监控系统研究与设计D.吉林大学,2014. 4郑磊.基于GPS的精确农业自动变量施肥控制系统的研究D.吉林大学,2009. 5邢艳芳,张延冬.基于Zynq的OLED驱动设计J.液晶与显示,2014,29(02):224-228. 6刘志平,赵国良.基于nRF24L01的近距离无线数据传输J.应用科技,2008(03):55-58. 7戴鑫.网络移动机器人远程监控系统的研究与设计D.贵州大学,2009. 8张杰.基于MC9328MXL处理器的CMMB移动电视信号接收系统的设计与实现D.东北大学,2009. 9薛丹,王天成,丑远婷,曹蓓.基于STM32的激光位置提取及控制装置研究J.工业技术创新,2015,02(01):43-46.10陈智.基于CMMB标准的移动多媒体广播接收与播放系统开发D.厦门大学,2008. 11马传文.基于DSP的新一代渔业基站电台的设计与实现D.西安电子科技大学,2011.12Y. Wang and Z. Chi,System of Wireless Temperature and Humidity Monitoring Based on Arduino Uno Platform, 2016 Sixth International Conference on Instrumentation & Measurement, Computer, Communication and Control (IMCCC), Harbin, 2016, pp. 770-773.13Sun Hao and Chi Zongtao,Design of the environmental temperature and humidity wireless monitoring system, 2015 12th IEEE International Conference on Electronic Measurement & Instruments (ICEMI), Qingdao, 2015, pp. 1652-1657.致谢 从选题到完成毕业设计,总共经过了大约五个月的时间,在此我要特别感谢我的指导老师张老师,感谢他的耐心指导与帮助。在整个毕业设计过程中,其实我是挤出时间来完成的,主要是要准备考研内容,这也给了我很大压力,而在此过程中,张老师也是舵机鼓励与帮助我,让我不至于被多件事务弄得焦头烂额。与此同时张老师也建议我早做准备,虚心请教,多查阅资料与文献,并多动手实践,我觉得这对我来说十分重要,因为我们本就是工科,实践动手有时是比理论知识更加重要的。还有老师对于我查找资料的指导也让我获益匪浅,再次感谢张老师。 原本在开题时对本设计的题目已经有了一定了解,而在具体实际过程中发现其实并不简单。经常会出现这样那样的问题,让我一时之间解决不了,这里我就要感谢我们系的其他几位老师对我的帮助了,不仅在材料上给予了我支持,同时还有软件设计上的指导。另外,同学给我的帮助也是不可忽视的,有时当我有了一些自己不明白的问题时,只要找了同学帮助,就会有种豁然开朗的感受。 最后还要感谢我的母校与曾经给予我影响的老师们,我是在电子信息工程这个大家庭里成长起来的,无论以后我从事什么工作或是完成什么任务,我觉得都离不开这大学四年里的经历与学习。谢谢你们!附录1 系统设计总体电路图图1-1 系统设计电路图2 系统设计PCB图图2-1 系统设计PCB图3 实际测试图与APP测试图图3-1 从机实际测试图图3-2 主机实际侧视图图3-3 手机APP测试图1. 主要程序1.1 主程序部分#include led.h#include delay.h#include key.h#include sys.h#include oled.h#include ds18b20.h #include 24l01.h #include usart.h u8 ii=6; int main(void) u8 t; u8 fuhao; u8 ceshi2;u8 xiaoshu;u8 fuhao2; short temperature; u8 tmp_buf33;delay_init(); /延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /设置NVIC中断分组2:2位抢占优先级,2位响应优先级 LED_Init(); /LED端口初始化OLED_Init();/初始化OLED NRF24L01_Init(); /初始化NRF24L01 usart3_init(9600); OLED_ShowString(0,0,ALIENTEK,24); OLED_ShowString(0,24, 0.96 OLED TEST,16); OLED_Refresh_Gram();/更新显示到OLED / while(DS18B20_Init()/DS18B20初始化/OLED_ShowString(0,40,DS18B20 Error,12);/OLED_Refresh_Gram();/delay_ms(200);/LCD_Fill(30,130,239,130+16,WHITE);/ delay_ms(200);/OLED_ShowString(0,40,18B20 OK,12);while(NRF24L01_Check() OLED_ShowString(54,40,24L01 Error,12); OLED_Refresh_Gram();/更新显示到OLED delay_ms(200);/OLED_Clear();/LCD_ShowString(30,130,200,16,16,NRF24L01 Error);/delay_ms(200);/LCD_Fill(30,130,239,130+16,WHITE); OLED_ShowString(66,40,24L01 OK ,12); /OLED_Refresh_Gram();/更新显示到OLED OLED_ShowString(0,52,Temp: . C,12); OLED_Refresh_Gram();/NRF24L01_TX_Mode();NRF24L01_RX_Mode(); /t= ; /检测DS18B20/ii=DS18B20_Init();/ while(ii=1)/DS18B20初始化/OLED_ShowString(0,40,18B20 Error,12);/OLED_Refresh_Gram();/更新显示到OLED /delay_ms(200);/ /OLED_ShowString(0,40,18B20 OK ,12);/ OLED_Refresh_Gram();/更新显示到OLED while(1) /下面为接收部分程序 OLED_ShowString(0,40,RX_Mode,12); OLED_Refresh_Gram();/更新显示到OLED ii=NRF24L01_RxPacket(tmp_buf);if(ii=0)/一旦接收到信息,则显示出来.tmp_buf32=0;/加入字符串结束符OLED_ShowNum(30+6,52,tmp_buf0+0 x32,1,12);/显示正数部分OLED_ShowNum(30+6+6,52,tmp_buf1+0 x32,1,12);/显示正数部分OLED_ShowNum(30+6+6+6+6,52,tmp_buf2+0 x32,1,12);/显示正数部分 OLED_ShowChar(30,52,tmp_buf3,12,1);/显示负号 OLED_Refresh_Gram();/更新显示到OLED else delay_us(100); t+;if(t=10000)/大约1s钟改变一次状态t=0;/LED0=!LED0; /通过蓝牙发送/USART_SendData(USART2, 0 x7e); delay_ms(5); / USART_SendData(USART2, 0 xff); delay_ms(5); / USART_SendData(USART2, 0 x35); delay_ms(5);/ USART_SendData(USART2, 0 x36); delay_ms(5);ceshi0=tmp_buf0;ceshi1=tmp_buf1;xiaoshu=tmp_buf2;fuhao2=tmp_buf3;u3_printf(%c%d%d.%d,fuhao2,ceshi0,ceshi1,xiaoshu);delay_ms(5);/下面为读取模式程序/ if(t%10=0)/每100ms读取一次/temperature=-670;/temperature=DS18B20_Get_Temp();/if(temperature0)/OLED_ShowChar(30,52,-,12,1);/显示负号/temperature=-temperature;/转为正数/fuhao=-;/else OLED_ShowChar(30,52, ,12,1);/去掉负号/fuhao= ;/OLED_ShowNum(30+6,52,temperature/10,2,12);/显示正数部分 / OLED_ShowNum(30+6+6+6+6,52,temperature%10,1,12);/显示小数部分 / /OLED_Refresh_Gram();/ delay_ms(10);/t+;/if(t=20)/t=0;/LED0=!LED0;/ii=NRF24L01_TxPacket(tmp_buf);/if(NRF24L01_TxPacket(tmp_buf)=TX_OK)/tmp_buf0=temperature/100;/tmp_buf1=temperature/10-tmp_buf0*10;/tmp_buf2=temperature%10;/tmp_buf3=fuhao;/tmp_buf32=0;/加入结束符 / OLED_ShowString(30+6+6+6+6+20,52,OK,12); /OLED_Refresh_Gram();/ /else/ /;/LED0=!LED0;/delay_ms(700);/ /1.2 nRF24L01部分程序#include 24l01.h#include delay.h#include spi.h#include usart.hconst u8 TX_ADDRESSTX_ADR_WIDTH=0 x34,0 x43,0 x10,0 x10,0 x01; /发送地址const u8 RX_ADDRESSRX_ADR_WIDTH=0 x34,0 x43,0 x10,0 x10,0 x01;/初始化24L01的IO口void NRF24L01_Init(void) GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOG, ENABLE); /使能PB,G端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;/PB12上拉 防止W25X的干扰 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);/
展开阅读全文