원격 Arduino와 컴퓨터 간의 데이터 통신이 수월한 프로젝트를 진행 중입니다. 무선 연결은 한 쌍의 XBees를 통해 이루어 지므로 Arduino와 컴퓨터 사이에 RS232 링크가 있습니다. 소량의 데이터의 경우 간단한 통신 프로토콜을 쉽게 모을 수 있습니다. 더 큰 프로젝트의 경우 좋은 간단한 통신 프로토콜은 무엇입니까?
나는 가능한 옵션처럼 보이는 MODBUS를 보았지만 더 나은 옵션이 있는지 확인하고 싶었습니다.
원격 Arduino와 컴퓨터 간의 데이터 통신이 수월한 프로젝트를 진행 중입니다. 무선 연결은 한 쌍의 XBees를 통해 이루어 지므로 Arduino와 컴퓨터 사이에 RS232 링크가 있습니다. 소량의 데이터의 경우 간단한 통신 프로토콜을 쉽게 모을 수 있습니다. 더 큰 프로젝트의 경우 좋은 간단한 통신 프로토콜은 무엇입니까?
나는 가능한 옵션처럼 보이는 MODBUS를 보았지만 더 나은 옵션이 있는지 확인하고 싶었습니다.
답변:
OP는 " 데이터가 많지 않고 속도가 큰 문제가되지 않는 "상황에 대한 직렬 프로토콜을 요청합니다 . MODBUS는 OP에서 언급되었습니다. RS-485를 통한 MODBUS는 빠른 프로토콜이 아닙니다. 이것은 사양이 아니지만 틈새 시장에 대한 아이디어를 제공합니다.
이 틈새 시장에 대한 두 가지 일반적인 표준 프로토콜 만 생각할 수 있습니다.
임베디드 프로그래머가 OP와 같은 상황에 처할 때 종종 자체 직렬 통신 프로토콜을 처음부터 설계합니다.
일부 임베디드 시스템 프로토콜은, 그들 중 몇 가지 매우 단순 나열됩니다 임베디드 시스템 : 공통 프로토콜을 포함 :
아마도 이러한 프로토콜 중 하나는 현재 상태 그대로 또는 약간의 조정만으로도 적합 할 것입니다.
나는 당신 자신의 투표를하고 가능한 한 간단하게 유지합니다.
나는 내가 그 다양한 제어 애플리케이션을위한 직렬 프로토콜을 많이, 그리고 몇 가지 처리 한 수 당신이 포함하는 것이 좋습니다 :
매우 기본적인 예로 데이터를 ASCII 문자로 변환하고 다음과 같이 시작 / 중지 문자 안에 넣을 수 있습니다.
바이트 값 0x7A를 보내려면 전송 된 데이터는 (7A)가됩니다. 여기서 ()는 선택된 시작 / 중지 문자이고 7과 A는 두 개의 ASCII 문자입니다. OK는 많은 오버 헤드를 추가하지만 기본 터미널 소프트웨어로 디버깅 할 수 있음을 의미합니다.
데이터가 XBees를 통과하는 경우 이스케이프 문자를 사용하여 모듈을 API 모드로 설정하고 데이터를 논리 패킷으로 나누고 API 모드에서 XBee에 제공되는 패킷이 그대로 도착하거나 도착한다는 사실을 이용해야합니다. 전혀. 1-255 바이트의 청크 전송에 관한 프로토콜을 설계하고 XBee 모듈이 각 청크 내에서 데이터를 전달하는 방법에 대해 걱정하게하십시오. 개별 패킷의 무결성을 유지하거나 그 사이의 세분화에 대해 걱정하지 마십시오. Digi 모듈은이를 잘 처리 할 것입니다. 가장 걱정할 점은 패킷을 전송하는 노드가 패킷이 배달되지 않았다고 믿고 교체를 보낸다고하더라도 수신자가 어쨌든 교체를받은 후에도 수신 할 수 있다는 사실입니다. 한 쪽이 "마스터"가되도록 프로토콜을 디자인하면 상황이 가장 쉬울 수 있습니다. 마스터가 데이터를 요청하면 슬레이브는 데이터를 한 번 전송해야하며 마스터가 데이터를 가져 오는지 걱정하지 않아도됩니다. 마스터가 원하는 데이터를 얻지 못하면 다시 요청할 수 있습니다.
슬레이브는 데이터에 일종의 시퀀스 번호를 할당해야하며 마스터는 슬레이브가 상태를 변경하도록 요청에 시퀀스 번호를 할당해야합니다. 마스터의 요청이 "시퀀스 번호가 XXX보다 큰 첫 번째 항목 보내기"형식이고 슬레이브의 각 데이터 항목에는 고유 한 시퀀스 번호와 이전 항목의 시퀀스 번호가 포함되어있는 경우 (연속적으로 번호가 매겨지지 않은 경우) ), 도착 지연 패킷은 슬레이브가 마스터에 데이터를 중복 전송하도록 할 수 있지만, 마스터는 결과적인 도착 지연 응답을 무시하는 데 어려움이 없습니다. 슬레이브가 시퀀스 번호가 이전 요청보다 낮은 상태 변경 요청을 수신하면 해당 요청은 수신되기 전에도 대체되었으므로 해당 요청을 무시해야합니다.
나는 이것과 비슷한 질문을했고 작은 AVR 등을 위해 간단하고 작은 것을 찾지 못했습니다. 그래서 CAN에서 영감을 얻은 것을 굴 렸습니다. MIN (Microcontroller Interconnect Network)이라고합니다.
https://github.com/min-protocol/min
나는 그것에 대해 블로그에 올렸습니다 :
https://kentindell.wordpress.com/2015/02/18/micrcontroller-interconnect-network-min-version-1-0/
블록 데이터에는 후크가 있지만 대부분 센서 / 액추에이터 용 신호를 목표로합니다. MIN 프레임 내에서 신호와 그 패킹을 설명하기 위해 JSON 형식을 정의했으며이를 사용하는 Wireshark dissector를 얻을 수 있기를 바랍니다.