아두이노우노 R4

아두이노 우노 R4 WiFi CAN Bus 꿀팁

지구빵집 2024. 3. 18. 07:58
반응형

 

아두이노 우노 R4 WiFi CAN Bus 꿀팁 

 

UNO R4 WiFi에서 CAN 버스를 사용하여 메시지를 전송하는 방법을 알아보세요.  

 

이 튜토리얼에서는 아두이노 UNO R4 WiFi 보드에서 CAN 컨트롤러를 사용하는 방법을 배웁니다. CAN 컨트롤러는 UNO R4 WiFi의 마이크로컨트롤러(RA4M1)에 내장되어 있습니다. CAN은 주로 자동차 산업에서 사용되는 직렬 프로토콜입니다. CAN 컨트롤러가 작동하려면 외부 트랜시버가 필요하다는 점에 유의하세요. 이 튜토리얼에서는 지침과 하드웨어 예제를 제공합니다. 

 

다른 유용한 문서를 다운로드 하세요.

일 년 성찰 가이드

https://kimbongzo.gumroad.com/l/YearReviewGuide

 

아두이노 우노 R4 Minima 빠르게 시작하기

https://kimbongzo.gumroad.com/l/Arduino-R4-Minima

 

아두이노 우노 R4 WiFi 빠르게 시작하기

https://kimbongzo.gumroad.com/l/arduinor4wifi

 

고객에 대한 빠른 응답 템플릿

https://kimbongzo.gumroad.com/l/ezhaf

 

아두이노 개발의 시작, 아두이노 IDE 2 완벽 가이드

https://kimbongzo.gumroad.com/l/ArduinoIDE2UltimateGuide

 

아두이노 Nano 33 IoT 퀵 가이드

https://kimbongzo.gumroad.com/l/Nano33IoTQuickGuide

 

라즈베리파이 5 퀵 가이드

https://kimbongzo.gumroad.com/l/raspberrypi_5_QuickGuide

 

Python OpenCV 컴퓨터 비전 입문 프로그래밍

https://kimbongzo.gumroad.com/l/python_opencv_basic

 

Python OpenCV 컴퓨터 비전 고급 프로그래밍

https://kimbongzo.gumroad.com/l/qmgmdw

 

미세먼지 모니터 제작 강의 자료

https://kimbongzo.gumroad.com/l/finedustmeter_maker

 

 

자 시작해 봅시다.

 

목표: 이 튜토리얼의 목표는 다음과 같습니다:

 

  • 빌트인 CAN 라이브러리에 대한 개요 알아보기
  • 보드를 CAN 트랜시버 모듈에 연결하는 방법 알아보기
  • 두 아두이노 간에 CAN 메시지 보내기

 

필요한 하드웨어 및 소프트웨어

 

아두이노 IDE(온라인 또는 오프라인)

아두이노 R4 WiFi

아두이노 르네사스 코어

CAN 트랜시버 모듈 *

점퍼 와이어

 

* 이 튜토리얼에서는 SN65HVD230 브레이크아웃 모듈을 사용합니다.

 

컨트롤러 영역 네트워크(CAN)

 

CAN 버스는 두 개의 와이어를 사용합니다: CAN 하이와 CAN 로우. UNO R4 WiFi에서 이 핀은 다음과 같습니다:

 

  • D13/CANRX0(수신)
  • D10/CANTX0 (전송)

 

하지만 다른 CAN 장치와 통신하려면 트랜시버 모듈이 필요합니다. 이 튜토리얼에서는 SN65HVD230 브레이크아웃을 사용하겠습니다. 이를 연결하려면 아래 섹션에서 제공되는 회로도를 따르세요.

 

이 튜토리얼에서는 두 개의 UNO R4 WiFi 장치 간에 CAN 메시지를 전송하는 간단한 예제를 사용합니다. 원하는 경우 기존 CAN 장치를 UNO R4 WiFi에 연결할 수도 있습니다.

 

회로

 

CAN 트랜시버를 연결하려면 아래 표와 회로도를 따르세요:

 

UNO R4 WiFi CAN Transceiver
D13 (CANRX0) CANRX
D10 (CANTX0) CANTX
3.3V VIN
GND GND

 

 

그런 다음 CAN 트랜시버 사이에 다음을 연결합니다:

 

 

CAN Transceiver 1CAN Transceiver 2

CAN Transceiver 1 CAN Transceiver 2
CANH (HIGH) CANH (HIGH)
CANL (LOW) CANL (LOW)

 

 

코드 예제

 

다음 코드 예제는 각각의 UNO R4 WiFi 보드에 업로드해야 하며, 하나는 메시지를 보내고 하나는 메시지를 수신합니다. 이러한 예제는 Renesas 코어에서 사용할 수 있으며, Arduino IDE를 사용하여

파일 > 예제 > Arduino_CAN > CANWrite/CANRead로 이동하여 액세스 할 수 있습니다.

 

사용된 라이브러리는 코어에 내장되어 있으므로 코어가 설치되어 있는 경우 라이브러리를 설치할 필요가 없습니다.

 

라이브러리를 초기화하려면 CAN 비트 전송률을 지정하는 CAN.begin(CanBitRate::BR_250k)을 사용합니다. 다음 중에서 선택합니다:

 

  • BR_125k (125000)
  • BR_250k (250000)
  • BR_500k (500000)
  • BR_1000k (1000000)

 

CAN 쓰기

 

CAN 메시지를 전송하려면 CAN_ID, 크기 및 메시지 데이터를 포함하는 CanMsg 객체를 생성할 수 있습니다. 아래는 이러한 객체를 생성하는 방법에 대한 예제입니다.

 

 

uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};
memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));
CanMsg msg(CAN_ID, sizeof(msg_data), msg_data);

 

 

CAN 메시지를 생성한 후에는 CAN.write() 메서드를 사용하여 메시지를 전송할 수 있습니다. 다음 예제는 void loop()가 실행될 때마다 증가하는 CAN 메시지를 생성합니다.

 

깃허브의 코드 소스

 

 

/*
  CANWrite

  Write and send CAN Bus messages

  See the full documentation here:
  https://docs.arduino.cc/tutorials/uno-r4-wifi/can
*/

/**************************************************************************************
 * INCLUDE
 **************************************************************************************/

#include <Arduino_CAN.h>

/**************************************************************************************
 * CONSTANTS
 **************************************************************************************/

static uint32_t const CAN_ID = 0x20;

/**************************************************************************************
 * SETUP/LOOP
 **************************************************************************************/

void setup()
{
  Serial.begin(115200);
  while (!Serial) { }

  if (!CAN.begin(CanBitRate::BR_250k))
  {
    Serial.println("CAN.begin(...) failed.");
    for (;;) {}
  }
}

static uint32_t msg_cnt = 0;

void loop()
{
  /* Assemble a CAN message with the format of
   * 0xCA 0xFE 0x00 0x00 [4 byte message counter]
   */
  uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};
  memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));
  CanMsg const msg(CanStandardId(CAN_ID), sizeof(msg_data), msg_data);

  /* Transmit the CAN message, capture and display an
   * error core in case of failure.
   */
  if (int const rc = CAN.write(msg); rc < 0)
  {
    Serial.print  ("CAN.write(...) failed with error code ");
    Serial.println(rc);
    for (;;) { }
  }

  /* Increase the message counter. */
  msg_cnt++;

  /* Only send one message per second. */
  delay(1000);
}

 

 

CAN 읽기

 

수신되는 CAN 메시지를 읽으려면 먼저 CAN.available()을 사용하여 데이터를 사용할 수 있는지 확인한 후 CAN.read()를 사용하여 메시지를 읽습니다.

 

깃허브의 코드 소스

 

 

/*
  CANRead

  Receive and read CAN Bus messages

  See the full documentation here:
  https://docs.arduino.cc/tutorials/uno-r4-wifi/can
*/

/**************************************************************************************
 * INCLUDE
 **************************************************************************************/

#include <Arduino_CAN.h>

/**************************************************************************************
 * SETUP/LOOP
 **************************************************************************************/

void setup()
{
  Serial.begin(115200);
  while (!Serial) { }

  if (!CAN.begin(CanBitRate::BR_250k))
  {
    Serial.println("CAN.begin(...) failed.");
    for (;;) {}
  }
}

void loop()
{
  if (CAN.available())
  {
    CanMsg const msg = CAN.read();
    Serial.println(msg);
  }
}

 

 

요약

 

이 튜토리얼에서는 UNO R4 WiFi에서 사용할 수 있는 CAN 버스를 사용하는 방법과 Arduino_CAN 라이브러리를 사용하여 데이터를 송수신하는 방법을 설명합니다.

 

이 보드에 대한 자세한 내용은 아두이노 UNO R4 WiFi 설명서를 참조하세요.

 

 

UNO R4 WiFi

 

 

반응형