1、信息工程学院实训报告题目:Yeelink物联网温度远程采集系统学生姓名: 许淄豪牛敏学 号:11671061211167106124专 业: 信息工程学院自动化班 级: 自20111班指导教师: 贾玉瑛、李琦23内蒙古科技大学信息工程学院实训报告实训任务书一、实训目的掌握MCS-51串行口工作方式及其通信程序设计方法。掌握RS-232串行总线通信原理及单片机与PC机通信方法。(3)掌握LED数码管电路(LCD显示模块)的软硬件设计方法。(4)掌握单总线数字温度传感器驱动软件设计。(5)掌握Yeelink物联网数据上传方法。二、实训内容单片机通过单总线采集18B20温度数据;将采集到的数据显示在
2、4位LED数码管或LCD液晶显示器上;(3)注册Yeelink物联网账号,获取key,下载串口转发软件;(4)通过串口将采集到的温度数据发送到串口转发软件,由后者发布到互联网。三、yeelink物联网介绍网址:步骤:1、 在yeelink官网注册账号,详见:2、 注册成功后在“账户-我的账户设置”中获取APIKEY3、 在“我的设备”添加一个新设备4、 在“管理设备”添加一个传感器”5、 在 相关链接下载yeelink串口工具,掌握其用法。摘 要随着网络的迅猛发展,许多新兴产业随之产生并蓬勃兴起,正是在这种浪潮下Yeelink物联网平台应运而生。Yeelink是一个开放的通用物联网平台,主要提
3、供传感器数据的接入、存储和展现服务,为所有的开源软硬件爱好者、制造型企业,提供一个物联网项目的平台。使得硬件和制造业者能够在不关心服务器实现细节和运维的情况下,拥有交付物联网化的电子产品的能力。Yeelink平台的最大特点,在于不仅仅能够提供数据的上行功能,还能够实现对家庭电器的控制功能,快要到家前想洗个热水澡,还是要提前把空调打开?很简单,用手机的智能App,这些就是举手之劳。简单地说,就是可以把你采集到的数据提交到Yeelink,同时Yeelink会以一定的形式展现出来。比如我们采集温度数据,然后提交上去,这样,无论你人在何方,只要能接入互联网,你就可以实时地在线监测温度值。本次实训内容便
4、是通过数字温度传感器将实时采集的温度显示在数码管上,并通过串口将其发送到PC机,PC机通过yeelink串口转发工具发布到互联网。关键词:温度、传感器、yeelink、物联网、远程采集内蒙古科技大学信息工程学院实训报告AbstractWith the rapid development of the Internet,many new industriesemerged andflourished, it is in thiswave of Internet of things platformemerge as the times require Yeelink. Yeelink is th
5、e universalsubstancean open networkplatform,mainly to providesensor dataaccess, storageand display services,open sourcesoftware and hardwareenthusiasts,all manufacturing enterprises, to provide aIOTprojectplatform.Thehardware andthe manufacturercannotcare about server implementation details andopera
6、tion, capability of electronicproducts have aIOTofdelivery.The biggest characteristicof Yeelink platform,isnot only to provideuplinkdata,also can realize the control functionof household electrical appliances,want to washa hot bathcomesbefore,or to turn on the air conditionerin advance?Very simple,
7、intelligentmobile phone App,theseare tolift a finger. Say simply,is that we can put yourcollected data submitted to the Yeelink,and the Yeelink will be displayed ina certain form.For example,wecollect temperature data,and thensubmitted to go up,so, whether youarein where,as long as you canaccess the
8、 Internet,you can monitor real-time temperature value.This training contentsis throughdigital temperature sensorwill be real-time collection of temperaturein the digital tube display,and send it toPC through theserial port,PCposted to the Internet through Yeelinkserial port forwardingtool.Keys: Temp
9、eratureSensorYeelinkFetishismRemote monitoring内蒙古科技大学信息工程学院实训报告目录 实训任务书I摘 要IIAbstractIII1.1 硬件电路21.1.1 背景知识21.1.2 课题介绍21.1.3 主要原理21.1.3.1 主控制器21.1.3.2 显示电路21.1.3.3 温度传感器21.1.3.4 DS18B20温度传感器与单片机的接口电路71.1.3.5 ZLG7290芯片71.1.3.5.1 ZLG7290作用及其功能介绍71.1.3.5.2 ZLG7290使用说明71.1.3.6 ZLG7290工作原理81.1.4 系统构成框图81
10、.1.5 系统原理介绍81.1.6 软件流程图91.2 软件程序101.2.1 程序清单及注释101.3 实验小结231.4 主要参考文献231.1 硬件电路1.1.1 背景知识 在日常生活及工农业生产中,经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成相对应的温度,需要比较多的外部硬件支持。其缺点如下:1. 硬件电路复杂;2. 软件调试复杂;3. 制作成本高。 本数字温度计设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55125,最高分辨率可达0.0625。 D
11、S18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本易使用的特点。 按照系统功能设计的要求,确定系统有三个模块组成:主控制器,测温电路和显示电路。1.1.2 课题介绍 温度传感器实验主要应用到了ZLG-7290芯片和总线,同时主要应用到了18B20芯片。温度传感器要求让它们能够实现外用键盘能够调试,更改和控制的功能。1.1.3 主要原理 系统整体硬件电路包括,传感器采集电路,温度显示电路,单片机主板电路等。1.1.1.1 主控制器1.1.1.2 显示电路显示电路采用3位共阳LED数码管,从P3口RXD,TXD串口输出段码。1.1.1.3 温度传感器D
12、S18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以或位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20采用脚PR35封装或脚
13、SOIC封装,其内部结构框图如图2所示。 C64 位ROM和单线接口 高 速 缓 存存储器与控制逻辑温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器VddI/O图2 DS18B20内部结构64位ROM的结构开始位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为字节的存储器,结构如图3所示。头个字节包含测得的温度信息,第和第字节
14、和的拷贝,是易失的,每次上电复位时被刷新。第个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图3所示。低位一直为,是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为,用户要去改动,R1和0决定温度转换的精度位数,来设置分辨率。温度 LSB温度 MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRC图3 DS18B20字节定义由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换
15、时间权衡考虑。高速暂存的第、字节保留未用,表现为全逻辑。第字节读出前面所有字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第、字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625LSB形式表示。当符号位时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。表1 DS18B20温度转换时间表 DS18B2
16、0完成温度转换后,就把测得的温度值与RAM中的TH、T字节内容作比较。若TH或TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器的脉冲输入。器件中还有
17、一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器、温度寄存器中,计数器和温度寄存器被预置在55所对应的一个基数值。减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到时,温度寄存器的值将加,减法计数器的预置将重新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关
18、闭就重复上述过程,直到温度寄存器值大致被测温度值。表2一部分温度对应值表温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 01
19、10 1111FE6FH-551111 1100 1001 0000FC90H另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。图4 DS18B20与单片机的接口电路1.1.1.4 DS18B20温度传感器与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图4 所示单片机端口接单线总线,为保证在有效的DS18B20
20、时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。1.1.1.5 ZLG7290芯片1.1.1.5.1 ZLG7290作用及其功能介绍ZLG7290能够直接驱动8 位共阴式数码管(或64 只独立的LED),同时还可以扫描管理多达64 只按键。其中有8 只按键还可以作为功能键使用,就像电脑键盘上的Ctrl、Shift、Alt 键一样。另外ZLG7290B 内部还设置有连击计数器,能够使某键按
21、下后不松手而连续有效。采用I2C 总线方式,与微控制器的接口仅需两根信号线。可控扫描位数,可控任一数码管闪烁。 引脚说明如下图:1.1.1.5.2 ZLG7290使用说明ZLG7290B是基于I2C总线接口的芯片。主控单片机ADUC831作为主器件时,内部没有I2C总线功能,因此需用SPI总线的引脚来模拟I2C总线。具体连接如下: ZLG7290BADUC831 GNDDGND SDAMOSI SCLSCLOCK /INTINT0 VCCDVDD 但是,这种连接不是唯一的,只是在所写的软件里需要这样连接。其实中断可以根据自己所选的中断而定。地(GND)和电源(VCC)也可以另外从电源上接过来。
22、所用电源为5V。 编译软件使用的是WSD,这个软件主要是用于AD系列芯片的。只要下载扩展名为HEX的文件即可。 1.1.1.6 ZLG7290工作原理ZLG7290的核心是一块ZLG7290B芯片,它采用I2C接口,能直接驱动8位共阴式数码管,同时可扫描管理多达64只按键,实现人机对话的功能资源十分丰富。除具有自动消除抖动功能外,它还具有段闪烁、段点亮、段熄灭、功能键、连击键计数等强大功能,并可提供10种数字和21种字母的译码显示功能,用户可以直接向显示缓存写入显示数据,而且无需外接元件即可直接驱动数码管,还可扩展驱动电压和电流。此外,ZLG7290B的电路简单,使用也很方便。 用户按下某个键
23、时,ZLG7290的INT引脚会产生一个低电平的中断请求信号,读取键值后,中断信号就会自动撤销。正常情况下,微控制器只需要判断INT引脚就可以得到键盘输入的信息。微控制器可通过两种方式得到用户的键盘输入信息。其一是中断方式,该方式的优点是抗干扰能力强,缺点是要占用微控制器的一个外部中断源。其二是查询方式,即通过不断查询INT引脚来判断是否有键按下,该方式可以节省微控制器的一根IO口线,但是代价是I2C总线处于频繁的活动状态,消耗电流多并且不利于抗干扰。1.1.4 系统构成框图蜂鸣报警器ZLG7290数码管显示DS18B20温度传感器8051单片机芯片1.1.5 系统原理介绍数字温度计系统构成框
24、图中DS18B20温度传感器主要用于采集温度;ZLG-7290按键电路用于控制和调节时间,数码管用于时间显示便于读数,蜂鸣器用于报警闹铃。1.1.6 软件流程图 主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNY初始化调用显示子程序1S到?初次上电读出温度值温度计算处理显示数据刷新发温度转换开始命令NYNY 主程序流程图读温度流程图1.2 软件程序1.2.1 程序
25、清单及注释#include #include #define zlg7290 0x70 /*ZLG7290的IIC地址*/#define uchar unsigned char /*宏定义*/#define uint unsigned int#define _Nop() _nop_() /*定义空指令*/ uchar disp_buf8=0,0,0,0,0,0,0,0; /*显示缓冲区*/uchar temper2;/*存放温度的数组*/ uchar code sampling=0,20,29,38,47,56; /*端口位定义*/sbit SDA=P17; /*模拟I2C数据传送位*/sbi
26、t SCL=P16; /*模拟I2C时钟控制位*/sbit DQ =P33; /*18B20数据线引脚*/sbit KEY_INT=P32;sbit BEEP=P35;bit ack; /*应答标志位*/uchar g;uchar t1;uchar t2;uchar cn1=1;uchar KEY;uchar change_disp=0;/*-IIC开始-*/* 起动IIC总线函数 */void Start_I2c() SDA=1; /*发送起始条件的数据信号*/ _Nop(); SCL=1; _Nop(); /*起始条件建立时间大于4.7us,延时*/ _Nop(); _Nop(); _No
27、p(); _Nop(); SDA=0; /*发送起始信号*/ _Nop(); /* 起始条件锁定时间大于4s*/ _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; /*钳住I2C总线,准备发送或接收数据 */ _Nop(); _Nop();/* 结束IIC总线函数 */void Stop_I2c() SDA=0; /*发送结束条件的数据信号*/ _Nop(); /*发送结束条件的时钟信号*/ SCL=1; /*结束条件建立时间大于4s*/ _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1; /*发送I2C总线结束信号*/ _
28、Nop(); _Nop(); _Nop(); _Nop();/* 字节数据传送函数 */void SendByte(uchar c) uchar BitCnt; for(BitCnt=0;BitCnt8;BitCnt+) /*要传送的数据长度为8位*/ if(cBitCnt)&0x80)SDA=1; /*判断发送位*/ else SDA=0; _Nop(); SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/ _Nop(); _Nop(); /*保证时钟高电平周期大于4s*/ _Nop(); _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); SDA=1;
29、/*8位发送完后释放数据线,准备接收应答位*/ _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA=1)ack=0; else ack=1; /*判断是否接收到应答信号*/ SCL=0; _Nop(); _Nop();/* 字节数据传送函数 */ uchar RcvByte() uchar retc; uchar BitCnt; retc=0; SDA=1; /*置数据线为输入方式*/ for(BitCnt=0;BitCnt8;BitCnt+) _Nop(); SCL=0; /*置时钟线为低,准备接收数据位*/ _Nop(); _Nop(
30、); /*时钟低电平周期大于4.7s*/ _Nop(); _Nop(); _Nop(); SCL=1; /*置时钟线为高使数据线上数据有效*/ _Nop(); _Nop(); retc=retc1; if(SDA=1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */ _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); return(retc);/* 应答子函数原型: void Ack_I2c(bit a); */void Ack_I2c(bit a) if(a=0)SDA=0; /*在此发出应答或非应答信号 */ else SDA=1; _No
31、p(); _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); /*时钟低电平周期大于4s*/ _Nop(); _Nop(); _Nop(); SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/ _Nop(); _Nop(); /* 向无子地址器件发送字节数据函数 */bit ISendByte(uchar sla,uchar c) Start_I2c(); /*启动总线*/ SendByte(sla); /*发送器件地址*/ if(ack=0)return(0); SendByte(c); /*发送数据*/ if(ack=0)return(0); Stop_I
32、2c(); /*结束总线*/ return(1);/* 向有子地址器件发送多字节数据函数 */bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no) uchar i;Start_I2c(); /*启动总线*/ SendByte(sla); /*发送器件地址*/ if(ack=0)return(0); SendByte(suba); /*发送器件子地址*/ if(ack=0)return(0); for(i=0;ino;i+) SendByte(*s); /*发送数据*/ if(ack=0)return(0); s+; Stop_I2c(); /
33、*结束总线*/ return(1);/* 向无子地址器件读字节数据函数 */bit IRcvByte(uchar sla,uchar *c) Start_I2c(); /*启动总线*/ SendByte(sla+1); /*发送器件地址*/ if(ack=0)return(0); *c=RcvByte(); /*读取数据*/ Ack_I2c(1); /*发送非就答位*/ Stop_I2c(); /*结束总线*/ return(1);/* 向有子地址器件读取多字节数据函数 */bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no) uchar i;
34、 Start_I2c(); /*启动总线*/ SendByte(sla); /*发送器件地址*/ if(ack=0)return(0); SendByte(suba); /*发送器件子地址*/ if(ack=0)return(0); Start_I2c(); SendByte(sla+1); if(ack=0)return(0); for(i=0;ino-1;i+) *s=RcvByte(); /*发送数据*/ Ack_I2c(0); /*发送就答位*/ s+; *s=RcvByte(); Ack_I2c(1); /*发送非应位*/ Stop_I2c(); /*结束总线*/ return(1);/*-IIC完成-*/*-zlg7290开始-*/void delayMS(unsigned char i) uchar j,k; for(k=0;ki;k+) for(j=0;j60;j+);void DELAY() uchar i,j; for(i=0;i100;i+) for(j=0;j100;j+);/* 函数名称: ZLG7290_SendCmd*/uchar ZLG7290