Merhaba
esp32 ile akıllı ev otomasyonu yapıyorum. html sayfasından veri tabanına (sql) bilgi yazıyorum. html de butona bastığım zaman lamba için lamba, elektrik aç kapa vb işlemleri yapacak. burada elektrik açıp kapatabiliyorum. ancak önceden çalışan lamba aç kap çalışmıyor. Bir türlü hataya bulamadım.
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Arduino_JSON.h>
#define ONE_WIRE_BUS 27
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//#include <WiFiAP.h>
//#include <WiFiClient.h>
//#include <MQ135.h>
//#define WIFI_SSID "esp"
//#define WIFI_PASSWORD "12345"
#define WIFI_SSID "FiberHGW_ZTDZ5N_2.4GHz"
#define WIFI_PASSWORD ""
String LED_kmk = "1"; // led yakmak için string değişken
String data_to_send = "";
//const char* serverName = "https://barisbilirsoylu.net.tr/esp-weather-station(up).php";
//const char* serverName = "https://barisbilirsoylu.net.tr/esp32_update1.php";
//const char* serverName = "https://barisbilirsoylu.net.tr/index1.php";
const char* serverName = "https://barisbilirsoylu.net.tr/esp-post-data.php";
String sensorName = "Sensor";
String apiKeyValue = "tPmAT5Ab3j7F9";
String sensorKonum= "Okul";
String postData = "";
String payload = "";
String veri1="";
String veri2="";
String veri3="";
//Su seviye alt ve üst degerler
String svri;
int alt = 420;
int ust = 520;
#define susenPin A7
int val=0;
int lamba= 21; //Evin lambasının bağlı olduğu röle_1 için pin
int elektrik= 18; //Evin elektriklerini açmak-kapatmak için bağlanmış röle_2 için pin
int sicaklikPin = 27; //Evin sıcaklığını ölçmek için kullanılan LM35 için kullanılan pin.
int fan = 23; //Evi havalandırmak için bağlanacak olan fan için pin.
int gaz = 15; //Evin hava kalitesini ölçmek için kullanılan analog pin.
int hareket = 22; //Evde hareketi alglayacak olan sensör
int analogDeger;
int sicaklikLed= 5;
float sicak=0;
int gazNormal=4;
int gazAlarm=2;
int buzer=23;
int hrkLed=19;
int ssvy=26;
//#define LED_01 21
// Defines GPIO 12 as LED_2.
//#define LED_02 18
unsigned long lastTime = 0;
// Timer set to 10 minutes (600000)
//unsigned long timerDelay = 600000;
// Set timer to 30 seconds (30000)
unsigned long timerDelay = 200;
void setup()
{
// put your setup code here, to run once:
pinMode(lamba,OUTPUT);
pinMode(elektrik,OUTPUT);
pinMode(sicaklikPin,INPUT);
pinMode(fan,OUTPUT);
pinMode(sicaklikLed,OUTPUT);
pinMode(gaz,INPUT);
pinMode(hareket,INPUT);
pinMode(2, OUTPUT);
pinMode(gazNormal, OUTPUT);
pinMode(gazAlarm, OUTPUT);
pinMode(buzer, OUTPUT);
pinMode(hrkLed, OUTPUT);
pinMode(ssvy, OUTPUT);
//DS18B20 sıcaklık sensörü başlatılıyor.
Serial.begin(115200);
sensors.begin();
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
digitalWrite(sicaklikLed,LOW);
}
void hrk()
{
if((digitalRead(hareket))==HIGH){
Serial.println("Hareket Algılandı");
digitalWrite(hrkLed,HIGH);
}
else if((digitalRead(hareket))==LOW){
Serial.print("Hareket Algılanmadı");
digitalWrite(hrkLed,LOW);
}
}
void su_svy()
{
//val = analogRead(susenPin);
val=500;
if (val == 0) {
Serial.println("Su Seviyesi: Boş");
digitalWrite(4, LOW);
String svri="Boş";
}
else if (val > 0 && val <= alt) {
Serial.println("Su Seviyesi: Düşük");
digitalWrite(4, HIGH);
String svri="Düşük";
}
else if (val > alt && val <= ust) {
Serial.println("Su Seviyesi: Orta");
digitalWrite(4, LOW);
String svri="Orta";
}
else if (val > ust) {
Serial.println("Su seviyesi: Dolu");
String svri="Dolu";
}
}
void lmba(){
//If the received data is LED_is_on, we set HIGH the LED pin
if(veri1 == "Lmb_on"){
Serial.println("gel");
digitalWrite(21,HIGH);
digitalWrite(ssvy,HIGH);
}
//If the received data is LED_is_on, we set HIGH the LED pin
else if(veri1 == "Lmb_of"){
Serial.println("git");
digitalWrite(21,LOW);
digitalWrite(ssvy,LOW);
}
}
void fann()
{
if(veri3 == "fan_on"){
digitalWrite(fan, HIGH);
digitalWrite(2, HIGH);
}
//If the received data is LED_is_on, we set HIGH the LED pin
else if(veri3 == "fan_of") {
digitalWrite(fan, LOW);
digitalWrite(2, LOW);
}
}
void elekt()
{
if(veri2 == "elk_on"){
digitalWrite(elektrik, HIGH);
}
//If the received data is LED_is_on, we set HIGH the LED pin
else if(veri2 == "elk_of"){
digitalWrite(elektrik, LOW);
}
}
void gazOkuma()
{
//analogDeger=analogRead(gaz);
//analogDeger=200;
Serial.println("CO2 Miktarı(in PPM): ");
Serial.println(analogDeger);
delay(2000);
if(analogDeger>=330 && analogDeger<=500) {
digitalWrite(gazAlarm,HIGH);
digitalWrite(buzer,HIGH);}
else if(analogDeger>=100 && analogDeger<330){
digitalWrite(gazNormal,HIGH);
}
}
void sicaklikOkuma(){
sensors.requestTemperatures();
Serial.print("Sicaklik: ");
float sicak= sensors.getTempCByIndex(0);
Serial.print(sicak);
Serial.println("ºC");
delay(500);
if(sicak>=45){digitalWrite(sicaklikLed,HIGH); }
else digitalWrite(sicaklikLed,LOW);
}
void loop()
{ // put your main code here, to run repeatedly:
digitalWrite(4,LOW);
//digitalWrite(5,LOW);
if ((millis() - lastTime) > timerDelay) {
if(WiFi.status()== WL_CONNECTED){
WiFiClientSecure *client = new WiFiClientSecure;
client->setInsecure(); //don't use SSL certificate
HTTPClient https;
// data_to_send = "check_LED_status=" + LED_id; // Lamba yakmak için
// Your Domain name with URL path or IP address with path
https.begin(*client, serverName);
https.addHeader("Content-Type", "application/x-www-form-urlencoded");
hrk();
su_svy();
sicaklikOkuma();
gazOkuma();
//"api_key=" + apiKeyValue +
//Prepare your HTTP POST request data
//sensors.getTempCByIndex(0)
//value1=sıcaklık,value2=gaz,value5=hareket,value6=sıvı seviye,value7=fan
String httpRequestData1 = "api_key=" + apiKeyValue +"&sensor=" + sensorName+"&konum=" + sensorKonum + "&value1=" + String(60)
+"&value2=" + String(500)+"&value5=" + String((digitalRead(hareket)))
+"&value6=" + String(500);
String httpRequestData2=("check_SensorData=");
//String httpRequestData=("check_SensorData=" + LED_kmk);
//String httpRequestData = "api_key=" + apiKeyValue +"&Konum=" + sensorKonum + "&Sicaklik=" + String(sensors.getTempCByIndex(0))
// + "&Gaz=" + String(69) + "&Lamba_durum=" + String(lamba) + "";*/
Serial.println("httpRequestData1: ");
Serial.print(httpRequestData1);
// Serial.println("httpRequestData2: ");
//Serial.print(httpRequestData2);
// You can comment the httpRequestData variable above
// then, use the httpRequestData variable below (for testing purposes without the BME280 sensor)
//String httpRequestData = "api_key=tPmAT5Ab3j7F9&sensor=BME280&location=Office&value1=24.75&value2=49.54&value3=1005.14";
// Send HTTP POST request
int httpResponseCode1 = https.POST(httpRequestData1);
int httpResponseCode2 = https.POST(httpRequestData2);
//payload = https.getString();
// If you need an HTTP request with a content type: text/plain
//https.addHeader("Content-Type", "text/plain");
//int httpResponseCode = https.POST("Hello, World!");
// If you need an HTTP request with a content type: application/json, use the following:
//https.addHeader("Content-Type", "application/json");
//int httpResponseCode = https.POST("{\"value1\":\"19\",\"value2\":\"67\",\"value3\":\"78\"}");
//if (httpResponseCode1>0) {
if (httpResponseCode1 || httpResponseCode2 >0) {
//if (httpResponseCode2 >0) {
//Serial.println("HTTP Response code2: ");
// Serial.println(httpResponseCode2);
Serial.println(httpResponseCode1);
Serial.println(payload);
String payload = https.getString();
veri1=payload.substring(0,8);
veri2=payload.substring(8,14);
veri3=payload.substring(14,20);
//Print return code
lmba();
elekt();
fann();
// if(response_code == 200){ //If code is 200, we received a good response and we can read the echo data
// String response_body = http.getString(); // //Save the data comming from the website
Serial.println("Server reply: "); //Print data to the monitor for debug
Serial.println(veri1);
Serial.println(veri2);
Serial.println(veri3);
}
else {
Serial.print("Error code: ");
// Serial.println(httpResponseCode2);
}
// Free resources
https.end();
}
else {
Serial.println("WiFi Disconnected");
}
//Send an HTTP POST request every 30 seconds
//delay(30000);
lastTime = millis();
}}
(https://i.ibb.co/SnQgmD5/5.png) (https://ibb.co/SnQgmD5)
Html üzerinden gelen veri1 değişkeni içerikleri doğru mu? Doğru ise pin çıkışını ölçü aletiyle doğrulayın. Belki yapı açık-kolektör olabilir. Pull-up/down direnç ekleyip tekrar deneyin.
I2C olarak kullanılan pin bu, belki de bu protokol setup içinde kapatılmalı.
İnternet trafiğinde gönderilen ve alınan paketlerde tıpkı işlemciye yaptığımız hata ayıklama modu gibi görüntülenebiliyor. Bunun için wireshark gibi ücretsiz programlar ile esp32nin internet yayınını pc üzerinden alacak hale getirebilirsen gelen ve giden tüm paketleri izleyebilirsin. Buda hatanın nerede olabileceği hakkında net bilgiler verecektir.
Alıntı yapılan: mehmet - 05 Eylül 2024, 01:07:09Html üzerinden gelen veri1 değişkeni içerikleri doğru mu? Doğru ise pin çıkışını ölçü aletiyle doğrulayın. Belki yapı açık-kolektör olabilir. Pull-up/down direnç ekleyip tekrar deneyin.
I2C olarak kullanılan pin bu, belki de bu protokol setup içinde kapatılmalı.
Öncedenbunu
Çalıştırdım.sistem düzgün çalışıyodu
05 Eylül 2024, 07:56:00Veri1 içerigi dogru