라즈베리파이반

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

제목ESP 모듈 와이파이 연결 : TCP 클라이언트 역할2021-10-13 04:32
작성자user icon Level 4
첨부파일esp8266TCPClient.zip (1KB)

88x31.png


앞선 글에서는 ESP 모듈을 TCP 서버로 이용했습니다.

https://www.robotstory.co.kr/raspberry/?board_name=raspberry_bbs&order_by=fn_pid&order_type=desc&vid=33


이번에는 ESP 모듈이 클라이언트가 되어 TCP 서버와 통신하여 아두이노를 제어해보겠습니다.


우선 윈도우에서 TCP 서버를 만들겠습니다. hercules를 다운받으세요.

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


우선 윈도우에서 TCP 서버를 만들겠습니다. hercules를 다운받으세요.

다운받은 hercules를 실행시키고 TCP Server를 클릭하여 포트를 입력하고 Listen을 누릅니다.

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


win키 + R을 눌러 cmd를 입력하여 명령프롬프트를 실행합니다.

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


다음 명령어를 입력하여 ip주소를 확인합니다.

> ipconfig /all


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


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

https://github.com/itead/ITEADLIB_Arduino_WeeESP8266

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


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

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

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

 #include "ESP8266.h"

#include <SoftwareSerial.h> 


#define SSID        "와이파이 이름

#define PASSWORD    "비밀번호"

#define HOST_NAME   "TCP 서버 IP 주소"

#define HOST_PORT   3000

#define LED         8


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.setOprToStation()) {

      Serial.print("to station ok\r\n");

  } else {

      Serial.print("to station err\r\n");

  }

    

  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.disableMUX()) {

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

  } else {

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

  }

  

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

}


bool isConnected = false;

uint8_t usage[]="Usage\n1 : Turn On LED\n2 : Turn Off LED\n\n";


void loop(void)

{

  if (isConnected == false){

    

      while(1){

          if (wifi.createTCP(HOST_NAME, HOST_PORT)) {

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

              isConnected = true;

              wifi.send(usage, strlen(usage));

              break;

          } else {

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

          }

      }

  }

  

  uint8_t buffer[128] = {0};

  uint32_t len = wifi.recv(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(buffer, strlen(buffer));

        }

        else {

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

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

        }

        break;

        

      case '1':

        if (ledStatus == LOW) {

          digitalWrite(LED, HIGH);

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

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

        }

        else {

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

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

        }

        break;

        

      default:

        break;

    }

  }

}



배선도는 다음과 같습니다.

아두이노 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%2FF3941_4.png

주의 : 전원은 3.3V를 넣어주세요. 


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


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

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


업로드하면 ESP 모듈은 TCP 클라이언트로 작동합니다.

시리얼 모니터를 열고 create tcp ok 라는 문구가 뜨는지 확인하세요.

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

hercules에 들어가면 Client connection status에 esp 모듈 ip주소가 보이고 receved data에 다음과 같은 데이터를 받았습니다.

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

mb-file.php?path=2021%2F10%2F13%2FF3947_ezgif.com-gif-maker.gif

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