- Nepieciešamās sastāvdaļas
- Ķēdes shēma
- MQTT Cloud Libraries instalēšana Raspberry Pi
- Kodēšanas skaidrojums Raspberry Pi GPIO kontrolei ar MQTT
Iepriekšējā apmācībā mēs esam apsprieduši par MQTT protokolu un mūsu Raspberry Pi instalējuši vietējo MQTT serveri GPIO lokālai kontrolei. Bet vietējā MQTT servera trūkums ir tāds, ka mēs nevaram kontrolēt GPIO no jebkuras vietas pasaulē, tas pakalpojumus sniedz tikai lokāli. Bet, ja šis MQTT serveris tiek mitināts uz kāda mākoņa, visas ierīces, kas savienotas ar Raspberry Pi, var vadīt visā pasaulē.
Šajā apmācībā mēs izmantosim Adafruit IO kā MQTT brokeri, lai kontrolētu maiņstrāvas ierīci, kas savienota ar Raspberry Pi GPIO. Pārbaudiet arī citas IoT kontrolētās mājas automatizācijas apmācības:
- IOT bāzes balss kontrolēta mājas automatizācija, izmantojot ESP8266 un Android App
- Viedtālruņa kontrolēta mājas automatizācija, izmantojot Arduino
- IoT balstīta tīmekļa kontrolēta mājas automatizācija, izmantojot PIC mikrokontrolleru un Adafruit IO
- IoT balstīta tīmekļa kontrolēta mājas automatizācija, izmantojot Raspberry Pi
- Google palīga balss kontrolēta mājas automatizācija, izmantojot DIY Arduino Wi-Fi Shield
Nepieciešamās sastāvdaļas
- Aveņu Pi ar tajā instalētu Raspbian Stretch.
- Releja modulis
- Spuldze
- Džemperu vadi
Šeit mēs izmantosim SSH, lai klēpjdatorā piekļūtu Raspberry Pi. Jūs varat izmantot VNC vai attālās darbvirsmas savienojumu klēpjdatorā vai arī savienot Raspberry pi ar monitoru. Uzziniet vairāk par Raspberry Pi iestatīšanu bez galvas šeit bez monitora.
Ķēdes shēma
Šīs IoT kontrolētās sadzīves tehnikas shēma ar MQTT mākoni un Raspberry Pi ir vienkārša, vienkārši pievienojiet spuldzi ar releja moduli aveņu Pi GPIO tapā 35.
MQTT Cloud Libraries instalēšana Raspberry Pi
Šeit Adafruit IO platforma tiek izmantota ar Raspberry Pi kā MQTT brokeri. Tā kā savās iepriekšējās apmācībās mēs esam daudzkārt izmantojuši Adafruit IO platformu, mēs to varam izmantot arī Raspberry Pi.
Vienkārši izveidojiet kontu Adafruit IO platformā un izveidojiet plūsmu, ja nezināt, kā izveidot plūsmu un pielāgot Adafruit informācijas paneli, pēc tam noklikšķiniet uz saites.
Pēc informācijas paneļa izveidošanas instalējiet dažas bibliotēkas Raspberry Pi, lai sāktu darbu ar MQTT.
1. Vispirms atjauniniet savu Pi un Python, izsniedzot šādas komandas
sudo apt-get update sudo apt-get jauninājums sudo pip3 install --upgrade setuptools
2. Tagad instalējiet Rpi.gpio un Adafruit mirkšķināšanas bibliotēkas, izmantojot zemāk esošās komandas
sudo pip3 instalējiet RPI.GPIO sudo pip3 instalējiet adafruit-blinka
3. Instalējiet Adafruit IO bibliotēku, izmantojot komandu zemāk
sudo pip3 instalējiet adafruit-io
4. Klonējiet adafruit piemērus no github, izmantojot komandu zemāk
git klons https://github.com/adafruit/Adafruit_IO_Python.git
5. Pēc tam dodieties uz mapi piemēri, ievadot terminālā šādu komandu:
cd Adafruit_IO_Python / piemēri / pamati
Ja neesat pārliecināts, kurā direktorijā atrodaties, varat to pārbaudīt, palaižot pwd.
6. Visiem šīs mapes piemēriem ir jāiestata ADAFRUIT_IO_KEY un ADAFRUIT_IO_USERNAME, kas atrodami Adafruit informācijas panelī. Kā parādīts zemāk
Pārslēdziet pogu uz Adafruit IO informācijas paneļa, un jūsu Pi terminālī jums vajadzētu redzēt sekojošo.
7. Tagad atveriet Subscribe.py failu, izmantojot nano redaktoru. Ierakstiet šādu komandu, lai to atvērtu
sudo nano subscribe.py
Mums ir jāpārveido šī programma, lai kontrolētu jebkuru GPIO no informācijas paneļa.
Kodēšanas skaidrojums Raspberry Pi GPIO kontrolei ar MQTT
Vispirms importējiet visas nepieciešamās bibliotēkas, lai izmantotu GPIO tapas un Adafruit MQTT klientu.
importēt RPi.GPIO kā GPIO importēt sys no Adafruit_IO importēt MQTTClient
Tagad iestatiet GPIO režīmu un definējiet LED tapas numuru un iestatiet kā izvadi.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
Tālāk mums ir jāiestata AIO atslēga un lietotājvārds, ko esam atraduši, veidojot informācijas paneli.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
Ievadiet plūsmas nosaukumu, kuru esat devis, lai ieslēgtu un izslēgtu gaismu. Lūk, tā ir “gaisma”.
FEED_ID = 'gaisma'
Tagad definējiet funkciju, kas tiks izsaukta, kad notiks kāds notikums. Tātad, mēs abonēsim plūsmu, izmantojot client.subscribe (FEED_ID)
def savienots (klients): client.subscribe (FEED_ID) print ('Gaida plūsmas datus…')
Pēc plūsmas abonēšanas mums jāpārbauda jaunā vērtība un tā jāuzglabā lietderīgās slodzes mainīgajā. Šim ziņojumam tiek izsaukta funkcija. Tāpēc vienmēr, kad lietderīgās slodzes mainīgajā lielumā ir “1”, padariet vadīto tapu AUGSTU, bet “0” - zemu.
def ziņojums (klienta, FEED_ID, lietderīgās slodzes): print ("Barība {0} saņēma jaunu vērtību: {1} '. formātā (FEED_ID, celtspēja)) , ja celtspēja == 1: GPIO.output (ledPin, GPIO.HIGH) cits: GPIO.output (ledPin, GPIO.LOW)
Tagad izveidojiet MQTT klientu, lai izveidotu savienojumu ar Adafruit IO platformu un nosūtītu ziņojumus turp un atpakaļ.
klients = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) klients.on_connect = savienots klients.on_disconnect = atvienots
Rūpējieties arī par pareizu atkāpi kodā, jo citādi tas parādīs kļūdu. Pilns pitona kods ir norādīts apmācības beigās.
Visbeidzot, saglabājiet programmu, izmantojot ctrl + x, un nospiediet taustiņu Enter. Tagad mums jāpalaiž skripts, lai abonētu ziņojumus. Tātad Termināla tipā python subscribe.py un nospiediet taustiņu Enter.
python subscribe.py
Tiks parādīts ziņojums Gaida plūsmas datus … kā parādīts zemāk esošajā momentuzņēmumā.
Tagad pārliecinieties, vai releja modulis ir savienots ar Raspberry Pi GPIO tapu, un pēc tam dodieties uz Adafruit IO vadības paneli un mainiet gaismas padevi. Spuldze vajadzētu ieslēgt, ja "1" ir saņemts un izslēgta, kad "0" tiek saņemti, kā parādīts zemāk.
Tādā veidā mēs varam kontrolēt jebkuru ierīci no jebkuras vietas pasaulē, izmantojot Raspberry Pi un MQTT mākoni