MCU是89C52单片机
WiFi模块是ESP8266
其他 8路继电器 电源模块 使用贝壳物联做服务器 还有客户端。
也可以用花生壳做内网穿透,8266做服务器,也可以实现物联以及反馈(8266支持同时5个客户端)
已经实现8开关+反馈+远程开门和锁门(汽车中控锁)
附C代码以及手机客户端代码(E4A) ID以及APIKEY 需要去贝壳物联申请贝壳物联用户中心
e4a源代码:
手机客户端含源程序:
制作出来的实物图如下:
单片机源程序如下:
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit lcd0=P2^0; //输出端口
- sbit lcd1=P2^1;
- sbit lcd2=P2^2;
- sbit lcd3=P2^3;
- sbit lcd4=P2^4;
- sbit lcd5=P2^5;
- sbit lcd6=P2^6;
- sbit lcd7=P2^7;
- sbit lcd8=P0^5;
- sbit lcd9=P0^6; //暂定为开锁按钮
- sbit state=P0^4; //门锁开关反馈状态
- sbit sw0=P1^0;
- sbit sw1=P1^1;
- sbit sw2=P1^2;
- sbit sw3=P1^3;
- sbit sw4=P1^4;
- sbit sw5=P1^5;
- sbit sw6=P1^6;
- sbit sw7=P1^7;
-
- /*****************相关变量**************/
- uchar Receive;
- uchar Recive_table[150]; //用于接收wifi模块反馈到MCU上的数据
- uchar ac; //登录状态标识
- /*******************************************************************
- 名称:延时函数 作用:毫秒级延时,微妙级延时函数,为数据收发完成作等待.......
- ********************************************************************/
- void ms_delay(uint t)
- {
- uint i,j;
- for(i=t;i>0;i--)
- for(j=110;j>0;j--);
- }
-
- void us_delay(uchar t)
- {
- while(t--);
- }
-
- void Uart_Init() //使用定时器1作为波特率发生器(STC89C52、STC89C51、AT89C51等均可)
- {
- TMOD = 0x20;
- SCON = 0x50; //设置串行方式
- TH1 = 0xFD; //波特率9600
- TL1 = TH1;
- PCON = 0x00;
- EA = 1; //总中断打开
- ES = 1; //开串口中断
- TR1 = 1;
- }
-
- void InitTimer0(void)
- {
- TMOD |= 0x01;
- TH0 = 0x0DC;
- TL0 = 0x00;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- /********************************************************************
- 名称:串口发送函数 功能:MCU向无线WIFI模块ESP8266发送数据
- ********************************************************************/
- void Send_Uart(uchar value)
- {
- ES=0; //关闭串口中断
- TI=0; //清发送完毕中断请求标志位
- SBUF=value; //发送
- while(TI==0); //等待发送完毕
- TI=0; //清发送完毕中断请求标志位
- ES=1; //允许串口中断
- }
-
- /********************************************************************
- 名称:WIFI模块设置函数 作用: 启动模块,以便可以实现无线接入和控制
- ********************************************************************/
-
- void ESP8266_Set(uchar *puf,uchar a) // 数组指针*puf指向字符串数组
- {
-
-
- while(*puf!='\0') //遇到空格跳出循环
- {
- Send_Uart(*puf); //向WIFI模块发送控制指令。
- us_delay(5);
- puf++;
- }
-
- if(a==1)
- {
- us_delay(5);
- Send_Uart('\r'); //回车
- us_delay(5);
- Send_Uart('\n');
- } //换行
- }
- unsigned char *Itoa(unsigned int ni,int dd)
- {char i=0,j=0,temp[16],outstr[16];
- unsigned int n,num=ni;
- while(num>=dd)
- {n=num%dd;
- if(n>9)temp[i]=n+0x37;else temp[i]=n+0x30;
- num=num/dd;
- i++;
- }
- n=num;if(n>9)temp[i]=n+0x37;else temp[i]=n+0x30;
- j=0;
- for(;i>=0;i--){outstr[j]=temp[i];j++;}
- outstr[j]=0;
- return outstr;
- }
- //------------------------------------------------------
- void ML_fasong()
- {
- ESP8266_Set("{\"M\":\"say\",\"ID\":\"ALL\",\"C\":\"",0);
- ESP8266_Set(Itoa(P2,2),0);
- ESP8266_Set(Itoa(state,2),0);
- ESP8266_Set("\",\"SIGN\":\"00\"}\n",1);
- }
- void ledcl(uchar a) //led处理
- {
-
- if(a==0)
- { lcd0=~lcd0;
- ML_fasong();
- }
- if(a==1)
- {
- lcd1=~lcd1;
- ML_fasong(); }
- if(a==2)
- {
- lcd2=~lcd2;
- ML_fasong();
- }
- if(a==3)
- {
- lcd3=~lcd3;
- ML_fasong();
- }
- if(a==4)
- {
- lcd4=~lcd4;
- ML_fasong();
- }
- if(a==5)
- {
- lcd5=~lcd5;
- ML_fasong();
- }
- if(a==6)
- {
- lcd6=~lcd6;
- ML_fasong();
- }
- if(a==7)
- {
- lcd7=~lcd7;
- ML_fasong();
- }
- if(a==8)
- {
- lcd8=0;
- ms_delay(500);
- lcd8=1;
- ML_fasong();
- }
- if(a==9)
- {
- lcd9=0;
- ms_delay(500);
- lcd9=1;
- ML_fasong();
- }
- }
- void key() //独立按键处理
- {
- if(sw0==0)
- {
- ms_delay(10);
- if(sw0==0)
- { ledcl(0); }
- while(!sw0);
- }
- if(sw1==0)
- {
- ms_delay(10);
- if(sw1==0)
- { ledcl(1); }
- while(!sw1);
- }
- if(sw2==0)
- {
- ms_delay(10);
- if(sw2==0)
- { ledcl(2); }
- while(!sw2);
- }
- if(sw3==0)
- {
- ms_delay(10);
- if(sw3==0)
- { ledcl(3); }
- while(!sw3);
- }
- if(sw4==0)
- {
- ms_delay(10);
- if(sw4==0)
- { ledcl(4); }
- while(!sw4);
- }
- if(sw5==0)
- {
- ms_delay(10);
- if(sw5==0)
- { ledcl(5); }
- while(!sw5);
- }
- if(sw6==0)
- {
- ms_delay(10);
- if(sw6==0)
- { ledcl(6); }
- while(!sw6);
- }
- if(sw7==0)
- {
- ms_delay(10);
- if(sw7==0)
- { ledcl(7); }
- while(!sw7);
- }
- }
-
- void ML_panduan()
- {
- uchar x,i,y,z;
- x=30;
- y=50;
- i=0;
- if(Recive_table[6]=='b')
- {
- ms_delay(1000);
- ESP8266_Set("{\"M\":\"beat\"}\n",1);
- Recive_table[6]='0';
- if(ac>2)
- {
- ac--;
- }
- else
- {
- ac=0;
- }
-
-
- }
- while(x--)
- {
- if (Recive_table[i]=='s')
- {
- if(Recive_table[i+1]=='a')
- {
- z=i+25;
- x=0;
- while(y--)
- {
- if(Recive_table[z]=='C')
- {
- if(Recive_table[z+2]==':')
- {
- switch(Recive_table[z+4])
- {
- case('a'): y=0; ledcl(0); Recive_table[z+4]='1'; break;
- case('b'): y=0; ledcl(1); Recive_table[z+4]='1'; break;
- case('c'): y=0; ledcl(2); Recive_table[z+4]='1'; break;
- case('d'): y=0; ledcl(3); Recive_table[z+4]='1'; break;
- case('e'): y=0; ledcl(4); Recive_table[z+4]='1'; break;
- case('f'): y=0; ledcl(5); Recive_table[z+4]='1'; break;
- case('g'): y=0; ledcl(6); Recive_table[z+4]='1'; break;
- case('h'): y=0; ledcl(7); Recive_table[z+4]='1'; break;
- case('i'): y=0; ledcl(8); Recive_table[z+4]='1'; break;
- case('j'): y=0; ledcl(9); Recive_table[z+4]='1'; break;
- case('o'): y=0; lcd5=0; Recive_table[z+4]='1'; break;
- case('n'): y=0; lcd5=1; Recive_table[z+4]='1'; break;
- case('0'): y=0; ML_fasong(); Recive_table[z+4]='1'; break;
-
- }
- }
- }
- else
- z++;
- }
- }
- }
- else
- i++;
- }
- }
- //-------------------------------------------------------------------------
- void ML_chushihua()
- {
- uint p;
- p=2000;
- // ESP8266_Set("AT+RST",1);
- // ms_delay(p);
- ESP8266_Set("AT+CIPMUX=0",1);
- ms_delay(p);
- ESP8266_Set("AT+CIPSTART=\"TCP\",\"121.42.180.30\",8282",1);
- ms_delay(p);
- ESP8266_Set("AT+CIPMODE=1",1);
- ms_delay(p);
- ESP8266_Set("AT+CIPSEND",1);
- ms_delay(p);
- ESP8266_Set("{\"M\":\"checkin\",\"ID\":\"此处为ID\",\"K\":\"此处为APIKEY\"}\n",1);
- ac=0;
- }
- void main()
- { bit bdat;
- bdat=state;
- Uart_Init();
- InitTimer0();
- ML_chushihua();
-
- while(1)
- {
- ML_panduan();
- key();
- if(state!=bdat)
- {
- bdat=state;
- ML_fasong();
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
89C52+ESP8266简易物联网+手机客户端.zip
(638.02 KB, 下载次数: 666)
|