아두이노 - 이더넷 쉴드 2 | Arduino - Ethernet Shield 2

Arduino Ethernet Shield 2를 사용하는 것은 Arduino를 인터넷에 연결하는 가장 쉬운 방법 중 하나입니다. Arduino - Ethernet 튜토리얼에서 이더넷을 통해 Arduino를 인터넷에 연결하는 다른 방법을 확인할 수 있습니다.

이 튜토리얼에서, 우리는 배우게 될 것입니다:

Arduino Ethernet Shield 2

준비물

1×Arduino Uno Amazon
1×USB 2.0 cable type A/B 쿠팡 | Amazon
1×Arduino Ethernet Shield 2 Amazon
1×Ethernet Cable Amazon
1×(Optional) 9V Power Adapter for Arduino Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino Uno 쿠팡 | Amazon
1×(Recommended) Breadboard Shield For Arduino Uno 쿠팡 | Amazon
1×(Recommended) Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

초보자를 위한 기본 네트워킹 지식

이 부분은 네트워킹에 대해 아무것도 모르는 초보자를 위한 기본 지식을 제공합니다.

기기가 인터넷에 연결될 때(이더넷이나 와이파이를 통해), 해당 기기는 반드시 라우터나 액세스 포인트에 연결해야 합니다. 라우터와 액세스 포인트는 인터넷으로 통하는 게이트웨이 역할을 하는 장치입니다. 기기와 인터넷 사이의 모든 데이터는 라우터나 액세스 포인트를 통해 전달됩니다.

인터넷에 연결될 때, 기기는 반드시:

  • MAC 주소가 있음
  • IP 주소가 있음
  • 네트워크의 서브넷 마스크를 알고 있음
  • 게이트웨이의 IP 주소를 알고 있음 (라우터 또는 액세스 포인트의 IP 주소)
  • DNS 서버의 IP 주소를 알고 있음 (도메인 이름에 연결하는 경우)

장치는 다음 중 하나라도 만족할 경우 작동하지 않습니다:

  • 같은 네트워크에 있는 하나 이상의 다른 장치가 해당 장치와 동일한 MAC 주소를 사용합니다 (MAC 주소 충돌이라고 함)
  • 같은 네트워크에 있는 하나 이상의 다른 장치가 해당 장치와 동일한 IP 주소를 사용합니다 (IP 주소 충돌이라고 함)

이 튜토리얼은 네트워킹에 대한 지식으로 여러분을 과부하시키지 않습니다. 따라서, 이 튜토리얼은 그러한 개념들을 설명하지 않습니다. 그것은 이 튜토리얼의 범위를 벗어납니다. 대신, 이 튜토리얼은 그것들을 어떻게 사용하는지 보여줍니다.

MAC 주소는 보통 장치에 내장되어 있습니다. 우리는 그것에 대해 신경 쓸 필요가 없습니다. 그러나, Arduino Ethernet Shield 2는 내장된 MAC 주소가 없습니다. MAC 주소는 실드에 붙어있는 스티커에 인쇄되어 있습니다. 우리는 그것을 얻고 Arduino 코드에서 Arduino 실드를 위한 MAC 주소를 설정해야 합니다.

IP 주소, 서브넷 마스크, 게이트웨이의 IP 주소, DNS 서버의 IP 주소를 장치(아두이노 포함)에 할당하는 방법은 두 가지가 있습니다:

  1. 정적 IP 주소 사용:
    • IP 주소, 서브넷 마스크, 게이트웨이의 IP 주소 및 DNS 서버의 IP 주소 관리 필요
    • IP 주소, 서브넷 마스크, 게이트웨이의 IP 주소 및 DNS 서버의 IP 주소를 수동으로 설정해야 함(Arduino Ethernet Shield 2의 경우, 이 정보를 Arduino 코드를 사용하여 설정)
    • 다음과 같은 경우 작동하지 않습니다:
      • 같은 LAN 네트워크상의 다른 장치가 사용 중인 IP 주소를 설정할 경우 → IP 충돌
      • 잘못된 서브넷 마스크, 게이트웨이의 IP 주소, DNS 서버의 IP 주소를 설정할 경우
  • IP 주소를 자동으로 얻기(DHCP), 또한 동적 IP 주소라고도 함
    • 장치는 DHCP를 사용하여 라우터나 액세스 포인트로부터 자동으로 IP 주소, 서브넷 마스크, 게이트웨이의 IP 주소 및 DNS 서버의 IP 주소를 얻습니다. 우리는 IP 주소, 서브넷 마스크, 게이트웨이의 IP 주소 및 DNS 서버의 IP 주소를 관리할 필요가 없습니다. 라우터/액세스 포인트가 이 작업을 대신 해줍니다.

    스마트폰을 WiFi 홈 네트워크에 연결할 때 두 번째 방법이 사용됩니다.

    아두이노를 사용할 때, 첫 번째 방법은 초보자에게 어렵습니다. 두 번째 방법은 네트워킹에 대해 잘 모르는 초보자들에게 쉽고 추천됩니다.

    아두이노 이더넷 쉴드 2 사용 방법

    아두이노는 SPI 인터페이스를 통해 Ethernet Shield 2와 통신합니다. 다음은 Arduino Ethernet Shield 2를 사용하는 방법을 보여줍니다.

    • Arduino Uno나 Mega 위에 Ethernet Shield 2를 쌓으세요.
    • PC를 Arduino Uno/Mega에 USB 케이블로 연결하세요.
    • Ethernet Shield 2를 라우터/액세스 포인트에 이더넷 케이블로 연결하세요.
    • Arduino IDE를 열고 코드를 작성하세요.
    • 코드를 Arduino Uno/Mega에 업로드하세요.

    완전히 간단해요.

    동적 IP 주소를 사용할 때 Arduino Ethernet Shield 2를 위한 스켈레톤 아두이노 코드

    사전 요구 사항

    이더넷 실드의 MAC 주소를 알아야 합니다 (제조업체가 제공한 스티커에서 얻음).

    단계별로 프로그래밍하는 방법

    도서관 포함

    #include <SPI.h> #include <Ethernet.h>

    MAC 주소를 선언하다

    // 아래의 MAC 주소를 Arduino Shield 2에 붙어 있는 스티커에 인쇄된 MAC 주소로 교체하세요 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    • 응용 프로그램에 따라 다른 객체를 선언하세요.
    • 이더넷 쉴드 2를 시작하세요.
    // Ethernet 쉴드를 DHCP를 사용하여 초기화합니다: Ethernet.begin(mac);

    (선택 사항) 아두이노의 IP 주소, 서브넷 마스크, 게이트웨이의 IP 주소 및 DNS 서버의 IP 주소를 출력하세요.

    Serial.print("Arduino's IP 주소: "); Serial.println(Ethernet.localIP()); Serial.print("DNS 서버의 IP 주소: "); Serial.println(Ethernet.dnsServerIP()); Serial.print("게이트웨이의 IP 주소: "); Serial.println(Ethernet.gatewayIP()); Serial.print("네트워크의 서브넷 마스크: "); Serial.println(Ethernet.subnetMask());

    아두이노는 다음 경우에 IP 주소를 얻을 수 없습니다:

    • 라우터 또는 액세스 포인트가 DHCP를 지원하지 않습니다.
    • 이더넷 케이블이 제대로 연결되지 않았거나 손상되었습니다.

    이 문제를 감지하기 위해, 우리는 Ethernet.begin(mac);을 다음과 같이 수정할 수 있습니다:

    if (Ethernet.begin(mac) == 0) { Serial.println("Failed to obtaining an IP address"); // 이더넷 하드웨어가 존재하는지 확인 if (Ethernet.hardwareStatus() == EthernetNoHardware) Serial.println("Ethernet shield was not found"); // 이더넷 케이블 확인 if (Ethernet.linkStatus() == LinkOFF) Serial.println("Ethernet cable is not connected."); while (true); }

    ※ NOTE THAT:

    MAC 주소를 변경하지 않으면 여전히 작동할 수 있습니다. 그러나 같은 LAN 네트워크의 다른 기기와 MAC 주소가 충돌하면 작동하지 않을 수도 있습니다. MAC 주소 스티커를 분실한 경우, 위의 MAC 주소를 테스트용으로 사용하세요.

    동적 IP 주소를 사용할 때의 완전한 스켈레톤 코드

    /* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-ethernet-shield-2 */ #include <SPI.h> #include <Ethernet.h> // 아래의 MAC 주소를 Arduino Shield 2에 붙어있는 스티커에 인쇄된 MAC 주소로 교체하십시오. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // TODO: 당신의 어플리케이션에 따라 어떤 것을 선언하십시오. void setup() { Serial.begin(9600); // DHCP를 사용하여 Ethernet shield을 초기화하십시오: Serial.println("Obtaining an IP address using DHCP"); if (Ethernet.begin(mac) == 0) { Serial.println("Failed to obtaining an IP address"); // Ethernet 하드웨어가 존재하는지 확인 if (Ethernet.hardwareStatus() == EthernetNoHardware) Serial.println("Ethernet shield was not found"); // Ethernet 케이블의 연결 상태를 확인 if (Ethernet.linkStatus() == LinkOFF) Serial.println("Ethernet cable is not connected."); while (true); } // Arduino의 IP 주소, 서브넷 마스크, 게이트웨이의 IP 주소, DNS 서버의 IP 주소를 출력하십시오. Serial.print("- Arduino's IP address : "); Serial.println(Ethernet.localIP()); Serial.print("- Gateway's IP address : "); Serial.println(Ethernet.gatewayIP()); Serial.print("- Network's subnet mask : "); Serial.println(Ethernet.subnetMask()); Serial.print("- DNS server's IP address: "); Serial.println(Ethernet.dnsServerIP()); // TODO: 당신의 어플리케이션에 따라 무언가를 초기화하십시오. } void loop() { // TODO: 당신의 어플리케이션에 따라 무언가를 실행하십시오. }

    위의 코드를 아두이노에 업로드하세요. 성공하면, 시리얼 모니터가 아래와 같은 것을 보여줍니다:

    COM6
    Send
    Obtaining an IP address using DHCP - Arduino's IP address : 192.168.0.5 - Gateway's IP address : 192.168.0.1 - Network's subnet mask : 255.255.255.0 - DNS server's IP address: 8.8.8.8
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    시리얼 모니터가 위와 같이 표시되지 않으면 이더넷 케이블을 확인하세요. 계속 작동하지 않으면 정적 IP 주소를 사용해 보려면 다음 부분으로 이동하세요.

    정적 IP 주소를 사용할 때 아두이노 이더넷 실드 2용 뼈대 아두이노 코드

    전제 조건

    단계별 프로그래밍 방법

    • 도서관 포함하세요
    #include <SPI.h> #include <Ethernet.h>

    MAC 주소를 선언하다

    // 아래의 MAC 주소를 Arduino Shield 2에 인쇄된 스티커에 표시된 MAC 주소로 교체하세요 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

    사용되지 않는 IP 주소, 서브넷 마스크, 게이트웨이의 IP 주소, 그리고 DNS 서버의 IP 주소를 선언하십시오.

    // IP 주소, 서브넷 마스크, 게이트웨이 IP 주소, DNS 서버 IP 주소 변경 IPAddress ip(192, 168, 0, 5); IPAddress gateway(192, 168, 0, 1); IPAddress subnet(255, 255, 255, 0); IPAddress myDns(8, 8, 8, 8);
    • 애플리케이션에 따라 다른 객체를 선언하세요.
    • 이더넷 실드 2를 시작하세요.
    // 이더넷 실드를 정적 IP 주소를 사용하여 초기화합니다: Ethernet.begin(mac, ip, myDns, gateway, subnet);

    선택 사항, 네트워크 연결 상태 확인

    if (Ethernet.linkStatus() == LinkON) Serial.println("Link status: On"); else Serial.println("Link status: Off");

    ※ NOTE THAT:

    MAC 주소를 변경하지 않으면 여전히 작동할 수 있습니다. 하지만 같은 LAN 네트워크 내의 다른 장치의 MAC 주소와 충돌할 경우 작동하지 않을 수도 있습니다. MAC 주소 스티커를 잃어버린 경우, 위의 MAC 주소를 테스트용으로 사용하십시오.

    정적 IP 주소를 사용할 때의 완전한 스켈레톤 코드

    /* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-ethernet-shield-2 */ #include <SPI.h> #include <Ethernet.h> // 아래의 MAC 주소를 아두이노 쉴드 2에 붙어 있는 스티커에 인쇄된 MAC 주소로 교체하세요. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // 네트워크에 따라 IP 주소, 서브넷 마스크, 게이트웨이의 IP 주소, DNS 서버의 IP 주소를 변경하세요. IPAddress ip(192, 168, 0, 5); IPAddress gateway(192, 168, 0, 1); IPAddress subnet(255, 255, 255, 0); IPAddress myDns(8, 8, 8, 8); // TODO: 애플리케이션에 따라 무언가를 선언하세요. void setup() { Serial.begin(9600); // 정적 IP 주소를 사용하여 Ethernet 쉴드를 초기화합니다: Ethernet.begin(mac, ip, myDns, gateway, subnet); // TODO: 애플리케이션에 따라 무언가를 초기화하세요. } void loop() { // 선택사항, 링크 상태를 확인합니다. if (Ethernet.linkStatus() == LinkON) Serial.println("Link status: On"); else Serial.println("Link status: Off"); // TODO: 애플리케이션에 따라 무언가를 수행하세요. }

    위의 코드를 아두이노에 업로드하세요. 성공하면, 시리얼 모니터가 아래와 같은 것을 표시합니다:

    COM6
    Send
    Link status: On Link status: On Link status: On
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    시리얼 모니터가 위와 같지 않으면:

    • 이더넷 케이블을 확인하세요
    • IP 주소가 귀하의 네트워크에 속하는지 확인하세요
    • IP 주소가 동일 네트워크 내의 다른 장치와 충돌하지 않는지 확인하세요
    • 서브넷 마스크, 게이트웨이의 IP 주소, DNS 서버의 IP 주소가 올바르게 설정되었는지 확인하세요

    초보자를 위한 네트워킹에 대한 추가 지식

    정적 IP를 사용하는 경우, 사용되지 않는 IP 주소, 서브넷 마스크, 게이트웨이의 IP 주소 및 DNS 서버의 IP 주소를 받아야 합니다. 아래는 그것들을 얻는 방법을 보여줍니다.

    Arduino와 PC가 동일한 네트워크에 연결되면

    • PC에서 명령 프롬프트를 열어주세요.
    • 명령 프롬프트에서 다음 명령어를 입력하세요:
    ipconfig
    Command Prompt
    C:\Windows\system32>ipconfig Ethernet adapter Ethernet 2: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Wireless LAN adapter Wi-Fi: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::d559:ae92:8dff:a604%20 IPv4 Address. . . . . . . . . . . : 192.168.0.14 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.0.1
    • 위에서 서브넷 마스크게이트웨이의 IP 주소를 얻을 수 있습니다.
    • 위의 출력에서 PC의 IP 주소를 확인할 수 있습니다. PC의 IP 주소를 기반으로 사용하지 않는 IP 주소를 찾으려고 합니다.
      • PC의 IP 주소에서 시작하여 하나씩 증가시키거나 감소시킵니다.
      • 명령 프롬프트에서 해당 IP 주소로 ping 명령을 보냅니다. IP가 도달할 수 없을 때까지 이 두 단계를 반복합니다. 주소가 도달할 수 없으면 사용되지 않는 IP 주소이며, 이를 아두이노에 사용할 수 있습니다. 예를 들어:
      ping 192.168.0.16
      Command Prompt
      C:\Users\youruser>ping 192.168.0.16 Pinging 192.168.0.16 with 32 bytes of data: Reply from 192.168.0.14: Destination host unreachable. Reply from 192.168.0.14: Destination host unreachable. Reply from 192.168.0.14: Destination host unreachable. Reply from 192.168.0.14: Destination host unreachable. Ping statistics for 192.168.0.16: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

      ※ NOTE THAT:

      어떤 경우에는 IP 주소에 연결할 수 없어도 다른 기기에서 사용되고 있을 수 있습니다. 하지만, 이런 경우는 일반적으로 가정 내 네트워크에서는 발생하지 않습니다.

      • DNS 서버의 IP 주소의 경우, 우리는 단순히 8.8.8.8을 사용할 수 있습니다.

      이제 이 보호막을 사용하여 아두이노를 인터넷에 연결할 수 있습니다. 또한 부분에서 다른 예제를 보세요.

      WARNING

      이 튜토리얼은 개발 중입니다.

    ※ OUR MESSAGES

    • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!