반응형

https://www.youtube.com/live/3sBhaVwxqlQ

 

 

[아두이노#613] Arduino에 W5500을 연결해서 C#윈폼으로 byte array 주고받으면서 통신해보기!(녹칸다의 아두이노 시즌2)

녹칸다의 아두이노 시즌2 시리즈이다!

이번편은 서버와 클라이언트가 문자열을 기반으로 통신하는게 아니라 byte stream을 주고받으면서 통시하도록한다!
문자열도 따지고보면 byte array지만 해석하는 방법이 다르기 때문에 매우 중요하다고 볼 수 있다!

(오늘의 목표)
1.녹칸다의 아두이노 610~612편까지는 서버와 클라이언트가 문자열을 기반으로한 JSON을 주고받으면서 예제가 구현되었다!
2.그러나 613편부터는 byte array를 주고받으면서 제어하는 것으로 업그레이드를 진행한다!
3.최종적으로 구현해야할 modbus tcp는 문자열을 기반으로하는게 아니라 byte array를 기반으로한다!
4.서버와 클라이언트는 아직까지는 고정길이를 가지는 byte array를 주고받도록 디자인한다!

(점검사항)
1.문자열을 기반으로할때는 데이터의 길이가 가변적이기 때문에 종료문자를 필수로 넣어야한다!
2.byte array를 주고받을때는 일반적으로 길이를 딱 정해두고 사용하거나 혹은 데이터안에 길이가 포함되어있을수도 있다!
3.모든 데이터는 16진수로 표현하고 아두이노든 C#이든 10진수가 아닌 16진수는 "0x"라는 접두사 리터럴을 붙힌다!
4.문자열을 기반으로한 예제에서 클라이언트와 서버가 연결을 맺을때 클라이언트가 최소 1개의 데이터를 전송해줘야 연결이 가능했었다!
5.그래서 클라이언트가 TCP접속을 한다음 "hello?"라는 문자열을 전송하도록 했는데, 지금은 문자열로 하는게 아니기 때문에 다른 방법을 찾아야한다!
   REQ : 0x00 0x00 0x00
   (데이터 데이터는 접속을 위한 의미없는 더미 데이터이다)
6.지금 클라이언트가 서버에 접속하기위해서 0x00이라는것을 3개 전송하는데 실제 데이터와 충돌나면 어떻게 되지?
      <헤더1바이트> <데이터 2바이트>
   REQ : 0xAF 0x00 0x00

(예제목차)
1.서버와 클라이언트가 아래 메시지를 request & response방식으로 주고받을 수 있도록 하시오!
   REQ : 0x00 0x11 0x22   (길이 3byte)
   RES : 0xAA 0xBB 0xCC   (길이 3byte)

613-1(byte배열로주고받기).txt
0.00MB
example613_1.zip
0.30MB

 

2.클라이언트가 서버에 1234라는 값을 req에 포함해서 전송하면 클라이언트는 3500이라는 고정값을 res에 담아서 전송하도록 하시오!
   REQ : 0xAF 0x00 0x00   (birth msg)
   REQ : 0x00 0x?? 0x??   (길이 3byte)
   RES : 0x00 0x?? 0x??   (길이 3byte)

613-2(16비트정수주고받기).txt
0.00MB
example613_2.zip
0.31MB

 

3.클라이언트가 서버쪽으로 2개의 16bit정수를 전송하고 서버는 클라이언트쪽으로 2개의 16bit정수를 전송하도록 하시오!
   REQ : 0xAF 0x00 0x00 0x00 0x00 (birth msg)
   REQ : 0x00 0x?? 0x?? 0x?? 0x??(길이 3byte)
   RES : 0x00 0x?? 0x?? 0x?? 0x??(길이 3byte)

613-3(정수2개전송하기).txt
0.00MB
example613_3.zip
0.31MB

 

4.여러개의 자료형이 복잡되어있는 형식으로 주고받아보시오!
   (REQ) : 32bit 실수형데이터 2개(1+8byte)
   (RES) : char 1개, int16 1개, uint16 1개, float 1개, int32_t 1개(1+13byte)

613-4(복합적인데이터전송하기).txt
0.00MB
example613_4.zip
0.31MB

 

5.아두이노에 2번핀과 3번핀에 LED가 1개씩 연결되어있을때 LED를 제어하는 req와 상태를 읽어오는 req를 구성해서 제어하시오!
   (제일 첫바이트가 0xAF면 birth msg인것은 공통)
   (LED1번 제어) : LED1, 켤지끌지, 헤더
      REQ : 0x11 0x01, 0x00 (OFF)
      REQ : 0x11 0x01, 0x01 (ON)
   (LED2번 제어)
      REQ : 0x11 0x02, 0x00 (OFF)
      REQ : 0x11 0x02, 0x01 (ON)
   (둘다 제어)
      REQ : 0x11 0x00, 0x00 (OFF)
      REQ : 0x11 0x00, 0x01 (ON)
   (상태읽어오기)
      REQ : 0x22 0x00, 0x00
      RES : 0x22 0x00, 0x00 (둘다 OFF)
      RES : 0x22 0x01, 0x00 (LED1 On, LED2 Off)
      RES : 0x22 0x00, 0x01 (LED1 Off, LED2 On)
      RES : 0x00 0x01, 0x01 (LED1 On, LED2 On)      (에러 응답)
      RES : 0xFF 0x00, 0x00 (등록되지않은명령)

613-5(led2개제어해보기).txt
0.01MB
example613_5.zip
0.31MB

 

6.아두이노의 2번핀에 온습도센서(DHT-11)가 연결되어있고 아날로그0번핀에 가변저항이 연결되어있을때 byte array형식으로 읽어올수 있도록 하시오!
      REQ : 0xAF 접속알림 그외는 데이터
      RES : 0x00 0x온 0x도 0x습 0x도 0x가변 0x저항

613-6(센서값읽어오기).txt
0.00MB
example613_6.zip
0.31MB

반응형
Posted by 덕력킹
,