• <table id="0ws66"></table>
  • <noscript id="0ws66"><source id="0ws66"></source></noscript>
    ESP2866_20170221

    ESP2866_20170221的詳細介紹

    創作者:果凍匯源 | 更新日期:2017-05-20 | 在線時長:5時
    果凍匯源的第一個設備,來自貝殼物聯 這是一個測試設備,本來是用來做我們學校low爆了的科研成長導師項目,由于隊長(myLazy室友)拖延問題,就被一直擱置,最后迫不得已他掏了一款STM32的板子(汗)導致本C51項目流產(哭),頂著被隊長罵的風險冒死完成了一部分功能(與貝殼的連接部分)功能沒時間進一步完善了,我就先公布一下我的成果吧。

    功能介紹

    APP控制STC89C51單片機

    硬件組成

    AndroidAPP  STC89C51以及keil、STCISP等軟件、ESP8266(01s)

    代碼說明

    /*
      基于貝殼物聯的單片機控制系統
      public by 果凍匯源 2017.5.20 zju
     
      前期工作:ESP8266的WIFI設置好(可以用smartlink來做),通訊頻率為4800Hz
    */
    #include
    #include
    #include
    #define uchar unsigned char
    #define uint unsigned int
    void uartconfig();
    void delay10ms(unsigned int c) ;
    void keypros();
    void init();
    void send(unsigned char *str);
    void function(uchar s);
    void receive();
    uchar dat0[]="AT+RST\r\n";
    uchar dat1[]="AT+CIPSTART=\"TCP\",\"www.embanju.org\",8181\r\n";
    uchar dat2[]="AT+CIPSEND=60\r\n";                                                   //建立TCP連接和輪徇發送指令,保持不掉線
    uchar dat3[]="\r\n{\"M\":\"checkin\",\"ID\":\"1450\",\"K\":\"9c85f0bf6\"}\r\n";      //注冊信息:到貝殼物聯去注冊一個
    uchar i;
    uchar temp[120],j=0,i=0,k=0,m=0,n;
    uchar s[10];
    uint flag=0;
     sbit k1 = P1^3;
     sbit k2 = P1^0;
    void main()
    {
            uartconfig(); //init f=4800Hz
            while(1){
            init();          //login "www.embanju.org" with passwd
            while(1){
                  keypros();   //send "AT+RST" when K1=P1^3==0
                  send(dat2);  // keep login
                for(n=0;n<40;n++){    //延遲中加監聽
                  delay10ms(10);
                  receive();}
              }
            }
    }
     //判斷接收的字符串flag字符串接收完成標志,temp寄存器,
    void receive(){        
          if(flag){
             while(temp[j]!='C'&&m>=j){
                 j++;
                 m=j;
                 if(temp[j]=='\0'||j>=120){
                    for(j=0;j<=120;j++)
                        temp[j]='\0';
                    j=0;
                    m=0;
                       }
                  }
              if(j!=0&&j<=120){
                  if(temp[j]=='C'){j=j+4;}
                while(temp[j]!='\"'){
                        s[k]=temp[j];
                        SBUF=s[k];
                        j++;k++;
                        while(!TI);
                          TI=0;}
                flag=0;
                m=j;
                function(*s);
                  }
            }                  //判斷完成flag=0,下次while(1)跳到else完成jmk串口初始化;
            else {
                j=0;
                m=0;
                k=0;
              }
        
    }
    //執行功能,將不同字符串轉化為不同輸出(指針實現)
    void function(uchar s){        
      if (s=='p'){
         P0=10010010;

      }
      else {
          P0=11111111;
      }
    }
    //登錄貝殼網的初始化
    void init(){
        send(dat1);
        delay10ms(100);
        send(dat2);
        delay10ms(100);
        send(dat3);
        send(dat3);
        delay10ms(100);
    }
    //按鍵的延時消抖程序(100ms)
    void keypros()
    {
           if(k1==0){
        delay10ms(10);
        if(k1==0){
             send(dat0);  //發送AT+RST指令,初始化ESP8266
        delay10ms(100);    
          init();        //發送登錄命令
            }
        }
    }
    //發送字符串命令到ESP8266串口
    void send(unsigned char *str){
        i=0;
         while(str[i]!='\0'){
             SBUF=str[i];
            while(!TI);
            TI=0;
            i++;
        }
    }
    //單片機初始化  通訊頻率4800Hz,開串行口ES中斷
    void uartconfig()
    {
            SM0=0;
            SM1=1;
            REN=1;
            TMOD=0x20;
            PCON=0x80;
            TL1=0xf3;
            TH1=0xf3;
            TR1=1;
            EA=1;
            ES=1;
    }
    //ES中斷命令,接收字符并保存,接收完成發送flag=1(每次中斷接收一個字符)
    void ser() interrupt 4
    {       
        if(RI){
        RI=0;
        temp[i]=SBUF;
        i++;
        if(SBUF=='}'){
            i=0;
            flag=1;
            }
        }            
    }
    //延時程序(粗略)
    void delay10ms(unsigned int c)   
    {
        uchar a, b;
           for (;c>0;c--)
             for (b=38;b>0;b--)
                for (a=130;a>0;a--);      
    }

    Readme:

    硬件連接:
    STC89C51——ESP8266-01s

      K1——> P1^4
      P3^0(RX)——>TX(ESP)
      P3^1(RX)——>RX(ESP)
      P0(程序可以自己修改)——>LED

    測試的時候可能會不穩定(點擊發送的時候單片機可能在延時之中,如果多次發送無效,嘗試reset單片機程序)

    国产综合在线