当前位置:文档之家› 物联网信息采集课程设计

物联网信息采集课程设计

河海大学计算机及信息工程学院(常州)课程设计报告题目物联网信息采集专业、学号通信工程1162310120授课班号277701学生姓名指导教师金纪东完成时间2014年6月15日课程设计(报告)任务书(理工科类)Ⅰ、课程设计(报告)题目:物联网信息采集Ⅱ、课程设计(论文)工作内容一、课程设计目标1、掌握AD数据采样的原理,同时在实验箱上实现串口输出;2、掌握网络协议建立的原理;3、将采样的数据能够在同一网络下通过浏览器查看;4、培养学生理论联系实际的能力;5、培养学生的自我学习和解决问题的能力;6、培养学生的团队合作能力;二、研究方法及手段应用1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;2、对已有程序认真阅读理解,并调试;3、在独立思考的基础上,模仿已有程序根据自己想法改写程序;4、反复编译调试、总结经验、排除差错;三、课程设计预期效果1、完成实验环境搭建;2、掌握AD数据采样的原理,同时在实验箱上实现串口输出;3、掌握网络协议建立的原理;4、将采样的数据能够在同一网络下通过浏览器查看;学生姓名:刘国庆专业年级:11级通信工程目录前言 (4)第一章系统设计 (5)第一节课题目标及总体方案 (5)第二节系统简介 (5)一. ZE-stm32v7e实验平台介绍 (5)二. ZE-stm32v7e硬件设计分类 (5)1.stm32v7e平台应用区域 (5)2.无线传感协议区域 (5)第三节实验步骤 (6)一.熟悉设备 (6)二.ADC数据采样 (6)三.远程浏览器网页修改 (7)四.ADC数据定位 (7)第二章实验(测试)结果及讨论 (8)第一节预期实验结果 (8)第二节实验出现的问题及调试 (8)第三节实验现象 (9)第三章结论 (9)心得体会 (10)参考文献 (10)附录 (11)前言物联网是新一代信息技术的重要组成部分,顾名思义,物联网就是物物相连的互联网。

它是一种利用局域网络或互联网等通信技术把传感器、控制器、机器、人员和物等通过新的方式连在一起,形成人与物、物与物相连,实现信息化、远程管理控制和智能化的网络。

而嵌入式系统是综合了计算机软硬件、传感器技术、集成电路技术、电子应用技术为一体的复杂技术。

经过几十年的演变,以嵌入式系统为特征的智能终端产品随处可见;小到人们身边的MP3、手机,大到航天航空的卫星系统,嵌入式系统正在改变着人们的生活,推动着工业生产以及国防工业的发展。

如果把物联网用人体做一个简单比喻,传感器相当于人的眼睛、鼻子、皮肤等感官,网络就是神经系统用来传递信息,嵌入式系统则是人的大脑,在接收到信息后进行分类处理。

可见嵌入式系统的应用广泛,并在物联网中占有重要的位置和作用。

目前嵌入式系统技术已经成为了最热门的技术之一,吸引了大批的优秀人才投入其中。

通过本次实验,让我们充分认识嵌入式系统与物联网系统的联系,并且了解网络协议在嵌入式系统中的应用及编程方法,掌握AD采样数据在浏览器查看过程中的定位、显示。

第一章系统设计第一节课题目标及总体方案物联网技术的发展对现代社会各个领域都有着重要的作用,本课题目的是AD数据采集,在实验平台上提供web服务,相当于服务器,PC机上可以访问IP地址来查看采集的数据,具体框图如下:192.168.0.8 192.168.0.100平台与PC通过网线连接,PC设置与服务器同一局域网下的IP,在浏览器中访问服务器IP以查看采集的数据值。

第二节系统简介一.ZE-stm32v7e实验平台介绍ZE-stm32v7e实验平台是一款高端的多功能嵌入式教学产品,能够学习ARM 开发的嵌入式知识,以及各种主流无线传感协议IPV6、Zigbee、WIFI、Bluetooth 等,通过构建项目案例来实现感知层(传感器技术/嵌入式技术)、传输层(WSN 无线传感网/IPV6无线传感网/Zigbee无线传感网/WIFI无线传感网/Bluetooth 无线传感网)、网关层(嵌入式Linux /ZIGBEE/IPv6)等教学解决方案。

二. ZE-stm32v7e硬件设计分类1.STM32V7E平台应用区域1)采用高性能的ST STM32F107处理器,主频72MHz,Flash 256KB,4.3寸真彩液晶屏,分辨率480*272,带4.3寸触摸屏。

2) 1个4*4的可编程扫描键盘,2个可编程按键,4个可编程LED灯,1个RTC,1个JTAG&DEBUG接口;3) 集成丰富的外围扩展接口,4路RS232串口(一个调试串口,另外三个串口分别作为LCD触摸屏、GSM、ZIGBEE和RFID使用),集成以太网接口、音频接口、CAN、485、蜂鸣器和外接ADC接口等外设。

4) 提供两组12PIN传感器应用扩展接口,包含以下信号:串口、SPI、IIC、GPIO(可用于中断)、ADC接口、PWM接口,5V/3.3V电源;5) 板载集成GSM通信插座,无线ZIGBEE通信插座、无线RFID通信插座;6) 软件上采用嵌入式操作系统Contiki-OS,提供Contiki系统的一些基础实验、基于Contiki系统的无线通信实验和基于Contiki系统的综合DEMO实验。

2.无线传感协议区域:1) 无线传感协议区域包含6组无线传感网节点,每组无线传感网节点包含四个部分:STM32嵌入式底板、无线节点核心板、传感器接口板、LCD显示板;2) 可以配置四组不同无线协议的节点:IPV6、Zigbee、WIFI、Bluetooth;3) 实验平台提供稳定的12V稳压电源,可以支持6组无线传感节点和STM32V7E平台同时工作。

4) 每个无线传感网节点的STM32嵌入式底板包含一个ARM Cortex-M3STM32F103处理器芯片,提供稳定的5V/3.3V电源输入,4个可编程按键,4个可编程LED灯,1个RTC,1个JTAG&DEBUG接口,1个LCD接口,1个24PIN的传感器接口;第三节实验步骤一.熟悉设备本实验使用实验教学系统STM32V7E平台实验箱,应用的主要是利用实验箱的应用扩展接口,利用ADC的14通道对开发板上单圈电位器的电压值作AD转换,并通过串口输出到PC机上。

实验前根据已给的实验例程,掌握串口数据的传送和查看,以及网络建立的基本过程。

二.ADC数据采样1.程序修改在ADC配置中加入时钟信号,以使数据采样过程中能够实时性采集2.线路连接将实验平台和PC机通过串口线,网线,J-Link相连,设置PC机的网络IPV4地址(IP地址初始化为192.168.0.100,子网掩码255.255.255.0),编译下载程序,运行PC机上CMD输入ping 192.168.0.8查看网络连接是否正常。

3.浏览器查看打开浏览器,在地址栏中输入192.168.0.8查看ADC采集界面是否有数据跳动。

三.远程浏览器网页修改由于实验例程中给的ADC采样只有一个进度条,为了更加直观,我们把数据显示加入到浏览的网页中。

打开fs.c下的fsdata.c文件找到data_STM32_StatusBar_html网页的十六进制编码。

通过先前的修改,将新网页的十六进制编码替换。

四.ADC数据定位在httpd.c中查找AD数据转换的相关公式,利用软件Ultraedit在网页中定位数据显示的位置,将具体的偏移数值对httpd.c进行修改,同时添加数值显示位以初始化数值。

在其他的文件中进行相应的修改(必要时可在main中添加延时),使数值能够正常显示。

第二章实验(测试)结果及讨论第一节预期实验结果网络建立,浏览器访问192.168.0.8进入ADC数据界面,有进度条和数值的跳动,并且在一定的范围内变化。

第二节实验出现的问题及调试1.根据步骤连接电脑和实验箱,浏览器无法连接。

解决方法:查看线路是否连接完好,PC的网络连接Ipv4地址是否正确。

2.浏览器中查看数据的进度条固定,并不跳变。

解决方法:修改时钟,在main.c中加入延时。

3.浏览器跳变的数据显示位置不正确。

解决方法:改正httpd.c中数据的偏移量。

第三节实验现象在浏览器中输入192.168.0.8后点击进入ADC数据采集界面,网页中显示如下界面:其中进度条和中间的数据是实时跳变的。

第三章结论本次课设实现的物联网信息采集是物联网技术中比较简单的,现代社会中应用传感、RFID进行物联网建立,无线通信的设计可以在此基础上进行扩展,发散创新。

整个程序的基础是实验平台自带的例程,通过对程序各个模块的理解,以及通过修改程序实现课题的功能,对网络建立和AD数据采集的原理都有了一定的了解。

心得体会由于嵌入式课程课时有限,我们所掌握的知识并不够,只能参考已给的实验例程,进行学习。

并且通过翻阅许多资料,以及请教学长,对于物联网技术和嵌入式系统技术也有了一定的了解。

通过对实验例程的程序进行编译理解,从最初的对程序的局部修改,到最后我们逐渐掌握了如何建立网络,使用网络协议和AD数据采集。

这个过程我们收获了许多!在最初阅读程序过程中,我们根据已给的英文注释,再加上先前对嵌入式系统课程的学习,一条条上网查阅资料,对于程序的理解也不断的深入。

在编写程序过程中,尤其是AD数据的显示部分的定位,在网页浏览器中很多次都不能正常显示,然后就在偏移量上一位一位的尝试,仍然没有很好的效果。

在同学之间的讨论中,借鉴其他组的Ultraedit软件,进行精确的定位,使本项工作事半功倍,同时也说明了合作的重要性。

当浏览器上显示出跳变的数据时,我们内心的喜悦溢于言表。

通过此次课设我不仅对嵌入式的开发有了更加深刻的了解,更对理论联系实际,以及团队合作与分工,自学能力的重要性有了新的认识。

这次课设,为我以后的发展打下了基础,积累了经验。

在此真诚地感谢老师的指导!谢谢!参考文献[1]王勇,何立民.嵌入式系统原理与设计.杭州:浙江大学大学出版社,2007.[2]王田苗.嵌入式系统设计与实例开发[M].北京:清华大学出版社,2003.1-10[3]刘强崔莉陈海明.物联网关键技术与应用《计算机科学》2010年6月附录一、程序:Main.c:#include "stm32f10x.h"#include <stdio.h>#include "uart.h"#include "delay.h"#include "eth.h"int main(void){/* System Clocks Configuration */delay_init(72);uart2_init();eth_init();/* uIP stack main loop */uIPMain();/* Infinite loop */while (1){}}eth.c://各种端口初始化配置#include "stm32f10x.h"#include "stm32_eval.h"#include "stm32_eth.h"#include <stdio.h>#include "uip.h"#include "stm32f10x_adc.h"#include "uart.h"#include "delay.h"#include "eth.h"/* Private define ------------------------------------------------------------*/#define MESSAGE1 " STM32 ETH EXAMPLE "#define MESSAGE2 " Line Device "#define MESSAGE3 "WebServer Demo based"#define MESSAGE4 " on uIP "#define MESSAGE5 " IP address is: "#define MESSAGE6 " 192.168.0.8 "#define DP83848_PHY /* Ethernet pins mapped on STM3210C-EV AL Board */ #define PHY_ADDRESS 0x0100 /* Relative to STM3210C-EV AL Board *///#define MII_MODE /* MII mode for STM3210C-EV AL Board (MB784) (check jumpers setting) */#define RMII_MODE /* RMII mode for STM3210C-EV AL Board (MB784) (check jumpers setting) */#define ETH_RXBUFNB 8#define ETH_TXBUFNB 2/* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*/ETH_InitTypeDef ETH_InitStructure;/* Ethernet Rx & Tx DMA Descriptors */ETH_DMADESCTypeDef DMARxDscrTab[ETH_RXBUFNB], DMATxDscrTab[ETH_TXBUFNB];/* Ethernet buffers */u8 Rx_Buff[ETH_RXBUFNB][ETH_MAX_PACKET_SIZE], Tx_Buff[ETH_TXBUFNB][ETH_MAX_PACKET_SIZE];ErrorStatus HSEStartUpStatus;vu32 Value = 0;void RCC_Configuration(void){/* Enable ETHERNET clock */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx |RCC_AHBPeriph_ETH_MAC_Rx, ENABLE);/* Enable GPIOs clocks */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE| RCC_APB2Periph_AFIO, ENABLE);}/*** @brief Configures the different GPIO ports.* @param None* @retval None*/void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;/* ETHERNET pins configuration *//* AF Output Push Pull:- ETH_MII_MDIO / ETH_RMII_MDIO: PA2- ETH_MII_MDC / ETH_RMII_MDC: PC1- ETH_MII_TX_EN / ETH_RMII_TX_EN: PB11- ETH_MII_TXD0 / ETH_RMII_TXD0: PB12- ETH_MII_TXD1 / ETH_RMII_TXD1: PB13 *//* Configure PA2 as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure PC1 as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOC, &GPIO_InitStructure);/* Configure PB11, PB12 and PB13 as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);/**************************************************************/ /* For Remapped Ethernet pins *//*************************************************************/ /* Input (Reset Value):- ETH_MII_RX_CLK / ETH_RMII_REF_CLK: PA1- ETH_MII_RX_DV / ETH_RMII_CRS_DV: PD8- ETH_MII_RXD0 / ETH_RMII_RXD0: PD9 *//* Configure PA1 as input */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure PD8, PD9, PD10 as input */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD, &GPIO_InitStructure);}/*** @brief Configures the ADC.* @param None* @retval None*/void ADC_Configuration(void){ADC_InitTypeDef ADC_InitStructure;#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)/* ADCCLK = PCLK2/2 */RCC_ADCCLKConfig(RCC_PCLK2_Div2);#else/* ADCCLK = PCLK2/4 */RCC_ADCCLKConfig(RCC_PCLK2_Div4);#endif/* Enable ADC1 and GPIOB clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB, ENABLE);/* ADC1 Configuration ------------------------------------------------------*/ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvMode = DISABLE;ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel = 1;ADC_Init(ADC1, &ADC_InitStructure);/* ADC1 regular channel14 configuration */ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_13Cycles5);/* Enable ADC1 */ADC_Cmd(ADC1, ENABLE);/* Start ADC1 Software Conversion */ADC_SoftwareStartConvCmd(ADC1, ENABLE);}/*** @brief Configures the nested vectored interrupt controller.* @param None* @retval None*/void NVIC_Configuration(void){/* Set the Vector Table base location at 0x08000000 */NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);}void eth_init(){/* Initialize LEDs **********************************************************/STM_EV AL_LEDInit(LED1);STM_EV AL_LEDInit(LED2);STM_EV AL_LEDInit(LED3);STM_EV AL_LEDInit(LED4);RCC_Configuration();/* NVIC configuration */NVIC_Configuration();/* ADC configuration */ADC_Configuration();/* ETHERNET pins remapp in STM3210C-EV AL board: RX_DV and RxD[3:0] */ GPIO_PinRemapConfig(GPIO_Remap_ETH, ENABLE);/* MII/RMII Media interface selection */#ifdef MII_MODE /* Mode MII with STM3210C-EV AL */GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_MII);/* Get HSE clock = 25MHz on PA8 pin(MCO) */RCC_MCOConfig(RCC_MCO_HSE);#elif defined RMII_MODE /* Mode RMII with STM3210C-EVAL */GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_RMII);/* Get HSE clock = 25MHz on PA8 pin(MCO) *//* set PLL3 clock output to 50MHz (25MHz /5 *10 =50MHz) */RCC_PLL3Config(RCC_PLL3Mul_10);/* Enable PLL3 */RCC_PLL3Cmd(ENABLE);/* Wait till PLL3 is ready */while (RCC_GetFlagStatus(RCC_FLAG_PLL3RDY) == RESET){}/* Get clock PLL3 clock on PA8 pin */RCC_MCOConfig(RCC_MCO_PLL3CLK);#endif/* Configure the GPIO ports */GPIO_Configuration();/* Reset ETHERNET on AHB Bus */ETH_DeInit();/* Software reset */ETH_SoftwareReset();/* Wait for software reset */while(ETH_GetSoftwareResetStatus()==SET);/* ETHERNET Configuration ------------------------------------------------------*//* Call ETH_StructInit if you don't like to configure all ETH_InitStructure parameter */ ETH_StructInit(&ETH_InitStructure);/* Fill ETH_InitStructure parametrs *//*------------------------ MAC -----------------------------------*/ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable ;// ETH_InitStructure.ETH_Speed = ETH_Speed_100M;ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;// ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable; ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Enable;ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Disable;ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect; ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;/* Configure ETHERNET */Value = ETH_Init(&ETH_InitStructure, PHY_ADDRESS);/* Initialize Tx Descriptors list: Chain Mode */ETH_DMA TxDescChainInit(DMA TxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB);/* Initialize Rx Descriptors list: Chain Mode */ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);/* Enable MAC and DMA transmission and reception */ETH_Start();printf("%s\n\r",MESSAGE1);printf("%s\n\r",MESSAGE2);printf("%s\n\r",MESSAGE3);printf("%s\n\r",MESSAGE4);printf("%s\n\r",MESSAGE5);printf("%s\n\r",MESSAGE6);}。

相关主题