Skip to content

Raspberry Pi Zero W & ESP8266 ile sıfırdan IoT ağı kurulumu – MQTT ve NodeRED

20210327_172215.jpg

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

20210330_204500.jpg



İ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:

www.raspberrypi.org

Operating system images – Raspberry Pi

The Raspberry Pi is a tiny and affordable computer that you can use to learn programming through fun, practical projects. Join the global Raspberry Pi community.
www.raspberrypi.org www.raspberrypi.org


1.PNG



Bu arkada inerken BalenaEtcher ISO yazma aracını indirelim ve hazır edelim:

www.balena.io

balenaEtcher – Flash OS images to SD cards & USB drives

A cross-platform tool to flash OS images onto SD cards and USB drives safely and easily. Free and open source for makers around the world.
www.balena.io www.balena.io


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. 

www.mediafire.com

wpa_supplicant.conf

MediaFire is a simple to use free service that lets you put all your photos, documents, music, and video in a single place so you can access them anywhere and share them everywhere.
www.mediafire.com
  • ssid
  • psk

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)

20210401_130017.jpg



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.

2.PNG



Bağlandıktan sonra sizden parola ve kullanıcı adı isteyecek:

  • Kullanıcı adı: pi
  • Şifre: raspberry

Bu bilgileri de girip, Pi Zero’ya erişimimizi sağladığımıza göre, artık gerekli uygulamaları kurabiliriz.

3.PNG



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.

Eclipse Mosquitto

Version 2.0 has been released! The full details are available on the blog post. Eclipse Mosquitto is an open source (EPL/EDL licensed) message broker that implements the MQTT protocol ve
mosquitto.org mosquitto.org


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:

4.PNG



Sol taraftan “MQTT in” nodeunu seçin ve alana bırakın:

5.PNG



Node’a iki kere tıklayın ve ayarları aşağıdaki gibi doldurun:

6.PNG



Kalem singesine tıklayın ve çıkan kısımları da bu şekilde doldurun:

7.PNG



Kaydettiğinizde bu şekilde olmalı. Soldan debug nodeu da ekleyebilirsiniz:

8.PNG



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.

photo_2021-04-17_22-39-41.jpg



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] = '';
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:

  • Röle 1 için
    • Açma: mosquitto_pub -t general -m 'relay_1_on'
    • Kapama: mosquitto_pub -t general -m 'relay_1_off'
  • Röle 2 için
    • Açma: mosquitto_pub -t general -m 'relay_2_on'
    • Kapama: mosquitto_pub -t general -m 'relay_2_off'

Bu kodların sonunda, NodeRED’de debug kısmında şu çıktıları görüyorsanız, sistem açlışıyor demektir:

9.PNG



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. :)


photo_2021-03-27_22-31-08.jpg
Published inUncategorized