- Gerekli Bileşenler
- Devre şeması
- Raspberry Pi'ye MQTT Bulut Kitaplıklarını Yükleme
- Raspberry Pi GPIO'yu MQTT ile kontrol etmek için Kodlama Açıklaması
Önceki eğitimde, MQTT Protokolünü tartıştık ve GPIO'yu yerel olarak kontrol etmek için Raspberry Pi'mize yerel MQTT sunucusu kurduk. Ancak yerel MQTT sunucusunun dezavantajı, GPIO'ları dünyanın herhangi bir yerinden kontrol edemiyor olmamız, hizmetleri yalnızca yerel olarak sağlamasıdır. Ancak bu MQTT sunucusu bazı bulutlarda barındırılıyorsa, Raspberry Pi'ye bağlı tüm cihazlar global olarak kontrol edilebilir.
Burada, bu eğitimde, Raspberry Pi GPIO'ya bağlı bir AC cihazını kontrol etmek için Adafruit IO'yu MQTT aracısı olarak kullanacağız. Ayrıca IoT kontrollü diğer Ev Otomasyonu eğitimlerini de kontrol edin:
- ESP8266 ve Android Uygulamasını kullanarak IOT tabanlı Ses Kontrollü Ev Otomasyonu
- Arduino ile Akıllı Telefon Kontrollü Ev Otomasyonu
- PIC Microcontroller ve Adafruit IO kullanarak IoT tabanlı Web kontrollü Ev Otomasyonu
- Raspberry Pi kullanarak IoT tabanlı Web Kontrollü Ev Otomasyonu
- DIY Arduino Wi-Fi Shield kullanarak Google Asistan Tabanlı Ses Kontrollü Ev Otomasyonu
Gerekli Bileşenler
- Raspbian Stretch yüklü Raspberry Pi.
- Röle Modülü
- Ampul
- Atlama Telleri
Burada, dizüstü bilgisayardaki Raspberry Pi'ye erişmek için SSH kullanacağız. Dizüstü bilgisayarda VNC veya Uzak Masaüstü bağlantısını kullanabilir veya Raspberry pi'nizi bir monitöre bağlayabilirsiniz. Raspberry Pi'yi monitör olmadan başsız olarak kurma hakkında daha fazla bilgi edinin.
Devre şeması
MQTT bulutu ve Raspberry Pi içeren bu IoT Kontrollü Ev aletlerinin devre şeması basittir, sadece ahududu Pi'nin GPIO pin 35'ine röle modüllü bir ampul bağlayın.
Raspberry Pi'ye MQTT Bulut Kitaplıklarını Yükleme
Burada Adafruit IO platformu, MQTT komisyoncusu olarak Raspberry Pi ile birlikte kullanılmaktadır. Kullandığımız gibi Adafruit IO önceki derslerde platforma defalarca benzer biz Ahududu Pi kullanabilirsiniz.
Adafruit IO platformunda bir hesap oluşturun ve bir feed oluşturun, feed'i nasıl oluşturacağınızı ve Adafruit panosunu nasıl özelleştireceğinizi bilmiyorsanız bağlantıyı takip edin.
Kontrol panelini oluşturduktan sonra, MQTT ile başlamak için Raspberry Pi'ye birkaç kitaplık yükleyin.
1. Önce aşağıdaki komutları vererek Pi ve Python'unuzu güncelleyin
sudo apt-get update sudo apt-get yükseltme sudo pip3 install - upgrade setuptools
2. Şimdi, aşağıdaki komutları kullanarak Rpi.gpio ve Adafruit blink kitaplıklarını yükleyin
sudo pip3 yükleme RPI.GPIO sudo pip3 yükleme adafruit-blinka
3. Aşağıdaki komutu kullanarak Adafruit IO kitaplığını kurun
sudo pip3 adafruit-io yükle
4. Aşağıdaki komutu kullanarak adafruit örneklerini github'dan klonlayın
git klon https://github.com/adafruit/Adafruit_IO_Python.git
5. Ardından, terminale aşağıdaki komutu girerek örnekler klasörüne gidin:
cd Adafruit_IO_Python / örnekler / temeller
Hangi dizinde olduğunuzdan emin değilseniz, bunu pwd komutunu çalıştırarak kontrol edebilirsiniz.
6. Bu klasördeki tüm örnekler için, Adafruit kontrol panelinde bulunabilen ADAFRUIT_IO_KEY ve ADAFRUIT_IO_USERNAME'i ayarlamanız gerekir. Aşağıda gösterildiği gibi
Adafruit IO panosundaki düğmeyi değiştirin ve Pi'nizin terminalinde aşağıdakileri görmelisiniz.
7. Şimdi, nano düzenleyiciyi kullanarak subscribe.py dosyasını açın. Açmak için aşağıdaki komutu yazın
sudo nano subscribe.py
Herhangi bir GPIO'yu kontrol panelinden kontrol etmek için bu programı değiştirmeliyiz.
Raspberry Pi GPIO'yu MQTT ile kontrol etmek için Kodlama Açıklaması
Öncelikle, GPIO pinlerini ve Adafruit MQTT istemcisini kullanmak için gerekli tüm kitaplıkları içe aktarın.
RPi.GPIO'yu Adafruit_IO'dan GPIO içe aktarma sys olarak içe aktar MQTTClient içe aktar
Şimdi, GPIO modunu ayarlayın ve LED pin numarasını tanımlayın ve çıktı olarak ayarlayın.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
Ardından, panoyu oluştururken bulduğumuz AIO anahtarını ve Kullanıcı adını ayarlamamız gerekir.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
Işığı açıp kapatmak için verdiğiniz besleme adını girin. İşte "hafif".
FEED_ID = 'hafif'
Şimdi, bir olay olduğunda çağrılacak bir işlev tanımlayın. Bu yüzden, Client.subscribe (FEED_ID) kullanarak Feed'e abone olacağız
def bağlı (istemci): client.subscribe (FEED_ID) yazdır ('Besleme verileri bekleniyor…')
Yayına abone olduktan sonra, yeni değeri kontrol etmemiz ve onu bir yük değişkeninde saklamamız gerekir. Bu mesaj için fonksiyon denir. Dolayısıyla, yük değişkeninde "1" olduğu her zaman, led pini HIGH ve "0" için DÜŞÜK yapın.
def message (client, feed_id, payload): print ('Feed {0} yeni değer aldı: {1}'. format (feed_id, payload)) eğer payload == 1: GPIO.output (ledPin, GPIO.HIGH) else: GPIO.output (ledPin, GPIO.LOW)
Şimdi, Adafruit IO platformuna bağlanmak için bir MQTT istemcisi oluşturun ve mesajları ileri ve geri gönderin.
client = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = bağlı client.on_disconnect = disconnected
Ayrıca, kodda doğru girintiye dikkat edin, aksi takdirde bir hata gösterecektir. Eğitimin sonunda tam python kodu verilmiştir.
Son olarak, programı ctrl + x kullanarak kaydedin ve enter tuşuna basın. Şimdi, mesajlara abone olmak için betiği çalıştırmalıyız. Yani terminalde python subscribe.py yazın ve enter tuşuna basın.
python subscribe.py
Aşağıdaki anlık görüntüde gösterildiği gibi Besleme Verileri Bekliyor … mesajını göreceksiniz.
Şimdi, röle modülünün Raspberry Pi'nin GPIO pinine bağlı olduğundan emin olun ve ardından Adafruit IO panosuna gidin ve ışık beslemesini değiştirin. Ampul “1” aldı ve aşağıda gösterildiği gibi “0” alındığında kapatıldığında açmalısınız.
Bu şekilde, Raspberry Pi ve MQTT bulut kullanarak dünyanın her yerinden herhangi bir cihazı kontrol edebiliyoruz.