산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 사물 인터넷 기술

Microchip의 RN487x Bluetooth 모듈을 사용한 센서 및 컨트롤

Bluetooth 모듈의 RN487x 제품군과 저전력 주변기기 프로젝트에 맞게 구성하는 방법에 대해 알아보세요.

소형 저전력 주변기기를 개발 중이라면 Bluetooth를 통신 계층으로 고려하고 있을 가능성이 큽니다.

표준이 발전함에 따라 Bluetooth 연결 장치가 확산되었습니다. 거의 모든 주변 장치 설계에 완벽한 SoC(시스템 온 칩)를 제공하는 하드웨어 모듈이 도입되었습니다. 북유럽 nrf52840이 좋은 예입니다. 시스템 코어는 32비트 프로세서와 다중 프로토콜 Bluetooth 라디오입니다. 이 코어는 필요한 모든 인터페이스로 둘러싸여 있습니다. GPIO, PWM, USB, SPI, I 2 S, 그리고 더 많은.

이 강력한 SoC 및 기타의 단점은 복잡성입니다. 이러한 SoC에 필요한 임베디드 소프트웨어를 만들고 통합하려면 상당한 학습 곡선과 개발 시간이 필요합니다.

그러나 가장 일반적인 유형의 주변 장치에는 더 간단한 대안이 있습니다. 주변 장치가 주로 원격 센서 또는 원격 제어이고 제한된 수의 채널(아날로그 및 디지털)이 있는 경우 Microchip에서 제조한 RN487x 모듈을 사용하여 목표를 달성할 수 있습니다.

이 2개의 Bluetooth 모듈 제품군은 다중 동시 양방향 디지털 및 아날로그 채널을 제공합니다. 모듈은 NVRAM 모듈에 약간의 구성을 저장하는 것만으로 특정 설계에 맞게 조정됩니다. 단순함에도 불구하고 모듈은 여전히 ​​BLE(Bluetooth Low Energy) 표준을 준수하므로 최신 스마트폰과 같은 최신 Bluetooth 클라이언트와 호환됩니다.

이 시리즈에서는 RN487x 모듈을 사용하여 시연합니다. 네 가지 작업 각각에 대해 기능적인 Bluetooth 연결 주변 장치를 만들 것입니다. 디지털 센서, 디지털 제어, 아날로그 센서 및 아날로그 제어. 각 예에는 공칭 회로와 RN487x에 필요한 구성이 포함됩니다. 주변 장치를 실행하기 위한 간단한 응용 프로그램 스크립트도 제공됩니다. 응용 프로그램 스크립트의 인터페이스 지점은 잘 문서화되어 있습니다. 이러한 주변 장치를 더 큰 디자인의 하위 시스템으로 통합할 수 있는 가능성을 극대화합니다.

디자인 개요

주요 인터페이스가 빨간색으로 표시된 '아날로그 센서' 예에 대한 그래픽 분석을 살펴보겠습니다.

주변기기와 통신하는 Linux 시스템의 표현

우리가 만들 세 가지 시스템 요소가 있습니다. 주변 장치의 경우 센서 신호를 제공하는 하드웨어를 만들어야 합니다. 이 예의 변환기. 다양한 아날로그 전압을 생성합니다. 사용자를 위해 데이터를 표시하는 응용 프로그램을 만듭니다. 이 예의 Python 스크립트입니다.

스크립트는 GATT API를 사용하여 주변기기와 정보를 주고 받아야 합니다. 또한 RN487x 모듈에서 일부 구성을 생성해야 합니다. 이 구성은 애플리케이션과 하드웨어 간의 데이터 흐름을 제어합니다.

구성 요소 선택

RN487x 제품군에는 두 가지 모듈이 있습니다. RN4870 및 RN4871. I/O용으로 제공되는 핀의 수와 유형이 다릅니다. 데이터시트와 사용자 가이드에서 이러한 제약 조건을 찾을 수 있지만 다소 흩어져 있습니다. 아래는 두 칩에 대한 핀 버짓의 재구성입니다. 이러한 배열을 통해 주변기기에 필요한 칩을 쉽게 확인할 수 있습니다.

c 모듈에서 세 가지 I/O 핀 유형을 사용할 수 있습니다.

유형 설명
ADC 아날로그 입력:입력 신호 레벨이 숫자 범위로 변환됩니다.
PWM 아날로그 출력:한 쌍의 숫자가 구형파로 변환됩니다. 숫자는 구형파의 주파수와 듀티 사이클을 제어합니다.
DIO 디지털 입력 또는 출력:디지털 입력의 경우 하이 또는 로우 신호 레벨은 각각 1 또는 0을 나타냅니다. 디지털 출력의 경우 그 반대입니다.

다음은 두 모듈의 핀 예산입니다.

RN4870

RN487x 데이터시트의 이미지

핀 이름/기능 P1_0 P1_1 P1_2 P1_3 P2_2 P2_3 P2_4 P2_5
ADC x x x x
PWM x x
DIO x x x x x

RN4871

RN487x 데이터시트의 이미지

핀 이름/기능 P1_2 P1_3
ADC x
PWM
DIO x x

이 표는 PWM이 필요하지 않고 하나 또는 두 개의 신호만 관리해야 하는 경우 4871을 사용한다는 것을 분명히 해야 합니다. 그러면 리소스가 절약됩니다. PWM이 필요하거나 2개 이상의 신호를 관리하려면 4870이 필요합니다. 아날로그 센서의 경우 아날로그 입력이 하나만 있으므로 4871이면 충분합니다. 신호를 모듈의 P1_2 핀에 연결합니다.

BLE 프로토콜 스택의 GATT(일반 속성) 프로필 레이어

몇 가지 실제 예제를 구현할 준비가 거의 되었습니다. 그러나 사용자 응용 프로그램을 작성하려면 주변 장치와 대화할 때 사용할 API를 보다 정확하게 이해해야 합니다.

모든 Bluetooth 저에너지 장치는 구조화된 데이터 교환을 위해 GATT(일반 속성) 프로필을 사용합니다. 이 모델에서 주변 장치는 간단한 데이터베이스를 보유하는 서버로 구성됩니다. 데이터베이스는 차례로 유용한 데이터를 나타내는 여러 변수를 보유합니다. Python 스크립트와 같은 애플리케이션은 GATT API를 사용하여 데이터베이스에 대한 이름 기반 쿼리를 만드는 클라이언트로 구성됩니다. API를 사용하여 데이터베이스에서 값을 읽고 데이터베이스에 값을 쓸 수 있습니다.

미리보기로 다음은 Python에서 두 가지 유용한 GATT API 메서드 호출입니다.

<사전>gatt_rq.connect() gatt_rq.write_by_handle(vh_light, str(바이트 배열([8]))

첫 번째는 주변 장치에 대한 연결을 설정하는 데 사용됩니다. 두 번째는 데이터베이스에 일부 값을 씁니다. 이 값은 주변 장치에서 즉시 디지털 출력으로 표현됩니다. '쓰기' 방법에 대한 첫 번째 인수는 제어하려는 디지털 출력과 관련된 핸들입니다. 기능적으로 완전한 예제에 필요한 몇 줄만 더 있습니다.

이 API는 iOS, Android, Windows 및 Linux에서 Bluetooth 서비스의 일부로 노출됩니다. 이 기사의 예제는 Python으로 작성되었으며 많은 일반적인 Linux 배포판에서 실행됩니다.

모듈 구성

위의 스크립트 메소드에서 'vh_handle' 매개변수는 이 디자인 패턴의 최종 요소로 우리를 이끕니다. 매개변수는 주변기기의 특정 물리적 레벨 신호에 대한 소프트웨어의 참조입니다. 그러나 이 데이터 경로는 어떻게 완료됩니까? 이를 수행하는 RN487x의 NVRAM에는 두 가지 구성이 있습니다. 특성 정의 및 핀 바인딩.

<울>
  • 특성 정의: 데이터베이스의 값을 위한 공간을 할당하고 각 값에 클라이언트 애플리케이션이 참조할 수 있도록 고유한 식별자를 제공하는 명령입니다.
  • 핀 바인딩: 물리적 신호를 데이터베이스 값으로 또는 그 반대로 변환하는 스크립트.
  • RN487x 구성은 사용자 정의 명령 언어를 사용하여 모듈에 로드됩니다. 모듈에 콘솔 연결 및 구성 명령 실행에 대한 일반 가이드는 부록을 참조하십시오.

    이러한 명령을 실행한 후 RN487x 내의 비휘발성 구성은 다음과 같습니다.

    모든 데이터 값은 '서비스'와 '특성'의 2단계 계층 구조 내에 존재합니다. 이 조직은 우리가 필요로 하는 것 이상이지만 논리적으로 분리된 서비스 내에 여러 센서와 컨트롤이 존재하는 복잡한 시스템에 유용합니다.

    <시간 />

    이것으로 RN487x 모듈에 대한 3부작 시리즈 중 1부를 마칩니다. 파트 2와 3에서는 동일한 디자인 패턴을 활용하여 디지털 입력, 디지털 컨트롤, 아날로그 센서 및 아날로그 컨트롤을 생성합니다.

    4부에는 모든 예에 적용되는 추가 연구 주제도 포함되어 있습니다.

    아래에서 다른 기사에서 뒤따를 각 프로젝트 설명 전에 모듈을 구성하고 사용하기 위한 정보의 부록을 찾을 수 있습니다.

    콘솔 연결을 사용하여 RN487x 구성

    RN487x를 구성하려면 먼저 모듈에 전원을 공급하고 모듈과 워크스테이션 사이에 직렬 연결을 설정하십시오. 각 데모 회로에는 필요한 RX, TX 및 GND 신호를 노출하는 3핀 '프로그' 점퍼가 있습니다. 워크스테이션에 연결하는 방법을 잘 모르겠다면 여기에서 훌륭한 가이드를 볼 수 있습니다.

    워크스테이션에서 터미널 에뮬레이터를 시작합니다. 특히 적합하고 널리 사용되는 에뮬레이터 중 하나는 대부분의 Python 환경에 포함된 'miniterm' 유틸리티입니다. 워크스테이션 셸에서는 다음과 같이 시작할 수 있습니다.

    파이썬 -m serial.tools.miniterm --eol LF /dev/ttyUSB0 115200

    이 예는 Linux 시스템에 적합한 포트 이름(/dev/ttyUSB0)을 보여줍니다. 포트 이름의 형식은 다른 운영 체제에 따라 다릅니다. 모듈의 기본 전송 속도는 115200이며 변경할 이유가 거의 없습니다.

    RN487x 모듈은 기본적으로 DATA 모드에 있습니다. 명령 모드가 필요합니다. 이 모드는 터미널 에뮬레이터 응용 프로그램에서 세 개의 달러 기호 문자('$$$')를 입력하여 활성화됩니다. 터미널 창에 문자가 표시되지 않지만 결과는 RN4871에서 반환된 명령 프롬프트여야 합니다.

    CMD>

    'd' 키를 누른 다음 'enter' 키를 눌러 보십시오. 결과적으로 다음과 같이 표시되어야 합니다.

    <사전>CMD> BTA=D88039F80080 이름=RN_BLE 연결됨=아니요 인증=2 기능=0000 서비스=00 명령>

    이것은 모듈 상태에 대한 최소한의 설명입니다. 명령 인터프리터는 입력한 문자('d')를 표시하지 않습니다. 이 문제를 해결하려면 '에코'를 켜야 합니다. '+' 키와 'Enter' 키를 차례로 누르면 됩니다. 기기는 다음과 같이 응답해야 합니다.

    CMD> 에코 ON 명령>

    이제 이 프로젝트의 나머지 부분에서 설명하는 다양한 구성 작업을 완료할 수 있습니다. 예를 들어 서비스를 생성하려면 한 줄에 완전한 'PS' 명령을 입력한 다음 'Enter' 키를 입력하기만 하면 됩니다. 예:

    CMD> PS,59c88760536411e7b114b2f933d5fe66 AOK

    또한 각 프로젝트 구성에서는 여러 줄 스크립트가 모듈 NVRAM에 커밋되어야 합니다. 이러한 유형의 다중 행 명령은 약간의 설명이 필요합니다. 'WW' 명령으로 스크립트 입력을 시작한 다음 'enter'를 입력합니다. 그런 다음 각 스크립트 줄을 입력합니다. 마지막 줄을 포함하여 각 스크립트 줄도 'Enter' 키로 종료됩니다.

    마지막으로 'esc' 키를 눌러 스크립트를 커밋합니다. 예:

    <사전>CMD> www @CONN |O,08,72 확인 명령>

    모듈의 공통 초기화

    이 프로젝트의 예제 중 하나에 RN487x 모듈을 사용했거나 완전히 다른 용도로 모듈을 사용했으며 다른 예제에 대해 모듈을 구성하려는 경우 모듈에 일부 구성이 있을 수 있습니다. 다음 용도와 충돌합니다.

    이 프로젝트의 모든 예에 앞서 다음 단계를 수행해야 합니다.

    <울>
  • 기존 스크립트를 삭제합니다.
  • 스크립트 처리를 활성화합니다.
  • 기존 서비스/특성 정의를 삭제합니다.
  • 우리가 사용하는 핀(P1_2, 인덱스 0A)에서 모든 특수 기능을 제거합니다.
  • 모듈을 재부팅합니다.
  • 이전 부록 섹션을 사용하여 모듈 명령 셸에 도달합니다. 그런 다음 다음 명령 시퀀스를 사용하여 필요한 초기화를 수행합니다.

    <예비>CMD> 화장실 확인 CMD> SR,0040 확인 CMD> PZ 확인 CMD> SW,0A,00 확인 명령> R,1 재부팅 중

    예제 Python 스크립트를 실행하는 데 필요한 Linux 설정

    하드웨어

    물론 이러한 스크립트를 실행하는 시스템에는 BLE(Bluetooth Low Energy)를 지원하는 하드웨어가 필요합니다. BLE는 버전 4에서 도입되었으므로 Bluetooth 하드웨어가 이보다 낮은 버전을 지정하는 경우 이 예제에서는 작동하지 않을 수 있습니다.

    이 예제를 시도하기 위해 워크스테이션용 USB 어댑터를 구입하려는 경우 Qualcomm CSR8510 을 사용하는 어댑터를 사용하는 것이 좋습니다. 여기에서 하나의 인스턴스를 구매할 수 있습니다.

    소프트웨어

    이 설정은 Debian 10용으로 확인되었습니다. Ubuntu와 같은 Debian 기반 배포판에 적용할 수 있어야 합니다. Debian 10에는 기본적으로 설치되지 않는 이 예제에서 직접 액세스하는 두 가지 구성 요소가 있습니다.

    <울>
  • Bluetooth 스택에 액세스하기 위한 Python 모듈입니다. 이 구성 요소는 패키지 관리 시스템을 통해 사용할 수 있으며 이름은 'python-bluez'입니다.
  • Bluetooth GATT 호출을 위한 Python 모듈. 가트립'. 이 구성 요소는 Python 공식 패키지 색인('pip' 유틸리티를 통해)에서 사용할 수 있습니다.
  • 'gattlib'의 'pip' 설치는 ELF 라이브러리를 빌드합니다. 이 프로세스에는 일부 도구와 라이브러리도 필요합니다.

    이 모든 것을 종합하면 시스템 패키지 관리자에서 패키지 목록을 요청한 다음 'pip'에 대한 단일 모듈 요청을 요청해야 합니다. 이러한 작업을 완료하기 위한 스크립트가 여기에 제공되었습니다. 스크립트를 실행하도록 선택한 경우 다운로드 후 '실행' 권한을 부여해야 합니다.

    참조

    <울>
  • RN487x 데이터시트
  • RN487x 사용 설명서
  • Windows의 GATT API
  • iOS의 GATT API
  • 파이썬의 GATT API
  • 이 프로젝트 시리즈의 다음 부분을 다시 확인하십시오. 여기에서 완전한 예제를 만들 것입니다.

    프로젝트 1 및 2로 이동:디지털 입력 및 디지털 제어 구축


    사물 인터넷 기술

    1. 셀룰러 IoT와 Bluetooth LE의 시너지
    2. Bluetooth Mesh로 설계:칩 또는 모듈?
    3. Contrinex:Bluetooth 인터페이스가 있는 클라우드 지원 스마트 센서 및 안전 라이트 커튼
    4. ADLINK:Edge AI 솔루션 및 NVIDIA EGX 플랫폼을 사용하여 Edge에서 클라우드로 AI 배포
    5. Raspberry Pi에서 아날로그 입력이 없는 아날로그 센서
    6. Raspberry Pi 및 Zabbix Supervisor로 아날로그 센서 읽기
    7. 데이터로 무엇을 해야 합니까?!
    8. 에지에서 클라우드 및 클라우드로 IoT 데이터 활용
    9. 디지털화 및 식음료 산업
    10. The Edge and IoT:Insights from IoT World 2019