【转】 双机通信的简单解决方案-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5505|回复: 1

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

[复制链接]
发表于 2017-8-16 08:34 | 显示全部楼层 |阅读模式
今天终于把双机通信的简单方案做完了,
之所以简单,是没使用平台,而且是短距离的通信,
使用的方法是:其中一个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





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

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

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-30 23:59 , Processed in 0.072401 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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