ESP8266-01_ Arduino_Pic_TCPserver_XML_datalog_excel_grafik

Bu konumuzda Arduino veya PIC ile yapılmış devrelerimizden, kablosuz olarak datalog oluşturmak. XML ile oluşturulan bu dosyaların EXCEL üzerine aktarılması ve analiz için grafiğinin çıkarılmasını göreceğiz.

Datalog iki şekilde oluşabilir. SD kart üzerinde oluşturup bilgisayara taşıyabilirsiniz. Ya da gerçek zamanlı olsun derseniz, kablosuz olarak PC ye aktarabilirsiniz.
PC ye nasıl aktaracağız derseniz de, PC üzerinde bir TCP server programı olacak. Bu program VB6 ile yapıldı. XP gibi eski bilgisayarlarda çalıştığı gibi WIN10 bilgisayarlarda da çalışabilmektedir. Bu program gelen bilgileri bir txt dosyasına kaydeder. Bu dosya uzantısı xml olarak değiştirilerek, XML dosyası oluşturulur.

Öncelikle Arduino ya da PIC ile yapılmış programın, satın almış olduğunuz ESP8266-01 ile nasıl haberleştiğini görelim.
( Şayet ESP8266-01 modülünüzü AT komutundan farklı bir şekilde kullandıysanız, içerisindeki SDK programı Yenilemek isteyebilirsiniz. Bu sayfadan faydalanıp SDK yani AT komut setine cevap verecek duruma getirmeniz gerek. )

Bu linkten ESP01 modülünüzü AT komut seti olarak nasıl çalıştıracağınızı öğrenebilirsiniz. 

Bu linkten ESP01 ile ilk defa çalışıyorsanız, Nasıl başlayabilirsiniz bunu öğrenebilirsiniz.

ESP01 modülünüzü AT komut setiyle çalıştırdıysanız, Artık deneme programınızı Arduinoya ya da PIC işlemcinize yükleyebilirsiniz.
AT komut seti hakkında ayrıntılı bilgiyi buradan alabilirsiniz. 
Her iki program da benzer programlardır.
Önce ESP01 modülünü istemci olarak ayarlamak için AT komutlarını yollar.
AT+RST               ESP01 reset atar.
AT                       Bu komut hazır mı diye kontrol etmemizi sağlar. Cevap “OK” dir.
AT+CWMODE=3  Modülün STA,AP,SAT+AP şeklinde çalışması gerektiğini belirtiriz.
AT+CIPMODE=0  Modülde Transfer modudur. 0=Normal mod.
AT+CIPMUX=1     Modülde sunucu açılacaksa çoklu bağlantıya izin vermesi.
AT+CWJAP=”SSID ismi”,”şifre”   Modeminize bağlanmak için gereken kullanıcı ismi ve şifre.
AT+CIPSTART=0,”TCP”,”192.168.1.102″,1001    PC deki sunucunun IP adresi ve PORT adresi.
Buraya kadar olan komutlarla PC bağlantımızı kurmuş olduk. Şimdi de bilgi gönderme kısmını oluşturalım.
AT+CIPSEND=0,8   Bu komut ile kaç karakter bilgi göndereceğimizi ESP ye söyleriz. ESP bize    AT+CIPSEND=0,8     OK   cevabını verdikten sonra 8 karakterlik bilgimizi göndeririz. Örnek: deneme   Bu 6 karakter ediyor diye düşünüyorsunuzdur. Evet 6 karakter. Biz 8 karaktere tamamlamak için ENTER ve Line Feed ( CR+LF ) denilen 2 karakteri gönderiyoruz. PICbasic ile yapılan programda Hserout satırının sonunda 13,10 karakterleri yer almaktadır.
Arduino programında ise bir karakter yazılmamıştır. Sadece Serial.println ile gönderilmesi yeterlidir.
Bunun sebebi ise ESP8266-01 modülü, gelen bilgilerin sonunda bu karakterleri arar, bulunca son karakter olduğunu anlar.

Arduino programında baştaki AT hazırlık komutlarının bazılarında sadece bilgi gönderdim cevap beklemedim. Cevap yerine DELAY komutuyla bekleme yaptım.
Bu şekilde AT+CIPSEND=0,8 gibi bir komut gönderdiğimde OK cevabını aldığımda, bilgiyi hemen gönderip alındı bilgisini de Espnin gönderdiği SEND OK bilgisinden anlıyorum. Sonrasında yeni bilgi için yine AT+CIPSEND=0,? komutu yolluyorum. Programlarda bu iki değişik geri bildirimi yakalamak için bir değişken kullandım. Hangisini bekleyecek isem, o değişkene OK ya da SEND OK yazıyorum ve o cevabı bekliyorum.

Programlar basit olduğundan anlaşılması zor olmayacaktır. Farklı olan kısmı XML şeklinde yazdırmaktır.
XML için gereken yazılım şekli aşağıdadır.
<?xml version=”1.0″ encoding=”UTF-8″?>    : standart bildirim satırı
<?xml-stylesheet type=”text/css” href=”datalog.css”?>   : internet sayfası olarak göstermek için sayfa stilini ayarlayan dosya adı.
<DATALOG>   : başlık kısmıdır.
<tempretures> : konu kısmıdır
<SENS_NO>01</SENS_NO>   :diğerleri verilerdir.
<Temp>001</Temp>
<Date>03.05.2020</Date>
<Hour>09:25:30</Hour>
</tempretures>
<tempretures> : konu kısmıdır
<SENS_NO>01</SENS_NO>   :diğerleri verilerdir.
<Temp>002</Temp>
<Date>03.05.2020</Date>
<Hour>09:25:30</Hour>
</tempretures>
</DATALOG>
Bu şekilde yazdırırken, aradaki değerleri de yazdırmadan önce sizin hesaplamanız gerekiyor. Mesela birden fazla sensörünüz var. Bu sensörün numarasını gerekli yere yazdırmak için hazırlamanız gerek. Sonrasında sensör değerlerini kontrol etmeniz gerek. RTC varsa saat bilgisini de alarak bu bilgileri tamamlayıp ESP01 ile PC ye gönderebilirsiniz. < > bu karakterler arası görünen yazılar zaten değişmez.
Bu şekilde gönderirken her satırın sonunda CR+LF olduğunu da dikkate almanız gerek.
Arduino da komut olarak dizinin karakter sayısını hesaplayan LENGTH komutunu kullandım. Bu sayı bana, gönderilecek karakter sayısını verecektir. PICBASIC  te ise bu tip bir komut olmadığından ben de gönderilen karakter sayısı değişmesin diye 15 göndermek yerine 015 gönderecek şekilde DEC3 belirtecini kullandım.
Arduinoda AT+CIPSEND için karakter sayısı her defasında hesaplanıyor PICBASIC te ise hep sabit olarak gönderiliyor.
Bu sensör bilgilerini temsil etmek için bir sayaç koydum. Her defasında 1 artarak bilgi gönderiliyor. Sizler bu sayaç yerine, kendi sensör değerlerinizi koyup, gönderecek şekilde programda değişiklik yapabilirsiniz.

Arduino programında 179. ve 180. ve 185. satırdaki komutlar ESP8266-01 in yazılımsal seri port ile çalıştırılması esnasında sorun yaratmasın diye, haberleşme hızını geçici şekilde 9600 baud olarak ayarlamak içindir. Bu komut ile ESP01 modülüne bundan sonra reset atılasıya kadar, haberleşme hızın 9600 baud olsun demiş oluyoruz. Tekrar RESET atılırsa veya yada yeniden enerji verilirse 115200 baud haberleşme hızına geçer.  İstenirse Kalıcı olarak da 9600 baud hızına ayarlanabilir. Bunun için yukarıda linkini vermiş olduğum AT komut setine bakmanız sanırım yeterli olacaktır.
Yazılımsal seri port kullanıyorsanız, 9600 baud gibi düşük hızları kullanmanız, haberleşme hatalarını en aza indirecektir.

Arduino BAğlantı şeması :

Aşağıdaki PICBASIC programı PIC12F1822 entegresine aittir. İç osilatörü 32Mhz hızında kullanılmıştır. 271. 272. satırlardaki komutlar WHILE döngünüzde bir sayaç değeri kadar ESP den geri bildirim beklesin. Geri bildirim istenildiği gibi gelmezse, hata versin diye yazılmıştır. Bu satırlar olmasa hata verdiğinde while döngünüzde kilitlenir ve hata düzeltilemezdi.
WHILE döngülerinde böyle bir teknik kullanılması lazım yoksa sonsuz döngüye girer programınız reset atılmadıkça normale dönemezdi. PIC programında donanımsal seri port ESP01 in haberleşmesinde kullanılıyor. Yazılımsal seri port ise EASYLCD kontrollü LCD de bilgileri yazdırmak için kullanılmaktadır.

PIC12F1822 devre şeması:

 

 

 

VİDEO LİSTESİ : PIC videosunda xml ve tcpserver ayrıntılı açıklanmıştır.
1-) Arduino ile birlikte çalışması. Bu videodan sonra PIC videosunu da izleyerek ayrıntıları görmelisiniz.
2-) PIC ile birlikte çalışması
3-) XML dosyaları ve  excel’e aktarılması. XML dosyalarını excel’e aktarma ayrıntılı video.
4-) TCP server programının çalışması. TCPserver programının ayrıntılı çalışması. 
5-) Visual Basic 6 ile yapılan program WIN8 ve WIN10 da nasıl çalıştırılır. TCP server programının win10 da çalıştırılması için izlemeniz gerekli.

Not: TCPserver programı VB6 ile yapılmıştır. Bu programın EXE dosyası bazı virüs programlarınca virüs olarak değerlendiriliyor. Kaynak dosyası da elinizde olacağından bilgisayarınıza VB6 programını yükleyerek yeniden EXE şekline çevirebilirsiniz.
Ayrıca bu program datalog.txt dosyasını oluşturur. Bunu oluşturmak için verilerin pencerede yazılmış olması gerekir. Pencereye gelen tüm datalar dosyaya yazılmaktadır.
Bu kısım PIC çalışma videosunda gösterilmiştir. İstediğiniz taktirde programda değişiklikler yaparak dosyanızın ismini değiştirebilirsiniz. Bazı ek bilgiler girebilirsiniz. Ben saat bilgilerini arduino okur dedim. Fakat RTC kullanmayacaksanız datanın geldiği bilgiye ek olarak PC nin saatini okuyup koyabilirsiniz. RTC ye ihtiyacınız kalmaz.
Arduino ve PIC programında isterseniz I2C harici eprom kullanıp, sunucuya ulaşılamadığında bilgileri bu eproma yazmak ve sonrasında sunucu bağlantısı sağlandığında bu bilgileri PC ye aktarmak gibi bir değişiklik yapabilirsiniz. Bunu yapacaksanız RTC nin arduino ile birlikte kullanılması kaçınılmazdır.

Not: VB6 programları 32 bit eski windowslara göredir. Bunu WIN10 ile çalıştırmak için 3 dosyayı C:\windows\system32 dizinine kopyalayıp aşağıdaki örnekteki gibi regsrv32 ile win 10 sisteminizin içine alınması gerekir. 32 bit standart olmayan OCX ve DLL programlarının win 8 ve üstüne tanıtılması bu şekildedir.
Buradan regsvr32 kullanımı için bilgi alabilirsiniz.

Tüm gerekli dosyalara buradan ulaşabilirsiniz. 

Arduino ile çalışma : 

PIC ile çalışma : 

XML Videosu : 

TCP SERVER Videosu :

VB6 ile yapılan TCP server programının WIN 10 ile çalıştırılması için izlenecek yol. 
 

1 Comment

  1. Elinize sağlık. Kendim uygulayabilmek için daha iyi bir altyapım ve zamanım olsun isterdim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir