Raspberry Pi는 어느 정도의 계산이 포함 된 경우 항상 IoT 기반 애플리케이션을 개발하기위한 첫 번째 선택이었습니다. Python의 유연성과 강력한 개발자 커뮤니티 덕분에 Pi를 사용하여 데이터 세트를 수집, 기록, 분석 또는보고하는 것이 매우 쉽습니다. 이 자습서에서는 Raspberry Pi의 기능을 Amazon AWS 서비스와 결합하여 데이터를 인터넷에 온라인으로 게시 하는 방법을 배웁니다.
이 자습서에서는 DHT11 센서 를 사용하여 온도 및 습도 값을 읽은 다음 AWS IOT 서비스에 연결하고 AWS IOT SDK를 사용하여 센서 값을 업데이트합니다. 그런 다음이 데이터를 Amazon IOT 콘솔에서 시각화하여 데이터를 인터넷에 게시하고 있는지 확인할 수 있습니다.
또한 AWS Elastic Search Service 를 사용 하여 이러한 센서 값을 가져와 데이터베이스에 저장 한 다음 Kibana Dashboard 서비스를 사용하여 센서 데이터를 깔끔한 그래프로 시각화 할 수 있습니다. 충분히 흥미 롭다? !!! 자, 시작하겠습니다…
전제 조건:
이 자습서에서는 무료 AWS 계정을 이미 생성했으며 사물, 인증서, 정책 생성 및이를 사용하여 값 게시와 같은 AWS IoT 서비스에 대한 기본 사항을 알고 있다고 가정합니다. 그렇지 않으면 아래 튜토리얼을 읽으십시오.
- MQTT.fx로 Amazon AWS IOT 시작하기
또한 LCD 및 DHT11 센서를 Raspberry Pi에 인터페이스하는 방법을 알고 있으며 동일한 작업을 수행하는 라이브러리가 이미 Pi에 설치되어 있다고 가정합니다. 그렇지 않은 경우 아래 자습서를 진행하십시오.
- DHT11과 Raspberry Pi의 인터페이스
위의 자습서가 끝나면 AWS-IOT에서 사물을 만들었을 것이며 사물에 액세스하는 데 필요한 인증서와 함께 사물의 브로커 주소가 있어야합니다. 또한 Raspberry pi가 이미 OS로 설정되어 있고 인터넷에 연결되어 있다고 가정합니다. 이것들과 함께 튜토리얼을 진행해 봅시다. Raspberry Pi를 처음 사용하는 경우 먼저 Raspberry pi 시작하기를 참조하세요.
Raspberry Pi에 Python 용 AWS IOT 디바이스 SDK 설치:
Pi에서 AWS 서비스를 사용하기 위해 두 SDK 중 하나를 설치할 수 있습니다. 하나는 JavaScript를 프로그래밍 언어로 사용하는 JavaScript SDK이고 다른 하나는 분명히 Python을 프로그래밍 언어로 사용하는 Python SDK입니다. 여기서는 JavaScript보다 Python에 더 익숙하기 때문에 Python을 SDK로 선택합니다.
AWS IOT SDK에 대한 전체 정보는 GitHub 페이지에서 확인할 수 있습니다.
1 단계: Pi에 SDK를 설치하려면 다음 명령을 입력하여 터미널을 엽니 다.
git clone
2 단계: Pi에 aws 디렉터리 가 설치되어 있어야합니다. 이제 다음 명령을 사용하여 탐색합니다.
cd aws - iot -device- sdk -python
3 단계: 디렉토리 안에 아래 줄을 사용하여 설치 파일을 설치합니다.
python setup.py 설치
회로도:
하드웨어쪽에는 DHT11 센서와 LCD 화면에 연결된 Raspberry Pi가 있습니다. DHT11은 온도 및 습도 값을 가져 오는 데 사용되며 LCD는 값 및 디버깅 정보를 표시하는 데 사용됩니다. 동일한 회로도는 아래와 같습니다.
LCD와 DHT11 센서 는 모두 + 5V 공급으로 작동하므로 Raspberry Pi의 5V 핀을 사용하여 둘 다에 전원을 공급합니다. DHT11 센서의 출력 핀에 1k 값의 풀업 저항이 사용됩니다. 모듈을 사용하는 경우이 저항을 피할 수 있습니다.
10k 의 트리머 포트가 LCD의 Vee 핀에 추가되어 LCD의 대비 수준을 제어합니다. 그 외에는 모든 연결이 매우 간단합니다. 그러나 프로그램에서 필요하므로 핀을 연결하는 데 사용하는 GPIO 핀을 기록해 두십시오. 아래 차트를 통해 GPIO 핀 번호를 파악할 수 있습니다.
차트를 사용하고 회로도에 따라 연결하십시오. 브레드 보드와 점퍼 와이어를 사용하여 연결했습니다. 모듈을 사용했기 때문에 Raspberry Pi에 직접 연결했습니다. 내 하드웨어는 다음과 같습니다.
Raspberry Pi 프로그래밍:
파이썬 프로그램에서 우리는 온도와 습도의 값을 읽고 LCD 화면에 표시하고 이전 튜토리얼에서 이미 생성 한 Amazon IOT에 두 값을 게시해야 합니다. 따라서 사물을 생성했는지, 그리고 생성 한 사물의 세 가지 키 파일과 브로커 주소를 모두 가지고 있는지 확인하십시오.
우리의 파이썬 프로그램에서 우리는 Raspberry Pi가 우리 사물에 값을 게시하기 위해 액세스 할 수 있도록 세 가지 주요 파일을 연결해야합니다. 따라서 프로그램에서 경로 주소가 필요하므로 세 가지 키 파일을 모두 복사하여 Raspberry pi의 바탕 화면에 붙여 넣으십시오.
완전한 파이썬 프로그램 이 페이지 하단에서 찾을 수 있습니다, 당신은 당신이 만든대로의 브로커 주소 및 경로 디렉토리를 편집 한 후 프로그램을 사용할 수 있습니다. 추가로 코드를 작은 조각으로 설명했습니다.
우리는 라이브러리 가져 시작 우리의 프로젝트에 필요한합니다. 세 가지 주요 라이브러리는 AWS SDK, LCD 라이브러리 및 DHT 라이브러리이며, 세 가지 Pi를 모두 설치했는지 확인하십시오. 기본적으로 시간 및 날짜 / 시간 라이브러리가 설치됩니다.
AWS-의 IoT 라이브러리에서 AWSIoTPythonSDK.MQTTLib 수입 AWSIoTMQTTClient # import를에서 수입 시간 # 만들려면 지연 에서 날짜 가져 오기 날짜, 날짜 #됐다 날짜 및 시간 얻을 LCD # import를 LCD 라이브러리로 가져 오기 Adafruit_CharLCD을 센서에 대한 수입 Adafruit_DHT # import를 DHT 도서관
다음 줄에서 브로커 주소, 클라이언트 이름, 인증서 및 키 파일 경로와 같은 사물 세부 정보 를 제공해야합니다. 여기에서는 클라이언트 이름을 new_Client로 사용하여 동일하거나 원하는 이름을 사용할 수 있습니다. 브로커 주소는 생성 한 사물의 주소로 변경해야하며 경로 디렉토리도 사물에 따라 변경해야합니다. 이 두 가지 외에는 다음 줄에서 아무것도 변경할 필요가 없습니다.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883 ) myMQTTClient.configureCredentials ("/ home / pi / Desktop / ESP32_Thing certificates / CA.pem", "/ home / pi / Desktop / ESP32_Thing certificates / private.pem.key", "/ home / pi / Desktop / ESP32_Thing certificates / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # 무한 오프라인 게시 대기열 myMQTTClient. configureDrainingFrequency (2) # 배수: 2Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 초 myMQTTClient.configureMQTTOperationTimeout (5) # 5 초
다음으로 연결의 핀 세부 정보 를 지정해야합니다. 각 핀의 GPIO 핀 번호는 해당 이름에 할당됩니다. 여기에서는 핀 17의 DHT 센서와 4 비트 모드의 LCD를 사용했습니다. 동일한 코드는 아래와 같습니다.
sensor_name = Adafruit_DHT.DHT11 # 우리 는 DHT11 센서를 사용하고 있습니다 sensor_pin = 17 # 센서는 Pi의 GPIO17 에 연결됩니다. lcd_rs = 7 #LCD의 RS는 PI의 GPIO 7에 연결됩니다. lcd_en = 8 # LCD의 EN은 GPIO 8에 연결됩니다. PI를 ON lcd_d4 = LCD 25 # D4는 PI의에 GPIO (25)에 접속되는 LCD의 24 # D5는 PI의에 GPIO (24)에 접속된다 = lcd_d5 lcd_d6 = 23 LCD의 # D6은 PI의에 GPIO (23)에 접속된다 의 lcd_d7 = 18 # D7 LCD는 PI의 GPIO 18에 연결됩니다. lcd_backlight = 0 #LED가 연결되지 않았으므로 0에 할당합니다.
그런 다음 LCD를 초기화하고 LCD 화면에 작은 소개 메시지를 표시 합니다. 그런 다음 위에 입력 한 브로커 주소와 키 파일을 사용하여 AWS 사물과 연결을 시도합니다. 연결에 성공하면 LCD에 " Connected to AWS thing " 이 표시 되거나 10 초 동안 시도하고 실패하면 오류 메시지가 표시됩니다. 오류 메시지가 나타나면 사물을 성공적으로 생성하고 코드와 올바르게 연결했는지 확인하십시오. 언제든지 이전 자습서로 돌아가서 AWS에서 제대로 생성했는지 확인할 수 있습니다.
if time.time () <Connecting_time: # 10 초 동안 AWS에 연결 시도 myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "connected", 0) print "MQTT Client connection success!" lcd.message ('Connected to \ n AWS thing') #if connected else: print "Error: Check your AWS details in the program" lcd.message ('Error: \ nInvalid details') #if not connected
연결이 성공적으로 설정되면 무한 while 루프에 들어가 시간, 온도 및 습도 값을 페이로드 로 게시합니다. 여기서 페이로드는 항상 JSON 형식의 문자열이어야합니다. 따라서 먼저 현재 날짜와 시간을 읽고 아래 줄을 사용하여 변수에 저장합니다.
now = datetime.utcnow () # 날짜 및 시간 가져 오기 current_time = now.strftime ('% Y- % m- % dT % H: % M: % SZ') # 문자열 형식으로 현재 시간 가져 오기
그런 다음 DHT11 센서 의 습도 및 온도 값 을 읽고 LCD 화면에 표시합니다. 가변 습도 및 온도는 각각 습도 및 온도 값을 유지합니다.
습도, 온도 = Adafruit_DHT.read_retry (sensor_name, sensor_pin) # 센서에서 읽기
온도 및 습도 변수에 각각의 값을 저장합니다.
lcd.clear () #LCD 화면 지우기 lcd.message ('Temp = %.1f C'% temperature) # 온도 값 표시 lcd.message ('\ nHum = %.1f %%'% 습도) #Display Humidity time.sleep (2) 값 # 2 초 동안 기다린 다음 값을 업데이트합니다.
앞서 말했듯이 페이로드는 중괄호로 둘러싼 문자열 형식이어야합니다. 아래 그림과 같이 변수를 문자열로 변환 한 후 날짜, 시간, 온도 및 습도 값을 추가합니다.
# 문자열 형식으로 페이로드 준비 payload = '{ "timestamp": "'+ current_time + '", "temperature":'+ str (온도) + ', "humidity":'+ str (humidity) + '}'
마지막으로 페이로드가 준비되면 MQTT 클라이언트에 게시해야합니다. myMQTTclient.publish 명령 을 사용하여 수행 할 수 있습니다. 사물에 게시하는 동안 이름도 지정해야합니다. 여기서는 이름을 DHT11 / data로 지정했지만 원하는대로 이름을 지정할 수 있습니다. 하지만 데이터를보기 위해 구독해야하므로 이름을 기억하십시오.
쉘 창을 통해 파이썬 프로그램 테스트:
프로그램이 준비되면 선택한 프로그램을 사용하여 시작하십시오. Python IDE를 사용하여 셸 창에서 프로그램을 시작했습니다. 모든 것이 정상이면 연결 성공 메시지가 표시되고 모든 페이로드가 창에 표시되어야합니다. 온도 및 습도 값이 올바르게 판독되고 있는지 확인할 수 있습니다. 페이로드는 5 초마다 업데이트됩니다. 쉘 창은 다음과 같습니다.
문제가있는 경우 올바른 키 세부 정보와 브로커 주소를 제공했는지 확인하고, MQTT.fx 소프트웨어를 사용하여 사물을 연결할 수 있는지 확인하십시오. 셸이 MQTT 클라이언트 연결 성공을 표시하고 중단되면 DHT11 센서가 응답하지 않고 올바른 핀에 연결되어 있고 센서가 작동하는지 확인합니다.
일:
프로그램을 시작하고 셸 창에서 위의 세부 정보를 얻으면 프로그램이 제대로 응답하고 값이 Amazon AWS 서버에 업로드되고 있음을 의미 합니다. 또한 아래와 같이 LCD 디스플레이에 Published to AWS-IoT가 5 초마다 표시되는지 확인할 수 있습니다.
MQTT.fx 애플리케이션에 들어가서 DHT11 / data 주제를 구독 할 수 있습니다. 그런 다음 Raspberry Pi에서 게시하는 모든 데이터를 가져올 수 있어야합니다. 이 데이터는 5 초마다 업데이트됩니다. MQTT 화면은 다음과 같습니다.
보시다시피 파란색으로 강조 표시된대로 MQTT 소프트웨어에서 페이로드가 수신되고 있습니다. 프로젝트 작동 방식을 알기 위해 아래 비디오를 시청할 수도 있습니다. 이제 인터넷에 데이터가 있으므로 Elastic search 및 Lambda와 같이 Amazon에서 제공하는 다른 도구와 함께 데이터를 데이터베이스에 저장하거나 그래프로 시각화 할 수 있습니다. 데이터의 이점을 얻는 방법에 따라 훨씬 더 많은 응용 프로그램이 있습니다.
튜토리얼을 이해하고 비슷한 것을 작성하는 것이 즐거웠기를 바랍니다.이 작업을 수행하는 데 문제가 있으면 아래의 댓글 섹션에 게시하거나 포럼에서 기술 도움을 받으십시오.