Geçmişte blogumda hem ESP8266 hem de IoT ve MQTT üzerine birçok konu açtım. Artık bunu hem bir adım daha ileri taşımak istedim, hem de piyasada yaygın olarak bulunan bir kartla, Raspberry Pi Zero W ile birleştirmek istedim.
Önceden MQTT'ye şu Blog girdisi ile giriş yapmıştım:https://ibrahimozdphoto.blogspot.com/2020/12/mqtt-nedir-mqtt-protokolu-ile-esp8266y.html
Esasında, IoT ağlarının sonlarında yani cihazların veri toplayacağı ya da aldıkları verilerle bir işi gerçekleştirecekleri noktalarda, ESP8266 veya ESP32 gibi ucuz, işlem gücü düşük ama az güç tüketen, sadece üstüne yazılan kodu yapabilen minik kartlar ya da bu işlemcilere dayanan sistemler kullanıyoruz.
Ancak tüm bu kartların ya da sistemlerin, veri akışlarının, yönetiminin ve güvenliğinin bir noktada toplanması gerekiyor. Burada da artık bir mikroişlemciye değil, bir işletim sistemi çalıştırabilecek gerçek bir işlemciye ihtiyaç duyuyoruz. İşte bu noktada, fiyatıyla uygun, boyutuyla küçük ama özellikleriyle ve özellikle CLI tabanlı Raspian'daki performansıyla, Raspberry Pi Zero W yardımımıza koşuyor.
Tüm bu minik IoT cihazları ve veri akışını Raspberry Pi'a bağlayarak, hem bir bilgisayar ya da bilmediğimiz 3. Parti bir sistem kullanmaktan kurtuluyoruz, hem de sistemi daha güvenli hale getirmiş oluyoruz.
Headless Raspberry Pi Zero W kurulumu
İlk başta, Raspberry Pi Zero'yu CLI tabanlı Raspian ile hazır hale getirmemiz lazım. Bunun için en az 32 GB'lık, hızlı bir MicroSD karta da ihtiyacımız olacak. SD kartımızı da hazır ettikten sonra bilgisayarımıza takalım ve Raspian'ın hazırlanma kısmına geçelim.
Burada Raspberry Pi Imager kullanılabilir. Ancak ben hala SD kartı oluşturmak için eski yöntemleri kullanmayı öneriyorum.
İlk önce Raspberry'nin sitesine gidelim ve RaspianOS Lite'ı indirelim:
Bu arkada inerken BalenaEtcher ISO yazma aracını indirelim ve hazır edelim:
Aracı indirip kurduktan ve ISO dosyası da indikten sonra, BalenaEtcher'i kullanarak ISO dosyasını SD karta yazalım. Dikkat, kartta ne var ne yok yok olacak.
Yazma işlemi bittiktek sonra sistem, "Kart okunamıyor, formatlayın" hatası verebilir. Dikkate almayın, kartı çıkartıp yeninden takın. Çünkü işimiz bitmedi.
Bu bölüme "Headless" dediğimi fark etmişsinizdir. Zira Pi Zero'yu öyle bir ayarlayacağız ki, monitör ya da klavye/fare takmamıza gerek kalmayacak. Öyleki, Wi-Fi şifresini girmemize bile gerek yok. SD Kart'ı takıp, gücü verip, SSH ile bağlanıp kullanmaya başlayacağız.
Bunun için oluşturduğumuz SD Kart'taki Boot klasörüne iki tane dosya atmamız lazım.
RaspianOS'un yeni sürümleri ile beraber, SSH varsayılan olarak kapalı geliyor. Bunu açmak için, isminde sadece SSH yazacak, içi boş ve uzantısı olmayan bir dosyayı, SD Kart'ın Boot bölümüne atmamız gerek.
Yeni bir metin belgesi oluşturun, içine bir boşluk bırakın ve kaydedin. kaydederken .txt olarak kaydetmemeye dikkat edin. İsmi sadece SSH olmalı, uzantısı olmamalı.
Koymamız gereken bir dosya ise, Wi-Fi bilgilerinin olacağı dosya. Yukarıda da bahsettiğim gibi, Pi Zero'yu hiçbir klavye fare bağlamadan kuracağız. SSH ile bağlanabilmek için, Pi Zero'nun bir ağa bağlanabilir olması gerek.
Bunun için aşağıdaki text dosyasını indirin. Dosyayı Notepad++ ile açın. Aşağıdaki kısımları kendi bilgilerinizle değiştirin.
Daha sonra bu dosyayı, "wpa_supplicant.conf.txt" yerine "wpa_supplicant.conf" olarak kaydedin. Kaydederken dosyaya uzantı vermemeye dikkat edin, .txt gibi uzantılara sahip olmamalı. Tavsiye olarak Notepad++ kullanın.
Sonrasında bu dosyayı da Boot klasörüne atın. Artık tamam, Pi Zero'yu kullanmaya geçebiliriz! (Pi Zero üzerinde küçük bileşenler içeriyor, bu nedenle böyle bir kasa almak isteyebilirsiniz)
PuTTY ile Pi Zero'ya bağlanma, NodeRED ve MQTT kurulumu
PuTTY, Windows için yapılmış, ücretsiz bir SSH Client'ı. Buradan indirip kurabilirsiniz:
Kurup açtıktan sonra karşınıza bir adres barı ve port barı çıkacak. adres barına
raspberrypi
yazıp bağlan tuşuna tıklayın.Bağlandıktan sonra sizden parola ve kullanıcı adı isteyecek:
Bu bilgileri de girip, Pi Zero'ya erişimimizi sağladığımıza göre, artık gerekli uygulamaları kurabiliriz.
MQTT kurulumu
Önceki yazımı okuduysanız, IoT ağlarında cihazlar arası iletişimde MQTT'yi tercih ettiğimi görmüşsünüzdür. Özellikle local ağlarda MQTT, kolay ve esnek bir kullanım avantajı sağlıyor. Burada MQTT'yi bilgisayar yerine Raspberry Pi'a taşıyoruz, bu sayede Raspberry Pi evdeki tüm cihazlar için hem broker hem de gateway görevi görecek.
Bu kodla MQTT'yi kurun:
Kod:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mosquitto mosquitto-clients
Bu kodu yazarken sadece
mosquitto
değil, mosquittoyla
beraber mosquitto-clients
'ı da yazmayı unutmayın.Kurulum sonrası, bu kodla
moqsuitto broker
'ımızı çalıştırabiliriz:Kod:
sudo systemctl enable mosquitto
Ayrıca bu kodla mosquitto'nun durumunu görebiliriz:
Kod:
systemctl status mosquitto.service
Son olarak bu kodla mosquittonun başlangıçta otomatik çalışmasını sağlayabilirsiniz:
Kod:
sudo systemctl disable mosquitto
Mosquitto'yu bitirdik. Sırada NodeRED var.
NodeRED kurulumu
NodeRED bizim IoT ağımızın bel kemiği oluşturuyor. Gelen trafikleri kontrol etmenin yanında, bir kanaldan gelen trafiği başka bir kanala göndermeye de yarıyor. Özellikle gelen verileri ayıklama, filtreleme ve gelen veri türüne göre ayrıştırma konusunda çok başarılı. Tarayıcı tabanlı bir GUI'ye sahip olması, sürükle bırak mantığına dayalı olması ise basit ve kolay bir kullanım deneyimi sunuyor.
Kurmak için bu kodu girelim:
Kod:
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
Kurulum sonrası NodeRED otomatik olarak başlayacaktır. NodeRED'in Pi Zero güç alır almaz çalışmaya başlaması için şu kodu yazın:
Kod:
sudo systemctl enable nodered.service
Tüm işlemcler sonrası, şu adrese giderek NodeRED'e uzaktan erişebilirsiniz:
http://raspberrypi:1880/
Karşınız böyle bir ekran çıkacak:
Sol taraftan "MQTT in" nodeunu seçin ve alana bırakın:
Node'a iki kere tıklayın ve ayarları aşağıdaki gibi doldurun:
Kalem singesine tıklayın ve çıkan kısımları da bu şekilde doldurun:
Kaydettiğinizde bu şekilde olmalı. Soldan debug
nodeu
da ekleyebilirsiniz:Her şeyi tamamladığınızda, sol üstten
Deploy
tuşuna basın. Artık IoT ağımız kullanıma hazır.ESP8266 kurulumu
ESP8266 tarafında basit, iki röle kontrol eden bir düzenek kurdum.
Paylaştığım kodda, Pi Zero'nun IP adresini ve Wi-Fi bilgilerinizi kendinize göre güncelleyin ve yükleyin:
Kod:
// Open-Source ESP8266 code created by Ibrahim Cahit Ozdemir
//
// https://github.com/ibrahimcahit
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
int relay_1_pin = D6;
int relay_2_pin = D7;
// Update with your Wi-Fi
const char* ssid = "<ssid>";
const char* password = "<passwd>";
// Enter your localy running MQTT brokers IP address
IPAddress mqtt_server(000, 000, 0, 00);
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
String relay;
String strTopic;
String strPayload;
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
payload[length] = '\0';
strTopic = String((char*)topic);
// you can change topic with whatever you want.
if(strTopic == "general"){
relay = String((char*)payload);
if(relay == "relay_1_on") {
Serial.println("Opening Relay...");
digitalWrite(relay_1_pin, HIGH);
}
if(relay == "relay_2_on") {
Serial.println("Opening Relay...");
digitalWrite(relay_2_pin, HIGH);
}
if(relay == "relay_1_off") {
Serial.println("Closing Relay...");
digitalWrite(relay_1_pin, LOW);
}
if(relay == "relay_2_off") {
Serial.println("Closing Relay...");
digitalWrite(relay_2_pin, LOW);
}
}
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("connected");
// you can change topic with whatever you want.
client.subscribe("general");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
client.publish("general", "NodeMCU Connected!");
}
void setup() {
pinMode(relay_1_pin, OUTPUT);
pinMode(relay_2_pin, OUTPUT);
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
Ağ kontrolü
Raspberry Pi'ı PuTTY'de açın ve şu kodları yazın:
Bu kodların sonunda, NodeRED'de debug kısmında şu çıktıları görüyorsanız, sistem açlışıyor demektir:
Bu rehberimiz de burada sonlanıyor. Ben, çok ilkel bir örnek ile noktaladım ancak NodeRED ile yapabileceklerinizin sınırı yok. Özellikle evinizde kullanacağınız aygıtlar için, Pi Zero çok çok kullanışlı hale geliyor.
Okuduğunu için teşekkürler, başka bir rehberde görüşmek üzere.
Comments
Post a Comment