Sitemap

Arduino NodeMCU ile NodeJs API haberleşmesi

3 min readJan 26, 2021

Bu yazımda Iot konularına ilgi duyanlar için basit bir uygulama yapacağız.

Kısaca NodeMCU tetiklendiğinde, sensör bilgilerini API üzerinden MongoDB’ye kaydedip okuyabileceğiz.

İhtiyacımız olan malzemeler:

  • NodeMCU uygulama kartı
  • DHT11
  • HC-SR04

İlk önce API oluşturarak işe başlayalım. Klasör yapımız bu şekildedir.

Terminalden backend klasörünün içerisinde npm init -y yazarak projemizi oluşturup, ihtiyacımız olan paketleri yükleyelim.

Sunucu tarafında geliştirme yapmak için npm install express

MongoDB için npm install mongoose

Http isteklerini json halde almak için npm install body-parser

Sunucu ve Port ayarları için npm install dotenv

Artık modelimizi oluşturabiliriz. Veri tabanında nem, sıcaklık, uzaklık ve zamanı tutacağız.

Girilmesi zorunlu alanlar için required: true yapıyoruz.

Servisler için ben GET metodu ile bütün kayıtları gösterme ve POST metodu ile yeni kayıt ekleme işlemleri yaptım. Burada ihtiyaca göre kendi servislerinizi yazabilirsiniz.

Sunucu , port ve DB ayarları için .env dosyası oluşturuyoruz.

DB_CONNECT = mongodb://localhost:27017/iot_DBHOST_NAME = 192.168.0.104PORT_NAME = 3000

DB_CONNECT : Ben Docker üzerindeki mongodb’ye bağlandım. Burada iot_DB adında bir veri tabanı varsa onu kullanacak yoksa kendisi oluşturacaktır.

HOST_NAME : Buraya localhost veya 127.0.0.1 yazdığımızda da çalışması gerek fakat nodejs’te başka cihaz ile bağlanmak için burayı bilgisayarın IPv4adresini yazacağız.

PORT_NAME: Burası da port numaramız

App dosyamızda ise veri tabanı bağlantısı ve sunucumuzu ayağa kaldıracak kodlar mevcut

API yazmayı tamamladık şimdi çalıştırıp deneme yapalım.

Terminale node app yazıyoruz;

Test için postman kullanacağız. Veri eklemek için Json formatında modelimizde girilmesi zorunlu yaptığımız alanları post yapalım.

Evet POST metodumuz çalışıyor birde GET ile görüntüleme işlemi yapalım.

API’ımız sorunsuz çalışıyor şimdi de devremizi oluşturup, kodlarını yazalım.

İhtiyacımız olan kütüphaneleri indirip, ../Arduino/libraries içerisine eklemeliyiz.

WiFi işlemleri için ESP8266Wifi.h

Http metotlarını kullanmak için ESP8266HTTPClient.h

Nem ve Sıcaklık sensörü için dht11.h

Uzaklık sensörü için NewPing.h

Burada ssid ve password değerlerine wifi adınız ve wifi şifrenizi yazacaksınız.

const char* ssid = "*********";
const char* password = "*******";

host ve httpPort için .env’da olan host ve port değerleri olacak.

const char* host = "192.168.0.104";
const int httpPort = 3000;

Json formatında POST gönderebilmek için;

  • Modelimizin zorunlu alanlarını aşağıdaki postData’daki gibi yazılmalı
  • addHeader kısmı Content-Type, application/json şeklinde olmalı
String postData = "{\"humidity\":\""+ String(nem) +"\",\"temperature\":\""+ String(sicaklik)+"\",\"distance\":\""+ String(mesafe)+"\"}";String address = "http://192.168.0.104:3000/api/services";HTTPClient http;http.begin(address);http.addHeader("Content-Type", "application/json");auto httpCode = http.POST(postData);

POST işlemini tetiklemek için mesafenin 10cm’den fazla 50cm’den az olduğunda çalışması için ayarlıyorum.

Kodumuzu yüklediğimizde HC-SR04 sensörünün önündeki engele göre POST işlemi yapacaktır.

Nem, sıcaklık ve uzaklık değerleri gelmeye başladı bile :)

Evet bu yazımın sonuna geldik, umarım faydalı olmuştur.

Hatalı bir yer varsa ulaşırsanız düzeltebiliriz.

Github:

--

--

No responses yet