[아두이노#603] Arduino에 흐름제어가 자동으로되는 RS485모듈을 연결해서 1:1통신해보기!(녹칸다의 아두이노 시즌2)
프로그래밍/RS485모드버스(modbus) 2024. 7. 2. 23:10
https://youtube.com/live/YrBpjrIaY4c
(깨알지식)
1.오늘 녹칸다가 새롭게 소개할 RS485모듈은 흐름제어가 자동으로 되는 아주 혁신적인 RS485모듈이다!(그러나 가격은 매우 저렴하다)
2.아두이노에 연결되는 RS485모듈은 시리얼통신을 RS485통신으로 전환해주는 컨버터에 해당한다!
3.아두이노에 시리얼통신 모듈을 연결할때 RX핀은 TX에 연결하고 TX핀은 RX에 연결하는 국룰이 있는데 이번에 녹칸다가 가져온 모듈은 RX는 RX에 TX는 TX에 연결한다!(만든사람 마음인듯)
4.어차피 1234라는 값을 마스터에서 슬레이브로 전송하는 경우 문자열이든 숫자든 보낼 수 있기만 하면 되지 않느냐?
5.일단 1234를 보내는데 문자열로 전송할경우 숫자로보내면 2바이트인데 문자열로 보내면 4바이트이므로 낭비이다!
6.데이터를 숫자로 취급해서 전송할 경우 길이가 고정이므로 송수신 양단에 처리가 편하다!
7.마스터가 슬레이브에 연결된 센서값을 읽어올때는 전략이 필요하다!
-마스터가 슬레이브에게 reqeust를보내면 슬레이브가 센서값을 측정해서 전송한다!(X)
-슬레이브는 일정한 간격으로 항상 센서값을 측정해서 메모리에 저장해두고 마스터가 요청하면 저장된 값을 응답한다!(O)
(아두이노에 시리얼출력을 하는 3대함수)
//byte array전송할때
Serial.write(바이트배열,보내고자하는 길이);
//char array를 write함수를 사용해서 보낼때
char text[] = "Hello";
Serial.write((byte*)text,6);
//(A)문자열을 널문자를 끼어서 그대로 전송하기
Serial.write("문자열"); //문자열전송
-----------------------------
//(A)의 확장버전으로 문자열 마지막에 캐리지리턴을 붙힌다
Serial.print("문자열"); //"문자열\r" : 종료문자가 CR이다!
Serial.println("문자열"); //"문자열\r\n" : 종료문자가 CRLF이다!
(예제목차)
1.마스터에서 슬레이브에게 1초간격으로 문자열 데이터를 전송하시오!("Nockanda!") 길이가 가변적인경우
2.길이가 고정되어있는 int변수에 있는 값을 전송하시오!(문자열로 처리하는게 아니라 byte array로 전송하시오)
3.마스터에서 슬레이브에게 char 1개, int 1개, float 1개로 구성된 데이터를 한번에 전송하시오!(구조체 활용하기)
4.마스터가 슬레이브에게 "**********"라고 전송하면 "##########"라고 응답하도록 하시오!
5.마스터가 정수 2개를 전송하면 슬레이브는 숫자를 더해서 응답하시오!
6.마스터의 4번핀에 LED를 1개 연결하고 슬레이브가 오프라인이면 LED를 끄고 온라인이면 LED를 켜시오!
7.마스터에 5,6번핀에 버튼을 하나씩 연결하고 슬레이브에 4번핀에 LED를 연결한다음 마스터의 5번버튼을 누르면 슬레이브의 LED가 켜지고 6번을 누르면 꺼지도록 하시오!
8.슬레이브에 온습도센서가 4번핀에 연결되어있을때 온도와 습도값을 마스터쪽으로 읽어오시오!(dht11라이브러리필요)
-마스터는 "DHT11"이라고 전송하고 슬레이브는 온도와 습도값을 구조체에 담아서 응답한다!