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

前言

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

一、基礎知識

1.模塊連接AP

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

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

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

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

3.WiFiServer庫簡介

在Wemos D1實際開發中,並不需要直接操作socket套接字進行TCP通信,使用WiFiServer庫便可進行快速開發,其百度腦圖如下:

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

函數具體用法如下表:

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

二、實例

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數據,如果收到數據則原返回相同數據。

三、運行

程序編譯上傳後設備執行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功能正常運行。

四、結語

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

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章