完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
基本介绍 最近做了一个基于51单片机(STC89C52)+DHT11温湿度模块+ESP8266模块+上传oneNET APP显示+LCD1602显示。51单片机采集DHT11模块的温度和湿度,通过ESP8266模块上传温湿度到oneNET平台,然后通过APP查看温湿度模块,同时LCD1602也同样显示温度和湿度。还可以设定按键控制但单片机外设,比如APP按键按下让单片机点亮一个灯等等。。。。。 器件 51单片机 ESP8266 我用的是 01s DHT11温湿度 u***-ttl模块 实现思路 get方式 是获取平台上面的数据,正常我们单单做温湿度显示 不需要用到,如果需要用到按键等则需要。 实现步骤 1:注册oneNET平台 进入中国移动oneNETo平台:oneNET 先注册平台 2:测试ESP8266是否正常 这里就需要ESP8266 和 USB-TTL接好线了 2.1:接线: [tr]ESP8266USB-TTL[/tr]
2.2:打开电脑串口小助手发送指令: 指令: AT esp8266波特率默认是115200 我们51单片机晶振11.0592或者12 太低上不去,所以先把esp8266波特率改成9600 记得你得是跟esp8266模块波特率同样你才发送哦 不一样发送了也没用。 指令: AT+UART=9600,8,1,0,0 指令: AT+CWMODE=3 //设置WIFI应用模式 (成功返回会有OK) 指令: AT+RST //重置WIFI模块 (成功返回会有OK) 3:连接网络 指令: AT+CWJAP=“wifiNane”,“password” //连接无线路由器(手机热点啥的) Wifiname: 就是你的热点名字 或者WiFi的名字 Password: 你的热点密码 或者WiFi密码 4:上传数据 指令: AT+CIPSTART=“TCP”,“183.230.40.33”,80 //和服务器建立TCP连接 AT+CIPMODE=1 //进入透明传输模式 AT+CIPSEND //开始传输 POST /devices/XXXXXXXXX/datapoints?type=5 HTTP/1.1 api-key:?????????????????? Host:api.heclouds.com Content-Length:10 ,;temp,27 XXXXXXXXX:设备ID ??????????????????:api-key值 5:设置APP应用 获取平台上的数据呢?(想点击按键 让单片机点灯?播放音乐?等等) 6:代码编写呈现(部分) mian.c #include #include "stdlib.h" #include "lcd1602.h" #include "delay.h" #include "uart.h" #include "dht11.h" #include "esp8266.h" /*主程序入口*/ void main() { BEEP = 0; initEsp8266(); //初始化ESP8266 initUart(); //初始化串口 init_lcd(); //初始化LCD1602 display_str(); //LCD1602 显示 temp: humi: BEEP = 1; while(1) { delay1s(); DHT_receive(); //DHT11读取函数 DHT_LCD1602_display(); //1602显示温湿度 temp_upload(); //上传温度数据 humi_upload(); //上传湿度数据 LED1 = ~LED1; } } lcd1602.c #include #include "lcd1602.h" #define LCD P0 ***it E = P2^7; ***it RS = P2^6; ***it RW = P2^5; /******延迟5毫秒函数********/ void delay5ms() //误差 -0.000000000001us { unsigned char a,b; for(b=15;b>0;b--) for(a=152;a>0;a--); } /******LCD1602写命令函数********/ void write_com(unsigned char command) { RS = 0; RW = 0; //高读低写 LCD = command; delay5ms(); //这里延时最低要30纳秒 我们直接给5ms E = 1; //使能拉高 delay5ms(); //最低要求延迟150纳秒 我们直接给5ms E = 0; } /******LCD1602写数据函数********/ void write_data(unsigned char dat) { RS = 1; RW = 0; LCD = dat; delay5ms(); //这里延时最低要30纳秒 我们直接给5ms E = 1; //使能拉高 delay5ms(); //最低要求延迟150纳秒 我们直接给5ms E = 0; } /******初始化LCD1602********/ void init_lcd() { write_com(0x06); //写入数据后光标自动右移 整屏不移动。 0x40(光标左移 整屏不移动)0x05(左移 整屏右移)0x07(右移 整屏右移) write_com(0x0c); //开显示功能 无光标 不闪烁 write_com(0x38); //数据总线8位 16X2显示 5*7点阵 write_com(0x01); //清屏 0000 0001 } esp8266.c #include #include "esp8266.h" #include "delay.h" #include "uart.h" #include #define time 100 //宏定义 延时的时间 char T[5] = {' |