基于物联网的智能门户控制系统设计_第1页
基于物联网的智能门户控制系统设计_第2页
基于物联网的智能门户控制系统设计_第3页
基于物联网的智能门户控制系统设计_第4页
基于物联网的智能门户控制系统设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

附录1BH1750main函数代码/**在main函数中引用驱动并定义光照强度的变量**/

#include

"bh1750.h"

float

Light

=

0;

/**初始化BH1750**/

BH1750_Init();

/**获取光照强度数据并赋值给对用变量**/

Light

=

LIght_Intensity();

2DHT11main函数代码/**在main函数中引用驱动并定义温湿度的变量**/

#include

"dht11.h"

u8

temperatureH;

u8

temperatureL;

u8

humidityH;

u8

humidityL;

/**初始化dht11**/

DHT11_Init();

/**获取温湿度数据并赋值给对用变量**/

DHT11_Read_Data(&humidityH,&humidityL,&temperatureH,&temperatureL);

3OLED显示代码*******驱动函数

*******配置OLED

*******引脚配置*/

*****/

#define

OLED_W_SCL(x)

GPIO_WriteBit(GPIOA,

GPIO_Pin_5,

(BitAction)(x))

#define

OLED_W_SDA(x)

GPIO_WriteBit(GPIOA,

GPIO_Pin_7,

(BitAction)(x))

/**引脚初始化**/

void

OLED_I2C_Init(void)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,

ENABLE);

GPIO_InitTypeDef

GPIO_InitStructure;

GPIO_InitStructure.GPIO_Mode

=

GPIO_Mode_Out_OD;

GPIO_InitStructure.GPIO_Speed

=

GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Pin

=

GPIO_Pin_5;

GPIO_Init(GPIOA,

&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin

=

GPIO_Pin_7;

GPIO_Init(GPIOA,

&GPIO_InitStructure);

OLED_W_SCL(1);

OLED_W_SDA(1);

}

/**main函数代码**/

/**在main函数中引用驱动并定义温湿度的变量**/

#include

"oled.h"

char

PUBBuf[20];

/**初始化oled**/

OLED_Init();

OLED_ColorTurn(0);

OLED_DisplayTurn(0);

OLED_Clear();

/**********************************

首先将显示数据放入oledBuf内,然后调用OLED_ShowString将oledBuf

放入显存内,最后调用OLED_Refresh()将显存内数据显示出来,方法如下:

**********************************/

sprintf(oledBuf,"Welcome");

OLED_ShowString(32,0,(u8*)oledBuf,16);

sprintf(oledBuf,"Light:%.1fs",Light);

OLED_ShowString(0,16,(u8*)oledBuf,16);//8*16

¡°ABC¡±

sprintf(oledBuf,"Temp:%d.%d

C",temperatureH,temperatureL);

OLED_ShowString(0,32,(u8*)oledBuf,16);

sprintf(oledBuf,"Hum:%d.%d

%%",humidityH,humidityL);

OLED_ShowString(0,48,(u8*)oledBuf,16);

OLED_Refresh();

4执行器代码/**驱动函数**/

/**********************************

XX_Status

是设备标志,代表设备是关是开,0关1开,Led_Status代表灯,CL_Status代表窗帘,CH_Status代表窗户

蜂鸣器为高电平触发,当光照小于100时,将led标志位置1,打开补光灯,同时转动前方舵机打开窗帘,当光照大于等于100时,各单位置为常态,设备静止,当光照大于1500时,转动后方舵机关闭窗帘,当光照大于2000时,将蜂鸣器标志位置1,蜂鸣器报警

**********************************/

if(Light

<

100){

Led_Status

=

1;

//将led标志位置1

GPIO_ResetBits(GPIOA,GPIO_Pin_4);

PWM_SetCompare2(500);

//打开窗帘

PWM_SetCompare1(0);

CL_Status

=

1;//将窗帘标志位置1

}

if(Light

>=

100){

Led_Status

=

0;

GPIO_SetBits(GPIOA,GPIO_Pin_4);

PWM_SetCompare2(0);

PWM_SetCompare1(0);

CL_Status

=

2;

}

if(Light

>

1500){

PWM_SetCompare1(500);

CL_Status

=

0;

}

if(Light

>

2000){

alarmFlag

=

1;

}

if(Light

<

1999){

alarmFlag

=

0;

}

/**当湿度大于60时,同时转动舵机打开窗户,反之则关闭窗户**/

if(humidityH

>

60){

PWM1_SetCompare4(500);

CH_Status

=

1;

}

if(humidityH

<

59){

PWM1_SetCompare4(0);

CH_Status

=

0;

}

5上云代码/**Stm32驱动Esp8266-01s数据上云**/

/**********************************

首先,ESP8266-01S通过AT指令配置wifi及服务器连接信息,配置工作站模式为STA

初始化ESP8266,连接到无线网络,确保模块能够访问互联网,从而与云端服务器进行通信。

**********************************/

while(ESP8266_SendCmd("AT\r\n",

"OK"))

ESP8266_SendCmd("AT+RST\r\n",

"");

ESP8266_SendCmd("AT+CIPCLOSE\r\n",

"");

while(ESP8266_SendCmd("AT+CWMODE=1\r\n",

"OK"))

while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n",

"OK"))

while(ESP8266_SendCmd(ESP8266_WIFI_INFO,

"GOT

IP"))

while(ESP8266_SendCmd(ESP8266_ONENET_INFO,

"CONNECT"))

/**********************************

驱动MQTT库实现MQTT协议的通信。

ESP8266-01S作为MQTT客户端,会与云端的MQTT服务器建立连接,然后发布数据到指定的主题(Topic)。云端服务器接收到数据后,通过wss协议推送至微信小程序。

**********************************/

const

char

*devSubTopic[]

=

{"/mihaiying/sub"};

const

char

devPubTopic[]

=

"/mihaiying/pub";

if(++timeCount

>=

200){

UsartPrintf(USART_DEBUG,

"OneNet_Publish\r\n");

sprintf(PUBBuf,"{\"Beep\":%d,\"Light\":%.1f,\"Temp\":%d.%d,\"Hum\":%d.%d,\"Led\":%d,\"CH_Status\":%d,\"CL_Status\":%d}",alarmFlag,Light,temperatureH,temperatureL,humidityH,humidityL,Led_Status,CH_Status,CL_Status);

OneNet_Publish(devPubTopic,

PUBBuf);

timeCount

=

0;

ESP8266_Clear();

}6数据下发部分/**********************************

收到消息后进行判断,因为该系统只需要接收一条switch消息,所以只需要进行简单判断下发的值是0还是1即可。

**********************************/

json_value

=

cJSON_GetObjectItem(json

,

"value");

if(json_value->valueint){

GPIO_SetBits(GPIOB,GPIO_Pin_10);

}else{

GPIO_ResetBits(GPIOB,GPIO_Pin_10);

}

7SG90舵机/**********************************

PA1作为信号口,TIM2作为定时器,并设置其为PWM模式,PWM信号的周期应设置为20ms。

**********************************/

void

PWM_Init(void)

{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,

ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,

ENABLE);

GPIO_InitTypeDef

GPIO_InitStructure;

GPIO_InitStructure.GPIO_Mode

=

GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Pin

=

GPIO_Pin_1;

GPIO_InitStructure.GPIO_Speed

=

GPIO_Speed_50MHz;

GPIO_Init(GPIOA,

&GPIO_InitStructure);

TIM_InternalClockConfig(TIM2);

TIM_TimeBaseInitTypeDef

TIM_TimeBaseInitStructure;

TIM_TimeBaseInitStructure.TIM_ClockDivision

=

TIM_CKD_DIV1;

TIM_TimeBaseInitStructure.TIM_CounterMode

=

TIM_CounterMode_Up;

TIM_TimeBaseInitStructure.TIM_Period

=

20000

-

1;

//ARR

TIM_TimeBaseInitStructure.TIM_Prescaler

=

72

-

1;

//PSC

TIM_TimeBaseInitStructure.TIM_RepetitionCounter

=

0;

TIM_TimeBaseInit(TIM2,

&TIM_TimeBaseInitStructure);

TIM_OCInitTypeDef

TIM_OCInitStructure;

TIM_OCStructInit(&TIM_OCInitStructure);

TIM_OCInitStructure.TIM_OCMode

=

TIM_OCMode_P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论