Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ESP8266 ile Sıcaklık Ölçümü Projesi
#1
Merhaba arkadaşlar,

Bu projemizde ESP8266 ile sıcaklık sensörü olan Ds18b20'yi kullanarak internet üzerinden sıcaklık ölçümünü okuma yaptık. İlgili yazımızı, nasıl yapıldığını sitemizde yazdık. Burada ise kodlarını paylaşıyoruz. Bu forum sayfamızı yeni kurduk ve haberinizin olmasını istiyoruz. Ücretsiz üye olarak, paylaşımlarımızdan haberdar olabilirsiniz. Umarız beraber nice güzel çalışmalara imza atarız.

Kodları alt taraftan kopyala-yapıştır yaparak alabilirsiniz.

ESP8266 Termometre Uygulaması ile ilgili yazımız: İndirme linklerini görebilmek için sitemize üye ol manız veya giriş yapmanız gerekiyor.Sitemize üyelikler ücretsizdir!

ESP8266 ile DS18b20 Sensörü Uygulaması Kodları:


Kod:
#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 );
}
Ara
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  ESP8266 Modülü İle Gmail’den Mesaj Gönderme Projesi Teknoloji Projeleri 0 267 26-02-2017, Saat: 10:57
Son Yorum: Teknoloji Projeleri

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi