找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4687|回复: 1
收起左侧

简易智能家居-物联网综合设计实验指导书下载

[复制链接]
ID:428393 发表于 2018-11-17 20:05 | 显示全部楼层 |阅读模式
简易智能家居系统

一、任务和要求

1、任务
设计并制作一套简易智能家居系统。系统结构如下图所示。
2、要求
1)51单片机(终端结点)能实现温度的测量,并能将温度在LCD显示器上显示;
2)51单片机(终端结点)能检测有无火灾发生,并将火警送LCD显示器上显示;
3)51单片机(终端结点)能实现对D1、D2、D3三盏LED灯的开关的控制,并将灯的工作状态送LCD显示器显示;
4)51单片机通过串口WIFI模块连接,把WIFI模块设置成透传工作模式,WIFI模块通过路由器连接上所在的网络;
5)通过网络调试助手将计算机设置成TCP SERVER,并通过网络调试助手实现温度的采集与显示、火警状态显示、LED灯工作状态的显示,并能通过网络调试助手控制LED灯的工作;
6)用有人手机网络调试助手将手机设置成TCP SERVER,实现用手机显示温度、火警状态、LED灯的工作状态,并能通过手机网络调试助手控制LED灯的工作。
7)将终端结点的工作状态上传到ONENET物联网云平台。
二、温度的采集、火警检测与LED灯的控制
功能要求:本模块以51单片机为核心,用温度传感器DS18B20测量温度,通过火灾传感器检测有无火灾发生,用独立按键开关三盏LED灯,并将温度和LED灯的工作状态在LCD1602上显示。
  • 普中51单片机实验开发实验仪介绍
1)独立按键
2)1602LCD显示器接口
3)LED模块
  • 独立按按键控制LED灯的工作
分别用单片机开发板上的K1、K2、K3这三个按键模拟开关,用开发板上的D5、D6、D7三个LED模拟三盏灯。其程序流程图如下:
  • LCD1602显示器原理及编程应用

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 LCD,目前常用 16*1, 16*2,20*2 和 40*2 行等的模块。本设计中用的显示器为LCD1602 字符型液晶显示器,是一种16*2的显示器。为例,其实物如下图;1602LCD 分为带背光和不带背光两种,基控制器大部分为 HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。其详细资料请看“LCD1602中文资料”。

在本设计中,为同学们提供了LCD1602的驱动文件lcd.c和lcd.h,可调用的函数及功能如下:

void Lcd1602_Delay1ms(uint c);   //误差 0us

void Read_Busy();           //忙检测函数,判断bit7是0,允许执行;1禁止

void Lcd1602_Write_Cmd(unsigned char cmd);     //写命令

void Lcd1602_Write_Data(unsigned char dat);   //写数据

void LcdSetCursor(unsigned char x,unsigned char y);  //坐标显示

void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str);     //显示字符串

void InitLcd1602();              //1602初始化

  • 温度传感器DS18B20原理与编程应用
1)DS18B20概述
DS18B20是单线数字温度传感器,即“一线器件”,其采用单总线的接口方式 与微处理器连接时 仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。 单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。 测量温度范围宽,测量精度高 DS18B20 的测量范围为 -55 ℃ ~+ 125 ℃ ; 在 -10~+ 85°C 范围内,精度为 ± 0.5°C 。

  其主要特点、内部结构和工作时序请详见“数字温度传感器DS18B20的应用”PPT。

2DS18B20进行一次温度的转换

(1)主机先作个复位操作,

(2)主机再写跳过ROM的操作(CCH)命令,

(3)然后主机接着写个转换温度的操作命令,后面释放总线至少一秒,让DS18B20完成转换的操作。在这里要注意的是每个命令字节在写的时候都是低字节先写,例如CCH的二进制为11001100,在写到总线上时要从低位开始写,写的顺序是“零、零、壹、壹、零、零、壹、壹”。整个操作的总线状态如下图。

  3)读取DS18B20的温度

读取RAM内的温度数据。同样,这个操作也要接照三个步骤。

(1)主机发出复位操作并接收DS18B20的应答(存在)脉冲。

(2)主机发出跳过对ROM操作的命令(CCH)。

(3)主机发出读取RAM的命令(BEH),随后主机依次读取DS18B20发出的从第0一第8,共九个字节的数据。如果只想读取温度数据,那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可。同样读取数据也是低位在前的。整个操作的总线状态如下图:

4)18B20的驱动程序

本设计中使用DS18B20的驱动程序ds18b20.c和ds18b20.h,文件中提供了如下的函数。

void Delay_OneWire(unsigned int t);//单总线延时函数

void Write_DS18B20(unsigned char dat);//通过单总线向DS18B20写一个字节

unsigned char Read_DS18B20(void);//从DS18B20读取一个字节

bit init_ds18b20(void);//DS18B20设备初始化

5)18B20测温流程图

要点:

1、在读取温度数据时,是低8位在前,高8位在后,需要将这两个数据合并为一个数据;

2、读取的温度是补码形式表示的,需将转换成原码;

3、求实际温度公式:temp=tp*0.0625*100+0.5(tp为浮点开数据,temp为无符号整形数据,此数据为实际温度的100倍),乘上100是为温度小数后保留2位,加上0.5起校正数据的作用。

4、将温度数据存入数组时,需将各位数据分离开来,再存入数组,例:

datatemp[0] = temp / 10000+0x30;

              datatemp[1] = temp % 10000 / 1000+0x30;

  • 串口助手显示温度及控制LED灯工作
  • 通过串口助手用单个字符控制LED灯工作
功能说明: 编程时,用变量receivedata接收串口助手发送过来的单个字符数据,分别用字符a、c和e打开D1、D2和D3灯,分别用字符b、d和f关闭D1、D2和D3灯,其程序流程图如下:
  • 通过串口助手用字符串控制LED灯工作
功能说明: 编程时,用字符数组receivedata接收串口助手发送过来的字符串数据,分别用字符串d1on、d2on和d3on打开D1、D2和D3灯,分别用字符串在d1off、d2off和d3off关闭D1、D2和D3灯,其程序流程图参考用单个字符控制LED灯工作的流程图。
  • 本模块功能的编程实现
  • ESP8266wifi模块介绍
1、ESP8266WIFI模块简介
ESP8266是一个完整且成体系的WIFI网络解决方案,能够搭载软件应用,或通过另一个应用处理器卸载所有WIFI网络功能。本设计中我们使用的ESP8266是串口型WIFI,速度比较低,不能用来传输图像或者视频这些大容量的数据,主要应用于数据量传输比较少的场合,比如温度信息,一些传感器的开关量等。虽然传输的数据量比较少,但也能一次传输几千字节的数据,而且通信非常稳定,可以满足大多数应用。
ESP8266-WIFI模块支持STA/AP/STA+AP三种工作模式。
STA模式:ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。
AP模式:默认模式,ESP8266模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制。
STA+AP模式:两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。
ESP8266-WIFI模块仅在单连接状态,支持透传模式(TCP CLIENT透传和UDP透传)。
3、引脚排列

3、模块和单片机开发板的连接

GND:接地

GPIO16:其实是RST,低电平复位,所以为了正常工作,连接开发板3.3V电源

VCC:接单片机开发板VCC

UTXD、URXD:前者接单片机或USB转串口模块的RXD,后者接TXD。单片机P3.0为RX,P3.1为TX。特别注意当用单片机开发板串口测试WIFI模块时,模块的UTXD、URXD要分别和单片机串口的TX和RX连接。

GPIO2、GPIO0:悬空

CH_PD:连接开发板3.3V电源

三、WIFI模块AT指令的测试

1、WIFI模块的AT指令测试

特别提示:通过串口用AT指令测试WIFI模块时,模块的UTXDURXD要分别和单片机串口的TXRX连接

测试AT指令时,首先打开串口助手,如下图:

设置串口号和波特率,波特率一般为115200或9600,本次实验所用模块已统一设置成为2400,在串口助手勾发送新行(如下图所示),然后发送AT,如果先出现OK则说明该模块能正常工作。

关于AT指令的测试,请同学参考文档“AT指令集018.pdf”对AT指令进行测试。

2、WIFI模块通过网络和计算机通信的AT指令

1)重启wifi模块

指令:AT+RST

返回:OK

2)设置WIFI模块的工作模式

指令:AT+CWMODE=3//设置模块为透传工作模式

返回:OK

3)登录路由器

指令:AT+CWJAP="TP-LINK_ym2","12345678"//登录路由器,路由wifi用户名和密码

返回:WIFI CONNECTED

WIFI GOT IP

4)连接TCP服务器(wifi模块作为客户端,计算机作为服务器,要先打开监听)

首先要打开软件网络调试助手,协议类型为TCP Server,点击开始监听。

指令: AT+CIPSTART="TCP","192.168.0.100",8080

返回:Connect OK

    执行以上指令后,wifi模块就会连接到计算机的TCP Server,在网络调试助手上的连接对象栏就会出现WIFI模块的IP地址及端口号,如下图所示:

5)使能透传模式

指令:AT+CIPMODE=1

返回:OK

6)透传发送数据

指令:AT+CIPSEND

返回:>(在此提示下可以发送数据)

7)退出透传数据发送

指令:+++(去掉串口助手中发送新行选项)

返回:返回到AT指令模式

执行了以上的AT指令以后,用串口调试助手和网络调试助手就可以实现WIFI模块通过路由器和计算机进行数据通信了。

3、WIFI模块和手机进行通信(WIFI模块作为客户端,手机作为服务器)

4)连接TCP服务器(wifi模块作为客户端,手机作为服务器,要先打开监听)

首先在手机上安装有人网络调试助手的APP,打开APP如下图所示:

选择tcp server,点击配置,设置手机的端口号,再点击激活后,会在手机屏幕上显示手机的IP和端口号,请一定记住IP和端口号,输入以下指令。

指令: AT+CIPSTART="TCP","192.168.1.122",5000//手机的IP和端口号

返回:CONNECT OK

执行以上指令后,网络助手上会显示wifi模块的IP和端口号,如下图:

5)使能透传模式

指令:AT+CIPMODE=1

返回:OK

6)透传发送数据

指令:AT+CIPSEND

返回:>(在此提示下可以发送数据)

7)退出透传数据发送

指令:+++(去掉串口助手中发送新行选项)

返回:返回到AT指令模式

4、多连接 server

目前 AT Demo ESP8266作为服务器, 需建立多连接作为服务器, 需建立多连接即可以连接多个client。

以下为 ESP 8266 作为 softAP建立 TCP 服务器的举例 服务器的举例 :

1) 设置 wifi 模式:

AT+CWMODE=3// 设置为 AP+station共存模式

响应: OK

2) 重启生效

AT+RST

响应: OK

3) 启动多连接

AT+CIPMUX=1

响应: OK

4) 建立 server

AT+CIPSERVER=1 //默认端口 333 333

响应 :OK

5) PC 连入设备 softAP ,PC作client 连接设备。 连接设备。

注意, ESP8266 作为 server 有超时机制, 如果连接建立后超时机制, 如果连接建立后一段 时间内无数据来往, server 会将 client 踢掉。请在 PC 工具连上 ESP8266 后建立一个 2s 的循环数据发送,用于保持连接。

6) 发送数据

AT+CIPSEND=0,4 // 0是设备的通信号,4表示四个字节

响应: SEND OK

7) 接收数据

+IPD,n:xxxxxxxxxx // n表示通信号 ,xxxxx 为数据


四、WIFI模块通过网络和计算机通信的编程实现

特别提示:单片机开发板通过串口发送AT指令测试WIFI模块时,模块的UTXDURXD要分别和单片机串口的RXTX连接

   用单片机发送相应的AT指令程序语句如下:

              uart_sendstring("AT+RST\r\n");

              delay(50);

    uart_sendstring("AT+CWMODE=3\r\n");            

              delay(20);

    uart_sendstring("AT+CWJAP=\"TP-LINK_ym2\",\"12345678\"\r\n");

              delay(50);

    uart_sendstring("AT+CIPSTART=\"TCP\",\"192.168.0.110\",8080\r\n");

              delay(20);

    uart_sendstring("AT+CIPMODE=1\r\n");//使能透传模式

              delay(20);

              uart_sendstring("AT+CIPSEND\r\n");//透传发送数据

    delay(20)注意:如用定时器0定时发送数据时,串口中断优先级一定要高于定时器0中断。

五、WIFI模块和手机进行通信的编程实现

   用单片机发送相应的AT指令程序语句如下:

              uart_sendstring("AT+RST\r\n");

              delay(50);

    uart_sendstring("AT+CWMODE=3\r\n");            

              delay(20);

    uart_sendstring("AT+CWJAP=\"手机热点名\",\"密码\"\r\n");

              delay(50);

    uart_sendstring("AT+CIPSTART=\"TCP\",\"192.168.1.122\",5000\r\n");//wifi作为 TCP client,手机作为TCP服务器, 连接 TCP server:

              delay(50);

    uart_sendstring("AT+CIPMODE=1\r\n");//使能透传模式

              delay(20);

              uart_sendstring("AT+CIPSEND\r\n");//透传发送数据

delay(20);

六、基于ONENET的简易智能家居系统

OneNET是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,快速完成产品开发部署。OneNET物联网专网已经应用于环境监控、远程抄表、智慧农业、智能家电、智能硬件、节能减排、车联网、工业控制、物流跟踪等多种商业领域。
到目前为止平台支持的公开接入协议主要包括HTTP、EDP、MQTT,、MODBUS、JT/T808五种,本设计采用HTTP接入ONENET。
1、用网络助手连接ONENET,上传数据到ONENET

1)注册ONENET用户

进入ONENET主页( https://open.iot.10086.cn/),如下图,注册帐号。

2)进入开发者中心,创建产品

3)创建设备

请记住设备的ID号和产品的APIKEY

4)计算作为TCP客户端,上传数据到ONENET

ONENET云平台HTTP接入协议服务器IP:183.230.40.33,端口号:80

发送数据的格式指令如下,指令格式不能有错,否则云平台接收不到数据。

    POST /devices/32161187/datapoints?type=3 HTTP/1.1(红色的为设备的ID号)

api-key: 87fKUPvenMiyB8lXgng=u0OY5eU= (产品的唯一APIKEY )

Host: api.heclouds.com

Content-Length: 15(回车换行)

(回车换行)

{wendu":23}(回车换行)

数据发送成功以后,可以在ONENET平台观察到上传的数据,如下图:

如果想通过网页来浏览上传的数据,可以通过应用管理,创建应用的方式创建应用,并通过网址来访问。

2、把wifi模块作为TCP客户端,通过串口助手把数据上传到ONENET

1)wifi模块登录路由器,登录ONENET

    此步骤和前面所学的wifi模块登录计算机作为TCP服务器完全相同,这里不再赘述。

2)通过串口助手把数据上传到ONENET

    因为要一次发多条指令,所以使用一次发送多条指令的XCOM串口助手。如下图

   ONENET平台一样可以接收到上传的数据。

3)通过编程实现数据的上传

(1)登录ONENET函数

  1. void tcpserverlogin(void)

  2. {

  3.     uart_sendstring("AT+RST\r\n");

  4.               delay(50);

  5.     uart_sendstring("AT+CWMODE=3\r\n");            

  6.               delay(50);

  7.               uart_sendstring("AT+CWJAP=\"TP-LINK_ym2\",\"12345678\"\r\n");

  8.               delay(100);

  9.     uart_sendstring("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r\n");

  10.     delay(50);

  11.     uart_sendstring("AT+CIPMODE=1\r\n");//使能透传模式

  12.               delay(20);

  13.               uart_sendstring("AT+CIPSEND\r\n");//透传发送数据

  14.     delay(20);

  15.     }

  16. (2)上传数据函数

  17. void senddata(void)

  18. {

  19.      uart_sendstring("POST /devices/32161187/datapoints?type=3 HTTP/1.1\r\n");

  20.                  delay20ms();                                                                       

  21.                  uart_sendstring("api-key:87fKUPvenMiyB8lXgng=u0OY5eU=\r\n");

  22.                  delay20ms();

  23.                  uart_sendstring("Host:api.heclouds.com\r\n");                           

  24.                  delay20ms();

  25.                  uart_sendstring("Content-Length:15\r\n");

  26.                  delay20ms();

  27.                  uart_sendstring("\r\n");

  28.                  delay20ms();

  29.        uart_sendstring("{\"wendu\":");

  30.        delay20ms();

  31.        uart_sendstring(wd);//12.6   

  32.        uart_sendstring("}\r\n");

  33.        delay20ms();

  34.        uart_sendstring("\r\n");                       

  35.        delay(100);  

  36. }

复制代码


完整的Word格式文档51黑下载地址:

物联网综合设计实验指导.docx (1.18 MB, 下载次数: 66)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:6656 发表于 2018-12-24 11:10 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表