산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Helium, Azure IoT Hub 및 Power BI를 사용한 GPS 추적

구성품 및 소모품

헬륨 원자 프로토타이핑 모듈
× 1
Arduino Zero
× 1
Adafruit Ultimate GPS 브레이크아웃
× 1
브레드보드(일반)
× 1

앱 및 온라인 서비스

Microsoft Azure
Arduino IDE

이 프로젝트 정보

이 프로젝트에 대해

Helium은 개발자가 저전력의 안전한 연결된 장치를 구축하는 데 도움이 됩니다. 이 프로젝트에서는 Arduino Zero 및 Adafruit Ultimate GPS Breakout과 함께 Helium Atom Prototyping 모듈을 사용하여 데이터를 Azure IoT Hub로 원활하게 보낸 다음 Power BI 보고서로 보내 데이터를 시각화하는 방법을 살펴보겠습니다.

Helium의 저전력, 안전한 장거리 무선 제품에 대해 자세히 알아보고 필요한 모든 하드웨어를 helium.com/store에서 구입할 수 있습니다.

하드웨어

가장 먼저 해야 할 일은 Helium Atom Prototyping 모듈을 Helium Atom Arduino 어댑터에 연결한 다음 Arduino에 연결하는 것입니다. 이 가이드에서는 Arduino Zero를 사용하고 있지만 Uno, Due, M0 또는 원하는 다른 Arduino를 사용할 수 있습니다.

Atom을 Arduino에 연결하고 나면 다음과 같이 표시되어야 합니다.

다음으로 Adafruit Ultimate GPS Breakout을 Arduino 샌드위치에 부착해야 합니다. 여기서는 일을 더 쉽고 명확하게 하기 위해 브레드보드를 ​​사용할 것이지만 GPS 브레이크아웃을 Arduino에 직접 쉽게 연결할 수도 있습니다. 배선은 다음과 같은 형식이어야 합니다.

Arduino 5v -> GPS VIN

아두이노 GND -> GPS GND

Arduino D12 -> GPS TX

Arduino D10-> GPS RX

완료되면 다음과 같이 표시됩니다.

자, 이제 Arduino 측 설정이 완료되었으므로 헬륨 요소를 연결하고 전원을 켜야 합니다. Cellular Element가 있는 경우 전원을 켜고 표시등이 청록색으로 변할 때까지 기다리기만 하면 됩니다. 그게 다야 이더넷 요소가 있거나 셀룰러 요소에 이더넷 연결을 사용하려는 경우 요소의 이더넷 포트를 케이블 모뎀이나 무선 라우터 뒷면과 같은 DHCP 지원 포트에 연결합니다. Element의 전원을 켜고 Element 전면의 표시등이 녹색으로 바뀌면 사용할 수 있습니다.

이제 Arduino와 Atom 하드웨어 설정이 완료되었고 Element의 전원이 켜지고 연결되었으므로 Helium Dashboard에서 이 모든 것을 설정할 차례입니다.

헬륨 대시보드 및 채널

먼저 대시보드의 사용자 계정에 Atom과 Element를 추가해야 합니다. 사용자 계정은 없지만 장비가 있는 경우 [email protected]으로 이메일을 보내주십시오. 그렇지 않으면 Helium에서 하드웨어를 구입할 때 받은 자격 증명으로 로그인하십시오.

로그인하면 먼저 요소를 활성화해야 합니다. 요소 클릭 왼쪽에서 새로 추가 오른쪽 상단에서 올바른 위치로 이동합니다. MAC의 마지막 4개를 입력합니다. 주소 및 HVV 요소 뒷면의 레이블에서 이름을 지정하고 선택적으로 일부 태그를 추가합니다. 요소 활성화를 클릭합니다. 진행합니다.

그런 다음 Atom에 대해 동일한 프로세스를 반복해야 합니다. 다시 Atoms를 클릭합니다. 왼쪽의 새 항목 추가 , MAC 공급 및 HVV Atom 레이블에서 선택적으로 일부 태그를 추가하고 Atom 활성화를 클릭합니다. .

다음으로 모든 Helium Atom 디바이스에 대해 Azure에 대한 수집 지점 역할을 하는 Azure IoT Hub를 만들어야 합니다. Azure 계정이 이미 있는 것으로 가정하고 없으면 계정을 만들어야 합니다.

Azure에 로그인하면 IoT Hub를 만들 것입니다. +를 클릭합니다. 왼쪽 상단에서 사물 인터넷 , IoT Hub :

IoT Hub를 설정하는 방법을 선택한 다음 만들기를 눌러야 합니다. 대시보드에 고정을 선택하는 것이 좋습니다. 나중에 쉽게 찾을 수 있도록 하단에:

완료하고 허브 배포가 완료되면(몇 분 정도 소요될 수 있음) 대시보드에서 허브를 클릭합니다. 헬륨 채널을 설정하려면 허브 내에서 한 조각의 정보가 필요합니다. IoT Hub 내에서 공유 액세스 정책을 선택합니다. 왼쪽에서 RegistryReadWrite를 선택합니다. 을 클릭한 다음 연결 문자열 - 기본 키 옆에 있는 복사 아이콘을 클릭합니다. 오른쪽으로. 이렇게 하면 연결 문자열이 Helium 대시보드에서 다시 사용할 클립보드에 복사됩니다. 이 문자열을 신뢰할 수 없는 사람과 공유하지 않도록 주의하십시오. (이 예에서는 임시 허브를 사용하고 있습니다.)

Helium 대시보드로 돌아가서 이제 방금 만든 Azure IoT Hub에 매핑되는 채널을 만들어야 합니다. 먼저 채널을 클릭합니다. 왼쪽에서 Azure IoT Hub를 클릭합니다. 새 채널 만들기 아래 . 연결 문자열에 붙여넣겠습니다. Helium에 채널을 만들기 위해 Azure에서 복사했습니다.

채널 이름을 지정한 다음 만들기를 누르세요. . 이 채널에 데이터를 보내려면 Arduino 코드에서 이름이 필요하므로 이름을 기억하는 것이 중요합니다.

아두이노 스케치

Azure IoT Hub가 설정되고 Helium 채널이 생성되었으므로 이제 Helium Arduino 및 Adafruit GPS 라이브러리를 사용하여 GPS 위치를 Helium으로 보낸 다음 새로 생성된 Azure 채널로 보내는 적절한 Arduino Sketch가 필요합니다.

먼저 Arduino IDE에 설치된 Helium Arduino 라이브러리와 Adafruit GPS 라이브러리가 모두 필요합니다. 이를 수행하는 가장 쉬운 방법은 스케치 -> 라이브러리 포함 -> 라이브러리 관리로 이동하는 것입니다. IDE 내에서 메뉴를 열고 Helium을 모두 검색합니다. 및 Adafruit GPS 설치를 누르세요. .

아래 스케치는 Atom을 초기화하고 Azure IoT Hub와 일치하는 채널을 만듭니다. 이전 단계에서 생성한 채널은 Adafruit GPS 보드에서 GPS 데이터를 수집하고 JSON으로 형식화한 다음 Helium 네트워크를 통해 전송합니다.

여기에 Helium Atom Arduino 라이브러리에 대한 자세한 내용과 가이드가 있습니다.

/* * Copyright 2017, Helium Systems, Inc. * All Rights Reserved. 라이선스 정보는 LICENCE.txt 참조 */ #include "Arduino.h" #include "avr/dtostrf.h" #include "Helium.h" #include  #include  #include "wiring_private .h" // pinPeripheral() 함수 #define atom_serial Serial1//GPS용 #define PIN_SERIAL2_RX(34ul) // D12의 PIO_SERCOM에 대한 핀 설명 번호 #define PIN_SERIAL2_TX(36ul) // D10의 PIO_SERCOM에 대한 핀 설명 번호 #define PAD_SERIAL2_TX (UART_TX_PAD_2) // SERCOM 패드 2 #define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) // SERCOM 패드 3 Uart Serial2(&sercom1, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX, PAD_SERIAL2_TX); }헬륨 헬륨(&atom_serial); 채널 채널(&helium);//GPS 물건 #define gps_serial Serial2 Adafruit_GPS GPS(&gps_serial);void setup() { pinPeripheral(10, PIO_SERCOM); pinPeripheral(12, PIO_SERCOM); Serial.begin(115200); Serial.println("시작"); // Helium Atom과 통신 시작 // 보드 속도는 지원되는 보드에 따라 다릅니다. // 이는 Board.h에 ​​설정되어 있습니다. helium.begin(helium_baud_b115200 ); // Atom을 헬륨 네트워크에 연결합니다. Serial.print("Connecting - "); int 상태 =helium.connect(); 동안 (상태 !=helium_status_OK) { 상태 =helium.connect(); } Serial.println("성공"); // 채널과 통신을 시작합니다. // 한 번만 수행하면 됩니다. // // 참고:Helium Dashbaord int8_t 결과에서 일치하는 채널을 생성했는지 확인하십시오. Serial.print("채널 생성 - "); status =channel.begin("해커 가이드", &result); if (helium_status_OK ==상태 &&결과 ==0) { Serial.println("성공"); } else { Serial.println("실패"); } 지연(1000); //GPS 초기화 GPS.begin(9600); GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); GPS.sendCommand(PGCMD_NOANTENNA); 지연(2000); }uint32_t 타이머 =millis(); 무효 루프() { 문자 c =GPS.read(); if (GPS.newNMEAreceived()) { if (!GPS.parse(GPS.lastNMEA())) 반환; } if (타이머> millis()) 타이머 =millis(); if (millis() - 타이머> 2000) { 타이머 =millis(); // 타이머 재설정 if (GPS.fix) { char lat[10]; 차론[10]; 문자 데이터[100]; dtostrf(GPS.latitudeDegrees, 4, 4, 위도); dtostrf(GPS.longitudeDegrees, 4, 4, lon); // Azure로 보낼 lat/lon의 JSON 개체 형식 지정 sprintf(data, "{\"lat\":\"%s\", \"lon\":\"%s\"}", lat, 론); // 위치 데이터를 구성된 채널로 전송 int8_t result; //헬륨 라우터의 응답 Serial.print("Sending - "); int 상태 =channel.send(data, strlen(data), &result); //status는 Atom 직렬 연결의 응답입니다. if (helium_status_OK ==status &&result ==0) { Serial.print("Successfully sent "); Serial.println(데이터); } else { Serial.println("실패"); } } else { Serial.println("GPS 수정이 없습니다!"); } } }  

라이브러리가 설치된 상태에서 새 스케치를 만듭니다(파일 -> 새로 만들기 Arduino IDE 내에서) 위의 코드를 붙여넣습니다. USB를 통해 Arduino/Atom 샌드위치를 ​​연결하고 업로드를 누르세요. 오른쪽 화살표처럼 보이는 버튼입니다.

몇 초 후에 Atom 표시등이 빨간색과 파란색으로 깜박이기 시작한 다음 안정적인 빨간색 깜박임 패턴으로 안정되는 것을 볼 수 있습니다. 이것은 Atom이 이제 Helium 네트워크에 연결되었음을 의미합니다. GPS 수정 표시등도 느린 빨간색 패턴으로 깜박여야 합니다. 이 작업이 중지되면 GPS 모듈이 위치를 수정하고 헬륨으로 데이터를 보내기 시작합니다. GPS를 창 가까이에 두거나 이상적으로는 완전히 바깥에 두는 것이 도움이 됩니다.

직렬 모니터를 확인할 수 있습니다. (도구 -> 직렬 모니터 ) 디버그 출력을 보려면 Arduino IDE 내에서. 연결, 채널 생성 및 No GPS fix! 시퀀스를 보여주는 메시지가 표시되어야 합니다. 위성 수정을 받을 때까지 메시지를 보냅니다.

데이터가 올바르게 전송되고 있는지 확인

이제 Arduino, Atom 및 GPS가 실행 중이므로 Helium 대시보드로 돌아가서 데이터가 Azure 채널에 도달하는지 확인할 수 있습니다.

채널 클릭 왼쪽에서 활성 채널에서 이미 만든 Azure 채널을 선택합니다. 섹션에서 세부 정보 보기로 이동해야 합니다. 여기에서 아래로 스크롤하면 이벤트 로그가 표시되어야 하며, 여기서 아래 스크린샷과 같은 내용을 볼 수 있기를 바랍니다. 여기에는 데이터의 타임스탬프와 크기와 함께 Azure로 성공적으로 라우팅되었는지 여부에 대한 보고가 표시됩니다.

장치 탐색기 아래에서 Azure IoT Hub를 살펴보면 탐색에서 MAC 주소 아래에 나열된 Helium Atom 장치도 확인해야 합니다. 또한 이를 클릭하면 하드웨어 서명 X509 인증서를 사용하여 구성할 필요 없이 이 장치를 자동으로 보호했음을 확인할 수 있습니다.

Power BI로 데이터 가져오기

Power BI 계정이 이미 설정되어 있고 작업 영역이 이미 만들어졌다고 가정하겠습니다. (그렇지 않다면 www.powerbi.com으로 이동하여 설정하세요.)

Power BI 계정 설정을 사용하면 이제 Azure IoT Hub에서 데이터를 가져와 Power BI로 전달하는 Azure Stream Analytics 작업을 만들어야 합니다.

Azure 대시보드 내에서 새로 만들기를 클릭합니다. 왼쪽 상단에서 Stream Analytics 작업을 검색합니다. , 표시되면 선택합니다. 만들기를 클릭합니다. 왼쪽 하단에서 옵션을 선택하고 만들기를 눌러 설정합니다.

배포되면 IoT Hub를 입력으로 사용하고 Power BI를 출력으로 사용하도록 스트리밍 작업에 지시해야 합니다. 스트리밍 작업 페이지에서 입력을 클릭합니다. 왼쪽 메뉴에서 추가 .

작업에 별칭(이름)을 지정한 다음 IoT Hub를 선택합니다. 소스 드롭다운에서 IoT Hub 드롭다운에서 적절한 IoT Hub를 선택하고 나머지는 모두 기본값으로 둡니다. 다음과 같이 표시되어야 합니다.

입력이 생성되면 Power BI에 연결하는 출력을 생성합니다. 스트리밍 작업 페이지에서 출력을 클릭합니다. 왼쪽 메뉴에서 추가 . Power BI를 선택하겠습니다. 싱크대에서 쓰러지 다. 그런 다음 Power BI 계정에 권한을 부여하고 사용할 작업 영역을 선택해야 합니다. 테이블의 이름을 만듭니다. 다음과 같이 됩니다.

마지막 단계는 입력을 출력에 연결하는 쿼리를 만드는 것입니다. 다시 쿼리를 클릭합니다. 왼쪽 메뉴에서 이전 단계에서 입력 및 출력 이름을 지정한 항목에 따라 기본적으로 쿼리가 아래 스크린샷과 일치하는 형식이 되기를 원할 것입니다. 그러면 IoT Hub에서 들어오는 모든 데이터가 선택되고 Power BI 작업 영역으로 출력됩니다.

왼쪽 상단에서 저장을 누르고 모든 이름을 올바르게 지정했다고 가정하면 거의 완료된 것입니다. 이제 개요 페이지로 돌아가서 시작을 누르십시오. 상단 탐색 모음에서 몇 분 후에 데이터가 Power BI로 스트리밍됩니다.

Power BI에서 시각화

이제 데이터가 흐르고 있으므로 Power BI에서 빠른 시각화를 수행하여 지도의 모든 위치를 표시할 수 있습니다.

Power BI 작업 영역으로 이동하여 + 만들기를 클릭합니다. 오른쪽 상단에서 신고를 선택합니다. . 그런 다음 Azure 스트리밍 작업에서 만든 데이터 세트를 선택하고 만들기를 누릅니다. .

다음으로 오른쪽 창에서 지도 시각화를 선택합니다. 흰색 지구처럼 보입니다. 맨 오른쪽에는 Arduino에서 보낸 데이터 필드가 표시됩니다. 위도 드래그 Latitude 및 lon으로 왼쪽 창에서 경도로. EventProcessedUTCTime을 드래그할 수도 있습니다. 마우스 오버 시 전송된 시간을 보려면 도구 설명으로 이동합니다. 그런 다음 오른쪽 상단에서 저장을 누르십시오. 그게 다야! 이제 Arduino에 연결된 헬륨 원자의 위치를 ​​보여주는 지도가 표시됩니다.

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • Atom + Arduino + Adafruit GPS
  • Atom + Arduino + Adafruit GPSC/C++
    /* * Copyright 2017, Helium Systems, Inc. * All Rights Reserved. 라이선스 정보는 LICENCE.txt를 참조하십시오.*/#include "Arduino.h#include "avr/dtostrf.h#include "Helium.h#include #include #include "wiring_private .h" // pinPeripheral() function#define atom_serial Serial1//GPS용#define PIN_SERIAL2_RX(34ul) // D12의 PIO_SERCOM에 대한 핀 설명 번호#define PIN_SERIAL2_TX(36ul) // D10의 PIO_SERCOM에 대한 핀 설명 번호#define PAD_SERIAL2_TX (UART_TX_PAD_2) // SERCOM 패드 2#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) // SERCOM 패드 3Uart Serial2(&sercom1, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX); 채널 채널(&helium);//GPS 물건#define gps_serial Serial2Adafruit_GPS GPS(&gps_serial);void setup() { pinPeripheral(10, PIO_SERCOM); pinPeripheral(12, PIO_SERCOM); Serial.begin(115200); Serial.println("시작"); // Helium Atom과 통신 시작 // baud rate는 지원되는 보드마다 다릅니다. // 그리고 Board.h에 ​​설정되어 있습니다. helium.begin(helium_baud_b115200); // Atom을 헬륨 네트워크에 연결합니다. Serial.print("Connecting - "); int 상태 =helium.connect(); 동안 (상태 !=helium_status_OK) { 상태 =helium.connect(); } Serial.println("성공"); // 채널과 통신을 시작합니다. // 한 번만 수행하면 됩니다. // // 참고:Helium Dashbaord int8_t 결과에서 일치하는 채널을 생성했는지 확인하십시오. Serial.print("채널 생성 - "); status =channel.begin("해커 가이드", &result); if (helium_status_OK ==상태 &&결과 ==0) { Serial.println("성공"); } else { Serial.println("실패"); } 지연(1000); //GPS 초기화 GPS.begin(9600); GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); GPS.sendCommand(PGCMD_NOANTENNA); 지연(2000);}uint32_t 타이머 =millis(); 무효 루프(){ char c =GPS.read(); if (GPS.newNMEAreceived()) { if (!GPS.parse(GPS.lastNMEA())) 반환; } if (타이머> millis()) 타이머 =millis(); if (millis() - 타이머> 2000) { 타이머 =millis(); // 타이머 재설정 if (GPS.fix) { char lat[10]; 차론[10]; 문자 데이터[100]; dtostrf(GPS.latitudeDegrees, 4, 4, 위도); dtostrf(GPS.longitudeDegrees, 4, 4, lon); // Azure로 보낼 lat/lon의 JSON 개체 형식 지정 sprintf(data, "{\"lat\":\"%s\", \"lon\":\"%s\"}", lat, 론); // 위치 데이터를 구성된 채널로 전송 int8_t result; //헬륨 라우터의 응답 Serial.print("Sending - "); int 상태 =channel.send(data, strlen(data), &result); //status는 Atom 직렬 연결의 응답입니다. if (helium_status_OK ==status &&result ==0) { Serial.print("Successfully sent "); Serial.println(데이터); } else { Serial.println("실패"); } } else { Serial.println("GPS 수정이 없습니다!"); } }}

    제조공정

    1. Python과 함께 Arduino 및 RFID를 사용한 출석 시스템
    2. GPS 데이터 로거, 공간 분석 및 Azure IoT Hub.
    3. Arduino, 1Sheeld 및 Android를 사용한 범용 원격 제어
    4. Arduino와 스마트폰을 사용한 DIY 전압계
    5. IoT를 사용한 심박수 모니터
    6. IoT를 사용하여 로봇 팔 원격 제어
    7. IOT - ESP8266, Arduino 및 초음파 센서를 사용하는 스마트 항아리
    8. Arduino를 사용한 주파수 및 듀티 사이클 측정
    9. arduino를 사용한 소나 및 IDE 처리 시 표시
    10. Azure IoT 수영장