ESP32 DS18B20

วันนี้มาทดสอบ  ESP32  กับ  DS18B20  โดยเป็นการเตรียมจะใช้  ต้นแบบนี้สำหรับการวัดอุณหภูมิรถห้องเย็นขนส่งอาหาร  หรือตู้เย็น  ตู้แช่ทั้งหลาย

โดย  DS18B20 นี้สามารถที่จะวัดอุณหภูมิติดลบได้  โดยในงานของเราครั้งนี้จะวัดที่อุณหภูมิประมาณ -10’c

อุปกรณ์ที่ต้องใช้  ESP32 V2 ,  Shield Board ,  DS18B20

การต่อขาก็ง่ายมากครับ

  • สายสีแดงของ DS18B20 ต่อเข้ากับ  3V3
  • สายสีดำต่อกับกราวน์   GND
  • และสายสีเหลืองต่อกับ  GPIO2   แต่ตามรูปเป็น  GPIO4 
  • และมี Resistor  4.7 ต่อคร่อม  3V3 กับ  GPIO2  ตามรูป

เลือก  ESP32 Dev Module  และ  Programmer AVRSIP mkll

ทั้งนี้จะต้องนำ Library Onewire และ  DallasTemperature มาลงให้ถูกต้องนะครับ  ตามลิงก์นี้เลย

https://github.com/milesburton/Arduino-Temperature-Control-Library

และ  OneWire  https://github.com/PaulStoffregen/OneWire

โดยในการดาวน์โหลดจาก github  ท่านจะต้องนำมาลง  โดยการ Include Library .Zip ไฟล์   จากนั้นจะต้องเข้าไปเปลี่ยน   โฟลเดอร์

Arduino-Temperture-Control-Library   เป็น  DallasTemperature  (โดยจะต้องระวังจะไปทับการ DallasTemperature Version ก่อนๆ ที่อาจจะต้องทำสำรองไว้ก่อน)   และ OneWire-Master เป็น  OneWire  (โดยจะต้องระวังจะไปทับการ OneWire Version ก่อนๆ ที่อาจจะต้องทำสำรองไว้ก่อน)

จากนั้นทำการปิด  Arduino IDE และเปิดใหม่  ก็จะทำให้ระบบทำงานได้เรียบร้อยดี

/*
 *  This sketch sends data via HTTP GET requests to data.sparkfun.com service.
 *
 *  You need to get streamId and privateKey at data.sparkfun.com and paste them
 *  below. Or just customize this script to talk to other HTTP servers.
 *  Set board NodeMCU-32S pr ESP32 Dev Module
 *  Set Programmer AVRISP mkll
 */

// Use 3V3 GIOP 2 ESP32 Dev Module 
// Programmer AVRSIP mkll


#include <Adafruit_Sensor.h>

/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com  
*********/

#include <OneWire.h>
#include <DallasTemperature.h>

// GPIO where the DS18B20 is connected to
const int oneWireBus = 2;     

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);

// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);



//=========
#include <WiFi.h>
//======

 //====

const char* ssid     = "Arsenal2019_2.4G";
const char* password = "kb75699212";
//const char* ssid     = "dlink_DWR-932C_0C4E";
//const char* password = "gkyVD35784";
//const char* ssid     = "true_home2G_F78";
//const char* password = "96104427";
//const char* ssid     = "AndroidAP-J7";
//const char* password = "braw5645";

const char* host = "otrixiot.com";
const char* code = "xxxxxxxx";
float tempC_0 = 0;
float tempF_0=0;
float humid_0 = 0;
float vHumidity = 0;
float vTemperature = 0;
float data1=15;
float data2=33;
float data3=33;
float data4=140;
float data5=200;
float data6=33;
float data7=33;
float data8=33;
float data9=33;
float data10=33;
float data11=33;
float data12=33;
float data13=33;
float data14=33;
float data15=33;
float data16=33;
float data17=33;
float data18=33;
float data19=33;
float data20=33;
float temperatureC=30;
float temperatureF=75;

/*
void setup_Sensor_Box_Temperature()
{
  dht.begin();
}
*/
/// ===
void ds18b20_setup() 
{
  // Start the Serial Monitor
  Serial.begin(115200);
  // Start the DS18B20 sensor
  sensors.begin();  
}

// Main setup ========
void setup()
{
    Serial.begin(115200);
    ds18b20_setup();      
    delay(10);

    // We start by connecting to a WiFi network

    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}

int value = 0;

void loop()
{
    delay(5000);
    ds18b20_loop();
//    scanSensor_Box_Temperature();
    //data1 = vTemperature;
    ++value;
    data1 = tempC_0;
    data2 = tempF_0;
    Serial.print("connecting to ");
    Serial.println(host);

    // Use WiFiClient class to create TCP connections
    WiFiClient client;
    const int httpPort = 80;
    if (!client.connect(host, httpPort)) {
        Serial.println("connection failed");
        return;
    }

    // We now create a URI for the request
     String url = "/api/insertData?device_id=" + String(xxx)+"&code="+String(code)+"&data1=" +String(data1) +"&data2="
   + String(data2)+"&data3=" +String(data3)+"&data4=" +String(data4)+"&data5=" +String(data5)
   +"&data6=" +String(data6)+"&data7=" +String(data7)+"&data8=" +String(data8)+"&data9=" +String(data9)
   +"&data10=" +String(data10)+"&data11=" +String(data11)+"&data12=" +String(data12)+"&data13=" +String(data13)
   +"&data14=" +String(data14)+"&data15=" +String(data15)+"&data16=" +String(data16)+"&data17=" +String(data17)
   +"&data18=" +String(data18)+"&data19=" +String(data19)+"&data20=" +String(data20);   
 
    Serial.print("Requesting URL: ");
    Serial.println(url);

    // This will send the request to the server
    client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n\r\n");
    unsigned long timeout = millis();
    while (client.available() == 0) {
        if (millis() - timeout > 5000) {
            Serial.println(">>> Client Timeout !");
            client.stop();
            return;
        }
    }

    // Read all the lines of the reply from server and print them to Serial
    while(client.available()) {
        String line = client.readStringUntil('\r');
        //Serial.print(line);
    }

    Serial.println();
    Serial.println("closing connection");
    delay(50000);
}
//====
void ds18b20_loop() 
{
  sensors.requestTemperatures(); 
  float temperatureC = sensors.getTempCByIndex(0);
  float temperatureF = sensors.getTempFByIndex(0);
  Serial.print(temperatureC);
  Serial.println("ºC");
  Serial.print(temperatureF);
  Serial.println("ºF");
  delay(5000);  
  tempC_0 = temperatureC;
  tempF_0 = temperatureF;
}

//====

ตามโปรแกรมจะเป็นการส่งไปยังแพลตฟอร์ม    Otrixiot.com  

 

153 total views, 1 views today