一、任务和要求
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 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的应用”PPT。
2)DS18B20进行一次温度的转换
(1)主机先作个复位操作,
(2)主机再写跳过ROM的操作(CCH)命令,
(3)然后主机接着写个转换温度的操作命令,后面释放总线至少一秒,让DS18B20完成转换的操作。在这里要注意的是每个命令字节在写的时候都是低字节先写,例如CCH的二进制为11001100,在写到总线上时要从低位开始写,写的顺序是“零、零、壹、壹、零、零、壹、壹”。整个操作的总线状态如下图。
读取RAM内的温度数据。同样,这个操作也要接照三个步骤。
(1)主机发出复位操作并接收DS18B20的应答(存在)脉冲。
(2)主机发出跳过对ROM操作的命令(CCH)。
(3)主机发出读取RAM的命令(BEH),随后主机依次读取DS18B20发出的从第0一第8,共九个字节的数据。如果只想读取温度数据,那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可。同样读取数据也是低位在前的。整个操作的总线状态如下图:
本设计中使用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;
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模块时,模块的UTXD、URXD要分别和单片机串口的TX和RX连接。
测试AT指令时,首先打开串口助手,如下图:
关于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模块时,模块的UTXD、URXD要分别和单片机串口的RX和TX连接。
用单片机发送相应的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的简易智能家居系统
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函数
完整的Word格式文档51黑下载地址:
物联网综合设计实验指导.docx
(1.18 MB, 下载次数: 68)
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |