熊掌五十块 发表于 2017-8-16 08:34:47

【转】 双机通信的简单解决方案

今天终于把双机通信的简单方案做完了,
之所以简单,是没使用平台,而且是短距离的通信,
使用的方法是:其中一个esp8266设置为ap模式并作为服务端,
另一个esp8266作为客户端,在同一端口号下进行数据交互,
可能相比起pushdata来说,我是多此一举了,
但是我还是觉得很有意义的。
好了,不废话了,来看看代码,
服务端:


            UsartPrintf(USART_DEBUG, "STA Tips:    AT+CWMODE=1\r\n");
             if(!NET_DEVICE_SendCmd("AT+CWMODE=2\r\n", "OK"))                                       //ap模式
            UsartPrintf(USART_DEBUG, "模式完成1 :Ok\r\n");

             UsartPrintf(USART_DEBUG, "STA Tips:AT+CWSAP=\"AA\",\"123456789\"\r\n");
             if(!NET_DEVICE_SendCmd("AT+CWSAP=\"AA\",\"123456789\",4,4\r\n", "OK"))                         //open wifi :ssid"AA","123456789"
             UsartPrintf(USART_DEBUG, "模式完成2 :Ok\r\n");   
            
             UsartPrintf(USART_DEBUG, "STA Tips:    AT+CIPMODE=0\r\n");
             if(!NET_DEVICE_SendCmd("AT+CIPMODE=0\r\n", "OK"))                                       //本模块做 server 的连接
            UsartPrintf(USART_DEBUG, "模式完成3 :Ok\r\n");   

             UsartPrintf(USART_DEBUG, "STA Tips:    AT+CIPMUX=1\r\n");
             if(!NET_DEVICE_SendCmd("AT+CIPMUX=1\r\n", "OK"))                                       //建立 TCP 连接
            UsartPrintf(USART_DEBUG, "模式完成4 :Ok\r\n");   

             UsartPrintf(USART_DEBUG, "STA Tips:    AT+CIPAP=\"192.168.4.1\"\r\n");
             if(!NET_DEVICE_SendCmd("AT+CIPAP=\"192.168.4.1\"\r\n", "OK"))                                       //设置IP地址
            UsartPrintf(USART_DEBUG, "模式完成5 :Ok\r\n");   

             UsartPrintf(USART_DEBUG, "AT+CIPSERVER=1,8899\r\n");
             if(!NET_DEVICE_SendCmd("AT+CIPSERVER=1,8899\r\n", "OK"))                                       //设置端口号
            UsartPrintf(USART_DEBUG, "模式完成6 :Ok\r\n");

             ESP8266_EnterTrans();                                                                //进入透传模式
            UsartPrintf(USART_DEBUG, "Tips:    EnterTrans\r\n");         
             UsartPrintf(USART_DEBUG, "Tips:    ESP8266 STA_Mode OK\r\n");      
             UsartPrintf(USART_DEBUG, "模式完成7 :Ok\r\n");

客户端:
            UsartPrintf(USART_DEBUG, "STA Tips:    AT+CWMODE=1\r\n");
             if(!NET_DEVICE_SendCmd("AT+CWMODE=1\r\n", "OK"))                                       //station模式
            UsartPrintf(USART_DEBUG, "模式完成1 :Ok\r\n");
            
             UsartPrintf(USART_DEBUG, "STA Tips:    AT+CIPMODE=1\r\n");
             if(!NET_DEVICE_SendCmd("AT+CIPMODE=1\r\n", "OK"))                                       //透传模式
            UsartPrintf(USART_DEBUG, "模式完成2 :Ok\r\n");   

             memset(cfgBuffer, 0, sizeof(cfgBuffer));   
             strcpy(cfgBuffer, "AT+CWJAP=\"");                                                      //填写ssid、pswd
             strcat(cfgBuffer, netDeviceInfo.staName);
             strcat(cfgBuffer, "\",\"");
             strcat(cfgBuffer, netDeviceInfo.staPass);
             strcat(cfgBuffer, "\"\r\n");
             UsartPrintf(USART_DEBUG, "STA Tips:    %s", cfgBuffer);      
             while(!(NET_DEVICE_SendCmd(cfgBuffer, "GOT IP")||NET_DEVICE_SendCmd(cfgBuffer, "OK")))      //连接无线,检索“GOT IP”,如果失败会进入循环体
            {
               if(++errCount >= 5)                                                                  //如果连续5次没有连上,需要检测网络状态或者ssid、pswd
               {
                     UsartPrintf(USART_DEBUG, "WARN:    AT+CWJAP Err\r\n");
                     errType = 1; //wifi信息错误
                  break;
               }
             }
             Delay_ms(500);
             Delay_ms(500);
             if(!errType)
             UsartPrintf(USART_DEBUG, "模式完成3 :Ok\r\n");
            
             UsartPrintf(USART_DEBUG, "STA Tips:    AT+CIPMUX=0\r\n");
             Delay_ms(500);
             if(!NET_DEVICE_SendCmd("AT+CIPMUX=0\r\n", "OK"))                                       //单路连接模式
            UsartPrintf(USART_DEBUG, "模式完成4 :Ok\r\n");   
            
             UsartPrintf(USART_DEBUG, "STA Tips:    AT+CIPSTART=\"TCP\",\"192.168.4.1\",8899\r\n");
             if(!NET_DEVICE_SendCmd("AT+CIPSTART=\"TCP\",\"192.168.4.1\",8899\r\n", "OK"))                                       //单路连接
            UsartPrintf(USART_DEBUG, "模式完成5 :Ok\r\n");

             UsartPrintf(USART_DEBUG, "STA Tips:    AT+CIPSEND\r\n");
             if(!NET_DEVICE_SendCmd("AT+CIPSEND\r\n", "OK"))                                       //发送数据
            UsartPrintf(USART_DEBUG, "模式完成6 :Ok\r\n");      

             ESP8266_EnterTrans();                                                            
             UsartPrintf(USART_DEBUG, "Tips:    EnterTrans\r\n");      
             UsartPrintf(USART_DEBUG, "Tips:    ESP8266 STA_Mode OK\r\n");         
             UsartPrintf(USART_DEBUG, "模式完成7 :Ok\r\n");
最主要的就是设置模式,让wifi模块按照指令工作在具体状态。
效果图:如图1

http://upfiles.heclouds.com/forum-app/2017/08/15/6953bc5edb50743be46f1b631574de98.png



代码如下:https://open.iot.10086.cn/bbs/thread-16109-1-1.html


flyleaf 发表于 2017-8-16 09:03:32

谢谢分享,就是一个ap ,一个sta,一个tcp client,一个server:lol
页: [1]
查看完整版本: 【转】 双机通信的简单解决方案