#include <reg52.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <intrins.h> //包含特殊功能寄存器头文件
#include "BH1750.h" //光照强度采集模块头文件
#include "51_DHT21.h" //温湿度采集模块头文件
#include "Delay.h"
#define uchar unsigned char
#define uint unsigned int
unsigned int lux_data; //光照度数据,全局变量
unsigned char BUF[2]; //光照度数据存储数组,全局变量
unsigned char code s[]={0X10, 0X31, 0X00, 0X03, 0X45, 0X44, 0X50, 0X01, 0X40, 0X00, 0X80, 0X00, 0X08, 0X31, 0X37, 0X35, 0X34, 0X37, 0X36, 0X39, 0X34, 0X00, 0X1C, 0X39, 0X5A, 0X33, 0X70, 0X58, 0X70, 0X54, 0X53, 0X58, 0X44, 0X39, 0X4C, 0X31, 0X38, 0X3D, 0X4D, 0X33, 0X71, 0X6A, 0X6F, 0X30, 0X48, 0X39, 0X53, 0X44, 0X79, 0X4D, 0X3D, 0xff};//连接请求
unsigned char code heart[]={0xc0, 0x00, 0xff}; //心跳请求
int code Json_Illuminance[]={0X7B,0X0A,0X09,0X22,0X49,0X6C,0X6C,0X75,0X6D,0X69,0X6E,0X61,0X6E,0X63,0X65,0X22,0X3A,0X09,0X22,0XFF};//光照强度数据流数据头
int code Json_T[]={0X7B,0X0A,0X09,0X22,0X54,0X45,0X4D,0X70,0X65,0X72,0X61,0X74,0X75,0X72,0X65,0X22,0X3A,0X09,0X22,0XFF};//温度数据流数据头
int code Json_RH[]={0X7B,0X0A,0X09,0X22,0X4F,0X4E,0X45,0X6E,0X65,0X74,0X52,0X48,0X77,0X65,0x61,0X22,0X3A,0X09,0X22,0XFF};//湿度数据流数据头
float temperature;
float wet;
uchar a,j=0;
uint t=0;
uchar receiver[250];
uchar PWM_T;
sbit beep = P2^3;
sfr CCON=0xD8; //PCA控制寄存器地址D8H
sbit CF=CCON^7; //PCA计数器阵列溢出标志
sbit CR=CCON^6; //PCA计数器阵列运行控制位
sbit CCF1=CCON^1; //PCA模块1中断标志
sbit CCF0=CCON^0; //PCA模块0中断标志
sfr CMOD=0xD9; //PCA模式寄存器地址D9H
sfr CL=0xE9; //PCA计数器寄存器低地址E9H
sfr CH=0xF9; //PCA计数器寄存器高地址F9H
sfr CCAPM0=0xDA; //PCA模块0模式寄存器地址DAH
sfr CCAPM1=0xDB; //PCA模块1模式寄存器地址DBH
sfr CCAP0L=0xEA; //PCA模块0捕获寄存器低地址EAH
sfr CCAP0H=0xFA; //PCA模块0捕获寄存器高地址FAH
sfr CCAP1L=0xEB; //PCA模块1捕获寄存器低地址EBH
sfr CCAP1H=0xFB; //PCA模块1捕获寄存器高地址FBH
sfr PCA_PWM0=0xF2; //PWM0模式辅助寄存器地址F2H
sfr PCA_PWM1=0xF3; //PWM1模式辅助寄存器地址F3H
void SendStr(unsigned char *s);
void float_T();
void Send_Illuminance_to_OneNET(float Illuminance);
void Send_T_to_OneNET(float str);
void Send_RH_to_OneNET(float str);
void Have_Condition_Send(int *value);
void UART_Send_Data(unsigned char Data);
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=112;j>0;j--);
}
void UART_init()
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD = 0x22; // TMOD: timer 1, mode 2, 8-bit 重装
IP = 0X10; //将中断优先级设置为高优先级
TH1 = 0xfd;
TL1 = 0Xfd; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TH0 = 210;
TL0 = 210;
TR1 = 1; // TR1: timer 1 打开
TR0 = 1;
ES = 1; //打开串口中断
EA = 1; //打开总中断
}
void pwm_init(void)
{
CMOD=0x02; //PCA模式寄存器置数0000 0010 选择PCA时钟源输入,内部时钟频率为fosc/2
CL=0x00; //PCA计数器寄存器低置零
CH=0x00; //PCA计数器寄存器高置零
CCAPM0=0x42; //PCA模块0模式寄存器选择8位PWM工作模式
CCAP0L=0x00; //PCA模块0捕获寄存器低置零
CCAP0H=0x00; //PCA模块0捕获寄存器高置零
CCAPM1=0x42; //PCA模块1模式寄存器选择8位PWM工作模式
CCAP1L=0x00; //PCA模块1捕获寄存器低置零
CCAP1H=0x00; //PCA模块1捕获寄存器高置零
CR=1; //PCA计数器阵列运行控制位,CR=1,启动PCA计数器阵列计数;CR=0,关闭PCA计数器阵列计数
}
void pwm_set(uchar x,uchar y) /* PWM占空比调节函数,x,y为用户设置的比较值,x为P1^3的参数,y为P1^4的参数 */
{
CCAP0H=x; //CL寄存器的值小于CCAPnL时,PWM输出为低电平
CCAP0L=x; //CL寄存器的值大于或等于CCAPnL时,PWM输出为高电平
CCAP1H=y; //当CL的值由FF变为00溢出时,CCAPnH的内容装载到CCAPnL中
CCAP1L=y; //CL(PCA计数器寄存器低8位)的值在0~255中自动相加
}
void SendByte(unsigned char dat)//发送单个字符
{
ES = 0;
TI = 0;
SBUF = dat;
while(!TI);
TI = 0;
ES = 1;
}
void SendStr(unsigned char *s) //发送字符串(用于发送命令数组)
{
while(*s!=0xff)
{
SendByte(*s);
s++;
}
}
void SendStr1(unsigned char *e)//发送字符串(用于发送AT指令)
{
while(*e!='\0')// \0 表示字符串结束标志,
//通过检测是否字符串末尾
{
SendByte(*e);
delay(5);
e++;
P1=0xff;
}
}
void eliminate()
{
uchar a;
for(a=0;a<255;a++)
{
receiver[a] = 0;
}
}
void edp_receive(uchar receive[250])//数据下发内容解析函数
{
int i;
for(i = 0;i<=250;i++)
{
if(receive[i] == '{') //从此处起始判断通配符{pwm}
{
i++;
if(receive[i] == 'p')
{
i++;
if(receive[i] == 'w')
{
i++;
if(receive[i] == 'm')
{
i=i+2;
pwm_init();
pwm_set(0xFF,0x00);
if(receive[i] == '1')
{
delay(100);
pwm_set((255-0),0);
}else if(receive[i] == '2')
{
delay(10);
pwm_set((255-30),15);
}else if(receive[i] == '3')
{
delay(100);
pwm_set((255-100),30);
}else if(receive[i] == '4')
{
delay(100);
pwm_set((255-186),120);
}else if(receive[i] == '5')
{
delay(100);
pwm_set((255-255),255);
}
}
}
}
}
}
eliminate();
}
void main()
{
float lux_temp;
UART_init(); //串口功能初始化
delay(50);
SendStr1("AT\r\n");//发送指令“AT”
delay(30000);
SendStr1("AT+CWMODE=3\r\n");//发送指令“AT+CWMODE=3”
delay(30000);
SendStr1("AT+RST\r\n");//发送指令“AT+RST”
delay(50000);
SendStr1("AT+CIFSR\r\n");//发送指令“AT+CIFSR”
delay(50000);
SendStr1("AT+CWJAP=\"AndroidAP\",\"whme1574\"\r\n"); //设置WiFi模块所连接热点或路由器的名称和密码
delay(700000);
SendStr1("AT+CIPSTART=\"TCP\",\"183.230.40.39\",876\r\n");//设置平台的IP地址和端口号
delay(50000);
SendStr1("AT+CIPMODE=1\r\n");//设置WiFi模块为透传模式
delay(50000);
SendStr1("AT+CIPSEND\r\n");//准备发送数据
delay(50000);
SendStr(s);//向平台发送设备连接请求
delay(500000);
while(1)
{
RH();//调用温湿度读取子程序
float_T();//将采集到的湿度和温度赋值给相对应的变量
Single_Write_BH1750(0x01); //通电指令:0000_0001
Single_Write_BH1750(0x10); //连续高分辨率模式指令:0001_0000 (分辨率为1 lux,测量时间为120 ms)
DelayUs(180);
Multiple_Read_BH1750(); //连续读取数据存储在BUF中
lux_data=BUF[0]; //BUF[0]的数据赋值给dis_data
lux_data=(lux_data<<8)+BUF[1]; //dis_data左移8位再加上BUF[1]的数据赋值给dis_data(合并16位的测量数据)
lux_temp=(float)(lux_data/1.2); //光照度计算公式:实际值=测量值/(1.2*透光率*高精度模式2调整值)
REN = 0;//禁止串口接收数据
Send_Illuminance_to_OneNET(lux_temp);//发送光照强度数据到onenet平台
delay(50);
Send_T_to_OneNET(temperature);//发送温度数据到onenet平台
delay(50);
Send_RH_to_OneNET(wet);//发送湿度数据到onenet平台
REN = 1;
edp_receive(receiver);//接收处理平台所下发的命令
delay(5000);
SendStr(heart); //发送心跳指令,使得设备能够持续处于在线状态
}
}
void ser() interrupt 4 using 2
{
if(RI == 1)
{
RI = 0;
a = SBUF;
if(a != '\0')
{
receiver[j] = a;
j++;
if(j>250)
j = 0;
}
}
}
void Send_Illuminance_to_OneNET(float Illuminance) //发送光照强度
{
unsigned char state;
unsigned int Illuminance_temp;
unsigned char e,d,c,b,a;
unsigned char message_length,json_data_length;
Illuminance_temp = Illuminance;
if(Illuminance_temp>=0 & Illuminance_temp<10) //个位
{
state=1;
a=Illuminance_temp;
message_length=0x1B;
json_data_length=0x17;
}
else if(Illuminance_temp>=10 & Illuminance_temp<100)//十位
{
state=2;
b=Illuminance_temp/10;
a=Illuminance_temp%10;
message_length=0x1C;
json_data_length=0x18;
}
else if(Illuminance_temp>=100 & Illuminance_temp<1000)//百位
{
state=3;
c=Illuminance_temp/100;
b=(Illuminance_temp%100)/10;
a=(Illuminance_temp
没有合适的资源?快使用搜索试试~ 我知道了~
stm32mini esp8266使用模板
共29个文件
c:5个
lst:5个
obj:5个
需积分: 9 11 下载量 177 浏览量
2018-04-15
22:38:25
上传
评论 1
收藏 99KB ZIP 举报
温馨提示
库函数版本,适合MiniSTM32开发板 ATK-ESP8266WIFI模块 资料手册+例程+配套软件
资源推荐
资源详情
资源评论
收起资源包目录
基于lora模块的物联网调光系统.zip (29个子文件)
基于lora模块的物联网调光系统
main.OBJ 34KB
UART.c 4KB
Delay.OBJ 2KB
onenet调光.M51 49KB
51_DHT21.OBJ 9KB
Delay.h 130B
onenet调光.plg 192B
STC12C5A60S2.H 17KB
onenet调光.hex 15KB
main.c 14KB
BH1750.h 481B
UART.LST 11KB
51_DHT21.LST 9KB
BH1750.c 2KB
main.LST 27KB
BH1750.OBJ 7KB
onenet调光.uvopt 58KB
51_DHT21.h 207B
onenet调光_uvproj.bak 13KB
onenet调光_uvopt.bak 58KB
Delay.c 350B
UART.OBJ 11KB
onenet调光.lnp 92B
BH1750.LST 5KB
onenet调光.uvproj 13KB
Delay.LST 2KB
51_DHT21.c 5KB
UART.h 593B
onenet调光 45KB
共 29 条
- 1
资源评论
松山湖皇家理工学院
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功