이전 튜토리얼에서 우리는 MQTT 프로토콜에 대해 논의했고 GPIO를 로컬로 제어하기 위해 Raspberry Pi에 로컬 MQTT 서버를 설치했습니다. 그러나 로컬 MQTT 서버의 단점은 전 세계 어디에서나 GPIO를 제어 할 수없고 로컬에서만 서비스를 제공한다는 것입니다. 그러나이 MQTT 서버가 일부 클라우드에서 호스팅되는 경우 Raspberry Pi에 연결된 모든 어플라이언스를 전역 적으로 제어 할 수 있습니다.
이 튜토리얼에서는 Adafruit IO를 MQTT 브로커로 사용하여 Raspberry Pi GPIO에 연결된 AC 어플라이언스를 제어합니다. 다른 IoT 제어 홈 자동화 튜토리얼도 확인하십시오.
- ESP8266 및 Android 앱을 사용하는 IOT 기반 음성 제어 홈 자동화
- Arduino를 사용한 스마트 폰 제어 홈 자동화
- PIC 마이크로 컨트롤러 및 Adafruit IO를 사용하는 IoT 기반 웹 제어 홈 자동화
- Raspberry Pi를 사용하는 IoT 기반 웹 제어 홈 자동화
- DIY Arduino Wi-Fi Shield를 사용하는 Google Assistant 기반 음성 제어 홈 자동화
필요한 구성 요소
- Raspbian Stretch가 설치된 Raspberry Pi.
- 릴레이 모듈
- 구근
- 점퍼 와이어
여기서는 SSH를 사용하여 랩톱에서 Raspberry Pi에 액세스합니다. 랩톱에서 VNC 또는 원격 데스크톱 연결을 사용하거나 Raspberry pi를 모니터에 연결할 수 있습니다. 여기에서 모니터없이 헤드리스로 Raspberry Pi를 설정하는 방법에 대해 자세히 알아보십시오.
회로도
MQTT 클라우드 및 라즈베리 파이 가있는 이 IoT 제어 가전 제품의 회로도 는 간단합니다. 라즈베리 파이의 GPIO 핀 35에 릴레이 모듈이있는 전구를 연결하기 만하면됩니다.
Raspberry Pi에 MQTT 클라우드 라이브러리 설치
여기서 Adafruit IO 플랫폼은 MQTT 브로커로 Raspberry Pi와 함께 사용됩니다. 우리가 사용하는 것처럼 그리고 Adafruit IO의 이전 자습서에서 플랫폼을 여러 번 유사하게 우리는 라즈베리 파이에서 사용할 수 있습니다.
Adafruit IO 플랫폼에서 계정을 만들고 피드를 만드십시오. 피드를 만들고 Adafruit 대시 보드를 사용자 지정하는 방법을 모르는 경우 링크를 따라 가십시오.
대시 보드를 만든 후 Raspberry Pi에 몇 개의 라이브러리를 설치하여 MQTT를 시작하십시오.
1. 먼저 다음 명령을 실행하여 Pi 및 Python을 업데이트합니다.
sudo apt-get 업데이트 sudo apt-get 업그레이드 sudo pip3 install --upgrade setuptools
2. 이제 아래 명령을 사용하여 Rpi.gpio 및 Adafruit 깜박임 라이브러리 를 설치 합니다.
sudo pip3 install RPI.GPIO sudo pip3 install adafruit-blinka
3. 아래 명령을 사용하여 Adafruit IO 라이브러리를 설치합니다.
sudo pip3 설치 adafruit-io
4. 아래 명령을 사용하여 github에서 adafruit 예제를 복제합니다.
git clone https://github.com/adafruit/Adafruit_IO_Python.git
5. 그런 다음 터미널에 다음 명령을 입력하여 examples 폴더로 이동합니다.
cd Adafruit_IO_Python / examples / basics
어떤 디렉토리에 있는지 확실하지 않은 경우 pwd 를 실행하여 확인할 수 있습니다.
6.이 폴더의 모든 예제에 대해 Adafruit 대시 보드에서 찾을 수있는 ADAFRUIT_IO_KEY 및 ADAFRUIT_IO_USERNAME 을 설정해야합니다. 아래 그림과 같이
Adafruit IO 대시 보드의 버튼을 전환하면 Pi의 터미널에 다음이 표시됩니다.
7. 이제 nano 편집기를 사용하여 subscribe.py 파일을 엽니 다. 다음 명령을 입력하여 엽니 다.
sudo nano subscribe.py
대시 보드에서 GPIO를 제어하려면이 프로그램을 수정해야합니다.
MQTT로 Raspberry Pi GPIO를 제어하기위한 코딩 설명
먼저 GPIO 핀 및 Adafruit MQTT 클라이언트를 사용하는 데 필요한 모든 라이브러리를 가져옵니다.
RPi.GPIO를 GPIO로 가져 오기 Adafruit_IO에서 sys 가져 오기 MQTTClient 가져 오기
이제 GPIO 모드를 설정하고 LED 핀 번호를 정의하고 출력으로 설정합니다.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
다음으로 대시 보드를 생성하면서 찾은 AIO 키와 사용자 이름을 설정해야합니다.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY'ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
조명을 켜고 끄기 위해 제공 한 피드 이름을 입력하십시오. 여기서는 “빛”입니다.
FEED_ID = '빛'
이제 이벤트가 발생할 때 호출 될 함수를 정의하십시오. 그래서 우리는 client.subscribe (FEED_ID)를 사용하여 피드를 구독 할 것 입니다.
def connected (client): client.subscribe (FEED_ID) print ('피드 데이터 대기 중…')
피드를 구독 한 후 새 값을 확인하고 페이로드 변수에 저장해야 합니다. 이 메시지 함수가 호출됩니다. 따라서 페이로드 변수에 "1"이있을 때마다 LED 핀을 HIGH로 만들고 "0"에 대해서는 LOW로 만듭니다.
def message (client, feed_id, payload): print ('Feed {0}가 새 값을 받았습니다: {1}'. format (feed_id, payload)) if payload == 1: GPIO.output (ledPin, GPIO.HIGH) else: GPIO.output (ledPin, GPIO.LOW)
이제 Adafruit IO 플랫폼에 연결하고 메시지를 이리저리 보낼 MQTT 클라이언트를 만듭니다.
client = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = 연결된 client.on_disconnect = 연결 해제 됨
또한 코드에서 적절한 들여 쓰기에주의해야합니다. 그렇지 않으면 오류가 표시됩니다. 튜토리얼이 끝나면 완전한 파이썬 코드 가 제공됩니다.
마지막으로 ctrl + x를 사용하여 프로그램을 저장하고 Enter 키를 누릅니다. 이제 메시지를 구독하려면 스크립트를 실행해야합니다. 따라서 터미널에서 python subscribe.py 를 입력하고 Enter 키를 누르십시오.
파이썬 subscribe.py
아래 스냅 샷과 같이 피드 데이터 대기 중 … 메시지 가 표시됩니다.
이제 릴레이 모듈이 Raspberry Pi의 GPIO 핀에 연결되어 있는지 확인한 다음 Adafruit IO 대시 보드로 이동하여 조명 공급을 변경합니다. 전구 "1"을 수신하고 다음과 같이 "0"을 수신 할 때 턴 오프 될 때 회전한다.
이러한 방식으로 Raspberry Pi 및 MQTT 클라우드를 사용하여 전 세계 어디서나 모든 어플라이언스를 제어 할 수 있습니다.