반응형

https://youtube.com/live/qv-dGVTDkF0

 

ESP32로 USB to CAN을 간단히 만들고 C#윈폼으로 PC프로그램을 만들어서 제어해보기!(녹칸다의 CAN통신 시즌2 4편)

녹칸다의 캔통신 시즌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 시뮬레이터 활용)

이번편은 컴퓨터로 간단히 캔통신을 해보는 것을 목표로 한다!
오픈마켓에 보면 USB to CAN이 가능한 다양한 제품을 판매하지만 매우 비싸다!
(그러나 그만큼 기능이 많은 듯 하다)
그렇게 많은 기능은 필요하지 않고 간단히 제어하는데 필요한 최소한의 프로토콜을 구현해서 제어해보도록 한다!

컴퓨터는 캔통신이 되지 않으므로 ESP32보드를 USB로 PC와 연결해서 마치 USB to CAN모듈인것 처럼 활용하는 것이다!

그리고 그 모듈에 연결된 다른 ESP32보드는 캔통신 슬레이브가 되는 것이다!

원래 ESP32보드 3대로 하려고 했는데 3편 라이브방송을 진행하는 중에 보드 1대가 고장나버려서 대체품이 없는 상태라서 그냥 2대만 가지고 해야할 것 같다!

아래와 같은 내용을 주요목표로 한다!
-컴퓨터(마스터)와 esp32(슬레이브)캔통신
-ESP32보드 1대를 USB to CAN 컨버터로 디자인하기!
-컴퓨터와 ESP32보드를 묶어서 캔통신 마스터로 작동시키기!
-PC 제어프로그램을 씨샵 윈폼으로 구현해보기!
-간단한거 이것저것 제어해보기!

 

(USB to CAN모듈(브로커)을 디자인하기 위한 고려사항)
1.아이디가 11bit(standard)일수도 있고 29bit(extended)일수도있다!(아이디는 11bit 아이디만 사용한다)
2.캔통신에서 사용하는 통신속도가 125k, 250k, 500k 기타등등이냐?(속도는 그냥 125k로 고정해버리겠다)
3.디바이스간 주고받는 데이터는 원래부터 8bytes로 구성되어있다!
4.(아하!) 컴퓨터는 11bit 아이디값과 8bytes 데이터값을 ESP32로 전송해주면 되는구나!(총 보내줘야할 데이터는 10bytes이다)
5.컴퓨터에서 브로커쪽으로 10바이트를 전송하게되면 브로커는 연결된 슬레이브에게 데이터를 전송하고 슬레이브가 응답한 데이터를 받아서 컴퓨터쪽으로 보내준다!
6.브로커가 슬레이브쪽으로 데이터를 전송했는데 슬레이브가 응답을 하지 않으면 어떻게 되는가?(타임아웃처리)
7.컴퓨터가 브로커에게 데이터를 전송했는데 브로커가 시간안에 응답하지 않으면 어떻게 되는가?(타임아웃처리)
8.esp32보드는 reset버튼을 누르거나 전원을 새롭게 연결하면 boot메시지가 시리얼모니터에 출력된다!
9.esp32를 재부팅하게되면 쓸데없는 boot메시지가 C#윈폼으로 전송된다!
10.그 메시지는 일종의 쓰레기값이기때문에 제거를 해주어야하는데 녹칸다 기억으로는 D5핀을 GND와 연결시켜놓으면 안나왔던걸로 기억한다!
11.visual studio 2022를 구글에서 검색해서 설치하면 공짜로 할 수 있음!
12.C#윈폼으로 ESP32와 연결할때는 아두이노의 시리얼모니터는 반드시 꺼져있어야한다!

(제어명령의 종류)
제일 첫번째 바이트가
0이면 LED 제어하기
   - 두번째 바이트가 0이면 OFF, 1이면 ON
1이면 가변저항값 측정해서 반환하기
2이면 온습도센서값 측정해서 반환하기

 

(C#프로젝트)

can4_2.zip
0.07MB


(예제목차)
1.USB to CAN모듈을 테스트하기위해서 슬레이브와 통신이 가능한 상태까지를 예제로 저장하시오!

can4-1-1.txt
0.00MB
can4-1-2.txt
0.00MB

 

2.C#윈폼과 캔통신이 가능한 세트를 구현하시오!

can4-2-1.txt
0.00MB
can4-2-2.txt
0.00MB

 

3.C#윈폼에서 CAN슬레이브에 D18에 연결된 LED를 ON/OFF할 수 있도록 하시오!

can4-3-1.txt
0.00MB
can4-3-2.txt
0.00MB

 

4.C#윈폼에서 슬레이브에 D4에 연결된 가변저항값을 읽어와서 윈도우 폼에 출력시키시오!

can4-4-1.txt
0.00MB
can4-4-2.txt
0.00MB

 

5.슬레이브의 D19에 온습도센서(DHT-11)를 연결해서 온도와 습도값을 C#윈폼 화면에 출력하시오!

can4-5-1.txt
0.00MB
can4-5-2.txt
0.00MB

반응형
Posted by 덕력킹
,