wemos D1 arduino物聯網開發板應用筆記8-STA模式下TCP Server通訊

前言git

本文研究WeMos D1如何在STA模式下進行TCP Server通訊,模塊直接鏈接AP(手機熱點或者路由器),進入局域網中和其餘無線設備通訊,WIFI模塊做爲服務端,局域網中其餘設備做爲客戶端。github

1、基礎知識數組

1.模塊鏈接AP服務器

路由器名字:lxy2305,密碼:123456789a:
WiFi.mode(WIFI_STA);

2.Socket套接字實現TCP Server流程網絡

服務端套接字使用流程以及和客戶端交互框圖以下所示:socket

wemos D1 arduino物聯網開發板應用筆記8-STA模式下TCP Server通訊

3.WiFiServer庫簡介tcp

在Wemos D1實際開發中,並不須要直接操做socket套接字進行TCP通訊,使用WiFiServer庫即可進行快速開發,其百度腦圖以下:ide

wemos D1 arduino物聯網開發板應用筆記8-STA模式下TCP Server通訊

函數具體用法以下表:函數

wemos D1 arduino物聯網開發板應用筆記8-STA模式下TCP Server通訊

2、實例oop

1. 程序

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <WiFiServer.h>
#define CLIENTS_MAX_NUMS  4
/* Set these to your desired credentials. */
const char *ssid = "lxy2305";
const char *password = "123456789a";
WiFiServer server(8089);
WiFiClient serverClients[CLIENTS_MAX_NUMS];
void setup() {
    Serial.begin(115200);
    WiFi.begin(ssid, password);
    Serial.println("\r\nconnecting to router... ");
    //等待wifi鏈接成功
    while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(500);
    }
    Serial.println("");
    Serial.print("WiFi connected, local IP address:");
    Serial.println(WiFi.localIP());

    delay(500);
    Serial.println("Start tcp server...");
    server.begin();
    server.setNoDelay(true);
}
void loop() {
    int i = 0;
    if (server.hasClient())
    {
        for (i = 0; i < CLIENTS_MAX_NUMS; i++)
        {
            if (!serverClients[i] || !serverClients[i].connected())
            {
                if (serverClients[i])
                {
                    serverClients[i].stop();
                }
                serverClients[i] = server.available();
                continue;
            }
        }
    }
    for (i = 0; i < CLIENTS_MAX_NUMS; i++)
    {
        if (serverClients[i] && serverClients[i].connected())
        {
            if (serverClients[i].available())
            {
                while (serverClients[i].available()) 
                {
                    String recv_data = serverClients[i].readStringUntil('\r');
                    Serial.println("recv data from tcp server:");
                    Serial.println(recv_data);
                    // send back
                    serverClients[i].println(recv_data);
                }
            }
        }
    }
  delay(50);
}

    server.begin();

上述程序中,首先設置模塊爲WIFI_STA模式,接着鏈接路由器,而後啓動一個TCP Server,接着在loop()函數中不斷查詢是否有新的Client接入,若是有,則放到serverClients數組中,而後再ServerClients數組中遍歷查看是否收到Client數據,若是收到數據則原返回相同數據。

3、運行

程序編譯上傳後設備執行Log以下:

wemos D1 arduino物聯網開發板應用筆記8-STA模式下TCP Server通訊

打開網絡助手,鏈接服務器192.168.1.8:8089,8089爲代碼中指定的port,192.168.1.8爲模塊聯網後分配的地址;啓動後向TCP服務器發送數據,服務器返回一樣數據,以下圖所示:

wemos D1 arduino物聯網開發板應用筆記8-STA模式下TCP Server通訊

啓動兩個TCP Client,同時鏈接模塊起來的TCP Server,分別發送數據給模塊,而後模塊原路返回數據給對應的客戶端。

wemos D1 arduino物聯網開發板應用筆記8-STA模式下TCP Server通訊

從上可知,模塊TCP Server功能正常運行。

4、結語

如您在使用過程當中有任何問題,請加QQ羣進一步交流,也能夠github提Issue。

QQ交流羣:906015840 (備註:物聯網項目交流)

獲取源碼:關注公衆號,回覆wemos便可

一葉孤沙出品:一沙一世界,一葉一菩提

wemos D1 arduino物聯網開發板應用筆記8-STA模式下TCP Server通訊

相關文章
相關標籤/搜索