
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.
/* 3.3V seviye dönüşüm yaparak esp Rx e ver. ayrıca gnd yi pc gnd ye tak. ayrı power kullanıldığında. ESP8266-01_ istemci (client) çalışması Aşağıdaki bilgiler ESP ye gönderilen komutlar ve alınan geri bildirimlerdir. Bunlara bakarak gerçekte nasıl bir geri bildirim gelmesi gerektiğini görebilirsiniz. AT+CWJAP="Guest_SSID_1_4A09","guest1997" 0,CLOSED WIFI DISCONNECT WIFI CONNECTED WIFI GOT IP OK AT+CIPSTART=0,"TCP","192.168.1.102",1001 0,CONNECT OK AT+CIPSEND=0,21 OK > Recv 21 bytes SEND OK +IPD,0,9:send dataAT+CIPSEND=0,466 OK > Recv 466 bytes SEND OK +IPD,0,24:send data sdfsdfsdfsdf AT+CIPSEND=0,10 deneme esp *************************************************** serverden gelen bilgi aşağıda OK yok IPD kontrol et. +IPD,0,26:2,GONDERiLECEK BiLGiYi YAZ ********************************************** ================================================================= client servere gönderirken AT+CIPSEND=0,12 OK > deneme esp gönderilir ama esp bunu göstermez. sadece recv 12 bytes yazar. ve gönderme tamamlandığında SEND OK bilgisini döndürür. Recv 12 bytes SEND OK ============================================================== ---------------------------------------------------------------- Client bağlantısı kurulduğunda AT+CIPSTART=0,"TCP","192.168.1.102",1001 // 0 esp nin servere bağlantı yaptığı kanal 3 e kadar farklı kanallardan gönderebilir. // bu 0 sunucunun bağlantı numarasını etkilemez. sunucu hangi sırada bağlandıysa o numarayı atar // aradaki haberleşme için. 0,CONNECT OK --------------------------------------------- */ #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX String readString; String bak[5]=""; String denek = ""; String gonderbilgi=""; //__FlashStringHelper *gonderbilgi ; __FlashStringHelper *srv1 ; // __FlashStringHelper komutuyla srv1 e ait bilgilerin program belleğine yüklenmesi için yer ayrılır. __FlashStringHelper *srv2 ; __FlashStringHelper *srv3 ; __FlashStringHelper *srv4 ; //__FlashStringHelper *srv5 ; __FlashStringHelper *srv6 ; //__FlashStringHelper *srv7 ; char * kont; char * pch; char * str; int say=0; int say2=0; int prob=0; int hata=0; void bakgel(){ // bekleme komutunu tekrar tekrar kullanmak yerine bu şekilde yapıldı hafıza kaplamasın diye. hata=0; delay(100); // Serial.print("string ");Serial.println("*********************************"); while (mySerial.available()){ char c = mySerial.read(); readString += c; } bak[1]=readString; denek=readString; Serial.print("Gelen : ");Serial.println(denek); readString=""; str = bak[1].c_str(); pch=strstr (str,kont); // OK den sonra ne varsa onu pch olarak tutar denek=pch; // pch taki char değerleri string e çevirerek alır. say=denek.indexOf(kont); // denek dizisi içerisinde OK kaçıncı karakter. if (kont=="OK"){ denek=denek.substring(say,say+2); } if (kont=="SEND OK"){ denek=denek.substring(say,say+7); } if (denek=="OK" || denek=="SEND OK"){ hata=0; }else{ hata=1; } //delay(1000); } void istemciac(){ // ******istemciyi hazırla ve gönder. **************** srv1=F("AT+CWMODE=3"); // F fonksiyonu ile program belleğine gönderildi bu değişkenler. Sebep data belleğinde yer açmak. srv2=F("AT+CIPMODE=0"); srv3=F("AT+CIPMUX=1"); srv6=F("AT+CIPSTART=0,\"TCP\",\"192.168.1.102\",1001"); // gelen bilgi 0,CONNECT OK srv4=F("AT+CWJAP=\"Guest_SSID_1_4A09\",\"guest1997\""); // gelen bilgi WIFI CONNECTED WIFI GOT IP OK kont="OK"; //RST: //*********** AT+RST uygula ve 3000ms bekle. **************** kullanılmıyor zaten ilk enerji verildiğinde bunu yapıyor. // Serial.println("AT+RST");// denemeOK //delay(3000); // bakgel(); //Serial.print("HATA : "); Serial.println(hata,DEC); // if (hata==1){ // goto RST; // } CWMODE: mySerial.println(srv1); delay(100); bakgel(); Serial.print("HATA : "); Serial.println(hata,DEC); if (hata==1){ goto CWMODE; } CIPMODE: mySerial.println(srv2); delay(100); bakgel(); if (hata==1){ goto CIPMODE; } CIPMUX: mySerial.println(srv3); delay(100); bakgel(); if (hata==1){ goto CIPMUX; } STA_AC: mySerial.println(srv4); delay(500); bakgel(); bakgel(); // kontrol yapılmıyor sadece buffer daki bilgiler temizleniyor. ISTEMCI_AC: mySerial.println(srv6); delay(500); bakgel(); bakgel(); // kontrol yapılmıyor sadece buffer daki bilgiler temizleniyor. delay(1000); } void setup() { Serial.begin(9600); delay(500); mySerial.begin(115200); mySerial.println("AT+UART_CUR=9600,8,1,0,0"); // softserial 115200 kullanamadığı için açılışta ESP8266-01 haberleşmesi // 9600 olarak çevrilip bundan sonra // 9600 olarak haberleşilir. KApatılıp açılınca yine 115200 e döner. // kalıcı yapılmak istenirse AT+UART_DEF=9600,8,1,0,0 yapılır ama tavsiye etmem // kapatıp açınca 9600 de kalır ve sonrasında unuttuğunuzda problem var diye düşünüp arızalı diyebilirsiniz. mySerial.begin(9600); delay(200); mySerial.println("AT"); delay(100); bakgel(); // sadece AT komutu gönderiliyor kontrol yapılmıyor. say2=1; prob=0; istemciac(); } void loop() { // *********** Artık ESP istemci olarak ayarlanmıştır. sadece dataları ESP ye yollamaya başlar. say2=say2+1; // sanki sıcaklık ölçüm değeri gibi bu değer değişkenlik sağlayıp PC ye gönderiliyor. TEKRAR_GONDER: // Şayet AT+CIPSEND hata verirse buraya döner. aynı bilgiyi göndermeye çalışır. gonderbilgi="<tempretures>\r\n<Temp>"+String(say2)+"</Temp>\r\n"+"<Date>"+String(say2+1)+"</Date>\r\n"+"<Hour>"+String(say2+2)+"</Hour>\r\n</tempretures>\r\n"; delay(200); say=gonderbilgi.length(); if (say==0){ // normalde olmaması gereken bir kontrol fakat bazen sabit bilgi bile olsa gonderbilgi boş olabiliyor. kontrol edip kaldırabilirsiniz. delay(2000); // atmega168 hafızasından dolayı hata yapmış olabilir. goto TEKRAR_GONDER; } mySerial.print("AT+CIPSEND=0,");mySerial.println(say); // bu komut kaç karakter gönderileceğini ESP ye bildiriyor. delay(500); kont="OK"; // bu komuttan sonra OK bekleniyor. bakgel(); // geri bildirim alma kısmına gidiyor. if (hata==1){ delay(2000); Serial.println("CIPSEND HATA***********************"); goto TEKRAR_GONDER; // sunucu açık değilse hata verir. burada 5 kez deneyip hata verirse, sonrasında kullanıcıyı uyar diyebilirsiniz. } kont="SEND OK"; // gönderilen karakterler gönderildiğinde OK değil SEND OK ya da SEND FAIL döndürür. SEND OK kontrol edilir. mySerial.print(gonderbilgi); delay(500); bakgel(); Serial.print("HATA ve kont: "); Serial.print(hata,DEC);Serial.println(kont); if (hata==1){ // Serial.println("Tekrar gonderiliyor"); delay(2000); goto TEKRAR_GONDER; } // DİKKAT Program ve data hafızasına ihtiyaç duyuluyorsa Serial print ile gösterilen anlık bilgi satırları iptal edilebilir. // Bu satırlar data hafızasını oldukça dolduruyor. }
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.
'**************************************************************** '* Name : ESP01_DATALOG * '* Author : [select VIEW...EDITOR OPTIONS] * '* Notice : Copyright (c) 2020 * '* : All Rights Reserved * '* Date : 08.02.2020 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** DEFINE OSC 32 OSCCON = %11110000 '32mhz #config __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF __config _CONFIG2, _WRT_OFF & _PLLEN_OFF & _LVP_OFF & _STVREN_OFF #ENDCONFIG CM1CON0 = 0 ADCON0=%00000000 ADCON1=%00000000 ANSELA=0 ;ADC ler iptal TRISA=%00100000 APFCON=%10000100 pause 500 SYMBOL RXPIN=porta.4 SYMBOL TXPIN=porta.5 SYMBOL GIE =INTCON.7 'genel interruptları açıyor SYMBOL PEIE =INTCON.6 'peripheralinterruptları açıyor SYMBOL RCIE =PIE1.5 'USART Recive interrupt enable bit SYMBOL RCIF =PIR1.5 'USART Receive interrupt flag bit temp var byte sayhata var word sens_no var byte D var byte[40] T var byte TMP_1 var byte d1 var byte d2 var byte d3 var byte h1 var byte h2 var byte h3 var byte kont_kar var byte say2 var byte don var byte PS var byte don=0 say2=0 ; donanımsal eusart 8mhz 9600 baud ;DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive ;DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0 ;DEFINE HSER_CLROERR 1 ' Clear overflow automatically ;DEFINE HSER_SPBRG 51 ' 9600 Baud @ SPBRGH = 0 ;BAUDCON.3 = 1 ' Enable 16 bit baudrate generator ; ******** 32 mhz de 9600 baud 8 N 1 **************** ;DEFINE HSER_RCSTA 90h ; Enable serial port & continuous receive ;DEFINE HSER_TXSTA 24h ;' Enable transmit, BRGH = 0 ;DEFINE HSER_CLROERR 1 ;' Clear overflow automatically ;DEFINE HSER_SPBRGH 3 ;DEFINE HSER_SPBRGL 64 ;++++++++++++ SPBRG L olmalı +++++++++++++++++++++ ;BAUDCON= %01001000 ' Enable 16 bit baudrate generator ; ******** 32 mhz de 115200 baud 8 N 1 ESP8266-01 için **************** DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1 DEFINE HSER_CLROERR 1 ' Clear overflow automatically DEFINE HSER_SPBRG 68 ' 115200 Baud @ SPBRGH = 0 BAUDCON.3 = 1 ' Enable 16 bit baudrate generator ;goto yazdir serOut2 porta.0,84, ["LCDDD"] pause 300 RCIE=1 PEIE=1 GIE=1 TEMP=RCREG ON INTERRUPT GOTO KESME basla: kont_kar=0 ATRST: ps=1 hserout ["AT+RST" ,13,10] ;call kontrol pause 5000 ;if don=0 then goto ATRST pause 300 ;call kesme don=0 AT_code: ps=2 serOut2 porta.0,84, ["LCDWR 2,3-SIRA: ",DEC2 PS] pause 200 hserout ["AT",13,10] call kontrol if don=0 then ; call kesme pause 300 goto AT_code endif don=0 pause 300 CWMODE: ps=3 serOut2 porta.0,84, ["LCDWR 2,3-SIRA: ",DEC2 PS] pause 200 hserout ["AT+CWMODE=3",13,10] call kontrol if don=0 then goto CWMODE don=0 pause 300 CIPMODE: ps=4 serOut2 porta.0,84, ["LCDWR 2,3-SIRA: ",DEC2 PS] pause 200 hserout ["AT+CIPMODE=0",13,10] call kontrol if don=0 then goto CIPMODE don=0 pause 300 CIPMUX; ps=5 serOut2 porta.0,84, ["LCDWR 2,3-SIRA: ",DEC2 PS] pause 200 hserout ["AT+CIPMUX=1",13,10] call kontrol if don=0 then goto CIPMUX don=0 pause 300 CWJAP: PS=6 serOut2 porta.0,84, ["LCDWR 2,3-SIRA: ",DEC2 PS] pause 200 hserout ["AT+CWJAP=",34,"Guest_SSID_1_4A09",34,",",34,"guest1997",34,13,10] ;AT+CWJAP="Guest_SSID_1_4A09","guest1997" call kontrol if don=0 then goto CWJAP don=0 pause 300 CIPSTART: PS=7 serOut2 porta.0,84, ["LCDWR 2,3-SIRA: ",DEC2 PS] pause 200 hserout ["AT+CIPSTART=0",",",34,"TCP",34,",",34,"192.168.1.102",34,",","1001",13,10] call kontrol if don=0 then pause 200 serOut2 porta.0,84, ["LCDWR 1,1-NO TCP SERVER"] ; eklendi pause 1000 ;eklendi goto CIPSTART endif ;eklendi don=0 serOut2 porta.0,84, ["LCDWR 1,1-TCP SRV CONNECT"] ;eklendi pause 300 yazdir: kont_kar=0 PS=8 ;serOut2 porta.0,84, ["LCDWR 2,3-SIRA: ",DEC2 PS] say2=say2+1 d1=3 d2=5 d3=20 h1=9 h2=25 h3=30 sens_no=1 tekrar: ;mySerial.print("AT+CIPSEND=0,");mySerial.println(say); Hserout ["AT+CIPSEND=0,",dec3 114,13,10] call kontrol if don=0 then pause 300 goto tekrar ; bu tekrar sayısına göre sorun varsa close yapıp lcd ye hata yazdırabilirsiniz. endif don=0 ; 23 2 17 3 2 1 2 3 2 14 2 1 2 1 2 23 kont_kar=1 Hserout ["<tempretures>",13,"<SENS_NO>",dec2 sens_no,"</SENS_NO>",13,"<Temp>",dec3 say2,"</Temp>",13,"<Date>",dec2 d1,".",dec2 d2,".20",dec2 d3,"</Date>",13,"<Hour>",dec2 h1,":",dec2 h2,":",dec2 h3,"</Hour>",13,"</tempretures>",13] ; burada gönderirken sensör numarasını da gönder. hangi sensörden gelirse gelsin kayıt yapsın. ;hangi clienttan gelirse gelsin işlemler sensör numarasına göre işlenir ve rapor çıkarılır. call kontrol if don=0 then goto tekrar endif don=0 pause 200 serOut2 porta.0,84, ["LCDWR 2,1-Sensor: ",dec2 sens_no," ",DEC3 say2] pause 300 goto yazdir DISABLE KESME: ; SERİ PORT KESMESİ GIE=0 don=0 if kont_kar=0 then HSERIN 300,atla2, [WAIT("OK")] endif ; bu şekilde OK bekle geldiyse devam et. gelmediyse tekrar gönder. ; 3 kez tekrarla şayet hala bozuksa problem bildir. if kont_kar=1 then HSERIN 300,atla2,[WAIT("SEND O"),D[0]] endif don=1 for t=1 to 40 ; bufferda kalanları temizliyor. HSERIN 300,atla2,[D[t]] next t ;hserout ["don",dec don,13,10] atla2: ; hserout ["kesmede ",dec don,13,10] ;serOut2 porta.0,84, ["LCDWR 2,1-don: ",dec1 don,HEX2 TMP_1] TEMP=RCREG GIE=1 return enable kontrol: sayhata=0 ;pause 100 while don=0 sayhata=sayhata+1 if sayhata=65000 then return wend ;serOut2 porta.0,84, [ "LCDWR 1,1-",D[0],D[1],D[2],D[3],D[4],D[5],D[6],D[7],D[8],D[9],D[10],D[11],D[12],D[13],D[14],D[15],D[16],D[17],D[18],D[19],D[20],D[21],D[22],D[23],D[24],D[25],D[26],D[27],D[28],D[29],D[30],D[31],D[32],D[33],D[34],D[35],D[36],D[37],D[38],D[39],D[40]] ; pause 500 ; eklendi. return end
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.
Elinize sağlık. Kendim uygulayabilmek için daha iyi bir altyapım ve zamanım olsun isterdim.