반응형

https://youtube.com/live/zVXTAD5M-hQ

[아두이노#612] Arduino에 W5500을 연결해서 C#윈폼으로 Request & Response 방식으로 통신 해보기!(녹칸다의 아두이노 시즌2)

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

이번편은 클라이언트가 서버에 Request를 전송하면 서버가 클라이언트에게 Response를 전송하도록 기본 예제를 만들어보도록 한다!
서버는 클라이언트에게 먼저 데이터를 전송할수 없고 클라이어트가 요구한 내용에 대해서만 응답하는 것이다!

이 내용은 modbus tcp의 기본통신 방식이므로 미리 적용해놓도록 한다!

(아두이노쪽 필요라이브러리)
1.Ethernet2
2.ArduinoJson
3.dht sensor library

(C#쪽 필요라이브러리)
1.Newtonsoft.Json

(깨알지식)
1.JSON형식은 json object라는 형식과 json array라는 형식이 함께 섞여있다!
2.예를들어서 key-value구조에서 value부분이 배열형식으로 표현될 수 있다!
{"my_id":"nockanda","sensor_list":["dht11","photen"]}
3.아두이노가 센서값을 일정한간격으로 측정해서 아두이노 내부 메모리에 기억시켜두고 C#에서 request가 날라오면 기록된값을 응답하는 방식으로 동작시키도록함!

(예제목차)
1.클라이언트(C#)쪽에서 서버(아두이노)쪽으로 JSON데이터를 전송하면 서버가 응답하도록 하시오!
   REQ(클라이언트->서버) : {"type":"req","msg":"hello"}
   RES(서버 -> 클라이언트) : {"type":"res","msg":"hello"} 

612-1(주고받고형식으로통신하기).txt
0.00MB
example612_1.zip
0.31MB

 

2.클라이언트쪽에서 여러개의 명령이있는데 서버쪽에서 명령을 구분해서 서로다른 응답을 보낼 수 있도록 해보시오!
   (명령어세트1)
   REQ : {"type":"req","cmd":"control"}
   RES : {"type":"res","cmd":"control","data":"ok"} 
   (명령어세트2)
   REQ : {"type":"req","cmd":"sensor"}
   RES : {"type":"res","cmd":"sensor","data":"11.22"} 
   (명령어세트3)
   REQ : {"type":"req","cmd":"lightState"}
   RES : {"type":"res","cmd":"lightState","data":"off"} 

612-2(여러개메시지구분하기).txt
0.00MB
example612_2.zip
0.31MB

 

3.아두이노에 2번핀(LED1)과 3번핀(LED2)에 LED가 1개씩 연결되어있을때 C#에서 아래와 같은 명령어로 LED를 제어할 수 있도록 하시오!
   (LED1을 ON하기위한 명령어)
   REQ : {"code":"led1_control","cmd":"ON"}
   RES : {"code":"led1_control","cmd":"ON"}
   (LED1을 OFF하기위한 명령어)
   REQ : {"code":"led1_control","cmd":"OFF"}
   RES : {"code":"led1_control","cmd":"OFF"}
   (LED2을 ON하기위한 명령어)
   REQ : {"code":"led2_control","cmd":"ON"}
   RES : {"code":"led2_control","cmd":"ON"}
   (LED2을 OFF하기위한 명령어)
   REQ : {"code":"led2_control","cmd":"OFF"}
   RES : {"code":"led2_control","cmd":"OFF"}
   (LED1과 LED2를 둘다 ON하기위한 명령어)
   REQ : {"code":"all_control","cmd":"ON"}
   RES : {"code":"all_control","cmd":"ON"}
   (LED1과 LED2를 둘다 OFF하기위한 명령어)
   REQ : {"code":"all_control","cmd":"OFF"}
   RES : {"code":"all_control","cmd":"OFF"}
   (LED1과 LED2의 켜짐과 꺼짐 상태를 읽어오는 명령어)
   REQ : {"code":"led_read","cmd":""}
   RES : {"code":"led_read","cmd":"00"}

   (led_read에대한 응답데이터 해석)
   "LED1 LED2"
   "00" : LED1 : OFF, LED2 : OFF
   "10" : LED1 : ON, LED2 : OFF
   "01" : LED1 : OFF, LED2 : ON
   "11" : LED1 : ON, LED2 : ON

612-3(led2개제어하기).txt
0.00MB
example612_3.zip
0.31MB

 

4.아두이노의 2번핀에 온습도센서를 연결하고 아날로그0번핀에 가변저항을 연결해서 C#화면에 출력하시오!
   (온습도값을 읽어오는 명령어)
   REQ : {"code":"dht11"}
   RES : {"code":"dht11","data":[11.22,55.55]}
   (가변저항값을 읽어오는 명령어)
   REQ : {"code":"photen"}
   RES : {"code":"photen","data":[512]}
   (둘다 읽어오는 명령어)
   REQ : {"code":"all"}
   RES : {"code":"photen","data":[11.22,55.55,512]}

612-4(센서값읽어오기).txt
0.00MB
example612_4.zip
0.32MB

반응형
Posted by 덕력킹
,