異常な無線LANモジュール(ESP8266)に基づいて、接続(FX)とローカルネットワークサーバーを確立します

オリジナル住所ます。https://blog.csdn.net/ludaoyi88/article/details/62236644

ケース説明:

オブジェクトの開発のためのWIFIモジュール(ESP8266)において、WiFiモジュール内のローカルエリアネットワークでは、サーバと無線LANモジュールとの間の通信を形成し、別のローカルエリアネットワークへのTCPサーバに接続されています。この記事最初のコンピュータ制御接続WIFIモジュール、ATコマンド馴染みを使用して、その後、WiFiモジュール、綿密な研究を制御するマイクロコントローラによってプログラミングによる。


A.デバッグコンピュータ端末は、制御モジュールWIFIに接続されています

説明:コンピュータに接続されたシリアルポートを介してWIFIモジュール、コンピュータはシリアルデバッグ用ソフトウェアを経由してモジュールにATコマンドを送信し、WIFI制御モジュールは、LAN内の他のサーバーとの接続を確立します。


ステップ:

1.必要な条件:

1)2台のP​​C、ルータ、ネットワークコンピュータ確保することができ、およびネットワーク・ルータ、および異なるLANに接続されている、(武器:なしWIFIルータがルータとしてのコンピュータによって起動ませんが、確認することができます2つのLAN内。いいえ2つのLAN、あなたがコンピュータネットワークを提供するために、携帯電話のオープンWiFiホットスポットを使用することができ、この実験は)非常にコストの携帯電話のトラフィックはありませんが、心配しないでください

2)ネットワーク接続されたコンピュータ(Bコンピュータ)のインストールピーナッツの殻のソフトウェア(貫通バージョンで注意してください)、署名する行にとどまります。

3)コンピュータソフトウェアデバッグアシスタントピーナッツ殻内ネットワーク(BのPC)、他のコンピュータ(PC)オープンシリアルデバッグソフトウェアを開きます。

TTLおよびWiFiモジュールにUSBケーブルで接続されたシリアルポートをデバッグ4)コンピュータソフトウェア(PC)、。

次の図の準備作業:
ピーナッツの殻のソフトウェア:
ここで説明する絵を書きます

ネットワークデバッグ支援:
ここで説明する絵を書きます
シリアルデバッグアシスタント:
ここで説明する絵を書きます

無線LANコンピュータのシリアルポートモジュール(のみTX、RX、VCC、GNDピン)
ここで説明する絵を書きます


2. WIFIモジュールは、ルータに接続されています

シリアルデバッグ、制御モジュールを介してATコマンドを送信するためのアシスタント無線LANモジュール。

(+ RST AT:1)WIFIモジュール、コマンドをリセットして送信する命令は、以下の共感がラップする必要があることに注意した後

指示:
ここで説明する絵を書きます

達成するための手順:
ここで説明する絵を書きます

1)选择模式,指令:AT+CWMODE=3
指令说明:
ここで説明する絵を書きます
指令实现:
ここで説明する絵を書きます
1)连接到路由器,指令:AT+ CWJAP =”ldy”,”99999999”(路由器名称和密码,只能是非中文名称)
指令说明:
ここで説明する絵を書きます
指令实现:
ここで説明する絵を書きます


3. 模块与其他局域网服务器建立TCP连接

1)在B电脑上开启花生壳和网络调试助手,其中花生壳被映射的地址应为电脑本机IP地址,端口任意。网络调试助手上的IP和端口应该设置为被花生壳所映射的IP和端口。IP被花生壳映射到外网域名和端口号,是将要被WIFI模块连接的外网地址。如图:
ここで説明する絵を書きます
2)启动单连接,指令:AT+ CIPMUX =0
指令说明:
ここで説明する絵を書きます
指令实现:

ここで説明する絵を書きます

3)连接到TCP服务器,

AT+CIPSTART=”TCP”,”14z95r6389.iask.in”,35447(改指令可以通过域名和端口号去连接,也可以通过IP和端口号连接,由于被穿透后是域名,故采用域名形式连接)
指令描述:
ここで説明する絵を書きます
指令实现:
ここで説明する絵を書きます

4)发送消息 AT+CIPSEND=5(5指的要发送消息的长度)
指令说明:
ここで説明する絵を書きます
指令描述:
WIF模块端发送:
ここで説明する絵を書きます

服务器端接收:
ここで説明する絵を書きます

5)接收服务器(接收到消息会有“+IPD”的数据头)
说明:
ここで説明する絵を書きます
接收实现:(接收到服务器端发的”zzz”字符)
ここで説明する絵を書きます



二.单片机实现控制WIFI模块与服务器连接

上記コンピュータ端末から実現、サーバへの再接続確立、ルータWiFiモジュールに接続した後、それがATによって達成される、ATコマンドデバッグと精通の目的を指示します。そして、それは、比較的容易にマイクロコントローラ・WIFIモジュール、プログラムを書き込むことによって送信されたATコマンドで制御することができます。

実験: MCU制御WIFIモジュールは、サーバ7に長さ「ABCDEFG」の文字列を送信します


1.ハードウェア条件

STM32ベースのマイクロコントローラは、WiFiモジュールUSART3を介して接続されています。


2.プログラムのコアコード

関数は、各命令の柔軟なタイミングと待ち時間再送機能を提供ラッパー私は、ATコマンドの送信を書かれています。大幅モジュールの安定性を向上させることができ、主コードは参考のために取り付けられています。

次のように主な機能は次のとおりです。

int main(void)
{   //通过域名形式连接到服务器
     char *string 
         ="AT+CIPSTART=\"TCP\",\"14z95r6389.iask.in\",35447"; 
    char *Seddstr = "abcdefg"; //被发送的字符串

    ALL_init();//初始化各种外设

    LED_ALL2_ON;
    delay_ms(1000);
    WIFI_AT_Command( "AT+RST","ready",5,2,ENABLE);
    delay_ms(1000);

    if(Send_wifiAT("AT+CWSAP?")==0)//判断是否连接上路由器
    {
        WIFI_AT_Command("AT+CWMODE=3","OK",3,2,DISABLE); //STATION兼AP模式
              WIFI_AT_Command("AT+CWJAP=\"ldy\",\"99999999\"","CONNECTED",10,3,DISABLE); //连接的到路由器,需要等待较长时间

    }   

    WIFI_AT_Command("AT+CIPMUX=0","OK",3,2,DISABLE);    //单连接

    WIFI_AT_Command((char*)string,"OK",5,3,ENABLE);
    //连接到服务器
    SendDATA_wifi(Seddstr,strlen(Seddstr));
   //发送数据
    while(1)
    {

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

:(ラッパー関数は、ユーザー移植のために、次のように書き込みラッパー関数から送られてくるコマンドAT)

/*
函数:WIFI_AT_Command
功能:(智能化发送指令)在规定时间内,可多次重发某个指令,多次发送失败可复位
参数:b:发送内容,a:等待接收内容,timeout_S:发单次内最多允许等待          的时间,ReSendcount:最多可以重复发几次(失败情况),EN_Reset:如果失败是否复位机器。

返回: 成功回1  失败回0
*/

char WIFI_AT_Command(char *b,char *a,u8 timeout_S , char ReSendcount,FunctionalState EN_Reset)
{
    u16 count =0;
  u8 i = 0;

    WaitACKflag = 1;  //WaitACKflag用于防止重入函数  strstr

    CLR_Buf3();
    ACK_Command = a;

    for(i =1 ; (i<= ReSendcount && WaitACKflag); i++) //若失败 ,重复发送ReSendcount次
    {
        CLR_Buf3(); 
        USART_Puts(USART3 ,b);
        USART_Puts(USART3 ,"\r\n");


        while(WaitACKflag) //判断在中断里,等待变成0
        {
            count ++;
            delay_ms(5);    
            if(count >200*timeout_S) //最多允许等待timeout_S S
            {
                count=0;
                break;
            }

        }
    }

    ACK_Command="";
    WaitACKflag =0;

    if(count == 0 && i == ReSendcount) //重复发送ReSendcount次,还没接收到响应指令(都失败)
    {
        if(EN_Reset == ENABLE)//如果使能了复位模式
        {
            __set_FAULTMASK(1);      // 关闭所有中端
            NVIC_SystemReset();     //软件直接复位(重来)            

        }
        return 0;
    }

    return 1;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

サーバ機能に送信データをカプセル化:

/**
函数:SendDATA_wifi
功能:给服务器发送数据
参数:a:发送的数据   length:发送的长度
返回: 
**/
void SendDATA_wifi(char *a ,u16 length)
{
    char Buf[30] = "";

    sprintf(Buf,"AT+CIPSEND=%d",length);

    WIFI_AT_Command(Buf,">",3,2,ENABLE);
    WIFI_AT_Command(a,"SEND OK",4,2,ENABLE);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

USART3シリアルポートが割り込み受信機能:

/**
 函数名  : USART3_IRQHandler
 描述    : 串口3中断服务程序
 输入    : 无
 返回    : 无 
说明    : 
**/
void USART3_IRQHandler(void)                    
{
    u8  ch=0;

    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
    {       
            USART_ClearITPendingBit(USART3, USART_IT_RXNE);
            ch = USART_ReceiveData(USART3);


            Wifi_RXbuf[Wificount++] =(char)ch;

            if(ch == '\n' || Wificount>=Uart3bufMAX)//防止超限
            {
                Wificount =0;
            }


            if(WaitACKflag ==1) //将判断strstr函数写在中断里,WaitACKflag用于防止重入函数  
            {
                if(strstr(Wifi_RXbuf,ACK_Command)!=NULL)
                {
                    WaitACKflag=0;
                }

            }
            else
            {
                Judge_UART3_box();//对接收服务器接收消息的处理
            }


    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

サーバーメッセージ受信機能:

/**
函数:Judge_UART3_box
功能:接收服务器消息判断
参数:
返回:
**/
void Judge_UART3_box()
{
    if(strstr(Wifi_RXbuf,"+IPD")!=NULL)
    {
        //用户自行定义

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.実験結果

WIFIモジュールにデータを送信することができる図:( WIFIモジュールサーバーのデータを受信することができるサーバは、マイクロコントローラはまた、上記のコードで良好な受信機能パッケージを実行して制御し、関心に関連する実験を行うことができます)
ここで説明する絵を書きます

おすすめ

転載: www.cnblogs.com/pacexdong/p/11478929.html