라즈베리파이반

라즈베리파이 등 컴퓨터계열 게시판입니다.

제목ESP 모듈 와이파이 연결 : TCP 서버 역할2021-10-12 04:08
작성자user icon Level 4
첨부파일esp8266TCPServer.zip (0.9KB)

88x31.png


저번 글에서 ESP 모듈에 AT 커맨드를 사용할 수 있는 펌웨어를 업데이트했습니다.

https://www.robotstory.co.kr/diy/?board_name=diy_bbs&order_by=fn_pid&order_type=desc&vid=27 


이번 글에서는 ESP 모듈이 TCP 서버로 작동하면서 아두이노를 제어하는 것을 보여주겠습니다.


우선 WeeESP8266 라이브러리를 다운로드합니다.

AT 커맨드를 사용하기 편하도록 만들어 놓은 라이브러리입니다.

https://github.com/itead/ITEADLIB_Arduino_WeeESP8266

mb-file.php?path=2021%2F10%2F12%2FF3927_2021-10-12%20%281%29.png 



스케치 > 라이브러리 포함하기 > .ZIP 라이브러리 추가... 를 클릭하여 다운받은 라이브러리를 추가합니다.

mb-file.php?path=2021%2F10%2F12%2FF3926_2021-10-12.png
 

다음코드를 작성합니다. 첨부파일에 압축파일로 올렸습니다.

#include "ESP8266.h"

#include <SoftwareSerial.h> 


#define SSID "와이파이 이름

#define PASSWORD "비밀번호"  

#define HOST_PORT 23 /* 포트번호*/

#define LED 8 /* LED GPIO*/

SoftwareSerial esp(2, 3); /* RX:D2, TX:D3 */

ESP8266 wifi(esp, 9600);


void setup(void)

{

  pinMode(LED, OUTPUT);


  Serial.begin(9600);

  Serial.print("setup begin\r\n");

  

  Serial.print("FW Version:");

  Serial.println(wifi.getVersion().c_str());


  if (wifi.joinAP(SSID, PASSWORD)) {

    Serial.print("Join AP success\r\n");

    Serial.print("IP: ");

    Serial.println(wifi.getLocalIP().c_str());    

  } else {

    Serial.print("Join AP failure\r\n");

  }

  

  if (wifi.enableMUX()) {

    Serial.print("multiple ok\r\n");

  } else {

    Serial.print("multiple err\r\n");

  }

  

  if (wifi.(HOST_PORT)) {

    Serial.print("start tcp server ok\r\n");

  } else {

    Serial.print("start tcp server err\r\n");

  }

  

  if (wifi.setTCPServerTimeout(10)) { 

    Serial.print("set tcp server timout 10 seconds\r\n");

  } else {

    Serial.print("set tcp server timout err\r\n");

  }

  

  Serial.print("setup end\r\n");

}


void loop(void)

{

  uint8_t buffer[128] = {0};

  uint8_t mux_id;

  uint32_t len = wifi.recv(&mux_id, buffer, sizeof(buffer), 10000);


  if (len > 0){

    

    Serial.print("Received:[");

    for (uint32_t i = 0; i < len-1; i++) {

      Serial.print((char)buffer[i]);

    }

    Serial.print("]\r\n");


    char cmd = buffer[0];

    int ledStatus = digitalRead(LED);


    switch (cmd) {

      case '0':

        if (ledStatus == HIGH) {

          digitalWrite(LED, LOW);

          sprintf(buffer, "LED is off.\n");

          wifi.send(mux_id, buffer, strlen(buffer));

        }

        else {

          sprintf(buffer, "LED is already off.\n");

          wifi.send(mux_id, buffer, strlen(buffer));

        }

        break;

        

      case '1':

        if (ledStatus == LOW) {

          digitalWrite(LED, HIGH);

          sprintf(buffer, "LED is on.\n");

          wifi.send(mux_id, buffer, strlen(buffer));

        }

        else {

          sprintf(buffer, "LED is already on.\n");

          wifi.send(mux_id, buffer, strlen(buffer));

        }

        break;

        

      default:

        break;

    }

  }

}


클라이언트에서 '1'을 전송하면 GPIO8은 HIGH 레벨이 되어 LED가 켜지고, '0'을 전송하면 GPIO8은 LOW 레벨이 되어 LED가 꺼집니다.


다음과 같이 배선합니다. 어댑터를 이용하셔도 됩니다.

아두이노 UNO

ESP-01 

GND

GND

3.3V

VCC / CH_PD

RX(GPIO2)

TX 

TX(GPIO3)

RX

GPIO8 - 330옴 저항 - LED (+)극

 

 GND - LED (-)극

 


mb-file.php?path=2021%2F10%2F12%2FF3929_1.png
주의 : 전원은 3.3V를 넣어주세요. 


ESP 모듈의 RX도 3.3V 신호를 받아야하므로 저항을 1:2로 나누어 연결하세요.


보드는 Arduino Uno를 선택하고 업로드합니다.

mb-file.php?path=2021%2F10%2F12%2FF3930_2021-10-12%20%282%29.png
 

이제 ESP 모듈은 TCP 서버로 작동합니다.

시리얼 모니터를 열고 IP를 확인하세요.

mb-file.php?path=2021%2F10%2F12%2FF3931_2.png
 


TCP 서버 접속을 위해 hercules를 다운받으세요.

https://www.hw-group.com/files/download/sw/version/hercules_3-2-8.exe 


TCP Client를 클릭하고 IP포트를 입력 후 Connect를 누르세요.

mb-file.php?path=2021%2F10%2F12%2FF3932_3.png
 

mb-file.php?path=2021%2F10%2F12%2FF3933_ezgif.com-gif-maker.gif
 

#ESP-01# ESP8266# TCP 서버# 와이파이 연결
댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)