找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7896|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

STC15F2K60S2+esp8266 ,手機(jī)app控制LED

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
單片機(jī)是我的業(yè)余愛(ài)好

準(zhǔn)備工作:
單片機(jī):德飛萊STC15F2K60S2板子,Esp8266 WIfi模
手機(jī)App:華為官網(wǎng)上下載 易友調(diào)試助手。
C程序開(kāi)發(fā)工具:Keil uVision3
單片機(jī)程序燒制及串口助手:stc-isp-15xx-v6.82E
圖 2

經(jīng)過(guò)幾個(gè)晚上終于調(diào)通了,在調(diào)試過(guò)程中主要有以下問(wèn)題:
1、硬件連接問(wèn)題,如下圖1 ,這個(gè)圖可以在串口調(diào)試的時(shí)候有用,但如果你是用STC15F2K60S2單片機(jī)與esp8266調(diào)試需要將TX,RX反接,可能是因?yàn)槲矣肊SP8266作為服務(wù)端導(dǎo)致的,若有大神了解,望不吝賜教。
2、 網(wǎng)上資料因各自硬件不同,所以對(duì)c程序調(diào)試會(huì)碰到各種問(wèn)題,主要在串口聯(lián)接及通信上問(wèn)題多。


       (圖1)      

步驟:
1 測(cè)試串口與手機(jī)app的連接
將ESP8266與單片機(jī)模塊按圖1連接, 將單片機(jī)與電腦用USB連接,如圖 2 打開(kāi)串口
在發(fā)送緩沖區(qū)依次輸入以下命令并點(diǎn)發(fā)送按鈕。
AT+RST  復(fù)位模塊,成功后返回ready
AT+CIPMODE=1  設(shè)為station模式
AT+CWLAP  顯示無(wú)線列表
AT+CWJAP="TP-LINK_0728","xxx"  加入無(wú)線網(wǎng)絡(luò)  xxx-為你給路由設(shè)置的密碼。


設(shè)置ESP8266為服務(wù)端
AT+CIPMUX=1  模塊作為服務(wù)器時(shí),可以被多個(gè)客戶(hù)端連接,若作為客戶(hù)端時(shí),可以連接多個(gè)服務(wù)器。
AT+CIPSERVER=1,333  333為服務(wù)器端口
AT+CIFSR  查找服務(wù)端ip, 手機(jī)app作為客戶(hù)端連接服務(wù)器需要 服務(wù)端IP,端口。

打開(kāi)手機(jī)app, 將協(xié)議類(lèi)型設(shè)置 為T(mén)CP client, 服務(wù)器IP為上一步查詢(xún)結(jié)果,端口為333點(diǎn)擊連接后,就可以測(cè)試了。

2 、單生機(jī)連接esp8266與手機(jī)通信。
a  將如下c源碼用開(kāi)發(fā)工具編譯好。
b 將程序燒錄到單片機(jī),燒錄時(shí)要斷開(kāi)ESP8266 的TX,RX連接,否則燒錄不成功。
c 燒錄完成后,將上圖的TX,RX反接到單片機(jī)上。
4測(cè)試

C程序:
#include <reg52.h>                       //包含頭文件
#define uint unsigned int
#define uchar unsigned char
#define RELOAD_COUNT 0xFA         //宏定義波特率發(fā)生器的載入值
#define MAIN_Fosc                22118400L        //定義主時(shí)鐘       
#define        BaudRate1                115200UL        //選擇波特率
#define receive_max 20          //串口接收緩沖長(zhǎng)度   
#define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重裝值, 對(duì)應(yīng)300KHZ
#define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))        //Timer 2 重裝值, 對(duì)應(yīng)300KHZ
typedef  unsigned char u8;


/*****************LED燈對(duì)應(yīng)P0口的1個(gè)端口*************/
sbit LED0=P3^7;
/************波特率發(fā)生器相關(guān)功能寄存器的定義****************/
sfr AUXR=0x8E;
sfr BRT=0x9C;
sfr AUXR1=0xA2;
sfr P_SW1 = 0xA2;
/*****************相關(guān)變量**************/
uchar Recive_table[receive_max];        //用于接收wifi模塊反饋到MCU上的數(shù)據(jù)
u8 receive_count=0; //接受數(shù)據(jù)的個(gè)數(shù)
/*******************************************************************
名稱(chēng):延時(shí)函數(shù)
作用:毫秒級(jí)延時(shí),微妙級(jí)延時(shí)函數(shù),為數(shù)據(jù)收發(fā)完成作等待.......
********************************************************************/
void ms_delay(uint t)
{
    uint i,j;
    for(i=t; i>0; i--)
        for(j=110; j>0; j--);
}
/********************************************************************
名稱(chēng):波特率發(fā)生器函數(shù)
作用:波特率發(fā)生器可以是T1定時(shí)器實(shí)現(xiàn),也可以是MCU內(nèi)部獨(dú)立的波特率發(fā)生器,
各自不同的載入值計(jì)算式,具體根據(jù)寄存器相關(guān)設(shè)置來(lái)參考計(jì)算,以實(shí)現(xiàn)
異步串行通訊。(經(jīng)測(cè)試,兩種設(shè)置方式均可用,可任選一種。)
********************************************************************/
void Uart_Init()//使用定時(shí)器1作為波特率發(fā)生器
{
    SCON |= 0x40;               //8位數(shù)據(jù)
    P_SW1 &=  ~0xc0;       //UART1 使用P30 P31口  默認(rèn)
    TR1 = 0;                    //關(guān)閉定時(shí)器
    TR1 = 0;                        //波特率使用Timer1產(chǎn)生
    AUXR &= ~0x01;                //S1 BRT Use Timer1;
    TMOD &= ~(1<<6);   //Timer1 set As Timer
    TMOD &= ~0x30;     //Timer1_16bitAutoReload;2
    AUXR |=  (1<<6);        //Timer1 set as 1T mode
    TH1 = (u8)(Timer1_Reload >> 8);
    TL1 = (u8)Timer1_Reload;
    TR1  = 1;
    PS = 1; //高優(yōu)先級(jí)中斷
    REN = 1;        //允許接收
    ES  = 1;        //允許中斷
    EA = 1;                //允許全局中斷
}


//發(fā)送一字節(jié)
void sendByte(uchar b)
{   ES=0;
    SBUF = b;
    while(!TI);
    TI=0;
    ES=1;
}


//發(fā)送字符串
void sendString(uchar *s)
{
    while(*s != '\0') //字符串默認(rèn)結(jié)尾'\0',以此來(lái)判斷字符串的結(jié)束
    {
        sendByte(*s++);
    }
}


/********************************************************************
名稱(chēng):WIFI模塊設(shè)置函數(shù)
作用: 啟動(dòng)模塊,以便可以實(shí)現(xiàn)無(wú)線接入和控制
********************************************************************/
void ESP8266_Set(uchar *puf) // 數(shù)組指針*puf指向字符串?dāng)?shù)組
{
    sendString(puf);
    ms_delay(10);
    sendString("\r\n");//回車(chē)
}
/****************************************************
名稱(chēng):ESP8266發(fā)送數(shù)據(jù)函數(shù)
功能:用于與wifi模塊相連的終端發(fā)送數(shù)據(jù)
*****************************************************/
void ESP8266_Sent(uchar *puf)      // 數(shù)組指針*puf指向字符串?dāng)?shù)組
{
    ESP8266_Set("AT+CIPSEND=0,50");
    sendString(puf);
    ms_delay(10);
    sendString("\r\n");   //回車(chē)
}


/********************************************************************
名稱(chēng):主函數(shù)
作用:程序的執(zhí)行入口
********************************************************************/
void main()
{
    ms_delay(50000);
    LED0=0;//關(guān)閉LED燈
    Uart_Init();//使用獨(dú)立的波特率發(fā)生器
    ms_delay(500);
    LED0=!LED0;
    ms_delay(500);
    LED0=!LED0;
    ESP8266_Set("AT+CIPMUX=1"); //啟動(dòng)多連接
    ms_delay(500);
    LED0=!LED0;
    ESP8266_Set("AT+CIPSERVER=1,333");//建立server,端口為333
    ms_delay(500);
    LED0=!LED0;
    //允許串口中斷
    while(1)
    {


        if(receive_count > 0)//如果接受到數(shù)據(jù)
        {
            ms_delay(500);
            receive_count = 0;//接收計(jì)數(shù)清0


            if(Recive_table[9]=='0')
            {
                LED0=!LED0;//0 燈滅
                ms_delay(500);
                ESP8266_Sent("close");
                //  ms_delay(500);
                //        ESP8266_Sent(Recive_table);
                //         ms_delay(500);
            }
            if(Recive_table[9]=='1')
            {
                LED0=!LED0;//0 燈滅
                ms_delay(500);
                ESP8266_Sent("open");
                //  ms_delay(500);
                //        ESP8266_Sent(Recive_table);
                //         ms_delay(500);
            }
            receive_count = 0;//接收計(jì)數(shù)清0


        }
    }
}




void UART1_int (void) interrupt 4
{
    if(RI)
    {
        RI = 0;//清除接受標(biāo)志
        Recive_table[receive_count] = SBUF;//將數(shù)據(jù)存入數(shù)組
        if(++receive_count > receive_max) {
            receive_count = 0;//避免溢出
        }
        if((Recive_table[receive_count-1]=='\n'))
            receive_count=0;
    }
    if(TI)
    {}
}





  



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:384334 發(fā)表于 2018-8-10 20:58 來(lái)自手機(jī) | 只看該作者
學(xué)習(xí)中,謝謝
回復(fù)

使用道具 舉報(bào)

板凳
ID:355489 發(fā)表于 2018-8-11 09:12 | 只看該作者

RE: STC15F2K60S2+esp8266 ,手機(jī)app控制LED

連接圖[url=]圖片[/url]
回復(fù)

使用道具 舉報(bào)

地板
ID:355489 發(fā)表于 2018-8-11 09:16 | 只看該作者
wifi與單片機(jī)連接圖

IMG_20180811_090947.jpg (1.48 MB, 下載次數(shù): 63)

IMG_20180811_090947.jpg
回復(fù)

使用道具 舉報(bào)

5#
ID:387014 發(fā)表于 2018-8-21 13:39 | 只看該作者
不錯(cuò)呀
回復(fù)

使用道具 舉報(bào)

6#
ID:359281 發(fā)表于 2018-8-22 14:36 | 只看該作者
STC15F2K60S2+esp8266 ,手機(jī)app控制LED
回復(fù)

使用道具 舉報(bào)

7#
ID:631878 發(fā)表于 2019-11-12 15:14 | 只看該作者
你好,可以用stc89c52嗎?
回復(fù)

使用道具 舉報(bào)

8#
ID:110278 發(fā)表于 2019-11-19 14:20 | 只看該作者
很好。
回復(fù)

使用道具 舉報(bào)

9#
ID:25310 發(fā)表于 2019-11-20 10:46 | 只看該作者
我得借鑒一下了,謝謝樓主分享。
回復(fù)

使用道具 舉報(bào)

10#
ID:560110 發(fā)表于 2020-1-15 21:56 | 只看該作者

你好,可以用stc89c52嗎?
回復(fù)

使用道具 舉報(bào)

11#
ID:686631 發(fā)表于 2020-1-16 13:26 | 只看該作者
單片機(jī)起什么作用?可以省掉吧
回復(fù)

使用道具 舉報(bào)

12#
ID:748762 發(fā)表于 2020-5-27 17:52 | 只看該作者
手機(jī)APP是用易安卓做的嗎?有代碼嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表