반응형

https://youtube.com/live/BsbGGNVGQAM

[아두이노#611] Arduino에 이더넷(ethernet) 연결해서 C#윈폼으로 문자열을 기반으로 양방향제어 해보기!(녹칸다의 아두이노 시즌2)

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

이번편은 610편에 이어서 문자열을 기반으로해서 아두이노를 제어해보도록 한다!
C#윈폼으로 만든 마스터에서 아두이노에 달린 여러개의 LED를 제어한다던지,
각종 센서값을 읽어올때 JSON과 같은 문자열 형식의 데이터를 활용해보는것이다!

(현재까지의 상황)
1.아두이노에 이더넷모듈(W5500)이 연결되었고 C#윈폼과 TCP연결을 통해서 문자열을 주고받을 수 있는 상태이다!
2.아두이노는 1초간격으로 문자열을 전송하고 C#윈폼은 GUI에 있는 버튼을 누르면 아두이노쪽으로 데이터가 전송된다!
3.C#윈폼이 TCP클라이언트에 해당하고 아두이노가 TCP서버에 해당하는데 클라이언트가 서버에 접속했을때 원래라면 아두이노가 바로 접속이 되었음을 인지하나, 녹칸다가 새롭게 설치한 ethernet2라는 라이브러리는 C#윈폼에서 1회이상 메시지를 전송해야 TCP 커넥션이 성립이 되었다!(ethernet2라이브러리를 만든사람이 그렇게 만들어둔듯하다)
4.지금 만들어진 기본예제는 클라이언트가 서버쪽으로 접속하고난뒤 직후에 바로 hello?라는 문자열을 전송하게 되고 서버는 hello?라는 문자열을 수신하면 클라이언트가 접속한것으로 간주한다!
5.양단의 종료문자는 Line Feeder(LF/0x0A/\n)

(오늘 필요한 아두이노 라이브러리)
1.Ethernet2
2.arduino json(6.18.5버전)
3.DHT Sensor library
(C#쪽 라이브러리)
NewtonSoft JSON

(녹칸다가 문자열 형식으로 JSON을 활용하려는 이유)
1.아두이노가 문자열 형식의 데이터를 받으면 해석을 해서 데이터를 활용하는 문자열 처리를 해야한다!(생각보다 어려움)
2.만약 문자열 형식을 JSON으로 한다면 아두이노의 JSON 라이브러리를 이용해서 문자열을 바로 데이터로 해석해낼 수 있음!
3.JSON형식은 거의 대부분의 언어에서 해석을 할 수 있는 양식이기때문에 C#윈폼에서도 아두이노가 전송한 JSON을 해석해낼 수 있음!(양방향 JSON)

(JSON의 기본 형식)
1.key-value쌍을 문자열로 표현함
2.시작과 끝은 중괄호 열고 닫기로 표현함!
3.value는 숫자나 문자같은게 올 수 도있고 object가 대입될수도있음!
int num = 10; //{"num":10}

int num1 = 10;
int num2 = 20;
//{"num1":10,"num2":20}

String myname = "녹칸다";
//{"myname":"녹칸다"}

struct{
   int num1 = 10;
   int num2 = 20;
}mystruct;

{"mystruct":{"num1":10,"num2",20}}

(깨알지식)
1.object를 json으로 표현하기 위한 직렬화 과정은 대부분 언어에서 문자열 접합연산만 하면 되기때문에 별로 어렵지않음!
2.반면 json을 object로 바꾸는 과정은 C#이던지 아두이노던지 다른 어떤 언어든지 복잡하기 때문에 라이브러리의 기능을 활용해야한다!
3.JSON을 표현하기 위한 쌍따움표기호(")는 때때로 문자열의 시작과 끝을 나타내는 쌍따움표 기호와 충돌이 발생할 수 있음!

(예제목차)
1.예제610-1번예제를 기본으로해서 아두이노와 C#윈폼이 JSON데이터를 주고받아서 직렬화와 역직렬화를 할 수 있음을 보이시오!
   아두이노가 C#으로 보내는 데이터
   {"type":"server","data1":10,"data2":20}
   C#이 아두이노쪽으로 보내는 데이터
   {"type":"client","data1":99,"data2":33}   

611-1(json주고받기예제).txt
0.00MB
example611_1.zip
0.31MB

 

2.아두이노에 2번핀과 3번핀에 LED를 1개씩 연결하고 C#에서 개별제어도하고 일괄제어도 할 수 있도록 하시오!
   서버->클라이언트(LED상태)
   예시 {"led1":0,"led2":1}
   클라이언트->서버(LED제어)
   "led_num" 0이면 둘다, 1이면 LED1, 2면 LED2
   "state" 0이면 OFF, 1이면 ON
   예시 {"led_num":0,"state":0}

611-2(led2개제어하기).txt
0.00MB
example611_2.zip
0.31MB

 

3.아두이노가 서버인데 서버의 2번핀에 온습도센서(DHT-11)이 연결되어있을때 온습도센서값을 클라이언트로 전송해서 UI에 출력하시오!

611-3(온습도센서).txt
0.00MB
example611_3.zip
0.31MB

 

4.아두이노의 7번핀에 서보모터가 연결되어있을때 C#에서 각도를 실시간으로 제어하고 현재 서보모터의 각도값을 수신받아서 화면에 출력하시오!
   서버->클라이언트(LED상태)
   예시 {"set":0,"degree":180}
   클라이언트->서버(LED제어)
   예시 {"mode":0,"data":0}
   예시 {"mode":0,"data":1}
   예시 {"mode":1,"data":0~180}

611-4(서보모터제어하기).txt
0.00MB
example611_4.zip
0.31MB

반응형
Posted by 덕력킹
,