Arduino pro mini 및 이더넷 enc28j60 전압. GET 요청을 통해 Arduino에서 서버(ENC28J60)로 데이터를 전송합니다. NETAlarm에 대한 간략한 설명

이더넷 모듈은 오래전에 만들어졌는데 모든 것이 서랍 속에 들어 있었습니다. 그것에 대해 결코 이해하지 못했습니다.

드디어 합쳤습니다. 예제를 사용하여 확인했습니다. 작동합니다.



미쿠루히로 사용 ENC28J60 SSOP28 패키지에 있습니다. 또한 DIP28 및 QFN 패키지로도 제공됩니다. 일반적으로 모든 취향에 맞습니다.

회로 설계
데이터 시트에 따르면 이 계획은 일반적입니다. J00-0086NL 변압기가 있는 커넥터를 사용하는 것을 제외하면 문제가 없습니다. 반면 J00-0066NL을 설치하는 것이 더 좋으며 변환 비율(1:1)이 더 좋습니다. 그러나 나는 손에 있는 것을 설치했습니다. FC-22와 같은 별도의 변압기를 사용할 수도 있습니다.

다른 것 중요한 세부 사항. 저항 Rbias는 내 다이어그램에 다음과 같이 표시되어 있습니다. R8 2천 1%마이크로 회로의 개정에 따라 선택해야 합니다. 저는 2.2kΩ으로 설정했습니다. 정오표는 권장합니다

실리콘 개정판 B1 및 B4의 경우 RBIAS 핀과 접지 사이에 2.7k, 1% 외부 저항기를 사용합니다. 데이터 시트에 표시된 값(2.32 k)은 개정판 B5 및 B7에 대해 정확합니다.

부품이 많지 않습니다. 모든 것이 실제로 두 개의 점퍼를 사용하여 한쪽에 배치되었습니다.






경로는 0.3mm로 조금 작지만 누구에게도 심각한 어려움을 초래할 것이라고 생각하지 않습니다. 아무런 문제 없이 LUT에서 제작되었습니다.

상호 작용
SPI 인터페이스를 통해 컨트롤러와 통신합니다.

  • SO - MISO
  • SI - MOSI
  • SCK-SCK
  • CS - SS 그러나 여기에서 선택한 SS 크리스탈은 어디에나 걸 수 있습니다.
  • RESET - 어디에도 연결하지 않은 경우 +3.3V로 설정하는 것이 좋습니다. 그래야 어울리지 않고 결함이 발생하지 않습니다.
  • INT - 인터럽트 출력. 패키지를 받을 때 이 다리를 갑자기 움직여 프로세서가 패키지를 긴급하게 처리하도록 할 수 있습니다. 또는 최소한 데이터를 수신해야 한다는 점을 고려하세요.
  • WOE - 제가 이해하는 바는 Wake On Ethernet입니다. 아무데도 연결하지 않았어
  • 3V3 - 3.3V 전원 공급 장치. mikruha는 엄청나고 250mA를 소비하며 매우 활발하게 가열됩니다. 물론 보드의 땜납이 벗겨지지는 않지만 뜨거우면 손가락이 거의 잡을 수 없습니다. 예, 3.3V 전원 공급 장치에도 불구하고 입력은 5V까지 허용됩니다.
  • GND - 접지

이 장난감을 사용하는 방법에 대한 자세한 설명은 커뮤니티의 이 칩과 특히 이더넷 작업에 관한 일련의 기사에서 찾을 수 있습니다. 더 자세한 내용은 어디서도 찾을 수 없을 것 같습니다 :)

이전에 몰랐던 포럼에서 말했듯이 이러한 목적으로 GET 요청을 사용하는 것은 바람직하지 않습니다. 하지만 이는 문제 해결을 위한 선택지 중 하나로 남겨둬야 할 것 같습니다. 나중에 나는 다음과 같은 데이터 전송을 설명하려고 노력할 것입니다. POST를 사용하여요구.
소개:

조만간 모든 사람은 "사물 인터넷" 개념에 따라 자신만의 장치를 만들겠다는 아이디어를 내놓지만 개발 중에 이러한 장치를 구성하고 정보를 수집하는 문제가 발생합니다. 안에 이 경우이더넷을 통해 로컬 네트워크(LAN)의 모든 장치를 연결하고 모든 컴퓨터, 심지어 전화가 될 수 있는 서버를 사용하여 제어하는 ​​것이 이상적입니다!

우리가 가지고 있는 것:

  • 아두이노 우노
  • 이더넷 모듈(enc28j60)

에 대한 작은 여담 네트워크 컨트롤러. 무료 자금이 있다면 Arduino의 공식 모듈인 W5100(AliExpress에서 6~7달러)을 사용하는 것이 좋습니다. 이 사이트에는 강력한 문서가 있습니다. 하지만 저는 무료 자금이 없는 평범한 학생이기 때문에 저렴한 ENC28J60(AliExpress에서 2~3달러)을 사용하겠습니다. 안타깝게도 정보가 많지 않습니다(주로 웹 서버 출시 및 기타 표준 스케치).

추신 이 코드를 작성하는 것보다 실행하는 데 관심이 있는 경우. 모든 링크는 기사 끝에 있습니다.

추신 Arduino에 데이터를 보내는 방법에 대해서도 설명했기 때문에 기사가 1/3 정도 더 길었습니다. 그러나 알 수 없는 이유로 Arduino는 작동을 원하지 않았습니다. 저는 아직 이 주제에 대해 검색 중입니다. 실패한 이유를 찾으면 기사를 업데이트하겠습니다.

이론:

우리 장치는 다음을 사용하여 로컬 네트워크(원하는 경우 인터넷을 통해서도 가능)를 통해 데이터를 전송합니다. http를 얻다요구.

다음과 같이 작동합니다.

  • 서버가 우리 컴퓨터에서 실행되고 있으며 요청을 처리하고 지정된 기능을 수행하는 일부 핸들러(우리의 경우 Python)가 있습니다.
  • 장치는 서버에 요청을 하고, 서버는 데이터를 프로세서로 전송합니다.
  • 핸들러는 이 데이터를 수신한 다음 필요한 작업을 수행합니다.

관행:

서버측 개발부터 시작하는 것이 가치 있다고 생각합니다. 이미 이에 대해 잘 알고 있다면 이 장을 건너뛰어도 됩니다.

섬기는 사람:

시작하겠습니다. 먼저 공식 웹사이트에서 Python을 다운로드해야 합니다(아래 버전 3.4로 다운로드하세요!).

어떤 코드를 사용하여 작성할 수 있습니다. 텍스트 에디터, Python에는 이미 IDLE(간단하고 가벼운 개발 환경)이 포함되어 있으므로 이는 우리의 실험에 충분합니다.

여러 가지 이유로 Python으로 서버를 작성하겠습니다.

  1. Python은 배우기 매우 쉬운 언어입니다(의사코드와 유사).
  2. Python에는 불필요한 샤머니즘 없이 서버를 실행하는 데 도움이 되는 라이브러리가 이미 제공됩니다.
  3. 나는 이미 이 언어에 꽤 익숙하다. 장기그리고 난 그 사람에게서 무엇을 기대해야 할지 알아요

장점은 오랫동안 나열할 수 있지만 PHP나 Ruby로 작성하고 싶다면 이를 사용해도 상관없습니다.
또한, 익숙하지 않은 경우 파이썬 언어, 하지만 여기서 무슨 일이 일어나고 있는지 이해하고 싶다면 이 교과서의 처음 몇 장을 읽어 보시기 바랍니다.

시작하자:

준비:

  • 우리 프로젝트를 위한 폴더를 만들어 보겠습니다. 섬기는 사람/
  • 프로젝트 폴더에서 다음을 생성합니다.
    • 하위 폴더 cgi-빈/- 이 디렉토리에는 요청을 처리하는 스크립트가 포함됩니다.
      • 내부에 스크립트를 작성해 보겠습니다. handler.py- 이것은 Arduino가 보낸 요청 핸들러입니다.
    • 파일 run.py- 이 스크립트는 요청을 수신하고 이를 스크립트로 전송하는 웹 서버를 시작합니다.

결국 모든 것이 다음과 같아야 합니다.

서버를 시작하는 스크립트(run.py)를 작성해 보겠습니다.

run.py 파일로 이동해 보겠습니다.

http.server에서 HTTPServer 가져오기, CGIHTTPRequestHandler 가져오기 소켓 if len(socket.gethostbyname_ex(socket.gethostname())) > 1: print("서버가 주소: %s에서 실행 중입니다."%socket.gethostbyname_ex(socket.gethostname() )) 서버 주소 = ("", 80) httpd = HTTPServer(서버_주소, CGIHTTPRequestHandler) httpd.serve_forever()

코드를 한 줄씩 살펴보겠습니다.

  1. 실행할 라이브러리 가져오기 HTTP 서버
  2. 웹 소켓 작업을 위한 라이브러리를 가져옵니다(컴퓨터의 IP 주소를 찾기 위해).
  3. <Пусто>
  4. 이 기능네트워크에 있는 컴퓨터의 이름, 컴퓨터의 IP 주소를 포함하는 목록(파이썬의 배열)을 반환합니다. 컴퓨터가 네트워크에 연결되어 있지 않으면 목록에 이름만 표시됩니다.
  5. 현재 IP 주소와 함께 메시지 표시
  6. 서버가 작동할 주소를 설정합니다. 따옴표는 비워 두었습니다. 로컬 서버. 포트로 80을 지정해야 합니다(표준 http 포트). 포트에 대해 자세히 알아보기
  7. 서버 클래스의 인스턴스를 생성하고 모든 것을 여기에 전달합니다. 필요한 설정
  8. 서버 시작

보시다시피 라이브러리가 우리를 위해 모든 작업을 수행하고 우리는 서버에 필요한 설정만 지정하기 때문에 모든 것이 매우 간단합니다. 하지만 이는 절반에 불과합니다. 이제 요청 핸들러를 만들어야 합니다. 이 단계에서 대부분의책임은 우리에게 있습니다. 여러분이 직접 작성할 수 있는 예제를 사용하여 간단한 핸들러를 작성하겠습니다.

핸들러는 메시지를 수신하여 파일에 기록합니다. 단지?! 예, 간단하지만 아마도 가장 인기 있는 사례일 것입니다.

코드로 넘어가자 handler.py:

#!/usr/bin/env python3 import cgi 값 ​​= cgi.FieldStorage() cxem = value.getfirst("cxem", "none") output_file = open("out.txt","a") 출력_파일. 쓰기(cxem) 출력_파일.닫기()

코드를 한 줄씩 살펴보겠습니다.

  1. 통역사를 위한 명령, 자세한 내용은 다루지 않겠습니다. (관심이 있으시면 구글에 검색해 보세요)
  2. get 요청에서 데이터를 얻기 위해 라이브러리 가져오기
  3. <пусто>
  4. Get 요청에서 전송된 값을 사전(연관 배열) 형식으로 받습니다.
  5. 우리는 정의합니다 변수 값"cxem"이라는 필드, 값이 설정되지 않은 경우 변수는 "none" 값을 사용합니다.
  6. 쓰기 위해 파일 열기
  7. 파일에 값을 씁니다.
  8. 파일 닫기

아직 클라이언트(Arduino)를 준비하지 않았으므로 브라우저에서 요청하겠습니다. 우리는 이 결과를 얻습니다.

데이터가 파일에 기록되었음을 확인할 수 있습니다. 추론과 논리가 있다면 데이터가 이런 형식으로 표시되어 있다고 추측했을 것입니다. path_to_handler=값

Q: 여러 변수를 전달해야 하면 어떻게 되나요?
A: 모든 것이 간단합니다. 코드에서는 첫 번째 변수와 동일하게 수행하고 요청을 생성할 때 변수를 앰퍼샌드 기호("&")로 구분합니다. 즉, 다음과 같이 보입니다. path_to_handler?variable_name=값&variable_name=값

이것으로 서버 작업이 완료되었습니다. Arduino 작업으로 넘어 갑시다.

아두이노:

enc28j60 이더넷 모듈을 사용하기 위해 가장 적절한(그리고 여전히 지원되는 이더넷 카드 라이브러리)를 사용합니다.

이론:

요청은 BrowseUrl 메서드를 사용하여 생성됩니다. 이 방법요청을 한다 특정 URL지정된 콜백을 사용하여 서버에서 수신된 데이터를 처리합니다(불행히도 이 방법은 제게는 효과가 없었습니다).

관행:

여기에는 줄이 많기 ​​때문에 한 줄씩 설명하지 않고 블록별로 설명하겠습니다.

이것은 프로그램 시작시 설정한 변수와 상수입니다.

// 네트워크 카드 작업을 위한 라이브러리 #include // 네트워크 카드 버퍼 바이트 Ethernet::buffer; // 우리가 노크할 웹사이트의 주소(제 경우에는 동일한 IP 서버에서 실행됩니다) const char website PROGMEM = "192.168.0.100"; //컴퓨터의 IP 주소를 // 서버의 IP 주소로 바꿉니다. 정적 바이트 웹사이트ip = ( 192,168,0,100 ); //컴퓨터의 IP 주소로 바꿉니다. static uint32_t 타이머; // 데이터 전송 성공 후 조치 // 장치 MAC 주소 static byte mac = ( 0x74.0x69.0x69.0x2D,0x30.0x31 );

  • 이더넷::버퍼 - 수신된 데이터를 쓸 네트워크 카드의 버퍼입니다. 우리의 경우 수신된 데이터는 그다지 중요하지 않기 때문에 하지 않도록 설정했습니다. 큰 사이즈완충기 (죄송합니다. 아래 동영상에도 동일한 면책 조항이 있습니다. 실험 중에 버퍼가 700바이트 미만인 경우 네트워크 모듈이 올바르게 작동하지 않는 것으로 나타났습니다.)
  • 웹사이트 - 서버의 도메인 이름, 여기서는 컴퓨터의 IP 주소입니다(서버는 시작 시 이를 표시합니다).
  • websiteip - 서버 IP 주소(배열에 기록됨) 십진수)
  • 타이머 - 타이머 카운터 변수(주기적인 서버 핑용)
  • mac - 장치의 Mac 주소(네트워크에서 고유해야 함)

원칙적으로 여기에서는 모든 것이 명확하고 다른 블록으로 넘어갈 수 있다고 생각합니다.

무효 설정 () ( Serial.begin(9800); if (ether.begin(sizeof Ethernet::buffer, mac) == 0) Serial.println(F("이더넷 컨트롤러에 액세스하지 못했습니다.")); else Serial.println (F("이더넷 컨트롤러에 액세스하는 데 성공했습니다.")); if (!ether.dhcpSetup()) Serial.println(F("DHCP 실패")) else Serial.println(F("DHCP에 성공했습니다.")) ( ether.hisip, 웹사이트ip, sizeof(웹사이트ip)); ether.printIp(F("SRV: "), ether.hisip);

이는 장치가 시작될 때 한 번 호출되는 설정 함수입니다.

여기서 우리는:

  • 직렬 모니터로 작업 속도 설정
  • 이더넷 컨트롤러가 연결되어 있는지 확인
  • DHCP 연결 확인 중
  • 서버의 이름과 IP를 메모리에 씁니다(라이브러리에 필요함).
  • 연결할 서버의 IP를 표시합니다.

다음은 장치가 실행되는 동안 지속적으로 호출되는 루프 기능입니다. 하지만 그 안에는 send_package 함수에 대한 호출만 작성했습니다. 특히 프로그램의 어느 곳에서나 호출할 수 있도록 데이터 전송을 별도의 함수로 분리했습니다.

// 서버로 데이터를 보내는 함수 void send_package())( ether.packetLoop(ether.packetReceive()); if (millis() > 타이머) ( Serial.println(F("<

  • 첫 번째 라인은 프로그램을 중지하지 않고 서버로부터 패킷을 수신합니다.
  • 다음으로 5초마다 서버에 데이터를 보냅니다. (이 카운터가 없으면 데이터가 전송되지 않을 수 있습니다.)
  • 글쎄, 아마도 가장 고려해야 할 것은 BrowseUrl을 사용하여 요청을 작성하는 것입니다. 첫 번째 인수로 요청 핸들러의 경로(서버 루트 디렉터리부터 계산)인 상수 값을 전달합니다. 두 번째 인수로 변수와 해당 값을 전달합니다. 여기의 값은 상수로 지정되지만 변수에서 값을 전달할 수 있으며 가장 중요한 것은 데이터 유형을 사용하여 표현된다는 것입니다. 문자 배열.세 번째 인수로 (미리 설정한) 서버의 도메인 이름을 전달합니다. 네 번째 인수로 콜백 함수를 전달합니다. 이에 대해서는 아래에서 살펴보겠습니다.
정적 무효 콜백(바이트 상태, 워드 오프, 워드 len)( Serial.println(">>>"); 이더넷::버퍼 = 0; Serial.print((const char*) 이더넷::버퍼 + 오프); 직렬 .println("...");

라이브러리가 수신된 데이터를 처리하기 위해 호출하는 콜백 함수입니다.

다음 몇 가지 강의에서는 이더넷 네트워크 구성에 중점을 둘 것입니다. 이번 강의에서는 필요한 최소한의 정보를 설명하겠습니다. 실무네트워크와 함께. ENC28J60 이더넷 모듈에 대해 조금 설명하고 Arduino 보드에 연결하는 다이어그램을 제공하겠습니다.

이더넷 로컬 네트워크.

이더넷은 세계에서 가장 널리 사용되는 네트워크 인터페이스입니다. 컴퓨터를 결합하는 것에 대해 이야기할 때 지역 네트워크, 일반적으로 이것이 의미하는 바입니다. 이더넷 컨트롤러~가 되었다 표준 장치각 컴퓨터마다.

이더넷 표준의 첫 번째 버전은 70년대에 나타났습니다. 처음에 전송 매체는 다음과 같습니다. 동축 케이블, 네트워크 토폴로지 – 버스, 전송 속도 10MB/초. 시간이 지나면서 최대 100기가비트/초의 전송 속도를 가진 다양한 종류의 이더넷이 등장했고 네트워크 아키텍처가 바뀌었으며 전송 매체도 달라졌습니다. 이것에 대해 많은 것이 있습니다 자세한 정보: 프로토콜, 데이터 형식, 교환 알고리즘 등 순전히 실용적인 관점에서 이더넷 네트워크에 대해 이야기하겠습니다.

우리는 이더넷 표준(10 Mbit/s)에 관심이 있으며 패스트 이더넷(100Mbit/s). 호환 가능하며 데이터 전송 속도만 다릅니다. Arduino 보드를 네트워크에 연결하기 위해 첫 번째 표준(10Mbit/s)의 컨트롤러를 사용하고 표준 컴퓨터 네트워크 컨트롤러는 두 번째 표준(100Mbit/s)을 지원합니다. 그러나 이것이 컴퓨터를 동일한 네트워크에 연결하는 것을 방해하지는 않습니다. 표준은 각각 10BASE-T 및 100BASE-TX로 지정됩니다.

네트워크 토폴로지.

이더넷 장치서로 직접 연결될 수 있습니다. 없음 추가 블록필요하지 않습니다. 케이블 하나면 충분합니다.

3개 이상의 장치를 사용하는 경우 허브(HUB)를 사용하는 방사형 토폴로지를 통해 연결됩니다.

허브 또는 네트워크 허브- 이것 전자 기기여러 개를 연결하다 네트워크 장치하나의 네트워크 세그먼트로. 여러 개의 I/O 포트가 포함되어 있습니다.

본질적으로 이것은 리피터입니다. 해당 포트 중 하나로 전송되는 모든 신호는 다른 포트에서 반복됩니다. 물리적으로 네트워크 토폴로지는 방사형처럼 보이지만 허브를 사용하면 논리적으로 "공통 버스"로 변합니다. 네트워크의 모든 데이터 패킷은 의도하지 않은 장치를 포함하여 모든 네트워크 장치에 도달합니다. 이로 인해 데이터 충돌이 발생할 수 있으며 네트워크 부하가 증가합니다. 현재 허브는 실질적으로 고급 장치인 네트워크 스위치로 대체되었습니다.

허브는 서로 연결될 수 있지만 트리 구조에서만 가능합니다.

동시에 "공통 버스" 논리 토폴로지와 관련된 단점은 네트워크 장치 수가 증가함에 따라 더욱 악화됩니다.

스위치를 기반으로 생성된 네트워크에는 훨씬 더 많은 가능성이 있습니다.

네트워크 토폴로지는 허브를 사용하여 생성된 네트워크와 동일하게 보입니다. 그러나 후자와 달리 네트워크 토폴로지는 물리적 수준뿐만 아니라 논리적 수준에서도 방사형으로 유지됩니다.

스위치는 하나 이상의 세그먼트 내에서 여러 네트워크 장치를 연결하는 장치입니다.

허브와 마찬가지로 스위치에는 여러 개의 I/O 포트가 있습니다. 그러나 허브와 달리 스위치는 연결된 모든 장치에 데이터 패킷을 전송하지 않고 수신자에게만 직접 전송합니다. 덕분에 네트워크 성능이 향상되고 안정성이 향상됩니다.

  • 허브는 "멍청한" 하드웨어 신호 중계기입니다.
  • 스위치는 패킷 헤더를 분석해 필요한 포트에만 데이터를 전송하는 지능형 장치다.

일반적으로 네트워크 스위치는 다음을 지원합니다. 다른 속도동시에 데이터를 전송합니다.

다른 스위치나 허브를 스위치 포트에 연결할 수 있습니다. 이를 통해 네트워크는 거의 무한정 확장될 수 있습니다.

라우터 또는 라우터는 네트워크 게이트웨이, 사이에서 패킷을 전송하는 장치 다양한 네트워크. 일반적으로 연결하는 데 사용됩니다. 글로벌 네트워크인터넷.

대부분의 라우터는 다음 기능도 수행합니다. 네트워크 스위치. 이 경우 네트워크 스위치 없이도 가능합니다.

전송 매체 이더넷 데이터(케이블).

전송 매체로서 우리가 필요로 하는 표준은 카테고리 3 또는 카테고리 5 케이블을 2개만 사용하도록 요구합니다. 꼬인 쌍(4선).

하나 꼬인 쌍하나는 데이터 전송용이고 다른 하나는 수신용입니다.

  • 라인의 특성 임피던스는 100Ω입니다.

케이블은 UTP(Unshielded Twisted pair)로 지정되어 있습니다. 종종 "이더넷 LAN 케이블"이라고 표시됩니다.

표준 케이블에는 4개의 연선이 포함되어 있습니다.

우리는 그 중 두 개만 사용할 것입니다.

이더넷 포트에 연결하려면 8핀 RJ-45 커넥터가 사용됩니다.

커넥터 핀아웃 옵션에는 T568A와 T568B의 두 가지가 있습니다. 옵션 A와 B는 간단히 호출되는 경우가 많습니다.

핀아웃 T568A.

핀아웃 T568B.

  • ~에 네트워크 카드컴퓨터와 Arduino 이더넷 모듈, 옵션 A가 사용됩니다.
  • 스위치 또는 라우터 I/O 포트는 옵션 B를 사용합니다.

한 장치의 출력 신호가 다른 장치의 입력에 연결되어야 하며 그 반대의 경우도 마찬가지입니다. 따라서 직선형과 크로스오버의 두 가지 케이블 옵션이 있습니다. 스트레이트는 A형과 B형 커넥터를 사용하여 장치 간을 연결하는 데 사용되며, 크로스는 동일한 핀아웃을 가진 포트를 연결하는 데 사용됩니다.

우리에게 이는 다음을 의미합니다.

  • Arduino 보드를 연결하면 마더보드컴퓨터 또는 기타 Arduino 보드의 경우 크로스오버 케이블을 사용해야 합니다.
  • Arduino 보드가 스위치나 라우터에 연결된 경우 케이블은 직선이어야 합니다.

스트레이트 케이블같은 번호의 접점이 연결되어 있다고 가정합니다. 입력 신호와 출력 신호 간의 대응은 네트워크 포트 커넥터의 핀아웃을 통해 보장됩니다.

안에 크로스오버 케이블 전선은 이렇게 연결되어 있어요 케이블로 연결포트 입력 신호출력에 연결하고, 입력에 출력을 연결했습니다.

그림은 일반적으로 허용되는 케이블 코어의 색상을 보여줍니다. 그것들을 고수하는 것이 낫습니다.

  • 케이블 세그먼트의 최대 길이는 100m입니다.

안에 네트워크 인터페이스이더넷이 완성되었습니다 갈바닉 절연전송 매체(케이블)의 각 장치. 절연은 펄스 변압기를 사용하여 수행됩니다.

이는 네트워크의 노이즈 내성을 크게 향상시키고 네트워크 장치의 전기적 안전을 보장합니다.

ENC28J60 모듈을 사용하여 Arduino 보드를 이더넷 네트워크에 연결하겠습니다. 물리적으로 51 x 18 mm 크기의 보드입니다.

이게 제일 저렴해요 네트워크 이더넷제어 장치. 제 생각에는 이 기사를 쓰는 시점의 가격은 250 루블에 불과합니다.

내 목표는 가능성을 검토하고 기술적 인 특성기준 치수. 아마도 나는 "섹션에 그에 대한 별도의 기사를 쓸 것입니다. 전자 부품" 이제 모듈이 Arduino 보드와 함께 작동하는 데 필요한 정보를 제공하겠습니다.

이 모듈은 Microchip의 ENC28J60 마이크로 회로를 기반으로 합니다. 실제로 이것은 표준 구성의 ENC28J60 칩입니다.

제조업체의 기술 정보는 이 링크에서 확인할 수 있습니다.

여기 회로도기준 치수.

ENC28J60 모듈의 주요 특징.

  • 호환 가능 이더넷 네트워크 10/100/1000 베이스-T. 데이터 전송 속도 10Mbit/s, TCP/IP 스택 구현.
  • 마이크로컨트롤러와의 통신 인터페이스 – SPI, 주파수 최대 20MHz.
  • 공급 전압 3.1 – 3.6V. 일반 3.3V.
  • 모듈의 인터페이스 입력을 통해 5V 레벨의 신호에 직접 연결할 수 있습니다. 입력에서 최대 허용 전압 SPI 인터페이스- 6V. ENC28J60을 Arduino에 연결하는 방법에 관한 기사 중 절반에서는 일치하는 저항 분배기를 통해 입력 신호를 연결해야 한다고 말합니다. 이것은 잘못된 것입니다. 의심스러운 사람들은 에서 문서를 볼 수 있습니다.
  • 3.3V 전원 공급 장치의 전류 소비:
    • 전송 시 180mA에 도달할 수 있습니다.
    • 활성 상태이지만 120mA를 전송하지 않습니다.
    • 대기 모드(비활성 레벨의 CS 신호)에서는 2mA 이하입니다.
  • 모듈은 통신 라인으로부터 갈바닉 절연을 제공합니다.

이것이 제가 강조하기로 결정한 특징입니다. 기본:

  • 모듈에 전원을 공급하려면 전압이 3.3V이고 출력 전류가 최대 180mA인 소스를 사용해야 합니다.
  • 모듈 인터페이스 핀은 5V 신호에 연결할 수 있습니다.

마이크로컨트롤러와의 통신 인터페이스.

모듈은 다음 위치에 있는 10핀 PLHD 커넥터를 통해 마이크로컨트롤러에 연결됩니다. 인쇄 회로 기판장치.

ENC28J60 모듈의 핀 할당(핀아웃)입니다.

연락하다 지정 방향 목적
1 CLK 출구 클록 출력
2 정수 출구 인터럽트 신호
3 WOL - 예약된
4 그래서 출구 SPI 인터페이스 신호 SO
5 시. 입구 SPI 인터페이스 SI 신호
6 SCK 입구 SPI 인터페이스 신호 SCK
7 C.S. 입구 SPI 인터페이스 CS 신호(컨트롤러 선택)
8 RST 입구 초기화
9 VCC - 모듈 전원 공급 장치 3.3V 180mA
10 접지 - 일반적인 결론

ENC28J60 모듈을 Arduino 보드에 연결합니다.

안녕하세요 여러분.
많은 사람들이 웹 서버를 만들어야 한다는 말을 들으면 즉시 불안감을 느끼며 장치를 관리하고 모니터링하기 위해 다른 옵션을 사용하여 이 주제에서 벗어나려고 합니다. 그러나 인터넷과 네트워크는 이미 거의 모든 장치에서 사용 가능합니다. 그렇다면 왜 당신의 창조물이 더 나빠졌습니까?
관심이 있으시면 계속 진행하세요.

늑대는 묘사된 것만큼 무섭지 않습니다. 우리 중에는 전문가도 많지만 초보자도 많습니다. 배우기에는 결코 늦지 않았습니다. 나 자신도 많은 것을 배우고 실제로 많은 것을 배웁니다. 이 기사가 초보자에게 도움이 되거나 이제 막 시작하는 사람들의 기억을 되살리는 데 도움이 되기를 바랍니다.
기본은 ENC28j60 컨트롤러가 포함된 인기 있는 모듈입니다.

Arduino UNO도 가져갔습니다(Nano 또는 Pro Mini도 가능합니다). 그들은 모두 ATmega328에서 실행됩니다.
이번 글에서는 기본적인 내용을 알려드리겠습니다 웹 생성가장 간단한 라이브러리를 기반으로 하는 서버입니다.
이 경우:
#include "etherShield.h"
#include "ETHER_28J60.h"
이해하기 쉽지만 가능성도 적습니다. 정기적인 모니터링 및 부하 관리에는 충분합니다.
이를 위해 무엇이 필요한지 살펴보겠습니다.

먼저 라이브러리가 초기화됩니다.
다음으로 모듈을 ENC28j60 컨트롤러와 연결하기 위한 핀을 표시했습니다. 또한 네트워크 장치의 매개변수도 지정해야 합니다. 이렇게 하려면 MAC 주소를 지정하십시오. MAC 주소는 다음과 일치해서는 안 됩니다. MAC 주소네트워크 장치. 마찬가지로 IP 주소는 개별적이어야 하지만 서브넷에 위치해야 합니다.
예를 들어 라우터(192,168,0,1), PC(192,168,0,5), 장치(192,168,0,100)가 있을 수 있습니다.
예를 들어 라우터(192,168,4,1), PC(192,168,4,10), 장치(192,168,4,100)가 있을 수 있습니다.
다음으로 포트를 지정해야 합니다. 기본값은 80입니다. 웹 브라우저는 기본적으로 이를 폴링하기 때문입니다(아래 비디오의 포트 변경 테스트 참조).
다음 ETHER_28J60 이더넷; - 연결하려는 개체(이더넷)의 이름을 가리킵니다. 프로그램 아래에서 이 이름으로 연결합니다.
다음으로 네트워크 컨트롤러를 초기화해야 합니다. 주소와 포트의 모든 설정을 적용합니다.

글쎄요, 가장 어렵고 재미없는 부분은 끝난 것 같아요...

다음으로 프로그램의 메인 루프에서 IP 주소에 대한 요청이 있는지 확인하는 조건을 설정해야 합니다. 요청이 있는 경우 페이지의 행을 보내면 브라우저가 이를 확인합니다. 우리는 잘 알고 있습니다. 예를 살펴보겠습니다:

선택한 줄은 페이지에 큰 테스트를 생성하며 편집하기 쉽고 필요에 따라 해당 줄을 추가할 수 있습니다(그러나 모두 숫자에 따라 다릅니다). 플래시 메모리제어 장치).
명령 ethernet.respond(); 사이트에 대한 요청이 이루어진 브라우저(이 경우 192.168.0.100)로 모든 사이트 행을 보냅니다.
하지만 이 사이트에는 이름이 없습니다(IP 주소만 있음). 한 줄만 추가하면 문제가 해결될 수 있습니다.

음... 이제 좀 나아졌네요.
다음으로, 줄을 추가하고 정보를 표시하거나 관리하는 데 도움이 되는 개체를 페이지에 추가하겠습니다.
링크부터 시작하겠습니다. 클릭하면 테스트와 함께 요청이 컨트롤러에 전송됩니다(나중에 처리를 위해 필요함).

빨간색 화살표는 버튼의 이름이고, 파란색 화살표는 링크를 클릭할 때 요청에 포함되는 텍스트를 나타냅니다. 즉, "중지" 링크를 클릭하면 서버에 "192.168.0.100/stop" 요청이 전송됩니다. 여기서 "중지"는 요청 텍스트가 됩니다.
다음으로 버튼만 사용하여 동일한 옵션을 고려해보세요.

브라우저가 버튼을 표시하는 데 필요한 속성이 추가되었습니다. 이를 클릭하면 "시작" 테스트가 포함된 요청이 전송됩니다. 여기서 모든 것이 명확하다고 생각합니다.
미용 애호가의 경우 매개변수를 추가하고 흥미로운 버튼을 만들 수 있습니다.

다음 옵션에는 변수가 필요하며 스케치 시작 부분에 추가합니다.

이제 페이지에 테이블을 표시해 보겠습니다.

테이블 속성은 테이블 개체를 지정하는 데 사용됩니다. 다음으로 테이블의 바깥쪽 테두리를 빨간색(tr)으로, 안쪽 프레임을 파란색으로 강조했습니다. 쌍으로 되어 있으며 쌍의 중앙에는 값이나 변수(예: ves1 또는 ves2)가 있습니다. 부부가 만드는 것을 볼 수도 있습니다. 미리보기 이미지일반 텍스트. 결국 테이블 개체는 /table로 끝납니다.
나는 페이지에 개체를 표시하는 것만으로도 간단한 웹 페이지를 만드는 데 충분하다고 생각합니다. (아래 초보자를 위한 비디오 강의에서 더 자세한 내용과 시각화를 볼 수 있습니다.)
하지만 요청을 어떻게 처리할 수 있습니까? 이를 위해 문자열에 대한 변수를 추가하여 처음부터 조건을 약간 수정합니다. 또한 예를 들어 요청을 처리하기 위한 두 가지 조건을 생성합니다. 첫 번째는 빈 요청(192.168.0.100)입니다. 두 번째는 "start"(192.168.0.100/start) 텍스트가 포함된 요청입니다.

서버에 제출된 요청에 따라 사이트는 지정된 줄에 따라 브라우저에 표시됩니다.

이것이 변경되고 표시되는 동적 페이지를 만드는 방법입니다. 다양한 정보변수의 매개변수나 링크 및 버튼의 요청에 따라 달라집니다.

위에서 언급한 모든 내용을 초보자를 위한 비디오 강의에서 더 자세하고 명확하게 볼 수 있습니다.



질문이 있으신가요?

오타 신고

편집자에게 전송될 텍스트: