SUNUCU OLARAK ÇALIŞMA :
ESP modülümüzü seri port üzerinden PC ye bağladıktan sonra program ile ESP modülümüzün Sunucu ayarlarını yapmaya başlayalım. Bu adımlar aynı zamanda arduino yada pic gibi mikroişlemciler ve seri port kullanan diğer sistemler ile simüle edilebilir.
PC olmaksızın sunucu olarak çalıştırmamızı ve gelecek olan bilgiye göre sistemimizi programlamamızı sağlayacaktır.
Sayfa sonundaki Videolarda hem PIC12F1822 ve PICBASIC kullanılarak yapılmış örneği, hem de Arduino ile kütüphane kullanılmadan yapılmış örnekleri göreceksiniz.
Programın ilk sayfasında gerekli bağlantı işlemlerini yapmanız sağlanır. 2. sayfasında ise Sunucu (Server) ve İstemci (Client) kısımları bulunur.
Her AT komutunu verdiğinizde ESP size bilgi döndürür. Bu cevabın sonunda çoğu zaman OK cevabı gelir. AT komutlarının sonuna mutlaka “/r/n” koymalısınız.
AT komutları için bu bağlantıya bakabilirsiniz.AT Komutları PDF dosyası

Server için kullanacağımız AT komutları aşağıda yazılmıştır.
AT ( İlk haberleşme var mı diye bakılır. OK cevabı döner.)
AT+RST ( ESP ye reset atılır. )
AT+CWMODE=3 ( sta ve ap modlarını birlikte kullanabilirsin )
AT+CIPMODE=0 ( normal kullanım )
AT+CIPMUX=1 ( birden fazla bağlantı aynı anda yapılabilmesini sağlar. Sunucu kurduğunuzda bunun mutlaka 1 olması gerekir.)
AT+CWSAP=”ESP8266″,”12345678″,6,4 ( AP KISMI ÇALIŞACAKSA )
AT+CWJAP=”ESP8266″,”12345678″ ( station modem kısmı erişim noktası çalışacaksa)
Arduinoya yeni başlayanlar için bir not. ( “ işaretlerinin de gönderilmesi gerektiğinden bu satırı yazarken tırnak işareti yerine \” koymak gerekebilir örneğe dikkat ediniz
örnek : (“AT+CWSAP=\”ESP8266\”,\”12345678\”,6,4″)
AT+CWDHCP=2,0 (hangi tip erişim noktası istiyorsunuz. AP ya da kendi modeminiz üzerinden bağlantı Bu haliyle AP modundadır.)
AT+CIPSERVER=1,80 ( sunucu açmak için kullanılır. 80 olan port numarasıdır. 80 olarak kullanırsanız kolaylık olur ve internet sayfalarıda kullandığından sorun olmayacaktır. modeminizde bazı portlar koruma altında olabilir.
Bu komutları verdiğinizde sunucunuz açılmış demektir. Fakat iş bununla bitmiyor. İnternet sayfasından bir data gelecektir. Bu datanın ayrıştırılması gerekmektedir.
Bu datayı ayırmak için aşağıdaki Arduino programını kullanabilirsiniz.
String readString;
String bak[5]="";
String denek = "";
__FlashStringHelper *den1 ;
__FlashStringHelper *den2 ;
__FlashStringHelper *den3 ;
__FlashStringHelper *den4 ;
__FlashStringHelper *den5 ;
__FlashStringHelper *den6 ;
__FlashStringHelper *den7 ;
__FlashStringHelper *den8 ;
__FlashStringHelper *den9 ;
__FlashStringHelper *srv1 ;
__FlashStringHelper *srv2 ;
__FlashStringHelper *srv3 ;
__FlashStringHelper *srv4 ;
__FlashStringHelper *srv5 ;
__FlashStringHelper *srv6 ;
__FlashStringHelper *srv7 ;
char * pch;
char * str;
int say=0;
int say2=0;
int x=1;
int bekle=0;
int wc=0;
int prob=0;
int sayac=0;
int saybak=0;
void bakgel(){ // bekleme komutunu tekrar tekrar kullanmak yerine bu şekilde yapıldı hafıza kaplamasın diye.
delay(1000);
}
void serverac(){ // ****** server bilgilerini gönder ****************
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=2,0");
srv5=F("AT+CIPAP=\"192.168.4.1\"");
srv6=F("AT+CWSAP=\"ESP8266\",\"12345678\",6,4");
srv7=F("AT+CIPSERVER=1,80");
Serial.println("AT+RST");
delay(5000);
Serial.println(srv1);
bakgel();
Serial.println(srv2);
bakgel();
Serial.println(srv3);
bakgel();
Serial.println(srv4);
bakgel();
Serial.println(srv5);
bakgel();
Serial.println(srv6);
bakgel();
Serial.println(srv7);
bakgel();
}
void ipdcontrol(){
sayac=0;
str = bak[1].c_str();
pch=strstr (str,"IPD"); // 2. string ifadenin bulunduğu yerden itibaren string ifadenin sonuna kadar okur.
denek=pch; // bu pch char şeklinde olduğundan bunu string değişkenine çevirip uzunluğunu bulmak istiyoruz.
say=denek.length(); // string uzunluğunu buluruz.
if (say>0){
prob=1;
sayac=1;
//Serial.print("bak[1]ipdcontrol ") ;Serial.println(bak[1]) ;
}
}
void kontrol(){ // *************** string ifadesinde 2. bir string ifadeyi bulur yoksa null döndürür.
//Serial.println(" kontrol") ;
if (say2==0) { // bu devamlı buraya geldiğinde işlem yapmadan gitsin diye yapıldı. vakit kaybetmesin
wc=2;
denek=bak[2];
str = bak[2].c_str(); // bu ifade normal string ifadesini const char şekline dönüştürür. normal şekilde const char ifadelere str=bak[2] şeklinde çeviriyi kabul etmez.
//********** buton tanımlamaları ***********************
pch=strstr (str,"LIGHT1+ON"); // 2. string ifadenin bulunduğu yerden itibaren string ifadenin sonuna kadar okur.
denek=pch; // bu pch char şeklinde olduğundan bunu string değişkenine çevirip uzunluğunu bulmak istiyoruz.
say=denek.length(); // string uzunluğunu buluruz.
if (say>0){digitalWrite(11,HIGH);
wc=1;
//Serial.println(bak[2]) ;
}
pch=strstr (str,"LIGHT2+ON"); // 2. string ifadenin bulunduğu yerden itibaren string ifadenin sonuna kadar okur.
denek=pch; // bu pch char şeklinde olduğundan bunu string değişkenine çevirip uzunluğunu bulmak istiyoruz.
say=denek.length(); // string uzunluğunu buluruz.
if (say>0){digitalWrite(12,HIGH);wc=1;}
pch=strstr (str,"LIGHT1+OFF"); // 2. string ifadenin bulunduğu yerden itibaren string ifadenin sonuna kadar okur.
denek=pch; // bu pch char şeklinde olduğundan bunu string değişkenine çevirip uzunluğunu bulmak istiyoruz.
say=denek.length(); // string uzunluğunu buluruz.
if (say>0){digitalWrite(11,LOW);wc=1;}
pch=strstr (str,"LIGHT2+OFF"); // 2. string ifadenin bulunduğu yerden itibaren string ifadenin sonuna kadar okur.
denek=pch; // bu pch char şeklinde olduğundan bunu string değişkenine çevirip uzunluğunu bulmak istiyoruz.
say=denek.length(); // string uzunluğunu buluruz.
if (say>0){digitalWrite(12,LOW);wc=1;}
if (wc==2){
str = bak[1].c_str();
pch=strstr (str,"IPD"); // 2. string ifadenin bulunduğu yerden itibaren string ifadenin sonuna kadar okur.
denek=pch; // bu pch char şeklinde olduğundan bunu string değişkenine çevirip uzunluğunu bulmak istiyoruz.
say=denek.length(); // string uzunluğunu buluruz.
if (say>0){
prob=1;
//digitalWrite(12,HIGH);
htmlpage(); // **** şayet ilk defa web isteği geliyorsa kullanıcıya uygun web sayfasını yollar.
wc=1;
}
}
// Serial.println(wc) ;
// Serial.println(denek) ;
// Serial.print("bak[1]") ;Serial.println(bak[1]) ; // ******************** videoda bunları AÇ göster ****************************************************
// Serial.println(bak[2]) ;
bak[1]="";
bak[2]="";
say2=1;x=1;bekle=0;
}
bekle=0;
}
void htmlpage(){
// Serial.println(den1,den2,den3) ;
Serial.println("AT+CIPSEND=0,450");
delay(200);
Serial.print(den1) ;
Serial.print(den9) ;
Serial.print(den2) ;
Serial.print(den3) ;
Serial.print(den4) ;
Serial.print(den5) ;
Serial.print(den6) ;
Serial.print(den7) ;
Serial.println(den8) ;
delay(100);
prob=0;
}
void setup() {
Serial.begin(115200);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
// Serial.println("baslangic");
say2=1;
prob=0;
// ************** aşağıdaki denx değişkenleri saklama alanına F donksiyonu ile gönderiliyor. ******************
den1 = F("<!DOCTYPE html><html><form action=\"\" method=\"post\">");
den9 = F("<input type=\"\" name=\"action\" value=\"Butonlari kullanin\" /><br><br>");
den2 = F("<input id=\"LIGHT1ON\" type=\"submit\" name=\"submit\" value=\"LIGHT1 ON\">");
den3 = F("<input id=\"LIGHT1OFF\" type=\"submit\" name=\"submit\" value=\"LIGHT1 OFF\">");
den4 = F("<p><input id=\"LIGHT2ON\" type=\"submit\" name=\"submit\" value=\"LIGHT2 ON\">");
den5 = F("<input id=\"LIGHT2OFF\" type=\"submit\" name=\"submit\" value=\"LIGHT2 OFF\"></p>");
den6 = F("</form></html>");
den7 = F("<?php");
den8 = F("if (isset($_POST['action'])) {}?>");
serverac();
}
void loop() {
if (Serial.available() > 0){
delay(5);
lightkontrol();
/* char c = Serial.read();
readString += c;
readString.trim();
if (readString == "+IPD"){
Serial.println("Ok");
bak[1]=readString;
lightkontrol();
readString="";
}*/
}
}
void lightkontrol(){
sayac=0;bak[1]="";
readString="";
basadon:
say2=0;
delay(10);
if (Serial.available() > 0){
sayac=1;say2=1;
if (bak[1]==""){
saybak=0;
}
while (Serial.available() > 0){
char c = Serial.read();
saybak++;
if (saybak<=20){
readString += c;
}
if (saybak==20){
bak[1]=readString;
readString="";
}
if (saybak>=285 ){
readString += c;
}
}
bak[2]=readString;
//Serial.print("saybak" );Serial.println(saybak);
}
if (sayac==1){
sayac=0;
goto basadon;
}
//Serial.print("say2" );Serial.println(say2);
//Serial.print("bak1light" );Serial.println(bak[1]);
//Serial.print("bak2 light");Serial.println(bak[2]);
kontrol();
}
GELEN DATANIN İNCELENMESİ:
ESP nin benim gördüğüm 2 çeşit çalışma şekli var.
1 – ) internet sayfasından gelen veri
2 – ) Soket mimarisi kullanım.
Bunların farklılıklarını aşağıda görebileceksiniz.
1-) İnternet üzerinden bilgi göndererek yada alarak çalışacaksanız.
İnternet üzerinden formatı belli bir dizi karakter gelir. Bu karakterleri ayrıştırmak için bilgileri ESP den seri port vasıtasıyla alıp, bilgileri ayrıştırmamız gerekiyor. Bu sistemde internet sayfasından bir istek ESP modüle geldiğinde aşağıdaki ifade gelmiş demektir.
( seri port buffer denilen tampon bellek 64 karakterdir. Bu karakter adedi dolduğunda veriler gelemiyor yada verici gönderse bile kayboluyor. Programı incelediğinizde verileri zaman kaybetmeden devamlı aldığımız ve değişkenlere aktardığımız için 115200 hızında bile verileri alabiliyor. gelen veri 400-500 karakter uzunluğunda oluyor. devamlı buffer belleği boşaltıldığı için yeni verilerin gelişinde sorun olmuyor. )
0,CONNECT
+IPD,0,416:GET / HTTP/1.1
Host: 192.168.1.140:1234
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
Bu ifade web sitesinin bağlanmak istediğini anlatır. Gelen ifadeyi ayırdığımızda +IPD belirteç olup yanındaki 0 bağlantı numarasıdır. Yanındaki 416 ise gelen karakterin 416 karakter olduğunu belirtir.
Arduino yada mikroişlemci ile bunları ayıklayıp ESP ile istek yapan WEB sitesine bir html sayfası göndeririz. Bu sayfada işlemimize göre butonlar bulunur. Yada bilgi satırları bulunur. Kullanıcı internet sayfasından butona bastığında Benzer bir satır gelir fakat son kısmı farklıdır.
+IPD,1,570:POST / HTTP/1.1
Host: 192.168.4.1
Connection: keep-alive
Content-Length: 39
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://192.168.4.1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://192.168.4.1/
Accept-Encoding: gzip, deflate
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
action=submit&name=John&submit=LIGHT1+ON
Bu en alttaki satır basılan butona göre değişiklik gösterebilir. Kendi gönderdiğiniz web sayfanıza göre. LIGHT2+ON yada OFF olabilir.
Örnek web sayfası : Bu sayfada butonları ESP ye gönderen kısım PHP kısmıdır.
İsterseniz kendinize göre düzeltebilirsiniz fakat düzelttiğinizde tüm karakter sayısını doğru bir şekilde sayıp AT+CIPSEND ile önceden ESP ye bildirmeniz gerekiyor. Programda bunu görebileceksiniz.
<!DOCTYPE html>
<html>
<form action="" method="post">
<input id="LIGHT1ON" type="submit" name="submit" value="LIGHT1 ON">
<input id="LIGHT1OFF" type="submit" name="submit" value="LIGHT1 OFF"><p>
<input id="LIGHT2ON" type="submit" name="submit" value="LIGHT2 ON">
<input id="LIGHT2OFF" type="submit" name="submit" value="LIGHT2 OFF"></p>
<p>
<br>
</p>
Sensor Degeri :
<input type="text" name="takım" size="10" value="degeryaz."><br>
</form>
</html>
<?php
if (isset($_POST['action'])) {}?>
Bu sayfayı internet üzerinden sayfa isteği geldiğinde program otomatik olarak gönderecektir. Şayet Giriş bölümünde kullandığınız programı kullanmak isterseniz SERVER kısmındaki beyaz kutudaki html yazılarıyla bu html yazılarını yer değiştirmeniz yeterlidir.
2-) SOKET mimarisinde işler biraz daha kolaydır. Bu genelde aynı network üzerinde yakın mesafede mesela ev içerisinde kullandığınız sistemlerde olabilir.
MIT2 App inventor da yapabileceğiniz wifi programlarda soket mimarisi kullanılır.
Bu sistemde sadece gönderilecek bilgi ESP tarafından alınır. Mesela sadece LIGHT1ON kelimesini gönderebilirsiniz.
Gelen bilgilerden örnekler aşağıdadır.
1,CONNECT
+IPD,1,5:LCDDD
+IPD,1,16:LCDWR 1,3-DENEME
+IPD,1,5:LCDCB
+IPD,1,10:LCDRC 1,5-1,CLOSED
Bizde soket mimarisine uygun bir şekilde geri bilgi gönderebiliriz. Bunun için önce ESP ye kaç karakter yollayacağımızı bildiriyoruz. Göndereceğimiz bilgi : “Geri bildirim”
AT+CIPSEND=0,13
OK
>
Recv 13 bytes
SEND OK
Bu sistemde Seri port üzerinden gelen bilgileri ayrıştırmak daha kolaydır.
Fakat bunu internet üzerinden soket mimarisine göre gönderecek program bulamadım. Bundan dolayı aynı ağ üzerinde çalışan android sisteminden yada 2 arduino arası ya da PC den ESP ye gönderim olarak kullanabilirsiniz.
Ayrıca Proteus ve PIC12F1822 kullanılarak ESP kontrolünü gerçekleştiren PICBASIC kodunu da bulacaksınız.
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2018 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 29.03.2018 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
;********************** AYARLAR BAŞLANGICI ******************************
#config
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_ON & _STVREN_OFF & _BORV_19 & _LVP_ON
#ENDCONFIG
DEFINE OSC 32
;OSCILLATOR
;OSCCON=%01111000 '%01101000=4 mHZ
OSCCON=%11110000 ; 8*4=32mhz 16f1827 den PLL enable ON olursa.
PORTA=%00000000 : ; TRISA=%000011
ADCON0=%00000000 : ADCON1=%00000000
ANSELA=%00000000
OPTION_REG=%00000000
WPUA=%111111 ' This register consists of "6" bits .
; **************** 4mhz 9600 baud
;RCSTA = $90 ' Enable serial port & continuous receive
;TXSTA = $20 ' Enable transmit, BRGH = 0
;SPBRGL = 25 ' 9600 Baud @ 4MHz, 0,16%
;SPBRGH = 0
;BAUDCON.3 = 1 ' Enable 16 bit baudrate generator
;DEFINE HSER_CLROERR 1 ' Clear overflow automatically
; *************** 32mhz 9600 baud **********************
RCSTA = $90 ' Enable serial port & continuous receive
TXSTA = $24 ' Enable transmit, BRGH = 1
SPBRG = 64 ' 9600 Baud @ 0,04%
SPBRGH = 3
BAUDCON.3 = 1 ' Enable 16 bit baudrate generator
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
; *************** 16mhz 9600 baud **********************
;RCSTA = $90 ' Enable serial port & continuous receive
;TXSTA = $24 ' Enable transmit, BRGH = 1
;SPBRG = 160 ' 9600 Baud @ -0,08%
;SPBRGH = 1
;BAUDCON.3 = 1 ' Enable 16 bit baudrate generator
;DEFINE HSER_CLROERR 1 ' Clear overflow automatically
; Kesmeler için
SYMBOL GIE =INTCON.7
SYMBOL PEIE =INTCON.6
SYMBOL RCIE =PIE1.5
SYMBOL RCIF =PIR1.5
CM1CON0=0
CM1CON1=0
APFCON.7=1 ; RA5 RX tanımlandı
APFCON.2=1 ; RA4 TX olarak tanımlandı
APFCON.0=0
CCP1CON=0
ANSELA = 0
TRISA = %000101000 ; MCLR OFF fakat input olarak kullanılabilir
;************************** AYARLAR SONU *******************************
;***************** DEĞİŞKENLERİN TANIMLANMASI ********************
'***********Sensör Tanımlamaları***********
Comm_Pin1 VAR PortA.2
Busy VAR BIT
HAM VAR WORD
ISI VAR WORD
SIGN VAR BYTE
SIGN_BITI VAR HAM.Bit11
NEGAT_ISI CON 1
;TEMP VAR BYTE
Float VAR WORD
kar1 var byte
kar2 var byte
dd var byte[10]
temp1 var byte
temp var byte
clear
PORTA = 3
Pause 200
;***************** DEĞİŞKENLERİN TANIMLANMASI SONU ********************
;*************************** KESMELERİN TANIMLANMASI
GIE=0 'tüm kesmeler kapalı
PEIE=1 'Çevre birim kesmesi aktif
RCIE=1 'Usart alım kesmesi aktif
RCIF=0
GIE=1 'tüm kesmeler aktif
;***********************
ON INTERRUPT GOTO KESME
hserout ["AT",13,10]
pause 200
hserout ["AT+CWMODE=3",13,10]
pause 200
hserout ["AT+CIPMODE=0",13,10]
pause 200
hserout ["AT+CIPMUX=1",13,10]
pause 200
hserout ["AT+CWDHCP=2,0",13,10]
pause 200
hserout ["AT+CIPAP=",34,"192.168.4.1",34,13,10]
pause 200
hserout ["AT+CWSAP=",34,"ESP8266",34,",",34,"12345678",34,",6,4",13,10]
pause 200
hserout ["AT+CIPSERVER=1,80",13,10]
pause 200
BASLA:
if kar1=1 and kar2=1 then call lightkontrol:kar1=0:kar2=0
if kar1=1 and kar2=0 then call htmlgonder:kar1=0:kar2=0
GoTo basla
htmlgonder:
gosub sensoroku
hserout ["AT+CIPSEND=0,376",13,10]
pause 100
hserout ["<!DOCTYPE html><html><form action=",34,34," method=",34,"post",34,">",13,10]
hserout ["<input id=",34,"LIGHT1ON",34," type=",34,"submit",34," name=",34,"submit",34," value=",34,"LIGHT1 ON",34,">",13,10]
hserout ["<input id=",34,"LIGHT1OFF",34," type=",34,"submit",34," name=",34,"submit",34," value=",34,"LIGHT1 OFF",34,"><p>",13,10]
hserout ["<input id=",34,"LIGHT2ON",34," type=",34,"submit",34," name=",34,"submit",34," value=",34,"LIGHT2 ON",34,">",13,10]
hserout ["<input id=",34,"LIGHT2OFF",34," type=",34,"submit",34," name=",34,"submit",34," value=",34,"LIGHT2 OFF",34,"></p>",13,10]
hserout ["</form></html>",13,10]
hserout ["<?php",13,10]
hserout ["if (isset($_POST['action'])) {}?>",13,10]
return
lightkontrol:
if dd[5]="O" and dd[6]="N" then call ac
if dd[5]="O" and dd[6]="F" then call kapat
return
ac:
if dd[3]="1" then porta.0=0
if dd[3]="2" then porta.1=0
return
kapat:
if dd[3]="1" then porta.0=1
if dd[3]="2" then porta.1=1
return
disable
KESME: ; SERİ PORT KESMESİ
GIE=0 :kar1=0:kar2=0
HSERIN 5,atla2, [WAIT("IPD"),dd[1]]
kar1=1
HSERIN 5,atla, [ dd[2]]
HSERIN 5,atla2, [WAIT("LIGHT"),dd[3]]
kar2=1
for temp1=4 to 10
HSERIN 5,atla, [ dd[temp1]]
next temp1
ATLA:
atla2:
TEMP=RCREG
GIE=1
return
enable
; sensor ds18b20 okuma ve gonderme.
SENSOROKU:
OWOUT Comm_Pin1, 1, [$CC, $44]' ISI değerini oku
Bekle1:
OWIN Comm_Pin1, 4, [Busy] ' Busy değerini oku
IF Busy = 0 THEN Bekle1 ' hala meşgulmü? , evet ise goto Bekle..!
OWOUT Comm_Pin1, 1, [$CC, $BE]' scratchpad memory oku
OWIN Comm_Pin1, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
GOSUB Hesapla1
RETURN
Hesapla1: ; Ham değerden Santigrat derece hesabı
Sign = "+"
IF SIGN_BITI = NEGAT_ISI THEN
Sign = "-"
temp=($ffff-ham+1)*625
ISI = DIV32 10
GOTO GEC1
endif
TEMP = 625 * (HAM+1)
ISI = DIV32 10 ; Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC1:
FLOAT = (ISI //1000)/100
ISI=(ISI/1000)-1
if ISI=64 then goto sensoroku
RETURN
end
picbasic programı ve proteus şeması (12F1822 server)
Picbasic programı ds18b20 ile yapılmış sensör bilgilerini içeriyor. Çalışıyor fakat internete gönderim metodu daha eklenmedi. Bilgileri incelediğinizde aynı metodla internete gönderebilirsiniz.
Tüm sistem 115200 baud olarak çalışacaktır. Fakat Proteus gerçek devreyi 115200 baud ile kontrol edemeyeceği için geçici olarak ESP modülün baud hızını değiştirmemiz gerekiyor.
Bu değişim ESP modüllerin versiyon ve modeline göre değişiyor. Bir başka ESP modülünde AT+CIOBAUD komutu kullanılıyormuş.
Benim modülümün versiyonları aşağıdadır.
AT+GMR (komutuyla versiyon bilgilerini öğrenebilirsiniz. )
AT version:1.2.0.0(Jul 1 2016 20:04:45)
SDK version:1.5.4.1(39cb9a32)
Ai-Thinker Technology Co. Ltd.
Dec 2 2016 14:21:16
OK
Bu versiyona göre olan haberleşme hızı değiştirme komutları.
AT+UART UART configuration, [@deprecated] Kullanımdan kaldırılmış.
AT+UART_CUR UART current configuration Geçici olarak değiştirir. Güç kesildiğinde eski haline döner.
AT+UART_DEF UART default configuration, save to flash Bu komut kullanıldığında FLASH içerisinde değişiklik yapıldığından ayarladığınız şekilde kalacaktır.
PC üzerinde herhangi bir seri port uygulaması yada seri monitör kullanılarak Geçici olarak haberleşme hızı değiştirilir.Sonrasında Proteus uygulaması açılır ve COMPIM komponenti ayarlarından ESP modülünün bağlandığı port seçilerek program çalıştırılır.
Gerekli açıklamaları videolar içerisinde bulacaksınız.
TÜM PROGRAMLARA BURADAN ULAŞABİLİRSİNİZ.
SUNUCU (server) video-1
SUNUCU (server) video-1