ESP8266 ile Sıcaklık Sensörünü Kullanarak Ölçüm Alma Projesi

Bu projemizde ESP8266 modülü ile uzaktan sıcaklık sensörleri ile sıcaklığı nasıl okuyabileceğimizi anlatacağız. Ayrıca ESP8266 modülüne birden fazla DS18B20 sıcaklık sensörünü ekleyebileceğinizi görebileceksiniz. Ne işe yarar diye düşünürseniz. Bundan sonrası sizin hayal gücünüze kalıyor. Örneğin sensörümüzün birisi çay suyumuzun sıcaklığını, birisi evimizin sıcaklığını, birisi istediğimiz başka bir yerin sıcaklığını ölçebilir. Bu ölçülen sıcaklıkları da HTTP serveri ile internetten görebileceğiz.

Malzeme Listesi:

  • ESP8266 12e V3
  • 3 x DS18b20
  • 4k7 değerinde Direnç
  • Jumper veya herhangi kablo

Yukarıdaki malzemeleri, elektronik malzeme satan herhangi bir yerden alabilirsiniz. Biz yaparken, internetten aldığımız bu malzemelerin toplam maliyeti 30-40 lirayı geçmedi. Bunu da aklınızda bulundurmanızı öneririz.

ESP8266 ile DS18b20 Birbirine Bağlantı Şeması

Resmi yeni sekmede açarak büyütebilirsiniz.

Yukarıda şemayı görebilmektesin. Ayrıca burada kısaca yazacağız.

  • Sıcaklık sensörlerimiz olan DS18b20 sensörlerini paralel bağlıyoruz.
  • 4k7 değerindeki direncimizi VCC ve DQ arasında bağlıyoruz.
  • ESP8266 GND ile DS18b20 sensörünün GND’sini bağlıyoruz.
  • Son olarak ESP8266 modülünün D3 kısmı ile DS18b20 sensörlerinin DQ pinlerini bağlıyoruz.

WiFi Bağlantısını Yapma:

İlk başta Arduino IDE yazılımı bilgisayarında yüklü olması gerekmektedir. Yüklü değilse Arduino sayfasından ücretsiz olarak yükleyebilirsiniz. Bu projemiz Arduino IDE 1.8.1 de yapılarak, çalıştırılmıştır.

Yazılıma kodları yüklemeden önce ESP8266 modülünün WiFi bağlantısını sağlamalısınız. Bunun için aşağı tarafta yazılan ifadeleri kendi WiFi kullanıcı adı ve şifresine göre değiştiriniz.

//WIFI

const char* ssid = “WiFi Kullanıcı Adı”;

const char* password = “WiFi Şifresi”;

Arduino Yazılımında ESP8266 Ayarlaması

Resimleri yeni sekmede açarak büyütebilirsiniz.

Yukarıdaki resimlerde açıklandığı gibi yazılımda ESP8266’yı ayarlamamız gerekiyor. Bunun için;

  • ESP8266 USB ile bilgisayara bağlayalım,
  • ESP8266 Board’unuz seçelim,
  • Senin ESP8266’na ait COM port’unu seçelim.
  • Upload işlemini yapalım.

ESP8266 Üzerinden HTTP Server’ının Test Edilmesi

Resimleri yeni sekmede açarak büyütebilirsiniz.

Yine yukarıdaki resimler test etmene yardımcı olacak ayrıca yazı ile tekrar açıklarsak;

  • Yazılımdan serial monitörü açalım,
  • Serial monitörden server IP alalım
  • İnternet tarayıcımızdan boş bir sayfa açıp işlemi tamamlayalım.

Bağlantıları, ayarlamaları ve kodları doğru attıktan sonra her 5 dakika da bir değerin değiştiğini göreceksiniz. 

#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <WiFiClient.h> #include <OneWire.h> #include <DallasTemperature.h> //—————————————— //DS18B20 #define ONE_WIRE_BUS D3 //Pin to which is attached a temperature sensor #define ONE_WIRE_MAX_DEV 15 //The maximum number of devices OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); int numberOfDevices; //Number of temperature devices found DeviceAddress devAddr[ONE_WIRE_MAX_DEV]; //An array device temperature sensors float tempDev[ONE_WIRE_MAX_DEV]; //Saving the last measurement of temperature float tempDevLast[ONE_WIRE_MAX_DEV]; //Previous temperature measurement long lastTemp; //The last measurement const int durationTemp = 5000; //The frequency of temperature measurement //—————————————— //WIFI const char* ssid = “”; const char* password = “”; //—————————————— //HTTP ESP8266WebServer server(80); //—————————————— //Convert device id to String String GetAddressToString(DeviceAddress deviceAddress){ String str = “”; for (uint8_t i = 0; i < 8; i++){ if( deviceAddress[i] < 16 ) str += String(0, HEX); str += String(deviceAddress[i], HEX); } return str; } //Setting the temperature sensor void SetupDS18B20(){ DS18B20.begin(); Serial.print(“Parasite power is: “); if( DS18B20.isParasitePowerMode() ){ Serial.println(“ON”); }else{ Serial.println(“OFF”); } numberOfDevices = DS18B20.getDeviceCount(); Serial.print( “Device count: ” ); Serial.println( numberOfDevices ); lastTemp = millis(); DS18B20.requestTemperatures(); // Loop through each device, print out address for(int i=0;i<numberOfDevices; i++){ // Search the wire for address if( DS18B20.getAddress(devAddr[i], i) ){ //devAddr[i] = tempDeviceAddress; Serial.print(“Found device “); Serial.print(i, DEC); Serial.print(” with address: ” + GetAddressToString(devAddr[i])); Serial.println(); }else{ Serial.print(“Found ghost device at “); Serial.print(i, DEC); Serial.print(” but could not detect address. Check power and cabling”); } //Get resolution of DS18b20 Serial.print(“Resolution: “); Serial.print(DS18B20.getResolution( devAddr[i] )); Serial.println(); //Read temperature from DS18b20 float tempC = DS18B20.getTempC( devAddr[i] ); Serial.print(“Temp C: “); Serial.println(tempC); } } //Loop measuring the temperature void TempLoop(long now){ if( now – lastTemp > durationTemp ){ //Take a measurement at a fixed time (durationTemp = 5000ms, 5s) for(int i=0; i<numberOfDevices; i++){ float tempC = DS18B20.getTempC( devAddr[i] ); //Measuring temperature in Celsius tempDev[i] = tempC; //Save the measured value to the array } DS18B20.setWaitForConversion(false); //No waiting for measurement DS18B20.requestTemperatures(); //Initiate the temperature measurement lastTemp = millis(); //Remember the last time measurement } } //—————————————— void HandleRoot(){ String message = “Number of devices: “; message += numberOfDevices; message += “\r\n<br>”; char temperatureString[6]; message += “<table border=’1′>\r\n”; message += “<tr><td>Device id</td><td>Temperature</td></tr>\r\n”; for(int i=0;i<numberOfDevices;i++){ dtostrf(tempDev[i], 2, 2, temperatureString); Serial.print( “Sending temperature: ” ); Serial.println( temperatureString ); message += “<tr><td>”; message += GetAddressToString( devAddr[i] ); message += “</td>\r\n”; message += “<td>”; message += temperatureString; message += “</td></tr>\r\n”; message += “\r\n”; } message += “</table>\r\n”; server.send(200, “text/html”, message ); } void HandleNotFound(){ String message = “File Not Found\n\n”; message += “URI: “; message += server.uri(); message += “\nMethod: “; message += (server.method() == HTTP_GET)?”GET”:”POST”; message += “\nArguments: “; message += server.args(); message += “\n”; for (uint8_t i=0; i<server.args(); i++){ message += ” ” + server.argName(i) + “: ” + server.arg(i) + “\n”; } server.send(404, “text/html”, message); } //—————————————— void setup() { //Setup Serial port speed Serial.begin(115200); //Setup WIFI WiFi.begin(ssid, password); Serial.println(“”); //Wait for WIFI connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(“.”); } Serial.println(“”); Serial.print(“Connected to “); Serial.println(ssid); Serial.print(“IP address: “); Serial.println(WiFi.localIP()); server.on(“/”, HandleRoot); server.onNotFound( HandleNotFound ); server.begin(); Serial.println(“HTTP server started at ip ” + WiFi.localIP().toString() ); //Setup DS18b20 temperature sensor SetupDS18B20(); } void loop() { long t = millis(); server.handleClient(); TempLoop( t ); }

Teknoloji Projeleri Youtube Kanalımızdaki Son Videomuza Göz Atmış Mıydınız?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir