제목 RE: BLE 통신 문의
작성자 firmtech7
이메일
작성일자 2023-09-18
조회수 32
추천수 0
안녕하십니까 펌테크입니다.
1)Paring이라고 말씀하시는 내용이 Central 장치에서 Peripheral 장치를 검색 후
연결을 진행하는 동작을 말씀하는 것이면 BLE 제품 또한 위와 같은 과정이 필요합니다.
BDR, BLE 제품은 모두 연결의 진행은 Peripheral(Slave)장치가 검색/연결 대기 동작을 하고
Central(Master) 장치는 검색/연결 대기 동작을 하는 Peripheral(Slave)장치를 검색하여
Peripheral(Slave)장치에 연결 요청을 하여 Peripheral(Slave)장치와 연결이 이뤄집니다.
문의하신 방법대로 통신을 진행하시려면 다음과 같은 방법으로 진행하시기 바랍니다.
1.FBL701BC를 각각 Central과 Peripheral로 설정합나다.
2.FBL701BC Peripheral이 Advertising 동작을 하면 FBL701BC Central에서 연결을 진행하는
AT Command "ATDxxxxxxxxxxxx,0"을 입력 Peripheral과 연결을 진행합니다.
3.장치간 연결을 종료 시킨 다음 Central장치에 AT Command "AT+BTMODE=2"를 입력 후
AT Command "ATZ"를 입력하여 Central 장치의 Connection Mode를 Mode2로 설정합니다.
FBL701BC Central장치는 Connection Mode4에서 AT Command를 이용하여 Peripheral 장치와
연결을 진행하면 연결한 장치의 BD Address를 저장합니다. 이후 Connection Mode2로 변경하면
마지막으로 연결 되었던 Remote BD Address을 가진 장치에 연결 시도 동작을 진행합니다.
다만 여러대 A카트의 장치가  1대의 B장치에 연결이 진행되야 하면 AT Command로
연결을 진행하지 말고 바로 Connection Mode2로 변경하시면 주변의 Advertising 동작을 하는
Peripheral 장치 중에 Firmtech Serial Service로 동작하는 Peripheral를 검색하여 연결을 진행합니다.
Remote BD Address의 확인은 AT Command "AT+BTREMOTE?"로 확인 가능합니다.
자세한 사항은 https://drive.google.com/file/d/1HHEYoK-KSOxzhuIJ9wNeS4npf8WSHk7q/view의
FBL701BC User Manual을 참고하시기 바랍니다.

2)Central과 Peripheral이 연결이 되면 A카트의 아두이노에서 전달한 데이터는
Peripheral 장치를 통해 Central로 송신이 되고 Central 장치에서는 수신한 데이터를
CP2102에 전달하여 시리얼 통신프로그램인 Teraterm을 통해 PC에서 확인 가능합니다.

3)FBL701BC Central의 AT Command "AT+WRITEHxxxx"는 특정 Protocol을 송신하는
AT Command가 아니라 연결된 Peripheral의 Value Handle를 이용 Value Write를
진행하는 AT Command입니다. 예를 들어 연결된 Peripheral의 Value Handle 0x0025에
1234라는 Value를 Write 하려면 "AT+WRITEH00251234"를 입력하시면 됩니다.
시리얼 데이터의 경우 입력하는 시리얼 데이터는 HEX 타입이며
입력 가능한 시리얼 데이터의 길이는 20Byte 입니다.
또한 Teraterm의 경우 수신된 데이터의 출력은 Character 타입이며
수신된 데이터가 HEX 타입이면 정상적인 출력이 불가능 할 수 있습니다.
자세한 사항은 https://drive.google.com/file/d/1HHEYoK-KSOxzhuIJ9wNeS4npf8WSHk7q/view의
FBL701BC User Manual을 참고하시기 바랍니다.
확인 부탁 드립니다.

감사합니다.
좋은 하루 보내세요.

------- 원본 내용 ---------


안녕하세요


귀사 fbl710bc 제품 사용 중 질문이 있어 연락드렸습니다.
현재 아래와 같은 간단한 프로젝트를 진행 중입니다.


 PROJECT 내용
   A라는 카트가 특정 위치에 가면 B 장치의 문이 열리고, (특정 센서에 의해 알아서 열림)
   A카트가 C라는 특정 임무를 수행 하면 B 장치에 문을 닫으라고 명령을 보내야 함.
   A라는 카트는 공장 내부를 왔다갔다 하면서 B 장치에 하루에 수십번씩 왔다 갔다 할 예정


저희는 A라는 카트를 만들고 있고,
B 장치를 제작하는 회사에서는 BLE를 통해 자신이 알려준 PROTOCOL을 쏴달라고 합니다.


블루투스 2.0 사용경험은 몇번 있으나 BLE 사용 경험이 없어 질문 드립니다.
제가 BLE 개발 경험이 전무하여 잘못 된 질문일 수도있겠지만 양해 부탁드리며, 답변 부탁드리겠습니다.




1) 페어링 문제
 블루투스 2.0은 반드시 페어링 과정이 있어야만 서로 송수신이 가능한데,
 구매한 fbl710bc  BLE 의 경우 페어링 과정이 없어도 특정 PROTOCOL을 쏘면 Central이 해당 PROTOCOL을 받을 수 있는것인가요?


 제가 이해한 바로는 "B 장치에 장착된 Central BLE가 Standby mode로 대기하고 있고, A카트가 가까이 오면 알아서 CONNECTION이 되고
 A카트가 C라는 특정 임무후 A카트의 Peripheral이 본 프로젝트에 필요한 특정 PROTOCOL을 송신하면
 해당 PROTOCOL을 페어링 과정 없이 받는다."
 라고 이해가 됩니다. 제가 이해하고 접근하게 맞는지 궁금합니다.


 이게 맞다면 아래 순서로 통신 메커니즘이 돌아간다고 이해 됩니다.
    - Central과 Pheripheral을 1:1로 사전에 매칭 등록 (CONNECT E6A5CD63B95D,0) 해야함 (1번만 하면 됨)
    - A카트에 장착된 FBL710BC(Pheripheral)은 별도 작업 하지 않아도 Advertising mode로서 자신의 정보를 2초 주기로 쏨
    - 이때 A카트가 B장치의 FBL710BC(Central)과 10M이내 영역에 있으면 두 BLE가 Connection이 자동으로 되고,
    - A카트에서 C라는 작업 후 A카트의 PC에서 특정 PROTOCOL을 UART를 통해 FBL710BC(pheripheral)이 송신하면
    - B장치의 Central에 PROTOCOL이 수신 된다.
    - A카트와 B 장치가 멀어지면 알아서 두 BLE 통신이 두절 되고, A카트의 BLE는 Advertising mode로 변경됨
    - 다시 A카트와 B장치와 가까워지면 CONNECT 되어 위 내용 반복


 이렇게 이해가 됩니다. 제가 잘 접근 한것인지 궁금합니다.  (당연히 Baudrate 는 매칭)




2) 위 TEST 내용이 맞다면 같이 구성 하려고 합니다.
     - Pheriperal 측
        A PC - 아두이노 - FBL710BC (Pheriperal)
           * 아두이노에서 시리얼 PROTOCOL 값을 RXTX로 입력하여 FBL710BC(Pheriperal)가 송신하도록 함.


     - Central 측
        B PC - USB TO UART 컨버터(펌테크 인터페이스보드와 동일한 CP2102 CHIP 사용) - FBL710BC (Pheriperal)


        A PC에 연결된 아두이노를 통해 특정 PROTOCOL을 송신
        B PC의 Central 측 tera term을 통해 PROTOCOL 수신 값 확인


3) AT COMMAND 문의
 특정 PROTOCOL을 날리기 위해선 AT+WRITEHXXXXXXXXXX
 의 COMMAND로 값을 날리도록 되어있습니다.
 제가 업체로 부터 받은 PROTOCOL은 아래와 같이 헤더 , DATA , CHECK SUM 등의 데이터인데
 예를 들어 프로토콜을 RX TX UART로 날리면  AT+WRITEHXXXXXXXXX COMMAND로 작동 되어 PROTOCOL이 전송 되는지 궁금합니다.


  sensor_data[0] = 0xb7;       
                sensor_data[1] = 0xb8;       
                sensor_data[2] = 0x55;             
                sensor_data[3] = 0xb5;         
                sensor_data[4] = 0xff;
                serial.write(sensor_data, 30);




긴글 읽어주셔서 정말 감사합니다.
 
       
IP ..xxx.xxx
이름 비밀번호
※ 한글 1000자 까지만 입력가능 :