반응형

 

https://youtube.com/live/alOuYP7NZRE

마스터(master)와 슬레이브(slave)간 통신으로 1:1양방향 CAN통신 구현해보기!(녹칸다의 CAN통신 시즌2 2편)

녹칸다의 캔통신 시즌2 시리즈이다!
ESP32보드를 이용해서 CAN통신을 해보는 내용이다!
(시즌1에서는 아두이노 우노와 MCP2515를 활용했다)

시즌2에서 사용할 CAN통신 모듈은 SN65HVD230이다.
아두이노 우노를 활용하지 않고 ESP32보드를 활용하는 이유는 SN65HVD230모듈이 3.3V 로직레벨로 통신을 하기 때문이다.

레벨컨버터를 활용하면 되지만 연결하는게 복잡해지고 그럴바에는 ESP32나 ESP8266을 활용하는게 더 좋아 보였다.
(나중에 IoT관련 예제로 응용도 가능할 것 같음!)

녹칸다의 캔통신 시즌2의 최종목표는 자동차와 통신하는 것이다.
자동차에는 다양한 제어시스템이 있고 제어시스템간 CAN BUS로 통신을 한다.
OBD2 프로토콜을 이용해서 차량내 정보를 아두이노에서 다양하게 활용할 수 있다.
결국 CAN통신을 알아야 그것이 가능한 것이다.

크게보면 아래와 같은 목차가 있다.
(1) ESP32보드간 1:1단방향 통신
(2) ESP32보드간 1:1양방향 통신(반이중방식)
(3) ESP32보드간 1:N양방향 통신
(4) 컴퓨터와 ESP32보드간 1:N양방향 통신
(5) ESP32와 자동차간 통신(자동차쪽은 OBD2 시뮬레이터 활용)

이번편에서는 2번항목인 1:1양방향 통신을 주요내용으로 하도록 한다.
한쪽보드는 마스터이고 다른쪽보드는 슬레이브가 되는것이다.

아래와 같은 내용을 라이브방송내 함께 예제를 구현하면서 알아보도록 한다.(대략적으로 작성해둠)
ㅡrequest & response 기본코드
ㅡ2개이상 id로 뭔가보내면 뭔가 구분해서 응답하기
ㅡled제어 결과 응답
ㅡ버튼누르면 카운터값 응답
ㅡ가변저항 센서값 응답
ㅡfnd출력하기
ㅡ데이터송수신전략
ㅡ온습도센서 읽어오기(실수형)
ㅡ프로토콜 체크(125k 250k 500k) (11bit 29bit)

 

(참고자료)
1.단방향통신에서 양방향통신으로 바꾸기 위해서는 마스터쪽에서 request한다음 response가 도달할때까지 기다리는 부분을 구성해야한다!
2.마스터가 기다릴때는 블록킹방식이 있고 언블록킹방식이 있다!
3.블록킹방식은 슬레이브가 응답할때까지 ESP32의 모든기능을 멈추도록 하는 delay와 같은 방식이다!(난이도가 쉬움)
4.언블록킹방식은 보내는부분과 받는부분을 서로 개별적으로 동작하고록 하는 방식이다!(궁극적으로는 이방식이로 해야하나 어려움)
5.캔통신은 마스터1대와 여러대의 슬레이브로 구성되기 때문에 마스터가 reqeust할때 해당되는 id를 가진 슬레이브만 응답을 해야한다!
6.릴레이를 아두이노에서 제어하는 것은 LED를 ON/OFF하는것과 동일하다!


(예제목록)
1.한쪽 ESP32보드를 마스터 다른쪽 보드를 슬레이브로 구성해서 1:1 양방향 통신이 가능한 기본 예시를 구현하시오!

can2-1-1(마스터).txt
0.00MB
can2-1-2(슬레이브).txt
0.00MB

 

2.마스터쪽에서 2가지 타입의 id를 request했을때 슬레이브가 구분할 수 있는지를 확인하시오!(옳바르지 않은 경우)

can2-2-1(마스터).txt
0.01MB
can2-2-2(슬레이브).txt
0.00MB

 

3.마스터쪽에서 id가 아니라 request data에 슬레이브가 구분할 수 있는 데이터를 실어서 전송하고 슬레이브는 마스터가 보낸 id가 아니라 데이터를 확인해서 응답을 달리 하도록 하시오!(옳바른경우)

can2-3-1(마스터).txt
0.01MB
can2-3-2(슬레이브).txt
0.00MB

 

4.마스터가 보낸 request에 해당되는 슬레이브만 응답되도록 코드를 구현하시오!(1:N통신을 염두해둔 작업)

can2-4-1(마스터).txt
0.01MB
can2-4-2(슬레이브).txt
0.00MB

 

5.슬레이브에 LED가 D18에 연결되어있을때 마스터에서 보낸 request로 1초간격으로 on/off되도록하시오!

can2-5-1(마스터).txt
0.01MB
can2-5-2(슬레이브).txt
0.00MB

 

6.마스터에 버튼 2개를 D18과 D19에 연결해서 D18버튼을 누르면 슬레이브쪽 LED가 켜지고, D19버튼을 누르면 OFF되도록 하시오! 그리고 현재 LED의 상태를 알수 있도록하시오!

can2-6-1(마스터).txt
0.01MB
can2-6-2(슬레이브).txt
0.00MB

 

7.슬레이브쪽에 가상의 센서데이터가 있는데 16bit 부호가 없는 정수 1개와 부호가 있는 정수 1개가 있다! 이값을 마스터쪽으로 전송하시오!(공용체를 사용함)

can2-7-1(마스터).txt
0.00MB
can2-7-2(슬레이브).txt
0.00MB

 

8.예제7번과 동일한 구성에 실수형 데이터 2개를 전송하시오!(공용체 사용)

can2-8-1(마스터).txt
0.00MB
can2-8-2(슬레이브).txt
0.00MB

 

9.슬레이브에 온습도센서가 있고 일정한 간격으로 온습도값을 기록하고 있을때 마스터에서 온습도값을 요청해서 받아오는 예시를 구현하시오!

can2-9-1(마스터).txt
0.00MB
can2-9-2(슬레이브).txt
0.00MB

 

10.예제6번코드를 그대로 활용해서 릴레이로 DC모터를 On/Off하시오!

반응형
Posted by 덕력킹
,