Raspberry Pi Pico를 유선 LAN에 연결하여 통신

Raspberry Pi Pico는 저렴하고 훌륭하지만 통신 기능이 없습니다. Wi-Fi도 Bluetooth도 없기 때문에, 기껏해야 UART 기능을 사용해, PC와 RS-232C로 통신할 정도 밖에 할 수 없습니다. 싸기 때문에 우선 사는 것은 보았지만, 사용도가 생각나지 않는다는 목소리를 듣습니다. 센서로 읽은 값을 서버에 보내는 정도는 하고 싶기 때문에 통신 기능을 원합니다.

이 기사에서는 Raspberry Pi Pico에 ENC28J60이라는 LAN 컨트롤러를 연결하여 UDP 패킷을 송수신하고 NTP 서버에서 날짜 및 시간 데이터를 검색합니다.

▼전체상



프로그램은 10년 정도 옛날에 ATmega328P로 ENC28J60을 제어했을 때의 코드를 재이용하고 있습니다.

▼옛날 만든 녀석



ENC28J60은 고기능 LAN 컨트롤러가 아니기 때문에 TCP/IP와 같은 고급 기능은 탑재되어 있지 않습니다. 이더넷의 원시 패킷을 송수신할 수 밖에 없습니다. 상위 프로토콜은 호스트의 마이크로 컴퓨터 측에 구현됩니다. 적어도 다음과 같은 기능이 Raspberry Pi Pico 측에 필요합니다.
  • ARP ... IP 주소에서 MAC 주소를 쿼리합니다. 및 응답
  • DHCP 클라이언트 ... 라우터 등으로부터 IP 주소를 할당받는다
  • Resolver ... 인터넷 호스트 이름을 DNS 서버에 문의하여 IP 주소를 얻습니다
  • 패킷 통신 ... UDP 패킷을 이더넷 프레임에 넣고 송수신한다

  • 이 기사에서는 NTP 서버에 문의하여 데이터를 취득하기 때문에 UDP 통신을 사용합니다. 만약, 웹서버 등을 만들고 싶다면, TCP의 통신 기능을 구현할 필요가 있고, 꽤 큰 프로그램이 되어 버리므로, TCP는 본 기사에서는 다루지 않습니다. 앞으로의 도전 과제가 되고 있습니다.

    동영상은 다음 트윗에 있습니다.

    #RaspberryPiPico 그리고 ENC28J60에서 유선 LAN 연결로 NTP 서버에서 날짜와 시간을 얻을 수 있었다! 피 c. 라고 r. 코m/에우오 HTR7rFQ — 소라미미 (@soramimi_kr) February 11, 2021



    소스 코드




    ENC28J60과 호스트 마이크로 컴퓨터는 SPI를 통해 통신합니다. 클록(SCK)은 평상시는 Low 레벨로, 상승 에지에서 신호선의 읽고 쓰기를 실시하는 포맷이므로, 다음의 포맷 지정이 필요했습니다. 이것을 깨닫기까지 몇 시간이 걸렸습니다.



    spi_set_format(SPI_PORT, 8, SPI_CPOL_0, SPI_CPHA_1, SPI_MSB_FIRST);
    

    좋은 웹페이지 즐겨찾기