ESP8266 Wifi Module Örnek Uygulama

Başlatan MrDarK, 01 Kasım 2014, 11:47:01

yldzelektronik

@vitruvius teşekkürler.

@elektronik.Uygundur. Eğer yanında pic programlayıcı da olursa güzel olur.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

elektronik

Alıntı yapılan: ambar7 - 24 Kasım 2014, 14:16:18
@elektronik
Neden o kadar büyük resim koyuyorsun ki?
Forumdaki herkesin bağlantı hızı aynı değil.

Aynı zamanda kendi blog'un kotasını da boşu boşuna dolduruyorsun. Normalde baskı almıyorsan o kadar yüksek çözünürlüğe ihtiyacın yok. Çok ince ayrıntı olmadıkça 800x600 çözünürlük yeterde artar, ki iş sadece  ürünü göstermek ise 320x240 bile yeterli.

İnternet sayfası ile uğraşan biri olarak resim düzenleme programlarından birini öğrenmen yerinde olur.
Tabii olay senin bileceğin iş...

arkadaşım o blog bana ait değil. resim düzenleme programlarından birini bilmediğimi nerden biliyorsun ?.  ayrıca ben web tasarımda yapıyorum bu işleri çok iyi biliyorum.

bu kartı forumdaki bir arkadaştan almıştım onun kendi bloğundaki resimden link verdim.

kart ile ilgili konu linki
https://www.picproje.org/index.php/topic,55228.0.html



yldzelektronik

Merhaba arkadaşlar.

Kodu denemedim.Deneme imkanı olan arkadaşlar deneyebilirlerse güzel olur.An itibariyle deneme imkanım yok.Fırsat buldukça da kodu düzenledim.Aslında öyle çok duzenleme sayılmaz.

Veri tiplerinde değiştirme yapmaktan başka bişey yapmadım. Ha bu arada volatile ile ilgili ccs c de problem çıkabilir.Ona çok bakamadım.Ancak Ccs nin manuelini inceledim.Orada volatile yok.Ki mucit23 de daha önce benzeri bir dertten muzdaripti ccs için.Sanırım p10 panel çalışmasında idi.

İkinci olarak usart fonksiyonu.Ben printf'i, daha öcne yaşadığım bellek yetersizliği sorunu yüzünden pek kullanmak istemiyorum.Onun için bendeki gönderme fonksiyonunu kullanıyorum ki çok özel bişey değil.XC8 in dökümanlarından bulunup yapılabilir.

Onun dışında geriye kalan herşey zaten fark edebileceğiniz üzere MrDark'ın yaptıkları.

Ben deneme yapmadım.Yaptığımda benzeri şeyleri tekrar paylaşırım.

Selametle...

/*****************************************************************************
*
* File Name        : ESP_Ccs_Driver.c
*
* Description      : ESP8266 Modulune ait uygulamalar
*
* Author           : Picproje & yldzelektronik
*
* Additional Information :
*
*******************************************************************************/


#include <stdio.h>
#include <string.h>

#define ModulReset	xxxx		//Burayı istediğiniz gibi doldurun. Hangi pine bağlamak isterseniz
#define ESP8266BUFFER_LENGHT	500

char g_arrui8ESP8266Buf[ESP8266BUFFER_LENGHT];
static unsigned int16 ESPWriteIndex=0;

/***********************************************************
* Function Name  : Clear_ESPBuffer
* Description    : Buffer temizlenir.
* Input          : None
* Return         : None
***********************************************************/
static void Clear_ESPBuffer(void)
{
    unsigned int16 i;

    for(i=0;i<ESP8266BUFFER_LENGHT;i++)
        g_arrui8ESP8266Buf[i] = 0;

    ESPWriteIndex=0;
}

/***********************************************************
* Function Name  : USART_puts
* Description    : Girdiðimiz cümle ilgili buffer'dan çýkar.
* Input          : USARTx
* Return         : None
***********************************************************/
void USART_puts(USART_X USARTx, volatile char *s)//------------------------volatile ccs c de yok. uygun çözüm bulunacak
{
	while(*s){
		/*
		* Bu kısmı kendi istediğiniz şekilde doldurun. 
		* Bu fonksiyondaki amacım printf kullanmamak.
		* Çok fazla flash alanı harcıyor. O yüzden genelde pic için kendi usart gönderme
		* fonksiyonumu kullanıyorum. Çok özel bir fonksiyon değil. Kendiniz de yazabilirsiniz.
		*/
	}
}

/***********************************************************
* Function Name  : ESP8266_Init
* Description    : Modül bir aga baglanana kadar burada kalir.
* Input          : None
* Return         : None
***********************************************************/
static void ESP8266_Init(void)
{
    static unsigned int8 ESPInitCase=0;

    // Modul Reset Pini High yapiliyor.
    outputhigh(ModulReset);

    switch(ESPInitCase)
    {
        case 0:
            // Standart AT Komutu gonderilir , Cevabi OK olmalidir.
            USART_puts(USART1,"AT\r\n");
            // 1 saniye gecikme koyuyoruz.
            delay_ms(1000);
            ESPInitCase = 1;
        break;

        case 1:
            // STRSTR fonksiyonu metin icinde metin arayan bir fonksiyondur
            // Eger aranilan metni bulabilirse pointer adresi ile geri donus yapar
            // Bulamaz ise NULL dondurur. Bizde null'dan farklı mı diye sorariz.
            if (strstr(g_arrui8ESP8266Buf,"OK") != NULL)
            {
                Clear_ESPBuffer();
                USART_puts(USART2,"Module Erisildi");
                ESPInitCase = 2;
            }
            else
            {
                Clear_ESPBuffer();
                USART_puts(USART2,"Modul Bulunamadi, Tekrar Deneniyor");
                ESPInitCase = 0;
            }
        break;

        case 2:
            // Modulun 3 modu var gerekli bilgi datasheet'de biz 1 olmasini istiyoruz
            USART_puts(USART1,"AT+CWMODE?\r\n");
            // 1 saniye gecikme koyuyoruz.
            delay_ms(1000);
            ESPInitCase = 3;
        break;

        case 3:
            // Gelen cevap mode 1 'mi
            if (strstr(g_arrui8ESP8266Buf,"+CWMODE:1") != NULL)
            {
                Clear_ESPBuffer();
                USART_puts(USART2,"MODE Ayar Dogru");
                ESPInitCase = 4;
            }
            else
            {
                // Fabrika ayarları olarak 2 geliyor biz onu 1 yapip reset komutu ile tamamlariz.
                USART_puts(USART1,"AT+CWMODE=1\r\n");
                USART_puts(USART1,"AT+RST\r\n");
                delay_ms(1000);

                Clear_ESPBuffer();
                USART_puts(USART2,"MOD Degistirilir.");
                ESPInitCase = 0;
            }
        break;

        case 4:
            // Baglanilacak olan wifi agina ait kullanici adi ve sifre girisi yapilir.
            USART_puts(USART1,"AT+CWJAP=\"MrDarK\",\"oztekin006\"\r\n");
            // 1 saniye gecikme koyuyoruz.
            delay_ms(2000);
            ESPInitCase = 5;
        break;

         case 5:
             // Baglanti saglandiginde OK Cevabi alinir
            if (strstr(g_arrui8ESP8266Buf,"OK") != NULL)
            {
                Clear_ESPBuffer();
                USART_puts(USART2,"Modeme Baglanti yapildi");
                ESPInitCase = 6;
            }
            else
            {
               delay_ms(1000);
                USART_puts(USART2,"Baglanti Bekleniyor.");
            }
        break;

        case 6:
            // IP adresi nedir diye soruyoruz ?
            USART_puts(USART1,"AT+CIFSR\r\n");
            // 1 saniye gecikme koyuyoruz.
            delay_ms(1000);
            ESPInitCase = 7;
        break;

        case 7:
            // IP alana kadar error bilgisi gonderir. Onu ayırırız. =)
            if (strstr(g_arrui8ESP8266Buf,"ERROR") == NULL)
            {
                USART_puts(USART2,"Alinan IP = ");
                // Gelen bilginin 11.karakterinden itibaren IP adresi yaziyor.
                USART_puts(USART2,&g_arrui8ESP8266Buf[11]);
                Clear_ESPBuffer();
                ESPInitCase=8;
            }
            else
            {
                // ERROR der ise tekrar dene
                delay_ms(1000);
                USART_puts(USART2,"Tekrar Dene.");
                Clear_ESPBuffer();
                ESPInitCase=6;
            }

        break;

        case 8:
            // Baglanilacak siteye ait bilgiler girildi.
            USART_puts(USART1,"AT+CIPSTART=\"TCP\",\"www.picproje.org\",80\r\n");
            // 1 saniye gecikme koyuyoruz.
            delay_ms(1000);
            ESPInitCase = 9;
        break;

        case 9:
            // Baglanti kuruldugunda Linked diye bir cevap aliriz.
            if (strstr(g_arrui8ESP8266Buf,"Linked") != NULL)
            {
                Clear_ESPBuffer();
                USART_puts(USART2,"Server ile baglanti kuruldu");
                ESPInitCase = 10;
            }
            else
            {
                // Cevap gelene kadar bekler
                delay_ms(1000);
                USART_puts(USART2,"Baglanti Bekleniyor.");
            }
        break;

        case 10:
            // Artık HTTP Request bilgimizi gonderebiliriz.
            // CIPSEND ile kac byte bilgi gondereceksek o kadar yazarız.
            USART_puts(USART1,"AT+CIPSEND=100\r\n");
            // Komutu verdikten sonra bize '>' bilgisi geliyor.
            delay_ms(1000);
            // HTTP Request Hazirlanir.
            USART_puts(USART1,"GET / HTTP/1.1\r\n");
            USART_puts(USART1,"Host: [url=https://www.picproje.org\]www.picproje.org\[/url]r\n");
            USART_puts(USART1,"Accept: */*\r\n");
            USART_puts(USART1,"Content-Type: text/html\r\n");
            USART_puts(USART1,"Content-Length: 0\r\n\r\n\r\n");

            // Buradan sonra http request'e gelen cevaplari degerlendirerek
            // Ne yapmak istiyorsanız onu yapabilirsiniz =)
            // Herkese bol sanslar ! Iyi gunler efenim.
            //while(1);
        break;

    }
}
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

MrDarK

Yldzelektronik ; şimdi bu yukarıdaki kod CCS'mi XC8 mi ?

Usart_puts fonksiyonları define lar vsler böyle bir kodun derlenebileceğini çok zannetmiyorum, sence derlenebilir mi ?

Ayrıca interrupt alt programı bile yok gibi sen bu kodu derledin mi ?
Picproje Eğitim Gönüllüleri ~ MrDarK

yldzelektronik

Önceki mesajımda aslında açıklama yapmıştım.Ancak yeniden açıklayayım.;

Alıntı yapılan: MrDarK - 25 Kasım 2014, 20:54:23
Yldzelektronik ; şimdi bu yukarıdaki kod CCS'mi XC8 mi ?

Alıntı yapılan: MrDarK - 25 Kasım 2014, 20:54:23
Usart_puts fonksiyonları define lar vsler böyle bir kodun derlenebileceğini çok zannetmiyorum, sence derlenebilir mi ?

Niye derlenemeyeceğini düşündüğünü anlamadım.Ama sanırım hiç ccs de kendi tanımlamalarınla donanım kullanmadın.Bu kodu denedim.Ancak kendi yazdığım uart fonksiyonunu ccs de kullandım.Define lar candır ya, bu kadar korkulacak bişeyi yok bunların :)
Kod Ccs.Nitekim belli oluyor diye düşünüyorum.


Alıntı yapılan: MrDarK - 25 Kasım 2014, 20:54:23
Ayrıca interrupt alt programı bile yok gibi sen bu kodu derledin mi ?

Olmaması normal.Çünkü sadece orada sadece senin init fonksiyonu var. Derlemediğimi belirtmiştim.Fakat yine söyliyeyim; Derlememiştim. :)

Şimdi o kodu ben hızlıca ccs c de denemek isteyen arkadaşlar olur diye durumun basitliğini göstermek için alıp kendi programında kullanabileceği şekilde yapıp vereyim diye ekledim. O kodu boşverebiliriz.

Burada; https://drive.google.com/file/d/0BxS9lo0yCui7cGVhYjBIaDRfNDQ/view?usp=sharing

Kodu derledim, denedim, çalıştırdım.

Evimde internet sorununu ttnet yüzünden çözemiyorum.O yüzden aktif modemim yok.Ben de cep telefonum üzerinden çıkıyorum.

Ben bi sıkıntı yaşamadım pek.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

FxDev

İlgili örnek il herhangi bir bilgi çekemedim ama uğraşmak isteyen arkadaşlar aşağıdaki kodlarla hava durumu raporunu çekebilirler.

AT+CIPSTART="TCP","api.openweathermap.org",80         

->> Hava durumu alınacak adrese link at

AT+CIPSEND=74

->> Gönderilecek kodun uzunluğu

GET /data/2.5/weather?id=745044 HTTP/1.0
Host: api.openweathermap.org


->> İstanbul için hava durumu

Bu arada AT+CIOBAUD=115200 gibi bir ayarla baudrate değişebiliyor. 9600'dan kurtulmak isteyenlere.
Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!

yldzelektronik

Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Recep METE

Hocam elinize, emeğinize sağlık. Akşam eve gidince verdiğiniz ccs c kodunu denemek olacak.Çok teşekkürler.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

FxDev

Arkadaşlar burada yeni sürümle (yeni sürüm versiyonu 9.3.0) yaptığım bir server çalışmasının görüntüsünü paylaşmak istiyorum.
Bu bile ağdaki cihazlarla haberleşmek için süper bir uygulama. Ve gönderilen kodların basitliği de cabası!

Bu arada test programı da gittikçe gelişiyor.

Forumda bazı bağnaz kişiler tarafından engellenip, atıldım. Tüm bu bağnaz kişilere rağmen Atatürkçülüğü sonuna kadar savunacağım; onlar da bağnazlıklarında boğulacaklar. Haberleşme için: info[at]firatdeveci.com / ©firatdeveci.com - ße Different Everytime!

respected

Alıntı yapılan: yldzelektronik - 02 Aralık 2014, 11:12:53
Önceki mesajımda aslında açıklama yapmıştım.Ancak yeniden açıklayayım.;

Niye derlenemeyeceğini düşündüğünü anlamadım.Ama sanırım hiç ccs de kendi tanımlamalarınla donanım kullanmadın.Bu kodu denedim.Ancak kendi yazdığım uart fonksiyonunu ccs de kullandım.Define lar candır ya, bu kadar korkulacak bişeyi yok bunların :)
Kod Ccs.Nitekim belli oluyor diye düşünüyorum.


Olmaması normal.Çünkü sadece orada sadece senin init fonksiyonu var. Derlemediğimi belirtmiştim.Fakat yine söyliyeyim; Derlememiştim. :)

Şimdi o kodu ben hızlıca ccs c de denemek isteyen arkadaşlar olur diye durumun basitliğini göstermek için alıp kendi programında kullanabileceği şekilde yapıp vereyim diye ekledim. O kodu boşverebiliriz.

Burada; https://drive.google.com/file/d/0BxS9lo0yCui7cGVhYjBIaDRfNDQ/view?usp=sharing

Kodu derledim, denedim, çalıştırdım.

Evimde internet sorununu ttnet yüzünden çözemiyorum.O yüzden aktif modemim yok.Ben de cep telefonum üzerinden çıkıyorum.

Ben bi sıkıntı yaşamadım pek.

Hocam kodlarda bir sıkıntı  var mı? 500 elemanlı bir dizi yi 877 ye nasıl sığdırdnız.

yldzelektronik

Alıntı yapılan: respected - 18 Aralık 2014, 21:17:03
Hocam kodlarda bir sıkıntı  var mı? 500 elemanlı bir dizi yi 877 ye nasıl sığdırdnız.

Yok hayır.En azından ben sıkıntı yaşamadım.877 kullanıldığını kim söyledi?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

respected

#26
Verdiğiniz dosyada tanımlamada  877 yazıyor. main.h  dosyasında
Kodları başka bir işlemciye göre düzenledim. Fakat bu kodların bu haliyle çalışması  mümkün değil hocam. Biraz inceledim işlemci interrupt rutininde kalıyor. Sebebi gets komutunun sadece  13(yani enter bekliyor olması) oysaki modül hem 13 hemde 10 gönderiyor.


MrDarK

Teşekkürler arkadaşlar eklentileriniz için.
Picproje Eğitim Gönüllüleri ~ MrDarK

Recep METE

printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d