Arduino Uno R4 WiFi 개봉 및 소켓 예제 테스트

webnautes
By -
0

 Arduino Uno R4 WiFi의 소켓 서버  예제를 테스트해봤습니다.  이후 에코 서버로 발전시킬 예정입니다.



2024. 1. 23 최초작성 

2024. 1. 25 코드 개선 

2025. 10. 12  arduino IDE를 새로 설치하여 다시 진행





1. Arduino Uno R4 WiFi 개봉

2. 사용 준비

3. WiFiChatServer 예제 테스트 




1. Arduino Uno R4 WiFi 개봉


Arduino Uno R4 WiFi 박스에는 간단한 사양이 적혀있습니다.





Arduino Uno R4 WiFi 보드 바닥면에 Arduino R3와 달리 투명 플라스틱 판이 껴져있는게 특이했습니다.





기본적인 모양은 거의 R3와 동일합니다.




전원 연결을 C타입으로 할수 있는게 달라진점이네요.





이 부분이 WiFi를 담당하는 모듈인가 싶네요.





Arduino Uno R4 WiFi를 PC에 연결하니 하트를 표시해주는 도트 매트릭스(?) 부분이 있어요.


 



2. 사용 준비


다음 링크에서 Arduino IDE를 다운로드합니다.

https://www.arduino.cc/en/software/




설치완료후 Arduino IDE를 실행해보면 여러 장치 드라이브들이 설치됩니다.




예전하고 UI가 많이 바뀌었네요. 이제 Arduino Uno R4 WiFi를 PC에 연결해봅니다.




메뉴에서 Tools > Board > Boards Manager를 선택합니다.



왼쪽에 보이는 BOARDS MANAGER의 입력 창에 Arduino UNO R4를 입력하여 검색된 Arduino UNO R4 Boards 항목의 INSTALL를 클릭하여 설치합니다. 





메뉴에서 Tools > Board > Arduino UNO R4 Boards > Arduino Uno R4 WiFi를 선택합니다.




메뉴에서 Tools > Port를 선택하면 보이는 COM3에 Arduino UNO R4 WiFi가 보입니다. 선택해줍니다. 컴포트 번호는 피시에 따라 다를 수 있습니다. Arduino UNO R4 WiFi가 보이는 컴포트를 선택하면 됩니다.




오른쪽 아래에 연결이 완료된것 볼 수 있습니다.




3. WiFiChatServer 예제 테스트 



아두이노에 설치되는 에코 서버코드입니다.  \n 문자가 수신될때까지 문자를 누적했다가 한꺼번에 송신해줍니다.


#include <WiFiS3.h>

char ssid[] = "SECRET_SSID";

char pass[] = "SECRET_PASS";
int status = WL_IDLE_STATUS;

WiFiServer server(23);
String inputLine = "";

void setup() {
  Serial.begin(9600);
  while (!Serial);

  if (WiFi.status() == WL_NO_MODULE) {
    Serial.println("Communication with WiFi module failed!");
    while (true);
  }

  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
    delay(10000);
  }

  server.begin();
  printWifiStatus();
}

void loop() {
  WiFiClient client = server.available();
 
  if (client && client.connected()) {
    while (client.available() > 0) {
      char thisChar = client.read();
      if (thisChar == '\n') {
        client.print(inputLine + "\n");
        Serial.println("Echo: " + inputLine);
        inputLine = "";
      } else {
        inputLine += thisChar;
      }
    }
  }
}

void printWifiStatus() {
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
 
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
 
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}



Arduino IDE에 붙여넣고 저장후, 

다음 2줄을 공유기의 SSID와 패스워드로 교체해줍니다.


char ssid[] = "SECRET_SSID";  // 사용중인 공유기의 SSID로 변경해줍니다. 

char pass[] = "SECRET_PASS";   // 사용중인 공유기의 패스워드로 변경해줍니다.



이제 Arduino IDE 툴바에 보이는 다음 업로드 버튼을 클릭해줍니다.




잠시후 다음처럼 업로드가 완료됩니다.






Arduino IDE의 Tools > Serial Monitor를 선택하면 Arduino IDE 아래쪽에 시리얼 모니터가 보입니다. 





이제 다음 파이썬 클라이언트 코드를 실행합니다. 


파이썬 코드 실행할 환경을 만드는 것은 다음 포스트를 참고하세요.


Visual Studio Code와 Miniconda를 사용한 Python 개발 환경 만들기( Windows, Ubuntu, WSL2)

https://webnautes00.blogspot.com/2025/12/visual-studio-code-miniconda-python.html 


import socket
import threading
import sys

class ChatClient:
    def __init__(self, host='localhost', port=5555):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            self.sock.connect((host, port))
            print(f"서버 연결 성공: {host}:{port}")
        except Exception as e:
            print(f"서버 연결 실패: {e}")
            sys.exit(1)

    def receive_messages(self):
        while True:
            try:
                message = self.sock.recv(1024).decode('utf-8')
                if message:
                    print(f"\r받은 메시지: {message}")
                    print("메시지: ", end='', flush=True)
            except:
                print("\n서버와의 연결이 끊어졌습니다.")
                self.sock.close()
                break

    def send_messages(self):
        while True:
            try:
                message = input("메시지: ")
                if message.lower() == 'quit':
                    break
                self.sock.send((message + '\n').encode('utf-8'))
            except:
                break
        self.sock.close()

    def start(self):
        receive_thread = threading.Thread(target=self.receive_messages)
        receive_thread.daemon = True
        receive_thread.start()

        send_thread = threading.Thread(target=self.send_messages)
        send_thread.daemon = True
        send_thread.start()
       
        send_thread.join()

if __name__ == "__main__":
    client = ChatClient(host="192.168.45.154", port=23)
    client.start()




파이썬쪽에서 실행결과입니다.







시리얼 모니터에는 다음처럼 보입니다.









댓글 쓰기

0 댓글

댓글 쓰기 (0)