找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7969|回复: 3
打印 上一主题 下一主题
收起左侧

单片机与ESP8266通过手机APP通信

[复制链接]
跳转到指定楼层
楼主
课题是输入时间发送给单片机,单片机控制南北方向,东西方向路口绿灯时间为输入时间。此为C语言单片机端源码,供需要的人参考

初始化ESP8266:
初始化之前用串口助手将ESP设置好运行模式AP和Station共存,设置好密码(这些助手都能够直接一键设置),设置好波特率9600指令AT+CIOBAUD=9600
首先初始化定时器,因为我的课题要求
void time0_init()         
{
        EA  = 1;                   //开总中断
        SCON=0x50;
        TMOD = 0X21;          //定时器0、定时器1工作方式1
        ET0 = 1;                  //开定时器0中断
        TR0 = 1;                  //允许定时器0定时
        ET1 = 0;                  //开定时器1中断         
        TH1=0xfd;//赋初值
         TL1=0xfd;//同上,此为波特率9600的初值
         TR1=1;
         REN=1;//允许串口接收
        
         
}//(此为串口通行的基础)

接下来发送命令到ESP8266

void connect_init()
{        
        char *a="AT+CIPMUX=1\r\n";
        char *b="AT+CIPSERVER=1,5000\r\n";

        while(*a!='\0')
        {
                SBUF=*a;      //写入要发送的字符
                while(!TI);    //等待发送完成
                TI=0;          //发送
                a++;
        }        
        delay_1ms(100);//这里添加延时函数,延时5ms左右,给ESP8266反应时间
        while(*b!='\0')
        {
     SBUF=*b;  

                while(!TI);    //等待发送完成
                TI=0;
                b++;
        }        
RI=0;
ES=1;
//初始化完成,串行口中断打开        
}

然后
void main()
{
               
        time0_init();
connect_init();               
//此处添加其他要实现的代码
} //每次单片机开机都会向ESP发送命令将其初始化。

然后是发送完成以及接收完成时所产生的中断处理
void serial com()interrupt 4
{

        
          if(RI==1)//接收的中断
        {
            RI=0;//取消本次接收中断申请,方便进入下次中断
            temp=SBUF;//SBUF写在后是把接受寄存器的值赋给P1
                if(temp==':'||j>0)//由于ESP发送的字符有+IPD,0,1:等字符,故此为截取:及其以后的字符然后根据自己的目的进行判断
                {
                        receive[j]=temp; //截取的字符保存在数组中
                        j++;
                        if(temp=='J')//判断字符自设,不发生冲突即可
                        {
//添加要实现的功能
                        j=0;
                        }
                        if(temp=='G'){
                                j=0;
                                dai=dai+1;
memset(receive,0,3);
                                switch(dai){
case 1:dx_time=15,nb_time=35;
case 2:dx_time=35,nb_time=15,dai=0;                //添加要实现的功能代码        
                                                        }
}
                if(temp=='N'||o>0){
                                                receive[o]=temp;
                                                o++;        
                                                if(temp=='S')
                                                {
                                                 m= receive[1]*10+receive[2]-16;//此处截取的内容和我要实现的相差16,不知道为何,有知道的还望告知。
                                                nb_time=m;
                                                temp=0;
                                                memset(receive,0,sizeof(receive));
                                                o=0;j=0;
                                                }
                                                }
        
                if(temp=='D'||l>0){
                receive1[l]=temp;
                l++;
                if(temp=='S'){
                dx_time=receive1[1]*10+receive1[2]-16;
                temp=0;
                memset(receive1,0,sizeof(receive1));//调用该函数需要头文件 string.h 不要忘了添加
                l=0; j=0;   }
                                   }

                }                                
                RI=0;
}

if(TI==1){
                        TI=0;
                        }//发送中断在发送完成时产生的中断
RI=0;
}

好了,大概需要做的就这些,记得声明数组char receive[];
需要安卓客户端的再联系吧

USB转ESP8266资料.zip

1.58 MB, 下载次数: 59, 下载积分: 黑币 -5

串口助手供大家下载

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:325485 发表于 2019-6-24 14:38 | 只看该作者
需要客户端啊?还可以发出来吗?
回复

使用道具 举报

板凳
ID:570965 发表于 2019-6-24 16:38 | 只看该作者
波特率9600 改成其他的好用不
回复

使用道具 举报

地板
ID:571712 发表于 2019-6-25 14:26 | 只看该作者
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表