|
实现的功能是:通过手机 APP 控制开发板上的 LED 灯,同时开发板上的 DS18B20 温度传感器采集的温度上传到手机 APP 端显示。
如果要控制别的东西程序稍作修改即可
测试使用的是安卓手机app程序为tcp连接,可以在应用商城下载(附件中也有安装包),
主程序 (完整的程序在附件中)
#include "public.h"
#include "temp.h"
sbit ESP8266_RST_Pin=P2^4;
sbit ESP8266_CH_PD_Pin=P2^3;
sbit led1=P1^0;
//sbit led2=P1^1;
sbit led3=P1^2;
//sbit relay=P1^4;
#define RELOAD_COUNT 0xFA //宏定义波特率发生器的载入值 9600
#if 1
u8 RecBuf[50];
u8 dat;
u8 recFlagOK=0;
#endif
u8 tempData[9];
void UART_Init()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=RELOAD_COUNT; //计数器初始值设置
TL1=TH1;
ES=0; //关闭接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void UART_SendByte(u8 dat)
{
ES=0; //关闭串口中断
TI=0; //清发送完毕中断请求标志位
SBUF=dat; //发送
while(TI==0); //等待发送完毕
TI=0; //清发送完毕中断请求标志位
ES=1; //允许串口中断
}
void ESP8266_SendCmd(u8 *pbuf)
{
while(*pbuf!='\0') //遇到空格跳出循环
{
UART_SendByte(*pbuf);
delay_10us(5);
pbuf++;
}
delay_10us(5);
UART_SendByte('\r');//回车
delay_10us(5);
UART_SendByte('\n');//换行
delay_ms(1000);
}
void ESP8266_SendData(u8 *pbuf)
{
ESP8266_SendCmd("AT+CIPSEND=0,9");
while(*pbuf!='\0') //遇到空格跳出循环
{
UART_SendByte(*pbuf);
delay_10us(5);
pbuf++;
}
delay_10us(5);
UART_SendByte('\n');//换行
delay_ms(10);
}
//ESP8266-WIFI模块工作模式初始化
void ESP8266_ModeInit(void)
{
ESP8266_RST_Pin=1;
ESP8266_CH_PD_Pin=1;
ESP8266_SendCmd("AT+CWMODE=3");//设置路由器模式 1 staTIon模式 2 AP点 路由器模式 3 station+AP混合模式
ESP8266_SendCmd("AT+CWSAP=\"PRECHIN\",\"prechin168\",11,0"); //设置WIFI热点名及密码
ESP8266_SendCmd("AT+CIPAP=\"192.168.4.2\"");//重新启动wifi模块
ESP8266_SendCmd("AT+RST");//重新启动wifi模块
ESP8266_SendCmd("AT+CIPMUX=1"); //开启多连接模式,允许多个各客户端接入
ESP8266_SendCmd("AT+CIPSERVER=1,8080"); //启动TCP/IP 端口为8080 实现基于网络控制
}
//温度数据处理
#if 1
void TempDataPros(void)
{
int tempdat=0;
tempdat=Ds18b20ReadTemp()*10;
if(tempdat<0)
{
tempData[0]='-';
}
else
{
tempData[0]=' ';
}
tempData[1]=tempdat / 10000+0x30;
tempData[2]=tempdat % 10000 / 1000+0x30;
tempData[3]=tempdat % 1000 / 100+0x30;
tempData[4] ='.';
tempData[5]=tempdat % 100 / 10+0x30;
tempData[6]=tempdat % 10+0x30;
tempData[7] ='C';
tempData[8] ='\0';
}
#endif
void main()
{
u16 i=0;
led1=led3=1;
// relay=1;
UART_Init(); //串口初始化
ESP8266_ModeInit();
ES=1; //允许串口中断
while(1)
{
i++;
if(i%10==0)
{
led3=!led3;
TempDataPros();
ESP8266_SendData(tempData);
}
delay_ms(10);
}
}
#if 1
void InterruptUART() interrupt 4
{
RI = 0; //清零
dat = SBUF; //收到的数据占存到SBUF中
{
if(dat=='o')
{
led1 =0;
}
if(dat=='f')
{
led1 =1;
}
}
}
#endif
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|