Yeni mailleriniz var mı diye, bilgisayarınızdan ya da telefonunuzdan program açmanıza gerek kalmadan, devamlı sizin yerinize ESP8266-01 Kontrol etsin. EASYLCD modül kullanan LCD nize, okunmamış maillerinizin, hem adedini hem de konu başlıklarını yazsın ister misiniz?
Not: Bu mail hesabı deneme olarak açılmıştır. 1 aylığına açık kalacaktır. Yanlış kullanımlardan, Kullanan kişiler sorumludur. Sadece şunu hatırlatmak isterim. iyi niyetle bile olsa birilerine, bu e-maili kullanarak mesaj gönderirseniz, Mutlaka kullandığınız zaman parametrelerine bakıp sizi bulacaklardır. Bundan dolayı Lütfen iyi niyeti suistimal etmeyin.
Burada açıklamaya çalışacağım sistem, PC nize bağlı kalmaksızın PHP dosyasını yükleyebileceğiniz bir siteniz varsa, mail kontrolünü nasıl yapabileceğinizi gösterecek.
Öncelikle ESP8266-01 modülünüzü buradaki yazı ile NODEMCU moduna geçirmelisiniz.
Ayrıca ESP8266-01 modülünün bağlantı şeması için bu yazıma bakabilirsiniz.

Aklınıza şu gelebilir. Neden PHP ye ihtiyacımız olsun. O olmadan da ESP bu işi çözebilir. Ben de başlarken bu şekilde başladım. Fakat e-mail sunucuları gibi güvenli sitelerden bilgi almak çok kolay olmuyor. Araştırdım, Nodemcu LUA olarak program yazarken ESP-01 ile yapılamayacağı konusuna kanaat getirdim. Belki arduino ve esp kullanılarak çözümler bulabilirsiniz. Fakat nodemcu olarak ben çalışan örneklere rastlayamadım. Hatta bunun yapılamayacağı yönünde bilgiler de okudum. Belki yeni versiyonlarda bu düzeltilmiş olabilir.
Tabii ki PHP kullanmamın bir başka amacı daha var. LCD yi koyup sadece mail mi kontrol edeyim.
Tabii ki HAYIR. Gelecekte, bu php dosyasına mail bilgilerini, döviz bilgilerini ,hava durumu gibi bilgileri aktarıp, hepsini bu LCD de ya da farklı bir görüntüleme cihazında, sadece ESP-01 kullanarak gösterebileyim diye düşündüm.
Buraya kadar hazırlıkları yaptıktan sonra bir de PHP kısmına bakalım.
1. program mail sunucusundan toplam mail ve toplam okunmamış mail adetlerini alır. Buradaki imap_open satırı şifreleri verdiğimiz gmail sunucusundan bilgiyi almamızı sağlar. 993 veya bazen 443 gibi port numaraları görürsünüz bunlar. POP ve IMAP port numaralarıdır. Bunlar hangi şekilde bilgiyi alacağınıza göre değişecektir.
<?php
$mbox = imap_open("{imap.gmail.com:993/imap/ssl}INBOX", "denesildeneme", "denek123")
or die("can't connect: " . imap_last_error());
$check = imap_mailboxmsginfo($mbox);
if ($check) {
echo "basla"."<br/>\n";
//echo "Date: " . $check->Date . "<br/>" ;
//echo "Driver: " . $check->Driver . "<br/>" ;
//echo "Mailbox: " . $check->Mailbox . "<br/>" ;
echo "Messages: " . $check->Nmsgs . "<br/>" ;
//echo "Recent: " . $check->Recent . "<br/>" ;
echo "Unread: " . $check->Unread . "<br/>" ;
echo $check->Date . "<br/>" ;
// echo "Deleted: " . $check->Deleted . "<br/>" ;
//echo "Size: " . $check->Size . "<br/>" ;
} else {
echo "imap_mailboxmsginfo() failed: " . imap_last_error() . "<br />\n";
}
imap_close($mbox);
?>
2. program ise mail sunucusundan okunmamış maillerinizin konu başlıklarını alır.
Burada dikkat edeceğiniz kısım, gelen maillerde konularda görünen türkçe karakterler LCD ye gönderilirse sorun olacağından, baştaki $bulunacak, ve $değiştir tabloları arasında türkçe karakterleri ingilizce karakterlere dönüştürmemiz gerekir. Bunu yapmak için 60. ve 62. satıra bakınız. Artık türkçe karakter sorunu da kalmadı.
Ayrıca 20. satırla başlayan parametreler mail alırken size yardımcı olacaktır. Ben sadece okunmamışları istediğim için “UNSEEN” parametresini kullandım. Sizler diğer parametreleri de kullanabilirsiniz. 46. satırda bu parametreyi görebilirsiniz.
<?php
//$mbox = imap_open("{imap.gmail.com:993/imap/ssl}INBOX", "denesildeneme", "denek123")
// or die("can't connect: " . imap_last_error());
$bulunacak = array('ç','Ç','ı','İ','ğ','Ğ','ü','ö','Ş','ş','Ö','Ü',',',' ','(',')','[',']');
$degistir = array('c','C','i','I','g','G','u','o','S','s','O','U','','_','','','','');
set_time_limit(4000);
// Connect to gmail
$imapPath = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'denesildeneme';
$password = 'denek123';
// try to connect
$inbox = imap_open($imapPath,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
/* ALL - return all messages matching the rest of the criteria
ANSWERED - match messages with the \\ANSWERED flag set
BCC "string" - match messages with "string" in the Bcc: field
BEFORE "date" - match messages with Date: before "date"
BODY "string" - match messages with "string" in the body of the message
CC "string" - match messages with "string" in the Cc: field
DELETED - match deleted messages
FLAGGED - match messages with the \\FLAGGED (sometimes referred to as Important or Urgent) flag set
FROM "string" - match messages with "string" in the From: field
KEYWORD "string" - match messages with "string" as a keyword
NEW - match new messages
OLD - match old messages
ON "date" - match messages with Date: matching "date"
RECENT - match messages with the \\RECENT flag set
SEEN - match messages that have been read (the \\SEEN flag is set)
SINCE "date" - match messages with Date: after "date"
SUBJECT "string" - match messages with "string" in the Subject:
TEXT "string" - match messages with text "string"
TO "string" - match messages with "string" in the To:
UNANSWERED - match messages that have not been answered
UNDELETED - match messages that are not deleted
UNFLAGGED - match messages that are not flagged
UNKEYWORD "string" - match messages that do not have the keyword "string"
UNSEEN - match messages which have not been read yet*/
// search and get unseen emails, function will return email ids
$emails = imap_search($inbox,'UNSEEN');
$output = '';
foreach($emails as $mail) {
$headerInfo = imap_headerinfo($inbox,$mail);
$ssubject = iconv_mime_decode ($headerInfo->subject, 0,'ISO-8859-9');// alttaki ile beraber 2 satır gelen türkçe karakter kodunu ayarlıyor
$ssubject = mb_convert_encoding($ssubject, 'UTF-8', 'ISO-8859-9'); //
$output .="basla".'<br/>';
// $bul=$headerInfo->subject;
$bul=$ssubject;
// echo $bul.'<br/>';
$sonuc=str_replace($bulunacak, $degistir,$ssubject); // yukarıda utf-8 olarak ayarlanan kod türkçe karakterleri ingilizce karakterlere ceviriyor. LCD için.
$output .= $sonuc.'<br/>';
// $output .= $headerInfo->subject.'<br/>';
// $output .= $headerInfo->toaddress.'<br/>';
$output .= $headerInfo->date.'<br/>';
// $output .= $headerInfo->fromaddress.'<br/>';
// $output .= $headerInfo->reply_toaddress.'<br/>';
$emailStructure = imap_fetchstructure($inbox,$mail);
if(!isset($emailStructure->parts)) {
$output .= imap_body($inbox, $mail, FT_PEEK);
} else {
//
}
echo $output;
$output = '';
}
// colse the connection
imap_expunge($inbox);
imap_close($inbox);
?>
Nodemcu programı ile de gelen bilgileri alıp LCD ye yazdırmamız lazım. Tabii ki LCD 2 satır veya 4 satır olabilir. Ben 2 satıra göre ayarladım. Sizler 4 satıra göre verileri yazdırabilirsiniz. LCD nin sütun ayarı ise 16 karakter 20 karakter ya da daha fazla olabilir.
İsterseniz gelen konu başlıklarını direkt yazdırabilirsiniz. Fakat uzun satırlar sorun olabileceğinden, Nodemcu programında ilk 20 karakteri ayırarak LCD ye gönderdim.
Bu şekilde ekranda daha düzgün bir görünüm elde edildi. Ekranınız 16 sütundan oluşuyorsa 16 karakter görürsünüz, 20 karakterden oluşuyorsa 20 karakter görürsünüz. Daha fazla sütun isterseniz programdan kolaylıkla ayarlayabilirsiniz.
Değiştirmeniz gereken satırlar.
160. ve 161. satırlarda modeminizin internet adı ve şifresi. Ayrıca 187 ve 191. satırlardaki bilgiler benim PHP dosyamın bulunduğu yerdir. Buraya sizin PHP dosyanızın bulunduğu yeri yazmalısınız. 196. satıra ise bulunduğu sunucunun ismi yazılacak.
NOT: LCD ile başlayan tüm LCD komutları EASYLCD komutlarıdır.
EASYLCD kullanmayacaksanız kendi LCD modülünüze göre komutları değiştirirsiniz.
temps={}
subtemp={}
datetemp={}
madet={}
timesa={}
msay=1
kont=1
temp=0
zamisim="basla"
unread=0
mesaj=0
function yazdir()
if (unread==0) then
uart.write(0, "LCDWR 1,1-NO MESSAGE ")
tmr.delay(50000)
uart.write(0, "LCDWR 2,1-",madet[3])
tmr.delay(50000)
else
uart.write(0, "LCDWR 1,1-Messages ",string.format("%d", unread)," / ",string.format("%d", mesaj)," ")
tmr.delay(50000)
--uart.write(0, "LCDWR 1,15- / ",string.format("%d", mesaj)," ")
--tmr.delay(50000)
for i=1,unread do -- okunmamış olanları teker teker 2. satıra yazıp sola kaydıracak. tarih görünsün diye. arkasından home yapacak.
uart.write(0, "LCDWR 2,1-",subtemp[i]," ")
--tmr.delay(50000)
--uart.write(0, "LCDWR 2,21-",datetemp[i])
tmr.delay(5000000)
end
end
tmr.delay(1000000)
end
function kurayar(c) -- mesaj toplamlarını alır.
--print (i,j,k,l)
i=0
j=0
k=0
l=0
--print (kont)
--print (c)
i,j=string.find(c,zamisim)
--print (i,j)
if (i>0) then
k,l=string.find(c,"<br/>",j)
i,j=string.find(c,"<br/>",l)
if (k>0) then
madet[1]=string.sub(c,l+1,i-1)
end
k,l=string.find(c,"<br/>",j)
madet[2]=string.sub(c,j+1,k-1)
--print (madet[2])
i=k j=l
-- print (i," ",j)
k,l=string.find(c,"<br/>",j)
madet[3]=string.sub(c,j+1,k-1) -- tarih kısmını alıyor. yeni mesaj yoksa 2. satıra yaz.
mesaj=string.len(madet[1])
mesaj=string.sub(madet[1],11)
--mesaj=tonumber(mesaj)
unread=string.sub(madet[2],8)
unread=tonumber(unread)
--print (unread," ",mesaj," ",madet[1]," ",madet[2])
if (unread==0) then
yazdir()
end
end
madet[1]= string.sub(madet[1],2)
tmr.delay(1000000)
end
function timeayar(c) -- mail konu satırındaki bilgileri alır.
srv:close()
--print (i,j,k,l)
--print (c)
i=0
j=0
k=0
l=0
msay=1
--print (kont)
--print (c)
i,j=string.find(c,zamisim,j)
--print (i,j)
if (i==nil) then
tmr.delay(10000000)
return
end
while (i>0)
do
if (i>0) then
k,l=string.find(c,"<br/>",j)
i,j=string.find(c,"<br/>",l)
if (k>0) then
timesa[1]=string.sub(c,l+1,i-1) -- konu
end
-- print (timesa[1])
--print ( k," ",l," ",i," ",j)
k,l=string.find(c,"<br/>",j)
timesa[2]=string.sub(c,j+1,k-1) -- tarih
--print (timesa[2])
--print ( k," ",l," ",i," ",j)
i=k j=l
-- print (i," ",j)
--temp=string.len(timesa[1])
--print ("karakter : ",temp)
subtemp[msay]=string.sub(timesa[1], 1, 20)
--print (" Subject ",subtemp[msay])
datetemp[msay]=string.sub(timesa[2], 1, 17)
-- print (" Date ",temps[2])
-- display kaydırma ekle sonunda HOME yap ve varsa 2. değişkeni yaz. yoksa bitir.
--yazdir()
-- print (timesa[1])
-- print (timesa[2])
end
i,j=string.find(c,zamisim,j)
--print ("son : ",i," ",j)
if (i==nil) then
break
end
msay=msay+1
end
yazdir()
tmr.delay(1000000)
end
-- Your access point's SSID and password*****************************************
local SSID = "Your SSID Name"
local SSID_PASSWORD = "Your Password"
-- configure ESP as a station
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID,SSID_PASSWORD)
wifi.sta.autoconnect(1) -- otomatik bağlantı kuruyor. 0 manual bağlantı gerektiriyor
uart.setup(0,9600,8,0,1,0)
uart.write(0, "LCDDD") -- ******************** "\r\n" gerçek devrede olmayacak burada satir olarak görünsün diye verildi. ***********************
tmr.delay(50000)
uart.write(0, "LCDBL 9-") -- LCD backlight ışığının seviyesini ayarlar.
tmr.delay(50000)
uart.write(0, "LCDWR 1,2-EASYLCD MODULE")
tmr.delay(50000)
uart.write(0, "LCDWR 2,2-ESP-01_Nodemcu")
tmr.delay(50000)
function sendTS()
srv = net.createConnection(net.TCP, 0)
srv:on("receive", function(sck, c) --print(c)
if (kont==0) then kurayar(c) end
if (kont==1) then timeayar(c) end
end)
srv:on("connection", function(sck)
print("Wait for connection before sending.")
if (kont==0) then
sck:send("GET http://www.mikrobotik.com/api/email/email_check.php HTTP/1.1\r\nHost: www.mikrobotik.com\r\nConnection: close\r\nAccept: */*\r\n\r\n")
end
if (kont==1) then
sck:send("GET http://www.mikrobotik.com/api/email/mail2.php HTTP/1.1\r\nHost: www.mikrobotik.com\r\nConnection: close\r\nAccept: */*\r\n\r\n")
end
--srv:close()
end)
srv:connect(80,"www.mikrobotik.com")
srv:close()
kont=kont+1
if kont==2 then kont=0 end
end
function check_wifi()
local ip = wifi.sta.getip()
if(ip==nil) then
print("Connecting...")
print("baglanti yapiliyor\r\n")
else
print("Connected to AP!")
print(ip)
print("baglanti tamam\r\n")
end
end
check_wifi()
sendTS()
--srv:close()
--tmr.alarm(0,17000,1,sendTS)
--tmr.alarm(0,10000,tmr.ALARM_SEMI,check_wifi)
tmr.alarm(0, 10000, 1, function ()
check_wifi()
sendTS()
end)
Yukarıdaki programlardaki değişiklikleri yapmak kolaydır. PHP IMAP örnekleri internette mevcuttur.
Herkes Gmail kullanmıyordur. Kendi e-mail sunucunuza PHP olarak nasıl bağlanacağınızı bulduğunuzda, Nodemcu programınızla, tüm e-mail hesaplarınızı,PHP ile kontrol edebilirsiniz.
Ayrıca çalışma sırasında gelen verileri neye göre ayıkladığımı belirtmek istiyorum.
ESP nin aldığı veri aşağıdaki gibidir. 12e kısmından sonra <br/> dizilimini arıyorum. Bu şekilde 2 <br/> dizilimi arasındaki veriyi ayıklamış oluyorum. Başlangıçta <br/> dizilimi yok. Bundan dolayı PHP dosyasına “basla” diye bir dizilim verdim. ilk kelime bu olduğu için basla kelimesini bulacak, sonrasında <br/> dizilimini arayıp “basla” ve <br/> arasındaki kayıt başlangıç kaydı olacaktır.
NOT : <br/> dizilimi HTML ve PHP dosyalarında, satır sonu enter ve line feed görevi görür. Yani arduinoya göre karşılaştırırsak. Bu komuta karşılık gelir.
\n = LF (Line Feed) Bundan dolayı aşağıdaki web sayfasından alınan çıktılar satır şeklinde görünmüştür.
=======================================
+IPD,0,465:HTTP/1.1 200 OK
Date: Sat, 16 Mar 2019 21:47:18 GMT
Server: Apache
X-Powered-By: PHP/5.5.38
Transfer-Encoding: chunked
Content-Type: text/html
12e
mail 1 ornek<br/>date<br/>
===============================================
Tabii ki tüm mail konuları gönderilirken aşağıdaki şekilde olduğu gibi “basla “kelimesi ile başlayacaktır. Bu da ayrı maillerdeki konu bilgisini ayrı ayrı alabilmemizi sağlayacaktır. Sizler de verilerinizi düzenlerken PHP dosyasına belirteç koyabilirsiniz.
Aşağıda PHP dosyasından gelen veri görünmektedir.
email_check.php web sayfası çıktısı.
============================
basla
Messages: 4
Unread: 4
Wed, 20 Mar 2019 18:23:19 +0300 (+03)
===================================
Mail2.php web sayfası çıktısı.
==============================
basla
mail_php_dene
Fri, 15 Mar 2019 12:46:23 +0000
basla
e-mail_1_ornek
Wed, 20 Mar 2019 14:22:58 +0200
basla
E-MAIL_2_Ornek
Wed, 20 Mar 2019 14:24:06 +0200
basla
EASYLCD_Ornek_3
Wed, 20 Mar 2019 14:24:46 +0200
================================
UYARI :
Bu program eski nodemcu programı ile çalışabilmektedir. Fakat Nodemcu programındaki hata nedeniyle bazı özellikler devre dışı bırakılmıştır. Bu özellikleri görüp, yeni Nodemcu programını yüklemek için Bu adrese gidip okumanızı tavsiye ederim.