ESP8266-01 ile Tüm Dünyadan Evinize web sitenizle bağlantı kurun.

ESP8266-01 + Arduino ile Tüm Dünyadan Evinize web sitenizle bağlantı kurun. (ESP Kütüphanesine ve Gerçek IP adresinize ihtiyacınız olmadan). Hem evinizdeki bütün alıcıların durumlarını kontrol edin. Hem de evinizdeki aygıtları web siteniz üzerinden çalıştırın.

Daha önceki yazımda internete bilgi göndermeyi göstermiştim. thingspeak örneği gibi.

Şimdi ise kendi web sitenizi kullanarak ya da ücretsiz web sitesi yaparak evinize bağlanmayı göstereceğim. Burada PHP kullanımı ön planda olsa da kullanılan dosyalar anlaşılabilir ve geliştirilebilir olduğundan az bir bilgi ile kendinize göre değiştirebilirsiniz.(Benim PHP bilgim hiç yoktu. Yine de standart komutlarla bir şeyler değiştirebildim. Sizlerde küçük bir çabayla örnekleri istediğiniz şekilde değiştirebilirsiniz.)

MQTT sistemini bilmiyorum. İlk izlenimlerime göre bu sistemin MQTT benzeri bir sisteme benzediğini söyleyebilirim. MQTT sisteminde broker denilen aracı var tüm vericiler buraya bilgileri bırakır ve tüm alıcılarda buradan bilgileri alırlar. Burada anlatacağım konu da benzer bir sistem. Web sitenizi broker olarak kullanmanızı sağlayacak. GÜVENLİ Mİ? Bu haliyle güvenli değil. Güvenli hale gelebilir mi. Evet bir anahtar kelime belirlersiniz ve bu anahtar kelime olmadan web siteniz bile açılamaz. Ben güvenlik tarafına girmeyeceğim.

Sistem kafanızda canlansın diye yukarıdaki resmi koydum. Broker yazan yer WEB SİTENİZ olacak. Resimdeki gibi bir web sitesinde alıcı ve vericileri buluşturabileceksiniz.( Tabii ki şimdilik güvenli anahtar olmayacak. )

Ayrıca evinize bağlanmak için Modeminizin gerçek IP sini bile bilmenize gerek yok. ( Bu konuya da ileride değineceğiz. ESP8266-01 ile Gerçek IP nizi nasıl bulacaksınız ve daima güncel olacak. istediğinizde sanki ev ağınızı kullanıyormuş gibi bağlanabileceksiniz. )

Artık konumuza geçelim.

Öncelikle 1. videoda çalışma sistemini göreceksiniz. Bunu arduino ile gösteremiyorum çünkü bütün çıktıları bir arada görebilmeniz gerekiyor. Bunu da proteus simulatör ve seri port’a bağlı gerçek ESP8266-01 modülüyle gösterebiliyorum. ESP kütüphanelerinin kullanılmasına gerek yok. ya da ESP ye program yüklemenize gerek yok.
Zaten ESP modül satın alındığında 115200 baud hızında AT komut seti kullanılabilir olarak geliyor. Sadece arduino nun TX ve RX uçlarını bağlamanız yetiyor. (Tecrübesiz olanlar için uyarı. TX RX uçları bağlıyken arduinoya program yükleyemeyebilirsiniz. TX RX uçlarını programınızı yükledikten sonra bağlayın.)
Programda F komutları göreceksiniz. Bunlar sadece değişkenlerin az olan data belleğinde değil program belleğinde saklanması içindir. Data belleğini verimli kullanmak için bunu yapıyorum.
Arduino Nano yada Uno kullanılabilir. DHT22 kütüphanesi mevcut olduğundan programda DHT22 kütüphanesini kullandım. Bu sensör yerine DHT11 ve benzeri sıcaklık ve nem sensörleri kullanılabilir. ( program içerisinde sensöroku kısmını dht11 e göre revize etmeniz gerekebilir. )
ESP kütüphanelerine ihtiyacınız yok fakat DHT-sensor-library-master, ve o kütüphanenin kullanılmasında gereken, Adafruit_Sensor-master kütüphaneleri ile birlikte JSON formatını çözümleyen ArduinoJson-master kütüphanelerini buradan indirebilirsiniz.

Normalde sistem 3 ışık kontrolüne göre yapılsa da proteus ta 4 temsili led göreceksiniz.
Sensör sayısında yada kontrol edeceğiniz lamba röle gibi cihazların sayısında sınırlama yok. Bu sınır ancak web sitesinde kullanacağınız MYSQL denilen veritabanı sınırlarına kadar kullanılabilir, ki bu kadar sensörü bir yerde toplamanız çok zordur. çünkü veritabanları binlerce bilgi alır. Tabii ki bir de  Arduino nun kontrol kapasitesine bağlıdır. Dosyaları anladığınızda bunun bir sorun olmadığını göreceksiniz.

Sistemin mantığı :  ESP, sensör bilgilerini arduino ile okuduktan sonra verileri web sitemizdeki veritabanına iletir. Bizim web sitemizden gönderdiğimiz komutları ise php dosyaları veritabanına yazar. ESP veritabanına yazdığımız komutları okuyup arduinoya iletir ve arduino bu bilgileri JSON kütüphanesiyle ayrıştırıp, uygulamaya koyar. PHP dosyaları da arduinonun kaydettiği sensör bilgilerini web sitesinden bize gösterir.
Örnek senaryo: Evimizde yokken bir duman sensörü aktif oldu. bunu arduino ile hissedip veritabanına yazdık. Veri tabanına biz okuyuncaya kadar haberdar olamayız. Bu durumda haberdar olmamız için PHP dosyasına bir kontrol mekanizması oluşturup acil durumlarda sms atmasını söyleyebiliriz. Ya da ESP burada devreye girerek hem bilgileri veritabanına iletir ve hem de SMS ile bizi bilgilendirir. Kullanıcı acil mesajı alır almaz web sitesini açar ve duruma müdahale etmek için evin elektriğini keser. Ayrıca yangın sistemi varsa yangın sistemini çalıştırabilir. Bu yangın sadece bir odadaysa o zaman kullanıcı sadece o odanın söndürme sistemine komut verebilir. Kamera olmadan sensörlerin durumuna göre karar verebilir ya da internete bağlı kamerası varsa evin içerisini görüp web sayfasından komut vererek problemi çözmeye çalışır.
Bu sistem acil durum haricinde her 30sn de bir kullanıcı komutu var mı diye veritabanını okumaya gidecek şeklinde ayarlanabilir. ben videoda süreklilik olsun diye 3-5 saniye kadar ayarladım.

video sistemin proteusta çalışmasını gösteren küçük bir video.

Şimdi bu videodaki sistemin arka planını inceleyelim. Sistemin mantığını yukarıda okudunuz. Bu işlemi 2 şekilde yapacağız.

1.yol : Web sitemiz yoksa 000webhost.com adresinden web sitemizi oluşturarak .
2.yol : Önceden Web sitemiz varsa ve PHP destekliyorsa kendi web sitemizi kullanmak.

Burada göstermek istediğim birinci yol free hosting veren 000webhost sitesinden bağlantı. (2017 yılında bu site kendi domainini vermeyi durdurduğundan farklı bir ücretsiz domain almanız ve bu siteye videodaki gibi bağlamanız gerekecek. Unutmayın domain, aldıktan 1-2 gün sonra sisteme girer. bu süreçte webhost kısmını ayarlayıp beklemelisiniz. ) Domain nedir derseniz: Kısaca sitenizin ismi olarak söyleyebilirim.
Free domain her yerden alabilirsiniz.
ben, (http://www.freenom.com/tr/index.html?lang=tr) adresinden 3 aylık ücretsiz aldım. Uzun süre kullanmak isterseniz buradan ya da başka bir yerden paralı almalısınız.
Domain açıldı mı diye kontrol etmek için 000webhost da örnek web sitelerinden birini ücretsiz olarak kendi alanıma yükledim. web sitesi yayındaysa artık domain hayata geçmiştir.
Webhost kısmı 2. videoda ayrıntılı anlatılacağından burada yazmak istemiyorum.

2. video webhost kurulumu:

Bu 000webhost sistemindeki dosyaları ben yapmadım. Bunların orjinal adresi burasıdır. Yabancı bir kaynaktır. Ben bu kaynağa göre kendim tecrübe ederek videoda anlattım. Çünkü video eski olduğundan aynı şeyleri yapsanız da başarılı olamıyorsunuz.  000WEBHOST bazı sistematik değişiklikler yapmış. Videoda göreceğiniz gibi sadece veritabanı bağlantı parametresi değiştirmek için config.php dosyasında bilgiler değişecek. diğer dosyaları değişiklik yapmadan kullanabilirsiniz.
000webhost sitesindeki Programların orjinal sahibi : http://iotmonk.com/courses/creating-iot-cloud-scratch-using-php-mysql-esp12e/

NOT: bu dosyalar PHP 5.2 kullandığından ve yeni web siteleri ise PHP 7.0 a geldiğinden verilen kodlar sadece 000webhost gibi yerlerde php5.2 nin bulunduğu yerlerde geçerli olacaktır.Videoda belirtildiği gibi ayarlar bölümünden genel kısmı seçip PHP versiyonunu değiştirebilirsiniz.
www.mikrobotik.com sitemde yeni versiyonları nasıl kullanabileceğinizi görebileceksiniz. 

000WEBHOST   php dosyaları. 

Birde denemelerinizi yapabileceğiniz google eklentisi var. POSTMAN. Bu program sitenize ulaşıp PHP dosyalarını çalıştırıp sonuçları görmenizi sağlar. Bu sadece bilgisayarda denemelerinizi yapabilmeniz içindir. Postman kullanımı 4. videoda anlatılacaktır.

Şimdi gelelim kendi sitemde kullandığım metotlara. Burada ki dosyaları da indirebilirsiniz.  kendi sitenizde kullanıma açabilirsiniz. Kendi php programlarınızda değişecek olan tek yer. veritabanı ismi veri tabanı kullanıcı adı, veri tabanı şifresidir. Bunları değiştirdikten sonra tüm dosyaları rahatlıkla kullanabilirsiniz. Videoda dizin yapısı mevcuttur.
Burada benim PHP versiyonum 5.5 olarak ayarlı. videoda Cpanelde nasıl yapılacağını gösterdim. Sizlerde sitelerinizde bu ayarı yapabilirsiniz. 
POSTMAN programıyla PHP sisteminizin ve MYSQL sisteminizin çalıştığını kontrol edin. Daha sonra web sitesi aracılığıyla kullanılacak olan programı da kurup deneyin.
Dosyalar yaklaşık 2 ay boyunca test amaçlı kullanılabilir. Postman vasıtasıyla verileri görüp değiştirebilirsiniz. 

Mikrobotik_php_dosyalar. 

3. video mikrobotik sitesindeki kullanım. 

 

Artık Arduino ile ESP8266-01 kullanımına sıra geldi. Burada da ESP nin AT komutlarını kullanacağız. Bunlar için hiç bir kütüphaneye ihtiyacınız olmayacak. zaten 3-5 komut ile internete bağlanabileceksiniz.(baud hızı 115200 olarak ayarlanacak. Çünkü ESP8266-01 modüller genellikle 115200baud hızında çalışacak şekilde geliyor.   Şayet ilk bağlantı durumunu test etmek isterseniz bu sitede ESP 8266 giriş yazısı var. o yazıdaki programla ve usb seri çevirici kullanarak ilk testlerinizi yapabilirsiniz. )

Arduino programında Modeminizin bağlantı kurması için gerekli olan SSID ve password yazdığınızda ESP01, modeminize bağlanıp internete çıkmaya hazır olacak. Aynı postman daki gibi verileri web sitenize gönderecek. Web sitenizde ısı ve nem değerlerini kayıt edecek, Lamba durumunu da web sitenizdeki veri tabanından alıp uygulayacak. Bütün bu dataları kaydederken ve okurken kullanıcının web sitesi üzerinden gönderdiği light on ve off komutlarını alarak gerekli işlemleri yapabilecek. Kütüphane kullanmadan derken ESP ile ilgili kütüphaneyi kastettim. Fakat gelen bilgi JSON formatında geldiğinden bunu ayrıştırmak için arduino json kütüphanesini kullandım. Json formatı artık günümüzde bir çok yerde programlar arası data aktarımı için kullanılmaktadır.
Json formatı hakkında geniş bilgiyi bu siteden elde edebilirsiniz. Json site
bu formatı değiştirirken hata yaparsanız tüm dizi çalışmaz.
bundan dolayı formatı değiştirdiğinizde formatı bir format kontrol noktasında deneyebilirsiniz.
Ayrıca Arduino için kendi formatınızın JSON parçalamasına ait kodlamayı da bu siteden alabilirsiniz.

Arduino program link:Programda delay süreleri proteusa göre verildi kendinize göre ayarlayabilirsiniz.

 

 
#include <ArduinoJson.h>

#include "DHT.h"

#include <SoftwareSerial.h>    // ************  SADECE PROTEUSTA GÖSTERİLSİN DİYE KULLANILIYOR GERÇEK PROGRAMDA OLMASINA GEREK YOK

SoftwareSerial mySerial(10, 11); // RX, TX

#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);

__FlashStringHelper *srv1 ;
__FlashStringHelper *srv2 ;
__FlashStringHelper *srv3 ;
__FlashStringHelper *srv4 ;
__FlashStringHelper *srv5 ;
__FlashStringHelper *srv6 ;
__FlashStringHelper *srv7 ;
__FlashStringHelper *srv8 ;
__FlashStringHelper *srv9 ;
__FlashStringHelper *srv10 ;
__FlashStringHelper *srv11 ;
__FlashStringHelper *srv12 ;
__FlashStringHelper *srv13 ;

String idstr="1";
String tempstr;
String humstr;
String subindata ;
String indata ;
String strdata ;
int say=0;
int say2=0;
int findstart;
int findend;
int incomingByte = 0;
long unsigned int milissay;
int kont=0;
 
// ******   BU SENSOR NUMARASINA GÖRE DEĞİŞECEK.
void sensoku() {
   delay(100);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);
      tempstr=String(t);
      humstr=String(h);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    mySerial.println("Failed to read from DHT sensor!");
    return;
  }

  
  mySerial.print("Humidity: ");
  mySerial.print(h);
  mySerial.println(" %\t");
  mySerial.print("Temperature: ");
  mySerial.print(t);
  mySerial.println(" *C ");
  
}

void bakgel(){        // bekleme komutunu tekrar tekrar kullanmak yerine bu şekilde yapıldı hafıza kaplamasın diye. 
  
  while(Serial.available() > 0)
    {
        subindata = Serial.read();

    }
  delay(100); // 1000 delay ver. esp datası yollanırken kullanılıyor. 
  
  
}


void setup() {
  // Initialize serial port
  Serial.begin(9600);
  mySerial.begin(9600);
  mySerial.println("STARTUP");
 dht.begin();
pinMode(6, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
//  Serial.println("SSIDNO");
//  Serial.println("PASSNO");
      espready();    // *************** son halinde 
} 

// ***** ESP 8266-01 AT KOMUTLARIYLA MODEME BAĞLANTI **********************

void espready() {
srv1=F("AT+CWMODE=3");        // F fonksiyonu ile program belleğine gönderildi bu değişkenler. 
srv2=F("AT+CIPMODE=0");
srv3=F("AT+CIPMUX=1");
srv4=F("AT+CWDHCP=1,0");
srv5=F("AT+CIPSTA=\"192.168.1.140\"");
srv6=F("AT+CWJAP=\"Guest_SSID_1_4A09\",\"misafir1234\"");
srv7=F("AT+CIPSTART=0,\"TCP\",\"www.mikrobotik.com\",80");
srv8=F("AT+CIPSEND=0,66");
srv9=F("GET /api/led/Lreadmysql.php HTTP/1.1");
srv10=F("Host: www.mikrobotik.com");
srv11=F("GET /api/weather/wupdate.php?id=1&hum=28 HTTP/1.1");
srv12=F("Host: www.mikrobotik.com");
  
// Serial.println("AT+RST");  //3000 delay ver
//  delay(2000);
  Serial.println(srv1);
 bakgel();delay(500);
 Serial.println(srv2);
 bakgel();delay(500);
  Serial.println(srv3);
bakgel();delay(500);
  Serial.println(srv4);
  bakgel();delay(500);
 Serial.println(srv5);
  bakgel();delay(500);
  Serial.println(srv6);
  delay(3000);
  bakgel();
  
  
       
}

// **************  GELEN JSON FORMATLI BİLGİNİN AYRIŞTIRILMASI VE UYGULANMASI
 
void jsonpar() {
 mySerial.println("GELEN JSON FORMATLI BiLGi AYRISTIRILIYOR"); 
delay(1000);
  findstart=indata.indexOf("[");
  findend=indata.indexOf("]");
  if (findstart>0){
  subindata=indata.substring(findstart, findend+1);
  indata=subindata;
 
  }
  
//char responseBody[] = R"raw([{"id":"1","status":"on"},{"id":"2","status":"off"},{"id":"3","status":"on"},{"id":"4","status":"on"}],0 closed)raw";  // jsonda kullanılacak formatın tırnak işaretlerini \" yazmaktan kurtarıyor.
// *********************** şayet standart json formatını kopyalayıp gönderme yapılacaksa kullanılabilir.
//"[{\"id\":\"1\",\"status\":\"on\"},{\"id\":\"2\",\"status\":\"off\"},{\"id\":\"3\",\"status\":\"on\"}]"; ** arduinonun anladığı format
char responseBody[150] ;
indata.toCharArray(responseBody, 150); // seri porttan gelen string datayı chararray şekline dönüştürür. data eklendikçe karakter sayısını yükselt.*****

//____________________________________     
const size_t bufferSize = JSON_ARRAY_SIZE(4) + 4*JSON_OBJECT_SIZE(2) + 70;  // BU LİNKTEN FORMATINIZI KONTROL EDİN VE BU SATIRI DEĞİŞTİRİN https://arduinojson.org/v5/assistant/
DynamicJsonBuffer jsonBuffer(bufferSize);

const char* json = responseBody;
JsonArray& root = jsonBuffer.parseArray(json);
JsonArray& root_ = root;

// ****************************************************
const char* root_0_id = root_[0]["id"]; // "1"
mySerial.println(root_0_id);
say=atoi(root_0_id);
const char* root_0_status = root_[0]["status"]; // "on"
mySerial.println(root_0_status);
strdata=String(root_0_status);
if (say==1 && strdata=="on"){
  mySerial.println("LIGHT_1 ON");
  digitalWrite(6, HIGH);
}else if (say==1 && strdata=="off" ){
  mySerial.println("LIGHT_1 OFF");
 digitalWrite(6, LOW);
}
// ****************************************************
const char* root_1_id = root_[1]["id"]; // "2"
say=atoi(root_1_id);
mySerial.println(root_1_id);
const char* root_1_status = root_[1]["status"]; // "off"
mySerial.println(root_1_status);
strdata=String(root_1_status);
if (say==2 && strdata=="on"){
  mySerial.println("LIGHT_2 ON");
  digitalWrite(3, HIGH);
}else if (say==2 && strdata=="off" ){
  mySerial.println("LIGHT_2 OFF");
  digitalWrite(3, LOW);
}
// ****************************************************
const char* root_2_id = root_[2]["id"]; // "3"
say=atoi(root_2_id);
mySerial.println(root_2_id);
const char* root_2_status = root_[2]["status"]; // "off"
mySerial.println(root_2_status);
strdata=String(root_2_status);
if (say==3 && strdata=="on"){
  mySerial.println("LIGHT_3 ON");
  digitalWrite(4, HIGH);
}else if (say==3 && strdata=="off" ){
  mySerial.println("LIGHT_3 OFF");
  digitalWrite(4, LOW);
}
// ****************************************************   4 TEN FAZLA IŞIK VARSA BU KISMI KOPYALAYIP AYARLARINI YAP. **********************
 const char* root_3_id = root_[3]["id"]; // "4"
 say=atoi(root_3_id);
mySerial.println(root_3_id);
const char* root_3_status = root_[3]["status"]; // "on"
mySerial.println(root_3_status);
strdata=String(root_3_status);
if (say==4 && strdata=="on"){
  mySerial.println("LIGHT_4 ON");
  digitalWrite(5, HIGH);
}else if (say==4 && strdata=="off" ){
  mySerial.println("LIGHT_4 OFF");
  digitalWrite(5, LOW);
}
}

void weatherkontrol() {

srv11=F("GET /api/weather/wupdate.php?id=1&hum=28&temp=34 HTTP/1.1");

idstr="1";    // ******************** SENSOR NUMARASINA GORE DEĞİŞECEK ****************************
//tempstr="10";
//humstr="100";
 subindata="GET /api/weather/wupdate.php?id="+idstr+"&temp="+tempstr+" HTTP/1.1";
 strdata=subindata;
 say=subindata.length()+30;
 indata=String (say);
 indata="AT+CIPSEND=0,"+indata;

 mySerial.println(subindata);
 mySerial.println(indata);
delay(200);
  Serial.println(srv7);
  bakgel();delay(1000);
  Serial.println(indata);
   bakgel();delay(500);
    Serial.println(strdata);
   delay(500);
  Serial.println(srv10);
   bakgel();delay(500);
 Serial.println("");
 delay(1500);
 subindata="GET /api/weather/wupdate.php?id="+idstr+"&hum="+humstr+" HTTP/1.1";
 strdata=subindata;
 say=subindata.length()+30;
 indata=String (say);
 indata="AT+CIPSEND=0,"+indata;

 mySerial.println(subindata);
 mySerial.println(indata);
delay(500);
  Serial.println(srv7);
  bakgel();delay(1000);
  Serial.println(indata);
   bakgel();delay(500);
    Serial.println(strdata);
   delay(500);
  Serial.println(srv10);
   bakgel();delay(500);
 Serial.println("");
 delay(500);
// Serial.println("");
bakgel();

}


void webkontrol() {
  kont=0;
 
delay(200);
  Serial.println(srv7);
  bakgel();delay(500);
  Serial.println(srv8);
   bakgel();delay(500);
  Serial.println(srv9);
   bakgel();delay(500);
  Serial.println(srv10);
 bakgel();delay(500);
 Serial.println("");
 //delay(200);
// Serial.println("");



while (kont<1){
 
if(Serial.available() > 0)
    {
        indata = Serial.readStringUntil (']');
       //Serial.println(indata);
       indata =indata+"]";
       
    jsonpar();
       indata="";kont=1;
     }
     
 } 
 mySerial.println ("WEB UZERINDEN KOMUT ALINDI UYGULANDI");

}

void loop() {
milissay=millis();
while (milissay+1000>=millis()){

}
mySerial.println ("");
mySerial.println("WEB SAYFASINDAN BiLGi AL");
webkontrol();
delay(3000);
mySerial.println ("SENSOR OKUNUYOR VE GONDERiLiYOR");

sensoku();
delay(3000);
weatherkontrol();
delay(3000);




}

Programda bakgel alt programı sadece esp den dönen bilgileri bufferdan siler. ve ortalama gecikmeyi sağlar.
espready alt programı ESP nin göndermesi gereken bilgileri göndermek için hafızaya alır ve ilk komutları yollar.
Jsonpar alt programı JSON dizisini parçalar ve komutları uygular.
Weatherkontrol alt programı temp ve hum değişkenlerindeki ısı ve nem değerlerini gönderir.
webkontrol alt programı kullanıcıdan gelen bilgileri okuyup json parçalamaya gönderir.
( burada readstring json son karakteri olan “]” parantezi arar ve bulduğunda alımı durdurur. bundan dolayı son parantezi bir alt satırda ekleme yapıyoruz.)
loop alt programı ise gerekli ara gecikmeyi verip organizasyonu başlatır.

NOT: program içerisinde 155. satırda bir not var. Işık sayısı arttırıldığında bu sayıyı değiştirmeniz gerekir. bunu da oradaki linkten alabilirsiniz. Ayrıca gelen data büyüdükçe 151 ve 152. satırlardaki numaralarıda değiştirmeniz gerekecektir. sistem şu an 4 ışığa kadar kullanılabilecek durumdadır. 

WEB sayfası oluşumu ise yine PHP dosyasıdır. Herhangi bir cihazdan google gibi bir internet göstericisinden web sitesi olarak çağırabilirsiniz. Gelen sistemde 1. videoda gösterildiği gibi light butonları ve sensör kontrolleri vardır. bu dosya veri tabanına ulaşıp ESP den gelen verileri kontrol eder ve gösterir. Ayrıca kullanıcının komutlarını veri tabanına kayıt eder ve ESP nin almasını uygulamasını bekler.
İsterseniz daha da geliştirerek, uyguladım mesajını da veri tabanına yazıp kullanıcıya iletebilirsiniz. Program kolaylıkla geliştirilebilir.

 
?php
 $conn="";
 $dene="";
 
 $bak=$GLOBALS["webid"];  // bir önceki dosyadan gelen istek id numarası. 
 



 $dbhost = "localhost";   // don't change, değişmeeyecek
 $dbuser = "database user";  // veritabanı kullanıcı ismi
 $dbpass = "password";      // sifre
 $dbname = "database name"; // veritabanı ismi

 
 $conn = new mysqli($dbhost, $dbuser, $dbpass,$dbname);


if ($conn->connect_error) {
    die('Connect Error (' . $conn->connect_errno . ') '
            . $conn->connect_error);
}

if (mysqli_connect_error()) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}


//  mysql database bağlantı sağlandığında bu satıra gelir.  **********************


 /*   if (isset($_GET['id'])) {
 
    $id = $_GET['id'];
    }
*/
$sql = "SELECT id, temp , hum FROM weather"; // ****************  Bu satır açıldığında weather kısmı çalışıyor

 // $sql = "SELECT id, status FROM led"; //  ***************  bu satır açıldığında LED kısmı çalışıyor

       $result =mysqli_query($conn,$sql);

     if (mysqli_num_rows($result) > 0) {
         
//   echo " WEATHER TABLE     "   ;
while($row = mysqli_fetch_array($result)) {
//  echo "<br> id: ". $row["id"]. " - temp: ". $row["temp"]. "  hum:  " . $row["hum"] . "<br>";// ****************  Bu satır açıldığında weather kısmı çalışıyor
if ($row["id"]==1)
{
$webid1=$row["id"];
$webhum1=$row["hum"];
$webtemp1=$row["temp"];
}
if ($row["id"]==2)
{
$webid2=$row["id"];
$webhum2=$row["hum"];
$webtemp2=$row["temp"];
}
if ($row["id"]==3)
{
$webid3=$row["id"];
$webhum3=$row["hum"];
$webtemp3=$row["temp"];
}

//echo "<br> id: ". $row["id"]. " - status: ". $row["status"]. "<br>";   //  ***************  bu satır açıldığında LED kısmı çalışıyor  
}
} else {
echo "0 results<br>".mysqli_error($conn);
}       

  $sql = "SELECT id, status FROM led"; //  ***************  bu satır açıldığında LED kısmı çalışıyor

       $result =mysqli_query($conn,$sql);

     if (mysqli_num_rows($result) > 0) {
         
//   echo " LED TABLE     "   ;
while($row = mysqli_fetch_array($result)) {
// ****************** kaç adet light varsa o kadar if cümlesini kopyalayıp değişken numarası verilecek. *********************
if ($row["id"]==1)
{
$webid1=$row["id"];
$webstatus1=$row["status"];
}
if ($row["id"]==2)
{
$webid2=$row["id"];
$webstatus2=$row["status"];
}
if ($row["id"]==3)
{
$webid3=$row["id"];
$webstatus3=$row["status"];
}

//echo "<br> id: ". $row["id"]. " - status: ". $row["status"]. "<br>";   //  ***************  bu satır açıldığında LED kısmı çalışıyor  
}
} else {
echo "0 results<br>".mysqli_error($conn);
}       



    // $conn= $GLOBALS [dene];
     
   
 //echo "Connected  SON<br>";
 
 $conn -> close();

   
?>

WEB üzerinde siz www.mikrobotik.com/api/webbutton.php olarak çağırdığınızda bu program yukarıdaki webuygun.php dosyasını çağırır. Çağırırken de hangi butona bastıysanız o butonu webuygun.php ye aktarır. Programı takip ettiğinizde kaç sensör ya da light buton varsa o sensör numarasına kadar ve light numarasına kadar arttırmalısınız. satır kopyalayarak yapabilirsiniz.
Bir de 11-13 satırlar arasındaki bilgileri veritabanınıza göre doldurmanız gerekir ki veritabanını açabilsin.
webbutton.php de ise yine satır kopyalayarak sensör ve lamba sistemini arttırabilirsiniz. 

TÜM DOSYALARI BURADAN ALABİLİRSİNİZ. 

Not: mikrobotik.com sitemdeki Sistem kurulurken 3 sensör ve 3 ışık üzerine kuruldu. bunlar kolaylıkla arttırılabilir. Hatta 000webhost taki gibi insert.php yapılıp, datalog oluşturulabilir ve daha sonra bu listeler analiz edilebilir. Aynı thingspeak  yazımdaki gibi.

POSTMAN VİDEOSU :

Başta da dediğim gibi Güvenlik herkesin kendi sorunudur. ben bunları deneme olarak kullanacağım diyorsanız veriler de çok önemli veriler değil diyorsanız rahatlıkla denemelerinizi yapabilirsiniz. Ben dosyaların isimlerini değiştireceğim derseniz değiştirebilirsiniz fakat bazı php dosyalarının içerisinde bulunan isimleri de değiştirmeniz gerekecektir. Özellikle web üzerinden ayar yapan programa bir şifre ilave ederseniz sizden başkası bu web sayfasına bağlanamaz.

Videodaki bilgiler ışığında ve buradaki bilgiler ışığında hala sorun varsa buradan bana ulaşabilirsiniz. PHP bilgim var mı diye sorarsanız hiç yok. Yine de kullanılan komutlar standart olduğundan sizlerde benim gibi küçük bir çabayla değişiklik yapabilirsiniz.

POSTMAN denemelerinizde kullanılacak linkler. 2 ay boyunca orjinal dosyaları kontrol edebilirsiniz.

http://phpdene.tk/api/led/read_all.php
http://phpdene.tk/api/led/update.php?id=2&status=on
http://phpdene.tk/api/weather/read_all.php
http://phpdene.tk/api/weather/update.php?id=1&temp=21

http://www.mikrobotik.com/api/led/Lreadmysql.php
http://www.mikrobotik.com/api/led/Lupdate.php?id=2&status=”off”
http://www.mikrobotik.com/api/weather/wreadmysql.php
http://www.mikrobotik.com/api/weather/wupdate.php?id=1&hum=35&temp=20

Dosyalar yaklaşık 2 ay boyunca test amaçlı kullanılabilir. Postman vasıtasıyla verileri görüp değiştirebilirsiniz. 

Bu sistemin gerçekleştirilmesinde bana yardımcı olan arkadaşlara teşekkür ederim.

Thank you for your valuable assistance.

34 Comments

  1. Slm hocam, hay senden allah razı olsun öncelikle aradığım sorunun cevabını sayende bulmuş oldum. Şimdi bir sıkıntım kaldı yardımcı olursanız cok sevinirim. Benim yapmak istediğim sey kendi web sitemden (turhostan aldığım) bir ledi yakıp söndürmek. Bana nodemcu ESP12E de seriale bulaşmadan nasıl yapılır anlatabilirmisiniz hocam. Mümkünse küçük bir gönderme alma sizin sitenizden mesela. Teşekkürler.
    İyi Çalışmalar. saygılar

  2. esp12E modülüm yok fakat nodemcu da illaki seri port kullanmak zorunda değilsiniz. esp12 kendi aldığı bilgiye göre kendi portuna bağlı ledi yakabilir. Sanırım bu sitede esp12E nin nodemcu kullanımı size yol gösterecektir. Fakat buradaki bilgilere bakarak php kısmında düzenlemeler yapıp kendi sitenizde PHP dosyalarınızı oluşturmanız gerek. yani benim sitenin benzerini oluşturabilirsiniz. kendi sitenize web üzerinden bağlanıp alabildiğiniz bilgileri esp12 de alabilecektir.
    Şayet sorunuzu yanlış anladıysam lütfen belirtin .
    örnek site: https://www.instructables.com/id/Programming-ESP8266-ESP-12E-NodeMCU-Using-Arduino-/

    NOdemcu kullanıyorsanız arduinoya ihtiyacınız olmaz. esp yazılarıma bakarsanız orada nodemcu kullanımı var.

  3. merhaba öncelikle böyle bir örnek çalışması yaptığınız için ne kadar teşekkür etsek az olur.
    Ben tüm dediklerinizi tek tek uyguladım site urlleri posman da oldukça iyi durumda çalışıyor ancak arduinoya yüklediğimde ver i tabanımda herhangi bir değişiklik olmadığını görüyorum
    findstart=indata.indexOf(“[“);
    findend=indata.indexOf(“]”);
    bu kısım böylemi kalacak aca bir buraya anlam veremedim.Bir yerde eksiklik hata var sanırım ama bir türlü bulamadım.
    Yardımlarınıoz için şimdiden teşekkürler

    1. öncelikle gelen veriyi tamamen seri monitöre yazdırın ve postman da ki gelen veri ile aynı olup olmadığını görün.
      kayıt için ise gönderdiğiniz diziyi seri monitöre yazdırın postman da gönderdiklerinizle aynı mı buna bir bakın.
      Bir de espgiriş kısmındaki firat deveci beyin yaptığı bir esp kontrol programı var. esp yi ona seri port ile bağlarsanız arduinodan önce orada bu verileri esp üzerinden değiştirip doğru dizilimi yazdığınızı görün.
      Ayrıca postman kısmındaki videoyu izleyerek esp için gerekli dizilimin nasıl alındığına bakın. bazen bir boşluk bile önemli olabiliyor esp ile gönderirken. dediğim gibi firat devecinin kontrol programıyla yaptığınızda esp ye yani arduino üzerinden gönderdiğiniz dizini buraya yapıştırıp bilgiye erişebileceğinizi test edin. sonrasında bilgiyi değiştirin. bunları yapınca buradaki dizilimi arduinoya yapıştırın. arduinoya yapıştırırken ” işareti gibi şeyler olduğunda bunları arduino kurallarına göre yazın.
      seri monitöre aldığınız bilgileri benimle paylaşırsanız belki daha başka şeyler söyleyebilirim. findstart kısımlarında sadece bu parantezi arar gelen bilgide bu parantez ile bitmeli yoksa bulamaz.

    2. 1.GET /api/weather/read_all.php HTTP/1.1
      2.Host: phpdene.tk
      3.
      yukarıdaki 3. satır boşluk. buna göre tekrar dizilimi kontrol et. postmanda bu önemli olmayabilir ama esp de önemli yani 3. satırıda kopyalayıp arduino programına koyman gerek. hatta gönderilecek karakter sayısına da dahil etmen gerek. cipsend 0,66 daki 66 sayısına dahil edilmeli.

    3. bir de postman videosunda postmandan arduinoya nasıl satır kopyalanacağı anlatılıyor. 5.57 sn noktasından başlayarak izlemenizi tavsiye ederim. buradaki yapı önemli. bunu zaten test programını kullanırsanız göreceksiniz. dediğim gibi görünmese de boşluk ve cr lf kısımları olmalı.

  4. STARTUP
    21:42:58.263 -> AT+CWMODE=3
    21:42:58.867 -> AT+CIPMODE=0
    21:42:59.473 -> AT+CIPMUX=1
    21:43:00.077 -> AT+CWDHCP=1,0
    21:43:00.682 -> AT+CIPSTA=”***************”
    21:43:01.251 -> AT+CWJAP=”*********”,”**********”
    21:43:05.387 ->
    21:43:05.387 -> WEB SAYFASINDAN BiLGi AL
    21:43:05.556 -> AT+CIPSTART=0,”TCP”,”************”,80
    21:43:06.158 -> AT+CIPSEND=0,66
    21:43:06.760 -> GET /apideneme/led1/read_all.php HTTP/1.1
    21:43:07.368 -> Host: ************.tk
    21:43:07.940 ->
    21:43:18.559 -> GELEN JSON FORMATLI BiLGi AYRISTIRILIYOR
    21:43:19.567 ->
    21:43:19.567 ->
    21:43:19.567 ->
    21:43:19.567 ->
    21:43:19.567 ->
    21:43:19.567 ->
    21:43:19.567 ->
    21:43:19.567 ->
    21:43:19.567 -> WEB UZERINDEN KOMUT ALINDI UYGULANDI
    21:43:22.561 -> SENSOR OKUNUYOR VE GONDERiLiYOR
    21:43:22.932 -> Humidity: 1484.80 %
    21:43:22.932 -> Temperature: 665.60 *C
    21:43:25.920 -> GET /apideneme/weather/update.php?id=1&temp=665.60 HTTP/1.1
    21:43:25.954 -> AT+CIPSEND=0,89
    21:43:26.124 -> AT+CIPSTART=0,”TCP”,”***********”,80
    21:43:27.236 -> AT+CIPSEND=0,89
    21:43:27.842 -> GET /apideneme/weather/update.php?id=1&temp=665.60 HTTP/1.1
    21:43:28.347 -> Host: ***********.tk
    21:43:28.918 ->
    21:43:30.427 -> GET /apideneme/weather/update.php?id=1&hum=1484.80 HTTP/1.1
    21:43:30.461 -> AT+CIPSEND=0,89
    21:43:30.932 -> AT+CIPSTART=0,”TCP”,”************”,80
    21:43:32.046 -> AT+CIPSEND=0,89
    21:43:32.650 -> GET /apideneme/weather/update.php?id=1&hum=1484.80 HTTP/1.1
    21:43:33.153 -> Host: **********.tk
    21:43:33.723 ->
    21:43:38.363 ->
    21:43:38.363 -> WEB SAYFASINDAN BiLGi AL
    21:43:38.533 -> AT+CIPSTART=0,”TCP”,”**********.tk”,80
    21:43:39.138 -> AT+CIPSEND=0,66
    21:43:39.743 -> GET /apideneme/led1/read_all.php HTTP/1.1
    21:43:40.354 -> Host: ***********.tk
    21:43:40.928 ->
    21:43:41.934 -> GELEN JSON FORMATLI BiLGi AYRISTIRILIYOR
    21:43:42.940 ->
    21:43:42.940 ->
    21:43:42.940 ->
    21:43:42.940 ->
    21:43:42.940 ->
    21:43:42.940 ->
    21:43:42.940 ->
    21:43:42.940 ->
    21:43:42.940 -> WEB UZERINDEN KOMUT ALINDI UYGULANDI
    21:43:45.936 -> SENSOR OKUNUYOR VE GONDERiLiYOR
    21:43:46.303 -> Humidity: 1433.60 %
    21:43:46.303 -> Temperature: 640.10 *C

  5. postmandan gönderdiğimde bu dizilim çalışıyor.Ancak arduinoda veri alışverişi olmuyor

    1. esp yi son cavabımdaki videodaki gibi kopyalayıp test programından o dizlimi göndersen, ne demek istediğimi daha iyi anlayabilirsin. elimde 1 tane esp olacaktı AT komut setli onu bulursam sana video gönderirim. fakat sen de o yazıda da linkini vermişim, espgiris yazısında olan program ile bağlantı kurarsan, gelen verileri görebilirsin. oradaki çalıştığı halini arduinoya koyduğunda tam çalışacaktır. postman ile farklılık olabiliyor ve dediğim gibi dizilimde değil cr lf denilen görünmeyen karakterlerde. bu karakterler olmazsa oradaki 66 sayısının tamamlanmadığını görebilirsin. 66 görünür ve görünmez karakter sayısıdır.

  6. include(update_web_uygun.php): failed to open stream: No such file or directory

    yukardaki belirtilen “update_web_uygun.php” dosyası yayınladığınız zip dosyasının içinde yok update etmiyor.

    1. webuygun.php dosyası bu sayfada kod olarak verilmiş olandır. dediğiniz dosya webbutton.php içerisinde kullanılmış. ben bunu değiştirdim diye düşünüyordum. Tekrar kontrol ettim. Bu dosyanın görevi değişiklikten sonra ekranda son değişikliğin gösterilmesini sağlıyor.
      Dosyaların tamamına ulaşacağınız yer, https://drive.google.com/open?id=1zEcKvMy-cxbxwR6dl2Q1eDcFDUPysLLT

      teşekkürler uyarınız için.

    2. Bu dosya eklendikten sonra tamamıyla çalıştıysa bilgi verir misiniz. başka problem olmadığını teyit için. teşekkürler

      1. web tarafında mysql db erişimi şuan düzeldi eksik dosyayı yükleyince çalıştı. o dosya olmadan dbye yazmıyor
        arduino tarafında bazı sorunlar var onuda bugün çözmeye çalışacağım. teşekkürler

  7. php json problemi var. muhtemel uyumsuzluk php versiyon ile ilgili.
    ayrıca. get metodu ile gönderilen nem değerini php sayfasında görüyorum ama herşey aynı olduğu halde temp değişkenini dbye yazamıyor. weather işini çözeyim sonra led olayına geçeceğim

  8. stabil çalıştıramadım o nedenle başka çözüm yoluna bakacağım.
    ilginiz için teşekkürler

    1. postman doğru düzgün ulaşıyor da devre de mi sorun çıkıyor. Bu nu denediniz mi.
      Kolay gelsin

  9. led olayına hiç başlamadım
    testlerimi weather üzerinden yapıyorum ama herşey aynı olduğu halde nem bilgisi yazılıyor derece yazılmıyor.

    manuel olarak postmanda her ikiside normal

    1. belki büyük küçük harf ya da harf hatası olabilirmi database e ulaşırken esp bir enter bile fark ediyor. postman dan kopyaladığım bölüme bir kez daha bakın isterseniz ya da esp yazılarımda fırat beyin yaptığı bir seri port esp kontrol programı var. ben postmandan kopyaladığım komutları burada deniyorum bazen bir enter bile fark ettiriyor. biri geliyor biri gelmiyorsa buna dikkat edin isterseniz. programı mikrobotik.com da espgiriş yazısında bulabilirsiniz sanıyorum. orada basardığınız da o kısmı tamamen programınıza yazabilirsiniz. database de hata yok diye düşünüyorum çünkü postman alabiliyor.

  10. kullandığım ücretsiz hostingi farklı yine ücretsiz olan bir firmayla değiştirdim.
    birkaç deneme daha yaptıktan sonra durumu yazarım

  11. bir kaç deneme daha yaptım
    çalışmadı… aynı sorun aynı şekliyle devam ediyor.
    DEBUG edeyim dedim ama softwareserial görebilmem için proteus kullanmam gerekiyor
    direk serial çıktısı jsonları göstermiyor.
    neyse. sağlık olsun
    thinkspeak ile yola devam şimdilik

    1. vazgeçtiğinize ve problemi çözemediğimize üzüldüm. Umarım gelecekte benzer metotları öğrenip işinize yarayan şekle dönüştürebilirsiniz. Bu şekilde bir den çok database kullanabileceğiniz için bir çok değişik veri için kullanabilirdiniz diye düşünüyorum. Başarılar.

  12. Merhaba. Birçok çalışmaya baktım ve mysql php ile en iyi, en sağlıklı haberleşmenin hangisi olduğu konusunda kararsız kaldım. sanırım şuana kadar buduklarımın arasında JSON ve Mysql ve PHP üçlüsü ile devam etmek en mantıklısı. bu üçlüden önce TCP chat server Mysql ve PHP de deneme yaptım. sorunsuz bir şekilde tüm pinleri kontrol edebildim. ancak çoklu pin durumunu okuma ve güncellemede sorun yaşadım. jsonda birden fazla pinin durumunu aynı anda çekip mysql de yazdırmada sorun olmayacak.

    Asıl benim sorunuma gelelim. Bilgisayar telefon ile web üzerinden yapılan işlemlerde sorunumuz yok istediğimiz roleyi açıp kapatabiliyoruz. ve istediğimizin durumunu da okuyabiliyoruz. Asıl sorun şu ki arduino üzerine basçek ( push buton ) koyarak buton ile pinlerin durumunu değiştirmek, aynı anda kumanda ekleyerek kumandadan da yapmak istiyorum (bunları da yaptım bu arada sorunsuz çalışıyor). Arduino üzerinden tabiri caiz ise manuel işlem (Push buton veya kumanda ile işlem) yapılınca bu bilgiyi de veri tabanına arduino yazsın istiyorum ancak bunu bir türlü yapamadım. TCP haberleşmede yapmış olduğum işlem Chat server olarak kullandım. Jsonda ise aynı mantıkta Json server olarak kullanacağım.

    1. Arduino server olarak kullanılınca Dışardan işlem gönderip işlemin sonucuna göre durum güncellemesi yapabiliyoruz.
    2. Arduino server olarak kullanılınca pin durumları Hepsi veya teker teker okuyup güncelleyebiliyoruz.
    3. Arduino Server olarak kullanılınca Manuel yapılan işlemleri Gönderemiyorum.(Client olarak kullanınca gönderebiliyorum).

    Bir arduino Hem TCP server ve Htp Client olarak kullanılır mı ?
    Bir arduino Hem TCP server ve Mysql Client olarak kullanılır mı ?
    Bir arduino Hem Json server ve Htp Client olarak kullanılır mı ?
    Bir arduino Hem Json server ve Mysql Client olarak kullanılır mı ?

    Diyeceksiniz ki buna ne gerek var zaten durum okuyabiliyorsun durumunu kontrol et ve yeni durumu güncelle tamam doğru bir yöntem ancak her saniye sor güncelle sor güncelle mysql şişiyor. her saniye sor durum değişik ise güncelle gereksiz yere arduino yoruluyor.

    istiyorum ki internet üzerinden yapılınca durum zaten belli. ardunio üzerinden de yapınca bir get isteği göndersin veya mysql sorgusu çalıştırsın. bir türlü beceremedim.

    1. Yanlış anlamadıysam internetten bilgi geldiğinde bu bilgiye cevap verilebiliyor. Bu normal çünkü hatta erişim numarası veriliyor. Bu numaraya göre server dan cevap da veriliyor. Fakat lokal olarak basılan bir buton kendiliğinden gitmiyor diyorsunuz. Anladığım kadarıyla bu mümkün. fakat sanırım ikisi birlikte aynı anda yapılamaz. Şöyle söyleyeyim. server açılınca gelen bilgilere cevap verebiliyor. server kapatılıp client olarak bağlanıp bilgi gönderilir. Daha sonra tekrar client kapatılıp server açılır. (AT komutlarıyla bu mümkün) sadece lokal değişikliğe göre bu ayarlama yapılır lokal bir etki olmazsa server olarak devam eder. Şayet client anında iken bilgi geldiyse bunu alamayacağı için gönderen programa server kapalı hatası gidecektir. bu şekilde hata kodu gelirse datayı bekletip 5sn sonra yeniden dener. ya da bir başka çözüm server kapalıysa hata veriyorsa buluta aktarıp, daha sonra esp alsın ve güncellesin.
      Belki bu yazıdaki metot gibi bir çözüm sanırım daha iyi olacaktır. devamlı bir yere her iki taraf da bilgileri koysun veya alsın. TCP sistemleri hakkında yüzeysel bilgim olduğundan bu kadar düşünebiliyorum. Tecrübeli olanlar daha farklı çözümler sunabilirler.

      1. Cevabınız için teşekkür ederim. Önerinizi deneyecegim. Sunucuyu kapatıp client olarak bağlanıp bilgi gondermeye çalışayım. Suanki bilgimle bu biraz zor benim için ancak ugrasinca olur sanırım:)

  13. Bu arada yazınızın nerdeyse tamamını okudum. güvenlik ile ilgili sorun olduğunu söylemişsiniz. bu şekilde evet 3. şahıslar müdahale edebilir. ancak üye girişi gerektiren bir sayfa ile şifreyi bilmeyen kişileri engellemiş olursunuz. üye girişini çoklu kullanıcı için Mysql e kaydedip kullanıcı adı ve şifre ile giriş sağlarsınız basit birşey isterseniz de.
    /apideneme/led1/read_all.php
    Php dosyasının üst satırına
    $username=”kullaniciadi”;
    $sifre=”sifre”;
    iki değişken tanımlarsınız
    if(!empty($_GET[‘user’] )){
    $user=htmlspecialchars($_GET[‘user’]);
    $pass=htmlspecialchars($_GET[‘user’]);
    }

    if(($user!=”$username”) AND ($sifre!=”$pass”)){
    echo “Kullanıcı adı ve şifre yanlış”;
    exit();
    }else{

    // Kodlarımızı Buradan devam ediyoruz……
    }
    /apideneme/led1/read_all.php?user=Kullanıcı Adımız&sifre=Şifremiz

    Şeklinde post yapabiliriz arduinodan mesajımızı . kullanıcı adıo ve şifre yanlış olursa sayfa Kullanıcı adı şifre yanlış hatası verecektir.

    1. fazla anlamayan arkadaşlar için ekleme gereği hissettim. read all dosyası gibi diğer dosyalar için de aynı durum geçerli.
      aynı işlemi diğer dosyalara da yapıp
      /apideneme/weather/update.php?id=1&hum=1484.80&user=Kullanıcı Adı&sifre=Şifre
      şeklinde get isteği yollayabiliriz arduinodan

      1. eklediğiniz bilgiler için teşekkürler. güvenlik için örnek vermeniz iyi olmuş. PHP bilgim çok olmadığı için daha fazla uğraşmadım. fakat biraz çaba ile dediğiniz gibi güvenlik de eklenebilir.

        1. Bu basit bir ornekti sadece yeterli olacaktır fazla PHP ile uğraşmak istemeyenler bile yapabilir. Ancak MySQL ile kullanıcı ekleme yapılırsa kişiye özel erişim şifresi ve login ekranı ayarlanabilir daha güzel olacaktır. Eğer gerekli olursa MySQL yapısı ve dosyalarınızı gönderirseniz giriş ekranı hazırlayıp gonderebilirimde.

          1. Teşekkürler. bu sadece bir örnek çalışmaydı. Bir profesyonel projeye dönerse dediklerinizi uygularım.

  14. arduino ıde kısmında yüklerken sürekli json kütüphanesinden hata alıyorum yardımcı olabilir misiniz

    1. bu yazıdaki kütüphaneyi mi kullanıyorsunuz. Ayrıca postman kullanıp deneme yaptınız mı.

      1. evet buradali kütüphaneyi kullandım ve bana güncellememi söylüyor. hayır postman kullanmadım

        1. POSTMAN ile sitenizi deneyin. onunla çalışıyorsa kendi programlamanızı kontrol edin. Çalışmıyorsa siteden aldığınız adreslerde sorun var demektir.

Şeref Görgülü için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak.