Picproje Elektronik Sitesi

SERBEST BÖLGE => İnternet => Konuyu başlatan: MrDarK - 01 Kasım 2014, 11:47:01

Başlık: ESP8266 Wifi Module Örnek Uygulama
Gönderen: MrDarK - 01 Kasım 2014, 11:47:01
Merhaba arkadaşlar ;

Bir insan söz verdiğinde onu tutmalı diyerekten zaman daraltarak söz verdiğim projenin örnek demosunu sonunda tamamlayabildim. Bahsettiğim konuya ait link https://www.picproje.org/index.php/topic,55311.0.html (https://www.picproje.org/index.php/topic,55311.0.html)

İlerleyen zamanlarda bu modülle ilgili yine bu konu üzerinde farklı çalışmalara ait kodlar paylaşacağım. Bu örneğimizde www.picproje.org (https://www.picproje.org) sayfasına index atıp gelen verileri alıyoruz. Çok uzun olduğu için gelen response un son kısmını kesip atacağım.

Öncelikle modül hakkında bilgilendirme için aşağıdaki linkden faydalanabilirsiniz.
Link : www.space.nl/ESP8266 (http://www.space.nl/ESP8266)
(http://www.espruino.com/refimages/ESP8266_pinout.png)

Burada önemli bir detay var. CH_PD pinini de VCC pini ile birleştirin.
Ekstra olarak RST pinini ben STM'ye bağladım. Debug işlemlerinde gir çık yaparken reset almasını istiyordum bağlanmasını öneririm.

Devre şemasını ise şu şekilde kurdum ;
(http://i.hizliresim.com/q2OM8R.jpg)
Yazılım STM32F4 Discovery'e uygun olup derleyici olarak gcc ide olarak emblocks kullanılmıştır.


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

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

#define ESP8266BUFFER_LENGHT 500

char g_arrui8ESP8266Buf[ESP8266BUFFER_LENGHT];
static uint16_t ESPWriteIndex=0;

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

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

    ESPWriteIndex=0;
}
/***********************************************************
* Function Name  : Delay
* Description    : Yazılımsal Gecikme Fonksiyonu.
* Input          : Gecikme Degeri
* Return         : None
***********************************************************/
void Delay(__IO uint32_t nCount) {
  while(nCount--) {
  }
}

/***********************************************************
* Function Name  : USART_puts
* Description    : Girdiðimiz cümle ilgili buffer'dan çýkar.
* Input          : USARTx
* Return         : None
***********************************************************/
void USART_puts(USART_TypeDef* USARTx, volatile char *s)
{
while(*s){
// wait until data register is empty
while( !(USARTx->SR & 0x00000040) );
USART_SendData(USARTx, *s);
*s  ;
}
}

/***********************************************************
* Function Name  : Usart_InitializeHW
* Description    :
* Input          : None
* Return         : None
***********************************************************/
void Usart_InitializeHW(void)
{
    GPIO_InitTypeDef     GPIO_InitStruct;

    // B Portuna Clock Verilir
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

    /**
    * PB6 ve PB7 Pinleri alternatif fonksiyon olarak çalýþacaðý tanýmlanýr
    * @onemli Usartý aktif etmeden önce çaðrýlmalýdýr.!
    */
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1); // TX()
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1); // RX()
    // Initialize pins as alternating function
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_USART3); // TX()
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_USART3); // RX()
    // Initialize pins as alternating function
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_ResetBits(GPIOB,GPIO_Pin_13);
}

/***********************************************************
* Function Name  : Usart_InitializeAp
* Description    :
* Input          : None
* Return         : None
***********************************************************/
void Usart_InitializeAp(void)
{
    USART_InitTypeDef USART_InitStruct;
    NVIC_InitTypeDef NVIC_InitStructure;
    /**
     * USART1 modülüne Clock verilir.
     */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    /**
     * USART3 modülüne Clock verilir.
     */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

    /**
     * Baudrate 115200
     * Hardware Flow Kapali
     * Usart Full-Duplex çalisacak TX ve RX modu aktif edilir.
     * Parity Kullanmiyoruz.
     * 1 stop byte mevcut
     * Data bit uzunlugumuz 8
     *
     * USART1 Kurulup
     * Aktif edilir.
     */
    USART_InitStruct.USART_BaudRate = 115200;
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
    USART_InitStruct.USART_Parity = USART_Parity_No;
    USART_InitStruct.USART_StopBits = USART_StopBits_1;
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;
    USART_Init(USART1, &USART_InitStruct);

    USART_InitStruct.USART_BaudRate = 115200;
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStruct.USART_Mode = USART_Mode_Tx;
    USART_InitStruct.USART_Parity = USART_Parity_No;
    USART_InitStruct.USART_StopBits = USART_StopBits_1;
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;
    USART_Init(USART3, &USART_InitStruct);
    USART_Cmd(USART3, ENABLE);  // USART3 aktif edilir.

/* USART1 Rx interrupt aktif ediliyor
* USART'dan herhangi bir data geldiginde
* USART1_IRQHandler() adiyla isimlendirdigimiz fonksiyona gider
*/
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // USART1 Rx interrupt aktif ediliyor

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; // USART1 interrupt ina ince ayar vermek istiyoruz.
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// Öncelik olarak bu interrupt kaynagina 0 veriyoruz. ( 0 yazarak En öncelikli kaynak yapiyoruz )
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // Kendi bagli olduðu vektordeki alt grup içinde de en öncelikli olarak kurduk
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // USART1 interrupt kanali aktif edilir.
NVIC_Init(&NVIC_InitStructure); // Yaptigimiz ayarlari NVIC birimine yüklüyoruz.

    USART_Cmd(USART1, ENABLE);  // Nihayetinde USART1 aktif edilir.
}

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

    // Modul Reset Pini High yapiliyor.
    GPIO_SetBits(GPIOB,GPIO_Pin_13);

    switch(ESPInitCase)
    {
        case 0:
            // Standart AT Komutu gonderilir , Cevabi OK olmalidir.
            USART_puts(USART1,"ATrn");
            // 1 saniye gecikme koyuyoruz.
            Delay(1000000L);
            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(USART3,"Module Erisildi");
                ESPInitCase = 2;
            }
            else
            {
                Clear_ESPBuffer();
                USART_puts(USART3,"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?rn");
            // 1 saniye gecikme koyuyoruz.
            Delay(1000000L);
            ESPInitCase = 3;
        break;

        case 3:
            // Gelen cevap mode 1 'mi
            if (strstr(g_arrui8ESP8266Buf," CWMODE:1") != NULL)
            {
                Clear_ESPBuffer();
                USART_puts(USART3,"MODE Ayar Dogru");
                ESPInitCase = 4;
            }
            else
            {
                // Fabrika ayarları olarak 2 geliyor biz onu 1 yapip reset komutu ile tamamlariz.
                USART_puts(USART1,"AT CWMODE=1rn");
                USART_puts(USART1,"AT RSTrn");
                Delay(1000000L);

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

        case 4:
            // Baglanilacak olan wifi agina ait kullanici adi ve sifre girisi yapilir.
            USART_puts(USART1,"AT CWJAP="MrDarK","sifreniz"rn");
            // 1 saniye gecikme koyuyoruz.
            Delay(2000000L);
            ESPInitCase = 5;
        break;

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

        case 6:
            // IP adresi nedir diye soruyoruz ?
            USART_puts(USART1,"AT CIFSRrn");
            // 1 saniye gecikme koyuyoruz.
            Delay(1000000L);
            ESPInitCase = 7;
        break;

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

        break;

        case 8:
            // Baglanilacak siteye ait bilgiler girildi.
            USART_puts(USART1,"AT CIPSTART="TCP","www.picproje.org",80rn");
            // 1 saniye gecikme koyuyoruz.
            Delay(1000000L);
            ESPInitCase = 9;
        break;

        case 9:
            // Baglanti kuruldugunda Linked diye bir cevap aliriz.
            if (strstr(g_arrui8ESP8266Buf,"Linked") != NULL)
            {
                Clear_ESPBuffer();
                USART_puts(USART3,"Server ile baglanti kuruldu");
                ESPInitCase = 10;
            }
            else
            {
                // Cevap gelene kadar bekler
                Delay(1000000L);
                USART_puts(USART3,"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=100rn");
            // Komutu verdikten sonra bize '>' bilgisi geliyor.
            Delay(1000000L);
            // HTTP Request Hazirlanir.
            USART_puts(USART1,"GET / HTTP/1.1rn");
            USART_puts(USART1,"Host: [url=https://www.picproje.orgrn]www.picproje.orgrn[/url]");
            USART_puts(USART1,"Accept: */*rn");
            USART_puts(USART1,"Content-Type: text/htmlrn");
            USART_puts(USART1,"Content-Length: 0rnrnrn");
           
            // Buradan sonra http request'e gelen cevaplari degerlendirerek
            // Ne yapmak istiyorsanız onu yapabilirsiniz =)
            // Herkese bol sanslar ! Iyi gunler efenim.
            while(1);
        break;

    }
}

int main(void)
{
    // System Clock Init Edilir.
    SystemInit();
    // Usart modullerinin portlarının hardware ayarlari yapilir.
    Usart_InitializeHW();
    // Usart modullerinin clock , baud ve interrupt ayarlari yapilir.
    Usart_InitializeAp();
    // Giris metnimiz =)
    USART_puts(USART3,"MrDarK & PicProje ESP8266 Example Starting..! rn");
    // Komut gondermeden once module ait bufferı temizleriz.
    Clear_ESPBuffer();

    while(1)
    {
        // Bakmayın init yazdığına her biseyi yapiyor =)
        ESP8266_Init();
    }


}

// USART1 interrupt Alt Programi
void USART1_IRQHandler(void){
    // USART1 RX interrupt flag kontrol edilir.
    if( USART_GetITStatus(USART1, USART_IT_RXNE) )
    {
        uint8_t Received_Byte = USART1->DR; // Gelen bilgi değişken içine alinir.
        USART3->DR = Received_Byte;         // Debug monitor icin ayni bilgi usart3'e gonderilir.
       
        // Strstr fonksiyonu için eklendi, modülden null karakteri gelebiliyordu , onu engellemis olduk.
        if(Received_Byte != 0)
        {
            g_arrui8ESP8266Buf[ESPWriteIndex] = Received_Byte;
            ESPWriteIndex  ;
        }

    }
}


HTTP Request işleminden ufak bir parça :)

IPD,1024
Modul bize bilgileri 1024 1024 veriyor.

IPD ise karşıdan gelen bilgi olduğunu söylüyor.


AT CIPSEND=100

> GET / HTTP/1.1
Host: [url=https://www.picproje.org]www.picproje.org[/url]
Accept: */*
Content-Type: text/html
Content-Length: 0


busy

SEND OK

IPD,1024:
HTTP/1.1 200 OK
Date: Sat, 01 Nov 2014 09:26:27 GMT
Server: Apache/2.2.26 (Unix) mod_ssl/2.2.26 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Pragma: no-cache
Cache-Control: private
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Vary: Accept-Encoding
Set-Cookie: PHPSESSID=0590f04caeb7a8b7afa2c7d692fc8248; path=/; domain=.picproje.org
Last-Modified: Sat, 01 Nov 2014 09:26:28 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" type="text/css" href="http://picproje.org//Themes/default/css/index.css?fin20" />
<script type="text/javascript" src="http://picproje.org//Themes/default/scripts/script.js?fin20"></script>
<script type="text/javascript"


Yazılım dosyalarına erişmek için Link : https://drive.google.com/file/d/0B2Ja5iH4DRMGNy1QZDBhb21MVHc/view?usp=sharing (https://drive.google.com/file/d/0B2Ja5iH4DRMGNy1QZDBhb21MVHc/view?usp=sharing)
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: ArifAhmet - 01 Kasım 2014, 17:58:28
Elinize, emeğinize sağlık hocam.

mesaj birleştirme:: 01 Kasım 2014, 18:04:23


strstr

Hocam aradığım fonksyion buydu. Bende nasıl gelen cevabı alıp işleyecem diyordum. Yaşasın hazır fonksiyonlar. Tekrar çok sağolun.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: muhittin_kaplan - 23 Kasım 2014, 00:30:12
Hocam ellerinize saglik.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Gökhan BEKEN - 23 Kasım 2014, 00:53:57
Ne olur ne olmaz : https://github.com/Picproje/ESP8266-Wifi-Modul-ornek-Uygulama

Teşekkürler MrDarK
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: baran123 - 23 Kasım 2014, 01:08:45
CCS CCS CCS :D
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: MrDarK - 23 Kasım 2014, 10:49:15
Yorumlarınız için çok teşekkür ederim :)

CCS için yldzelektronik'e bu modülden verdim sözü var baskı yapın açsın konuyu :)
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: yldzelektronik - 24 Kasım 2014, 08:08:00
Alıntı yapılan: MrDarK - 23 Kasım 2014, 10:49:15
Yorumlarınız için çok teşekkür ederim :)

CCS için yldzelektronik'e bu modülden verdim sözü var baskı yapın açsın konuyu :)

Yapıcam ancak pic için elimde hiçbir donanım şuanda yok.Pcb için bekliyorum ben de.Eğer elinde ufak da olsa board olan varsa hemen geçebilirim.Ama deneme yapmadan kodları ccsye uyarlaya da bilirim.İki ihtimal seçin;

Ya donanım için yardımcı olun veya bekleyin donanımı hazırliim koddan emin olup öyle paylaşim (Aslında donanım dediğimde öyle abartılı bişey yok.Elimde hiç pic mcu yok.Ne kit ne ufak board.).
Ya da verilmiş uygulamalardan ccs için çeviriim.Herhangi bir mcu için yapabilirim.İster 18f serisi ister 16f serisi.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Recep METE - 24 Kasım 2014, 10:06:45
Alıntı yapılan: yldzelektronik - 24 Kasım 2014, 08:08:00
Yapıcam ancak pic için elimde hiçbir donanım şuanda yok.Pcb için bekliyorum ben de.Eğer elinde ufak da olsa board olan varsa hemen geçebilirim.Ama deneme yapmadan kodları ccsye uyarlaya da bilirim.İki ihtimal seçin;

Ya donanım için yardımcı olun veya bekleyin donanımı hazırliim koddan emin olup öyle paylaşim (Aslında donanım dediğimde öyle abartılı bişey yok.Elimde hiç pic mcu yok.Ne kit ne ufak board.).
Ya da verilmiş uygulamalardan ccs için çeviriim.Herhangi bir mcu için yapabilirim.İster 18f serisi ister 16f serisi.

Hocam, ccs c ye çevirdikten sonra proteusta deneme yapma şansınız yok mu?
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: yldzelektronik - 24 Kasım 2014, 10:24:32
Alıntı yapılan: semfero - 24 Kasım 2014, 10:06:45
Hocam, ccs c ye çevirdikten sonra proteusta deneme yapma şansınız yok mu?

Modül proteusta olmadığından öyle bir imkan yok malesef.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: elektronik - 24 Kasım 2014, 12:17:58
resimdeki pcb uygunsa gönderebilirim.

Selim Koç arkadaşımızdan almıştım.


(https://elektrokod.files.wordpress.com/2014/09/dsc_0135.jpg)
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: yldzelektronik - 24 Kasım 2014, 13:11:07
Alıntı yapılan: elektronik - 24 Kasım 2014, 12:17:58
resimdeki pcb uygunsa gönderebilirim.

Selim Koç arkadaşımızdan almıştım.


(https://elektrokod.files.wordpress.com/2014/09/dsc_0135.jpg)

Hangi resim?
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: elektronik - 24 Kasım 2014, 13:13:41
resim ekledim görünmüyormu ?

alttaki linkten bakabilirsiniz.
http://elektrokod.files.wordpress.com/2014/09/dsc_0135.jpg?w=545&h=408 (http://elektrokod.files.wordpress.com/2014/09/dsc_0135.jpg?w=545&h=408)
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: yldzelektronik - 24 Kasım 2014, 14:02:00
Gören biri wordpress dışında bir yere upload edebilir mi?Ben bazı sayfaları görüntüleyemiyorum.Firewall var.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: vitruvius - 24 Kasım 2014, 14:11:33
Alıntı yapılan: yldzelektronik - 24 Kasım 2014, 14:02:00
Gören biri wordpress dışında bir yere upload edebilir mi?Ben bazı sayfaları görüntüleyemiyorum.Firewall var.

http://oi57.tinypic.com/3166qhf.jpg (http://oi57.tinypic.com/3166qhf.jpg)

Tinypic de olmuyorsa olan bir yer söyleyin oraya yükleyeyim hocam.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Kabil ATICI - 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ş...
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: yldzelektronik - 24 Kasım 2014, 14:43:01
@vitruvius teşekkürler.

@elektronik.Uygundur. Eğer yanında pic programlayıcı da olursa güzel olur.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: elektronik - 24 Kasım 2014, 15:56:42
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 (https://www.picproje.org/index.php/topic,55228.0.html)


Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: yldzelektronik - 25 Kasım 2014, 17:45:14
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;

    }
}

Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: MrDarK - 25 Kasım 2014, 20:54:23
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 ?
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: yldzelektronik - 02 Aralık 2014, 11:12:53
Ö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.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: FxDev - 02 Aralık 2014, 23:59:15
İ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.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: yldzelektronik - 08 Aralık 2014, 09:43:28
https://drive.google.com/file/d/0BxS9lo0yCui7MnFraF9xaDdWTVE/view?usp=sharing

Yeni link burada.Gereksiz dosyaları kaldırdım.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Recep METE - 08 Aralık 2014, 10:58:58
Hocam elinize, emeğinize sağlık. Akşam eve gidince verdiğiniz ccs c kodunu denemek olacak.Çok teşekkürler.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: FxDev - 08 Aralık 2014, 14:39:44
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.

(http://i.hizliresim.com/bg404j.png)
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: respected - 18 Aralık 2014, 21:17:03
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.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: yldzelektronik - 19 Aralık 2014, 08:45:37
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?
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: respected - 19 Aralık 2014, 13:47:11
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.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: salihonur - 28 Aralık 2014, 02:01:12
CCS kodları da benden olsun. Tesadüfen denk geldim bu uygulamaya.

http://laptrinhpic.info/esp8266-wifi-module-hien-thi-thong-tin-thoi-tiet-len-lcd-esp8266-weather-display/ (http://laptrinhpic.info/esp8266-wifi-module-hien-thi-thong-tin-thoi-tiet-len-lcd-esp8266-weather-display/)
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: MrDarK - 28 Aralık 2014, 10:32:29
Teşekkürler arkadaşlar eklentileriniz için.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Recep METE - 28 Aralık 2014, 15:22:59
Alıntı yapılan: salihonur - 28 Aralık 2014, 02:01:12
CCS kodları da benden olsun. Tesadüfen denk geldim bu uygulamaya.

http://laptrinhpic.info/esp8266-wifi-module-hien-thi-thong-tin-thoi-tiet-len-lcd-esp8266-weather-display/ (http://laptrinhpic.info/esp8266-wifi-module-hien-thi-thong-tin-thoi-tiet-len-lcd-esp8266-weather-display/)

Teşekkür arkadaş çok işime yarayacak.
Başlık: Ynt: ESP8266 Wifi Module Uygulama(internetten Sıcaklık, nem, hava basıncı.)
Gönderen: Recep METE - 28 Aralık 2014, 19:52:49
ESP8266  CCS C  Kodlarını  buraya yapıştırayım.Belki birilerine lazım olur.Birde kodun bulunduğu sitesi falan  kapanır.İşi sağlama alalım.


main.
#include <18F4550.h>
#DEVICE ADC=8                 
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000) 
#use rs232(UART1,baud=115200,parity=N,bits=8,stream=WIFI_ESP,errors)//Khai bao su dung uart cung 
#include <usb_cdc.h>                                 
#include <usb_desc_cdc.h>
#define ledv  PIN_C2                                 
#define ledr  PIN_C1
#define ledon output_low                                     
#define ledoff output_high                     
#define led_on output_low                                                     
#define led_off output_high                                                       
#define LCD_ENABLE_PIN PIN_D2                   
#define LCD_RS_PIN PIN_D0               
#define LCD_RW_PIN PIN_D1               
#define LCD_DATA4 PIN_D4                                           
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>                                     
#include<wifi.c> 
#include<sonbui/mystr.c>

char *SSID_JOIN="TU HU";//"SonBui-AP";
char *PASS_JOIN="12345679";//"a12344321";   
char *DATA_SEND="GET /data/2.5/weather?id=1581130 HTTP/1.0\r\nHost: api.openweathermap.org\r\n\r\n" ;     //1581130: Hanoi-Viet nam
char *WEATHER_IP= "188.226.224.148"; //api.openweathermap.org   
void get_internet()
{   
   char *write = ">"; 
   int1 OK = False;
   printf(LCD_PUTC, "\fGData Hanoi,VN\nopenweathermap.org"); 
   delay_ms(1000);
   if( client_Start(0,TYPE_TCP,WEATHER_IP,80))   //kET NOI TOI SERVER DE LAY DU LIEU 
   { 
      printf(LCD_PUTC, "\fGet data");
      int16 length=strlen(DATA_SEND);                                                           
      DO
      {
         clear_mem();
         fprintf(WIFI_ESP, AT_SEND);                     
         fprintf(WIFI_ESP, "=%u", 0);       
         fprintf(WIFI_ESP, ",%lu",length); 
         fprintf(WIFI_ESP, CRLF);
         for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

            wifi_buff[n] = timed_getc();
            n++;
            if (n > 150) n = 0;
            if (timeout_error) break;
         }

         char *pch = strstr(wifi_buff, write);

         IF(pch) {
            OK = TRUE;
            break;                               
         }
         delay_ms(100);
      }
      WHILE(!OK); 
      //Send http get
      clear_mem();       
      printf(LCD_PUTC, "\fSend Get");
      fprintf(WIFI_ESP, "%s",DATA_SEND);
      Long LONG timeout;   
      timeout = 0;
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 2000000))  //20 second
      {
         delay_us(10);
         
      }                                                         
      WHILE(!(fgetc(WIFI_ESP)=='{')) ;       
      printf(LCD_PUTC, "\f{");
     
      wifi_buff[0]='{';n=1;                               
      do {         
         wifi_buff[n] = mili_getc();           
         n++;                                           
         if (n > 512) n = 0;   
         
      }while(!timeout_error) ;
      printf(LCD_PUTC, "\fPrint Data");
      //printf(usb_cdc_putc, "\r\nWF:%s"wifi_buff);   
      char *jstart="\"main\":{";
      char *jstop=",\"wind\"";
      char *p1 = strstr(wifi_buff,jstart);
     
      if(p1)                             
      {   
         // printf(usb_cdc_putc, "\r\n\fp1:%s"p1); 
         char *p2 = strstr(p1,jstop);
         if(p2) 
         { 
            // printf(usb_cdc_putc, "\r\n\fp2:%s"p2);
            size_t len = p2-p1;   
            char *jmain = (char*)malloc(sizeof(char)*(len+1)); 
            strncpy(jmain, p1, len);                                 
            jmain[len] = '\0'; 
            // printf(usb_cdc_putc, "\r\nRes:%s"jmain);
            char *temp="\"temp\":";
            char *temp_min=",\"temp_min\":";   
            char *ap_suat=",\"pressure\":";
            char *ap_suat_end=",\"sea_level";
            char *do_am="\"humidity\":";   
            char *do_am_end="}";                               
            double d_nhiet_do;
            free(res) ;
            char *nhiet_do=extract_string(temp,temp_min,jmain);
            if(nhiet_do)                                                 
            {
               // printf(usb_cdc_putc, "\r\nNhiet do:%s"nhiet_do);
               d_nhiet_do = atof (nhiet_do);//treo neu gia tri nhiet do sai dinh dang
               d_nhiet_do -= 273.15; //kelvin-celsius
               printf (LCD_PUTC, "\fT=%f"d_nhiet_do);
            }
            free(res) ;
            char *ap_suat_khi=extract_string(ap_suat,ap_suat_end,jmain);
            if(ap_suat)
            {
               //  printf(usb_cdc_putc, "\r\nAp suat:%s"ap_suat_khi);
               printf (LCD_PUTC, "\nP=%s hpa"ap_suat_khi);   
            }                                                         
            free(res) ;                                                             
            char *do_am_khi=extract_string(do_am,do_am_end,jmain);
            if(do_am_khi)
            {
               // printf(usb_cdc_putc, "\r\nDo am khi:%s"do_am_khi);
               
               lcd_gotoxy(10,1) ;                                     
               printf (LCD_PUTC, "H=%s %%"do_am_khi);                 
            }
            free(jmain) ;
         }
      }
   }
   else
   {                                     
      printf (LCD_PUTC, "\f Can't connect to\nopenweathermap.org");
      delay_ms(1000);
   }                         
}
void main()                             

   lcd_init ();                                                                     
   printf (LCD_PUTC, "\f MuaLinhKien.Vn\nPIC 16/18 Basic Kit");
   delay_ms(1000);
   printf (LCD_PUTC, "\fESP8266 Test\nmualinhkien.vn");   
   esp_init();
   setup_AP(SSID_SET,PASS_SET,5,ECN_WAP2_PSK);                                                                                               
   delay_ms(1000); 
   join_AP(SSID_JOIN,PASS_JOIN);             
   delay_ms(1000);
   client_Start(0,TYPE_TCP,WEATHER_IP,80);   //kET NOI TOI SERVER DE LAY DU LIEU   
   delay_ms(1000);
   get_ip();
   clear_mem();
   //!   usb_cdc_init();
   //!   usb_init();                                       
   //!   usb_task();                                       
   //!   usb_wait_for_enumeration();
   //!     while(!usb_cdc_connected());                             
   while (TRUE)                                                       
   {                                                         
      get_internet();
      for(int loop=0;loop<120;loop++)     
      {
         output_toggle(ledr);
         delay_ms(500);       
      }
     
   }
}


wifi.c  (kütühane dosyası)

/*
Dung while de doc du lieu tra ve
Dung ngat de lay du lieu bat ki
*/
#INCLUDE <stdlibm.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wifi.h> 
char wifi_buff[512];           

int16 n = 0;
INT1 timeout_error;
INT8 timeout_error_count = 0;                         
char CRLF[] = "\r\n";                                                                                                           
char *SSID_SET = "VISMART.CO";
char *PASS_SET = "12345678";                                       
char *STR_OK="\r\nOK\r\n" ;                                           
char *STR_START=":" ;                                     
char data_out[50];     
                                                 
void clear_mem(void) {                                             
   for (int16 mem_loop = 0; mem_loop < 512; mem_loop++) {
      if (wifi_buff[mem_loop] == '\0')
      break;           
      else
      wifi_buff[mem_loop] = '\0';
   }
   n = 0;             

void clear_data(void) {                                             
   for (int16 mem_loop = 0; mem_loop < 50; mem_loop++) {
      if (data_out[mem_loop] == '\0')
      break;           
      else
      data_out[mem_loop] = '\0';
   }
   n = 0;             
}

char timed_getc() {

   WHILE(!kbhit(WIFI_ESP));
   IF(kbhit(WIFI_ESP))   
   RETURN(fgetc(WIFI_ESP));                     
   ELSE
   {
     
      RETURN(0);
   }
}

char *send_AT_result(char *command) {

   clear_mem();
   fprintf(WIFI_ESP, "%s", command);
   fprintf(WIFI_ESP, CRLF);   
   for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

      wifi_buff[n] = timed_getc();
      n++;
      if (n > 150) n = 0;
      if (timeout_error) break;
   }
   return wifi_buff;
}                                               

void send_AT_OK(char *command) {
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, "%s", command);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         break;
      }
      delay_ms(100);
   }
   WHILE(!OK);

                                                       
}

void esp_init() {
   int1 OK = False;
   char *oks = "OK";
   char *nc = "no change";         
do { //ATE0   
      clear_mem();
     fprintf(WIFI_ESP, AT_RESET);
      fprintf(WIFI_ESP, CRLF);
   delay_ms(2000);
      fprintf(WIFI_ESP, AT_ECHO_OFF);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fATE0");
      }
      delay_ms(100);
   }
   WHILE(!OK);

   //
   do { //AT+CWMODE=3
      clear_mem();                               
      fprintf(WIFI_ESP, MODE_AT_STA);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWMODE=3");
      } else {
         char *no_change = strstr(wifi_buff, nc);

         IF(no_change) {
            OK = TRUE;
            printf(LCD_PUTC, "\fAT+CWMODE=3\nNo change");
         }

      }
      delay_ms(100);
   }
   WHILE(!OK);

}

void setup_AP(unsigned char *ssid, unsigned char *password, int chl, int enc) {
   //AT+CWSAP="ssid","password",chl,enc
   int1 OK = False;
   char *oks = "OK";
   for (int loop = 0; loop < 5; loop++) {
      clear_mem();
      fprintf(WIFI_ESP, AT_SET_AP_PARAMS);
      fprintf(WIFI_ESP, "=\"%s\"", ssid);
      fprintf(WIFI_ESP, ",\"%s\"", password);
      fprintf(WIFI_ESP, ",%u", chl);
      fprintf(WIFI_ESP, ",%u", enc);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWSAP\nloop=%u", loop);
         break;
      }
      delay_ms(100);
   }
}

void join_AP(unsigned char *ssid, unsigned char *password) //Thuc hien mot lan vi khoi dong lai se tu ket noi
{
   //AT+CWJAP="ssid","password"
   int1 OK = False;
   char *oks = "OK";
   for (int loop = 0; loop < 3; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\fCn to:%s\nLan %u", ssid, loop);
      clear_mem();
      fprintf(WIFI_ESP, AT_JOIN_AP);
      fprintf(WIFI_ESP, "=\"%s\"", ssid);
      fprintf(WIFI_ESP, ",\"%s\"", password);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;

      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {       
         delay_us(10);   
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(10, 2);
            int pos = timeout_error_count % 4;
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1)                 
            printf(LCD_PUTC, " .  ");
            if (pos == 2)
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }               
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fCnt To:%s\nLoop=%u", ssid, loop);
         break;
      }
      ELSE
      {
         printf(LCD_PUTC, "\fCn To:%s\nError!", ssid);

      }
      delay_ms(100);
   }
}

void quit_AP() {
   //AT+CWQAP
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, AT_QUIT_AP);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;                     
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWQAP");
         break;
      }
      delay_ms(100);
   }                                 
   WHILE(!OK);
}


void get_ip()
{
   //AT+CIFSR
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, AT_GET_IP);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;     
         if (n > 150) n = 0;                     
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fIP:%s",wifi_buff);
         break;
      }
      delay_ms(100);
   }                                 
   WHILE(!OK);

}
int1 client_Start(int id, int type, char *ip, unsigned int16 port)
{

   char *cmd = AT_SET_MUL_CON;
   int1 OK = False;
   char *oks = "OK";
   char *connected="ALREAY CONNECT"; //Ket noi da duoc ket noi tu truoc toi ip nay hoac ip khac voi id nay

   
   
   DO                     
   {
      char *pch = strstr(send_AT_result(cmd), oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\f%s", AT_SET_MUL_CON);
         break;
      }
      delay_ms(100);
   }
   WHILE(!OK);
   //
   for (int loop = 0; loop < 5; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\f%s\nPort:%5lu    %u", ip, port, loop);
      clear_mem();                                                 
      fprintf(WIFI_ESP, AT_START_CON);
      fprintf(WIFI_ESP, "=%u", id);
      if (type == TYPE_TCP) 
      fprintf(WIFI_ESP, ",\"TCP\"");                                     
      else                                 
      fprintf(WIFI_ESP, ",\"UDP\""); 
      fprintf(WIFI_ESP, ",\"%s\"", ip);
      fprintf(WIFI_ESP, ",%lu", port);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;
     
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {
         delay_us(10);
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(11, 2);                         
            int pos = timeout_error_count % 4;           
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1)
            printf(LCD_PUTC, " .  ");
            if (pos == 2)                                 
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;                           
         if (n > 150) n = 0;
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks); //chu y con "ALREAY CONNECT"

      IF(pch) {
         OK = TRUE; 
         printf(LCD_PUTC, "\fIP:%s\nP:%5lu lan %u OK    ", ip, port, loop);
         break;                                 
      }
      ELSE
      { 
         char *link = strstr(wifi_buff, connected);   

         IF(link) {
            OK = TRUE;                                             
            printf(LCD_PUTC, "\fID CONNECTED!\nloop=%u", loop);
            break;       
         }       
         else                       
         {
         OK = FALSE;   
         printf(LCD_PUTC, "\fIP:%s\nP:%5lu Error", ip, port);     
         }                                             

      }
      delay_ms(100);
   
   }
     return OK;
   
}
void server_Start(unsigned int16 port)   // Truoc khi chay phai restart                                     
{

   char *cmd = AT_SET_MUL_CON;
   int1 OK = False;
   char *oks = "OK";
   char *link_builded = "link is builded";

   
   
   DO
   {
      char *pch = strstr(send_AT_result(cmd), oks); //chu y:link is builded

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\f%s", AT_SET_MUL_CON);
         break;
      }
      else
      {   
         char *pch = strstr(send_AT_result(cmd), link_builded); //chu y:link is builded

         IF(pch) {
            OK = TRUE;
            printf(LCD_PUTC, "\fLink is Builded");
            break;
         }
         
      }
      delay_ms(100);                                       
   }
   WHILE(!OK);
   //
   for (int loop = 0; loop < 5; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u", port, loop);
      clear_mem();                                                 
      //AT+CIPSERVER=1,9999     

      fprintf(WIFI_ESP, AT_SET_SERVER);
      fprintf(WIFI_ESP, "=1");
      fprintf(WIFI_ESP, ",%lu", port);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;
     
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {
         delay_us(10);         
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(11, 2);                         
            int pos = timeout_error_count % 4;           
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1)
            printf(LCD_PUTC, " .  ");
            if (pos == 2)
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;       
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;                                                       
         printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u OK", port, loop);   
         break;
      }
      ELSE
      {
         printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u Error!", port, loop);   

      }
      delay_ms(100);             
   }

}
//Cip close khi ket noi toi server phai co id
//close ket noi toi clinet(modlue khac hoac may tinh) thi ko can

void  close_connect(int id) //Tra ve ok hoac "link is not"
{                                                                                         
   // AT+CIPCLOSE=<id>
   int1 OK = False;
   char *not_link="link is not";   //chua ket noi 
   char *oks="OK";
   for (int loop = 0; loop < 5; loop++) {                                                             
      clear_mem();
      fprintf(WIFI_ESP, AT_CLOSE_CON);
      fprintf(WIFI_ESP, "=%u", id);   
      fprintf(WIFI_ESP, CRLF);                           

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;                         
      }                                     

      char *pch = strstr(wifi_buff, oks);   

      IF(pch) {
         OK = TRUE;                                             
         printf(LCD_PUTC, "\fCLOSE CONNECT\nloop=%u", loop); 
         break;
      }
      ELSE
      {
         char *link = strstr(wifi_buff, not_link);   

         IF(link) {
            OK = TRUE;                                             
            printf(LCD_PUTC, "\fNOT CONNECT\nloop=%u", loop);
            break;
         }
      }                                               
   }
}
void send_data(int id, char  *data)
{                                         
   // AT+CIPSEND= <id>,<length>
   int1 OK = False;               
   char *write = ">";
   char *send_ok="SEND OK";
   int16 length=strlen(data);
   for (int loop = 0; loop < 5; loop++) {                                                             
      clear_mem();                     
      fprintf(WIFI_ESP, AT_SEND);
      fprintf(WIFI_ESP, "=%u", id);   
      fprintf(WIFI_ESP, ",%lu",length); 
      fprintf(WIFI_ESP, CRLF);                           

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }                                     

      char *pch = strstr(wifi_buff, write);

      IF(pch) {
         OK = TRUE;                                             
         printf(LCD_PUTC, "\fSEND >\nlenght=%lu", length);
         
         
         //Gui noi dung               
         char *sent = strstr(send_AT_result(data), send_ok);

         IF(sent) {             
            OK = TRUE;
            printf(LCD_PUTC, "\fSEND OK\nlenght=%lu", length);
            break;                     
         }       
      }                                   
      else
      {
         OK = FALSE;                                             
         printf(LCD_PUTC, "\fSEND FAIL!\nloop=%u", loop); 
      }
      delay_ms(100);                                                 
   }                           
   
}


                   


//Loi khi module reset ma client ko biet no dong     



wifi.h     (kütüphane dosyası)

#define    ECN_OPEN          0      //Che do bao mat
#define    ECN_WEP           1
#define    ECN_WAP_PSK       2
#define    ECN_WAP2_PSK      3
#define    ECN_WAP_WAP2_PSK  4

#define    TYPE_TCP     1            //Che do ket noi
#define    TYPE_UDP     0                                 

#define    TRAN_OPEN    1         //Che do truyen nhan           
#define    TRAN_CLOSE   0

#define    MODE_STA     "AT+CWMODE=1"         //Che do wifi
#define    MODE_AP      "AT+CWMODE=2"                                         
#define    MODE_AT_STA  "AT+CWMODE=3"

#define WIFI_TX_BUFFER_SIZE 128      //Bo dem
#define WIFI_RX_BUFFER_SIZE 128   

//COMMAND
#define AT_ECHO_ON                  "ATE1" 
#define AT_ECHO_OFF                 "ATE0" 
#define AT_RESET                    "AT+RST" 
#define AT_CFW                      "AT+GMR" 
#define AT_WIFI_MODE                "AT+CWMODE"
#define AT_JOIN_AP                  "AT+CWJAP"
#define AT_GET_IP                   "AT+CIFSR"
#define AT_LIST_AP                  "AT+CWLAP"
#define AT_QUIT_AP                  "AT+CWQAP" 
#define AT_SET_AP_PARAMS            "AT+CWSAP"
#define AT_CHECK_JOIN_AP            "AT+CWQAP"
#define AT_GET_CON_STATUS           "AT+CIPSTATUS"
#define AT_START_CON                "AT+CIPSTART"
#define AT_CIP_MODE                 "AT+CIPMODE" 
#define AT_SEND                     "AT+CIPSEND" 
#define AT_CLOSE_CON                "AT+CIPCLOSE"           
#define AT_SET_MUL_CON              "AT+CIPMUX=1"
#define AT_SET_SERVER               "AT+CIPSERVER" 
#define AT_SET_SERVER_TIMEOUT       "AT+CIPSTO" 
#define AT_RECEIVED_DATA            "+IPD"



(http://i.hizliresim.com/Rbk1j6.jpg) (http://hizliresim.com/Rbk1j6)
(http://i.hizliresim.com/oY30om.png) (http://hizliresim.com/oY30om)
(http://i.hizliresim.com/rmM6rm.jpg) (http://hizliresim.com/rmM6rm)

UTXD (TX) - modülü sinyal bacaklar mikro pimleri RX bağlı

URXD (RX)  - modülü sinyal bacaklar mikro pimleri RX bağlı

RST - modülün sert sıfırlama pimleri. Reset oluştuğunda sinyali düşük

GPIO0, GPIO2, CH_PD yüksek düzeyde bağlı.

VCC : 3.3V bağlanın

GND: 0V bağlayın

Biz 115200 baud hızında RS232 haberleşme yoluyla AT komutları kullanmak modülü iletişim kurmak için.






AT komut ESP8266 kümesi Bkz AT komutu ESP8266
//COMMAND
#define AT_ECHO_ON                  "ATE1" 
#define AT_ECHO_OFF                 "ATE0" 
#define AT_RESET                    "AT+RST" 
#define AT_CFW                      "AT+GMR" 
#define AT_WIFI_MODE                "AT+CWMODE"
#define AT_JOIN_AP                  "AT+CWJAP"
#define AT_GET_IP                   "AT+CIFSR"
#define AT_LIST_AP                  "AT+CWLAP"
#define AT_QUIT_AP                  "AT+CWQAP" 
#define AT_SET_AP_PARAMS            "AT+CWSAP"
#define AT_CHECK_JOIN_AP            "AT+CWQAP"
#define AT_GET_CON_STATUS           "AT+CIPSTATUS"
#define AT_START_CON                "AT+CIPSTART"
#define AT_CIP_MODE                 "AT+CIPMODE" 
#define AT_SEND                     "AT+CIPSEND" 
#define AT_CLOSE_CON                "AT+CIPCLOSE"           
#define AT_SET_MUL_CON              "AT+CIPMUX=1"
#define AT_SET_SERVER               "AT+CIPSERVER" 
#define AT_SET_SERVER_TIMEOUT       "AT+CIPSTO" 
#define AT_RECEIVED_DATA            "+IPD"

En sık kullanılan komutlar:

Adımlar ve notlar
+ RST AT modülü yeniden, bazı garip alınan veri, ve "hazır"
+ CWMODe = 3 AT çalışma modunu değiştirmek için 3, AP + STA, sadece (+ RST Le yapabilirsiniz Khi bu yapılır AT.) 3 En çok yönlü modunu kullanın
Router Katıl

+ CWLAP AT arama mevcut wifi nokta
+ AT CWJAP = "parola" "SSID" benim yönlendirici cıva nokta katılmak (ops, wifi şifre burada  :))
+ CWJAP AT =? başarıyla bağlı olmadığını kontrol edin, veya + CWJAP AT kullanmak?
TCP Client

+ CIPMUX = 1 AT birden bağlantıda dönüş
+ CIPSTART = 4 AT, "TCP", "192,168.1.104" 9999 uzak bir TCP sunucu 192.168.1.104 (PC) bağlanmak
+ CIPMODE = 1 AT tüy Into'yu veri iletim moduna girmek
+ = 4.5 CIPSEND AT kanal 4, 5 bayt uzunluğunda yoluyla veri göndermek bağlantılar Be hiçbir veri geçmesi Bulgular ki "bağlantısını kaldırmak" Will, (sadece alınan "seçmek", soket test sonucunda aşağıya bakınız)
TCP Server

+ CIPSERVER AT = 1,9999 port 9999 kurulum TCP sunucu, 1 kümeleme olanak demektir
+ CIFSR AT IP adresi kontrol modülü
Bu örnekte, istemci modunda çalışan modül esp8266 için ayarları openweathermap.org bağlanmak için json dize daha sonra hakkında bilgi almak için bu json dize analizi yapacak iade almak için HTTP GET gerçekleştirmek Sıcaklık, nem, hava basıncı.

Bağlantı olsun veriler: http://api.openweathermap.org/data/2.5/weather?id=1581130 (http://api.openweathermap.org/data/2.5/weather?id=1581130)

1581130 Hanoi-Vietnam kimliği



YANDAKİ SİTEDEN ALINTIDIR.  "http://laptrinhpic.info/esp8266-wifi-module-hien-thi-thong-tin-thoi-tiet-len-lcd-esp8266-weather-display/"
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Recep METE - 29 Ocak 2015, 23:18:27
yukarıdaki kodlarda hata var yeniden yayınlamak ihtiyacı doğdu

Code  Pic18f4550:

#include <18F4550.h>
#DEVICE ADC=8                 
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000) 
#use rs232(UART1,baud=115200,parity=N,bits=8,stream=WIFI_ESP,errors)//Khai bao su dung uart cung 
#include <usb_cdc.h>                                 
#include <usb_desc_cdc.h>
#define ledv  PIN_C2                                 
#define ledr  PIN_C1
#define ledon output_low                                     
#define ledoff output_high                     
#define led_on output_low                                                     
#define led_off output_high                                                       
#define LCD_ENABLE_PIN PIN_D2                   
#define LCD_RS_PIN PIN_D0               
#define LCD_RW_PIN PIN_D1               
#define LCD_DATA4 PIN_D4                                           
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>                                     
#include"esp/wifi.c"   
#include"sonbui/mystr.c"

char *SSID_JOIN="TU HU";//"SonBui-AP";
char *PASS_JOIN="12345679";//"a12344321";   
char *DATA_SEND="GET /data/2.5/weather?id=1581130 HTTP/1.0\r\nHost: api.openweathermap.org\r\n\r\n" ;     //1581130: Hanoi-Viet nam
char *WEATHER_IP= "188.226.224.148"; //api.openweathermap.org   
void get_internet()
{   
char *write = ">"; 
int1 OK = False;
printf(LCD_PUTC, "\fGData Hanoi,VN\nopenweathermap.org"); 
delay_ms(1000);
if( client_Start(0,TYPE_TCP,WEATHER_IP,80))   //kET NOI TOI SERVER DE LAY DU LIEU 

printf(LCD_PUTC, "\fGet data");
int16 length=strlen(DATA_SEND);                                                           
DO
{
clear_mem();
fprintf(WIFI_ESP, AT_SEND);                     
fprintf(WIFI_ESP, "=%u", 0);       
fprintf(WIFI_ESP, ",%lu",length); 
fprintf(WIFI_ESP, CRLF);
for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

wifi_buff[n] = timed_getc();
n++;
if (n > 150) n = 0;
if (timeout_error) break;
}

char *pch = strstr(wifi_buff, write);

IF(pch) {
OK = TRUE;
break;                               
}
delay_ms(100);
}
WHILE(!OK); 
//Send http get
clear_mem();       
printf(LCD_PUTC, "\fSend Get");
fprintf(WIFI_ESP, "%s",DATA_SEND);
Long LONG timeout;   
timeout = 0;
WHILE(!kbhit(WIFI_ESP) && (++timeout < 2000000))  //20 second
{
delay_us(10);

}                                                         
WHILE(!(fgetc(WIFI_ESP)=='{')) ;       
printf(LCD_PUTC, "\f{");

wifi_buff[0]='{';n=1;                               
do {         
wifi_buff[n] = mili_getc();           
n++;                                           
if (n > 512) n = 0;   

}while(!timeout_error) ;
printf(LCD_PUTC, "\fPrint Data");
//printf(usb_cdc_putc, "\r\nWF:%s"wifi_buff);   
char *jstart="\"main\":{";
char *jstop=",\"wind\"";
char *p1 = strstr(wifi_buff,jstart);

if(p1)                             
{   
// printf(usb_cdc_putc, "\r\n\fp1:%s"p1); 
char *p2 = strstr(p1,jstop);
if(p2) 

// printf(usb_cdc_putc, "\r\n\fp2:%s"p2);
size_t len = p2-p1;   
char *jmain = (char*)malloc(sizeof(char)*(len+1)); 
strncpy(jmain, p1, len);                                 
jmain[len] = '\0'; 
// printf(usb_cdc_putc, "\r\nRes:%s"jmain);
char *temp="\"temp\":";
char *temp_min=",\"temp_min\":";   
char *ap_suat=",\"pressure\":";
char *ap_suat_end=",\"sea_level";
char *do_am="\"humidity\":";   
char *do_am_end="}";                               
double d_nhiet_do;
free(res) ;
char *nhiet_do=extract_string(temp,temp_min,jmain);
if(nhiet_do)                                                 
{
// printf(usb_cdc_putc, "\r\nNhiet do:%s"nhiet_do);
d_nhiet_do = atof (nhiet_do);//treo neu gia tri nhiet do sai dinh dang
d_nhiet_do -= 273.15; //kelvin-celsius
printf (LCD_PUTC, "\fT=%f"d_nhiet_do);
}
free(res) ;
char *ap_suat_khi=extract_string(ap_suat,ap_suat_end,jmain);
if(ap_suat)
{
//  printf(usb_cdc_putc, "\r\nAp suat:%s"ap_suat_khi);
printf (LCD_PUTC, "\nP=%s hpa"ap_suat_khi);   
}                                                         
free(res) ;                                                             
char *do_am_khi=extract_string(do_am,do_am_end,jmain);
if(do_am_khi)
{
// printf(usb_cdc_putc, "\r\nDo am khi:%s"do_am_khi);

lcd_gotoxy(10,1) ;                                     
printf (LCD_PUTC, "H=%s %%"do_am_khi);                 
}
free(jmain) ;
}
}
}
else
{                                     
printf (LCD_PUTC, "\f Can't connect to\nopenweathermap.org");
delay_ms(1000);
}                         
}
void main()                             

lcd_init ();                                                                     
printf (LCD_PUTC, "\f MuaLinhKien.Vn\nPIC 16/18 Basic Kit");
delay_ms(1000);
printf (LCD_PUTC, "\fESP8266 Test\nmualinhkien.vn");   
esp_init();
setup_AP(SSID_SET,PASS_SET,5,ECN_WAP2_PSK);                                                                                               
delay_ms(1000); 
join_AP(SSID_JOIN,PASS_JOIN);             
delay_ms(1000);
client_Start(0,TYPE_TCP,WEATHER_IP,80);   //kET NOI TOI SERVER DE LAY DU LIEU   
delay_ms(1000);
get_ip();
clear_mem();
//!   usb_cdc_init();
//!   usb_init();                                       
//!   usb_task();                                       
//!   usb_wait_for_enumeration();
//!     while(!usb_cdc_connected());                             
while (TRUE)                                                       
{                                                         
get_internet();
for(int loop=0;loop<120;loop++)     
{
output_toggle(ledr);
delay_ms(500);       
}

}
}



Wifi.c:

/*
Dung while de doc du lieu tra ve
Dung ngat de lay du lieu bat ki
*/
#INCLUDE <stdlibm.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wifi.h> 
char wifi_buff[512];           

int16 n = 0;
INT1 timeout_error;
INT8 timeout_error_count = 0;                         
char CRLF[] = "\r\n";                                                                                                           
char *SSID_SET = "VISMART.CO";
char *PASS_SET = "12345678";                                       
char *STR_OK="\r\nOK\r\n" ;                                           
char *STR_START=":" ;                                     
char data_out[50];     
                                                 
void clear_mem(void) {                                             
   for (int16 mem_loop = 0; mem_loop < 512; mem_loop++) {
      if (wifi_buff[mem_loop] == '\0')
      break;           
      else
      wifi_buff[mem_loop] = '\0';
   }
   n = 0;             

void clear_data(void) {                                             
   for (int16 mem_loop = 0; mem_loop < 50; mem_loop++) {
      if (data_out[mem_loop] == '\0')
      break;           
      else
      data_out[mem_loop] = '\0';
   }
   n = 0;             
}

char timed_getc() {

   WHILE(!kbhit(WIFI_ESP));
   IF(kbhit(WIFI_ESP))   
   RETURN(fgetc(WIFI_ESP));                     
   ELSE
   {
     
      RETURN(0);
   }
}

char *send_AT_result(char *command) {

   clear_mem();
   fprintf(WIFI_ESP, "%s", command);
   fprintf(WIFI_ESP, CRLF);   
   for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

      wifi_buff[n] = timed_getc();
      n++;
      if (n > 150) n = 0;
      if (timeout_error) break;
   }
   return wifi_buff;
}                                               

void send_AT_OK(char *command) {
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, "%s", command);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         break;
      }
      delay_ms(100);
   }
   WHILE(!OK);

                                                       
}

void esp_init() {
   int1 OK = False;
   char *oks = "OK";
   char *nc = "no change";         
do { //ATE0   
      clear_mem();
     fprintf(WIFI_ESP, AT_RESET);
      fprintf(WIFI_ESP, CRLF);
   delay_ms(2000);
      fprintf(WIFI_ESP, AT_ECHO_OFF);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fATE0");
      }
      delay_ms(100);
   }
   WHILE(!OK);

   //
   do { //AT+CWMODE=3
      clear_mem();                               
      fprintf(WIFI_ESP, MODE_AT_STA);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWMODE=3");
      } else {
         char *no_change = strstr(wifi_buff, nc);

         IF(no_change) {
            OK = TRUE;
            printf(LCD_PUTC, "\fAT+CWMODE=3\nNo change");
         }

      }
      delay_ms(100);
   }
   WHILE(!OK);

}

void setup_AP(unsigned char *ssid, unsigned char *password, int chl, int enc) {
   //AT+CWSAP="ssid","password",chl,enc
   int1 OK = False;
   char *oks = "OK";
   for (int loop = 0; loop < 5; loop++) {
      clear_mem();
      fprintf(WIFI_ESP, AT_SET_AP_PARAMS);
      fprintf(WIFI_ESP, "=\"%s\"", ssid);
      fprintf(WIFI_ESP, ",\"%s\"", password);
      fprintf(WIFI_ESP, ",%u", chl);
      fprintf(WIFI_ESP, ",%u", enc);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWSAP\nloop=%u", loop);
         break;
      }
      delay_ms(100);
   }
}

void join_AP(unsigned char *ssid, unsigned char *password) //Thuc hien mot lan vi khoi dong lai se tu ket noi
{
   //AT+CWJAP="ssid","password"
   int1 OK = False;
   char *oks = "OK";
   for (int loop = 0; loop < 3; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\fCn to:%s\nLan %u", ssid, loop);
      clear_mem();
      fprintf(WIFI_ESP, AT_JOIN_AP);
      fprintf(WIFI_ESP, "=\"%s\"", ssid);
      fprintf(WIFI_ESP, ",\"%s\"", password);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;

      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {       
         delay_us(10);   
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(10, 2);
            int pos = timeout_error_count % 4;
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1)                 
            printf(LCD_PUTC, " .  ");
            if (pos == 2)
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }               
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fCnt To:%s\nLoop=%u", ssid, loop);
         break;
      }
      ELSE
      {
         printf(LCD_PUTC, "\fCn To:%s\nError!", ssid);

      }
      delay_ms(100);
   }
}

void quit_AP() {
   //AT+CWQAP
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, AT_QUIT_AP);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;                     
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWQAP");
         break;
      }
      delay_ms(100);
   }                                 
   WHILE(!OK);
}


void get_ip()
{
   //AT+CIFSR
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, AT_GET_IP);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;     
         if (n > 150) n = 0;                     
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fIP:%s",wifi_buff);
         break;
      }
      delay_ms(100);
   }                                 
   WHILE(!OK);

}
int1 client_Start(int id, int type, char *ip, unsigned int16 port)
{

   char *cmd = AT_SET_MUL_CON;
   int1 OK = False;
   char *oks = "OK";
   char *connected="ALREAY CONNECT"; //Ket noi da duoc ket noi tu truoc toi ip nay hoac ip khac voi id nay

   
   
   DO                     
   {
      char *pch = strstr(send_AT_result(cmd), oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\f%s", AT_SET_MUL_CON);
         break;
      }
      delay_ms(100);
   }
   WHILE(!OK);
   //
   for (int loop = 0; loop < 5; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\f%s\nPort:%5lu    %u", ip, port, loop);
      clear_mem();                                                 
      fprintf(WIFI_ESP, AT_START_CON);
      fprintf(WIFI_ESP, "=%u", id);
      if (type == TYPE_TCP) 
      fprintf(WIFI_ESP, ",\"TCP\"");                                     
      else                                 
      fprintf(WIFI_ESP, ",\"UDP\""); 
      fprintf(WIFI_ESP, ",\"%s\"", ip);
      fprintf(WIFI_ESP, ",%lu", port);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;
     
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {
         delay_us(10);
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(11, 2);                         
            int pos = timeout_error_count % 4;           
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1)
            printf(LCD_PUTC, " .  ");
            if (pos == 2)                                 
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;                           
         if (n > 150) n = 0;
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks); //chu y con "ALREAY CONNECT"

      IF(pch) {
         OK = TRUE; 
         printf(LCD_PUTC, "\fIP:%s\nP:%5lu lan %u OK    ", ip, port, loop);
         break;                                 
      }
      ELSE
      { 
         char *link = strstr(wifi_buff, connected);   

         IF(link) {
            OK = TRUE;                                             
            printf(LCD_PUTC, "\fID CONNECTED!\nloop=%u", loop);
            break;       
         }       
         else                       
         {
         OK = FALSE;   
         printf(LCD_PUTC, "\fIP:%s\nP:%5lu Error", ip, port);     
         }                                             

      }
      delay_ms(100);
   
   }
     return OK;
   
}
void server_Start(unsigned int16 port)   // Truoc khi chay phai restart                                     
{

   char *cmd = AT_SET_MUL_CON;
   int1 OK = False;
   char *oks = "OK";
   char *link_builded = "link is builded";

   
   
   DO
   {
      char *pch = strstr(send_AT_result(cmd), oks); //chu y:link is builded

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\f%s", AT_SET_MUL_CON);
         break;
      }
      else
      {   
         char *pch = strstr(send_AT_result(cmd), link_builded); //chu y:link is builded

         IF(pch) {
            OK = TRUE;
            printf(LCD_PUTC, "\fLink is Builded");
            break;
         }
         
      }
      delay_ms(100);                                       
   }
   WHILE(!OK);
   //
   for (int loop = 0; loop < 5; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u", port, loop);
      clear_mem();                                                 
      //AT+CIPSERVER=1,9999     

      fprintf(WIFI_ESP, AT_SET_SERVER);
      fprintf(WIFI_ESP, "=1");
      fprintf(WIFI_ESP, ",%lu", port);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;
     
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {
         delay_us(10);         
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(11, 2);                         
            int pos = timeout_error_count % 4;           
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1)
            printf(LCD_PUTC, " .  ");
            if (pos == 2)
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;       
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;                                                       
         printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u OK", port, loop);   
         break;
      }
      ELSE
      {
         printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u Error!", port, loop);   

      }
      delay_ms(100);             
   }

}
//Cip close khi ket noi toi server phai co id
//close ket noi toi clinet(modlue khac hoac may tinh) thi ko can

void  close_connect(int id) //Tra ve ok hoac "link is not"
{                                                                                         
   // AT+CIPCLOSE=<id>
   int1 OK = False;
   char *not_link="link is not";   //chua ket noi 
   char *oks="OK";
   for (int loop = 0; loop < 5; loop++) {                                                             
      clear_mem();
      fprintf(WIFI_ESP, AT_CLOSE_CON);
      fprintf(WIFI_ESP, "=%u", id);   
      fprintf(WIFI_ESP, CRLF);                           

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;                         
      }                                     

      char *pch = strstr(wifi_buff, oks);   

      IF(pch) {
         OK = TRUE;                                             
         printf(LCD_PUTC, "\fCLOSE CONNECT\nloop=%u", loop); 
         break;
      }
      ELSE
      {
         char *link = strstr(wifi_buff, not_link);   

         IF(link) {
            OK = TRUE;                                             
            printf(LCD_PUTC, "\fNOT CONNECT\nloop=%u", loop);
            break;
         }
      }                                               
   }
}
void send_data(int id, char  *data)
{                                         
   // AT+CIPSEND= <id>,<length>
   int1 OK = False;               
   char *write = ">";
   char *send_ok="SEND OK";
   int16 length=strlen(data);
   for (int loop = 0; loop < 5; loop++) {                                                             
      clear_mem();                     
      fprintf(WIFI_ESP, AT_SEND);
      fprintf(WIFI_ESP, "=%u", id);   
      fprintf(WIFI_ESP, ",%lu",length); 
      fprintf(WIFI_ESP, CRLF);                           

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }                                     

      char *pch = strstr(wifi_buff, write);

      IF(pch) {
         OK = TRUE;                                             
         printf(LCD_PUTC, "\fSEND >\nlenght=%lu", length);
         
         
         //Gui noi dung               
         char *sent = strstr(send_AT_result(data), send_ok);

         IF(sent) {             
            OK = TRUE;
            printf(LCD_PUTC, "\fSEND OK\nlenght=%lu", length);
            break;                     
         }       
      }                                   
      else
      {
         OK = FALSE;                                             
         printf(LCD_PUTC, "\fSEND FAIL!\nloop=%u", loop); 
      }
      delay_ms(100);                                                 
   }                           
   
}


                   


//Loi khi module reset ma client ko biet no dong     





Wifi.h:

#define    ECN_OPEN          0      //Che do bao mat
#define    ECN_WEP           1
#define    ECN_WAP_PSK       2
#define    ECN_WAP2_PSK      3
#define    ECN_WAP_WAP2_PSK  4

#define    TYPE_TCP     1            //Che do ket noi
#define    TYPE_UDP     0                                 

#define    TRAN_OPEN    1         //Che do truyen nhan           
#define    TRAN_CLOSE   0

#define    MODE_STA     "AT+CWMODE=1"         //Che do wifi
#define    MODE_AP      "AT+CWMODE=2"                                         
#define    MODE_AT_STA  "AT+CWMODE=3"

#define WIFI_TX_BUFFER_SIZE 128      //Bo dem
#define WIFI_RX_BUFFER_SIZE 128   

//COMMAND
#define AT_ECHO_ON                  "ATE1" 
#define AT_ECHO_OFF                 "ATE0" 
#define AT_RESET                    "AT+RST" 
#define AT_CFW                      "AT+GMR" 
#define AT_WIFI_MODE                "AT+CWMODE"
#define AT_JOIN_AP                  "AT+CWJAP"
#define AT_GET_IP                   "AT+CIFSR"
#define AT_LIST_AP                  "AT+CWLAP"
#define AT_QUIT_AP                  "AT+CWQAP" 
#define AT_SET_AP_PARAMS            "AT+CWSAP"
#define AT_CHECK_JOIN_AP            "AT+CWQAP"
#define AT_GET_CON_STATUS           "AT+CIPSTATUS"
#define AT_START_CON                "AT+CIPSTART"
#define AT_CIP_MODE                 "AT+CIPMODE" 
#define AT_SEND                     "AT+CIPSEND" 
#define AT_CLOSE_CON                "AT+CIPCLOSE"           
#define AT_SET_MUL_CON              "AT+CIPMUX=1"
#define AT_SET_SERVER               "AT+CIPSERVER" 
#define AT_SET_SERVER_TIMEOUT       "AT+CIPSTO" 
#define AT_RECEIVED_DATA            "+IPD"





115200 baud hızında RS232 haberleşme yoluyla AT komutları kullanarak modülle iletişim kurmak için:

//COMMAND
#define AT_ECHO_ON                  "ATE1" 
#define AT_ECHO_OFF                 "ATE0" 
#define AT_RESET                    "AT+RST" 
#define AT_CFW                      "AT+GMR" 
#define AT_WIFI_MODE                "AT+CWMODE"
#define AT_JOIN_AP                  "AT+CWJAP"
#define AT_GET_IP                   "AT+CIFSR"
#define AT_LIST_AP                  "AT+CWLAP"
#define AT_QUIT_AP                  "AT+CWQAP" 
#define AT_SET_AP_PARAMS            "AT+CWSAP"
#define AT_CHECK_JOIN_AP            "AT+CWQAP"
#define AT_GET_CON_STATUS           "AT+CIPSTATUS"
#define AT_START_CON                "AT+CIPSTART"
#define AT_CIP_MODE                 "AT+CIPMODE" 
#define AT_SEND                     "AT+CIPSEND" 
#define AT_CLOSE_CON                "AT+CIPCLOSE"           
#define AT_SET_MUL_CON              "AT+CIPMUX=1"
#define AT_SET_SERVER               "AT+CIPSERVER" 
#define AT_SET_SERVER_TIMEOUT       "AT+CIPSTO" 
#define AT_RECEIVED_DATA            "+IPD"


(http://laptrinhpic.info/wp-content/uploads/2014/10/Module-esp8166-300x270.jpg)
[imghttp://laptrinhpic.info/wp-content/uploads/2014/10/esp8266_pinout-300x124.png]http://[/img]
(http://laptrinhpic.info/wp-content/uploads/2014/10/400px-IM140905002_1-300x300.jpg)
(http://laptrinhpic.info/wp-content/uploads/2014/10/ESP8266-Rboard-1-300x130.jpg)
http://youtu.be/FD3tVrwhxxw (http://youtu.be/FD3tVrwhxxw)
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Gökhan BEKEN - 20 Şubat 2015, 02:20:21
@Recep METE  nın dediği gibi bağlantı yaptığım halde modül cevap vermiyor. GPIO0 pinini boşta bırakıp çalıştırırsam seri porttan karışık bir şekilde sürekli veri geliyor.
Güncelleme yaptığım için baudrate 115200'de. Ne olur ne olmaz diye 9600'de de denedim yine cevap yok.
Cihaz AT komutlarıma cevap vermiyor (cr+lf eklediğim halde)
Ürünü burdan sipariş etmiştim: http://www.dx.com/p/esp8266-wi-fi-wireless-serial-port-data-transceiver-module-blue-black-369015#.VOZVxC5Jf20 (http://www.dx.com/p/esp8266-wi-fi-wireless-serial-port-data-transceiver-module-blue-black-369015#.VOZVxC5Jf20)

Eksik birşey mi yapıyorum acaba?

mesaj birleştirme:: 20 Şubat 2015, 02:33:04

Tekrar güncelleyim dedim, güncelleme bitince, güncelleme programını kapatıp terminalden baktım, sürekli bu veriler geliyor:
(http://s26.postimg.cc/nqsmwe02t/tekrar_g.jpg) (http://postimg.cc/image/nqsmwe02t/)


mesaj birleştirme:: 20 Şubat 2015, 02:48:02

Tekrar güncelledim, 115200'de cevap vermedi ama 9600'de aşağıdaki görüntüyü alıyorum. GPIO 0 pini boşta olursa bu dediğim oluyor, vcc'de yine cevap yok.
(http://s26.postimg.cc/igs9iu57p/tuhaf.jpg) (http://postimg.cc/image/igs9iu57p/)
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Gökhan BEKEN - 21 Şubat 2015, 22:25:47
Güncel...
Sorunum hakkında bilgisi olan var mı?
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Cemre. - 22 Şubat 2015, 01:38:29
Alıntı yapılan: Gökhan BEKEN - 21 Şubat 2015, 22:25:47
Güncel...
Sorunum hakkında bilgisi olan var mı?

Hocam tümünü okuyacak zamanım olmadı ancak ben de benzer bir problemle karşılaştım ve nodemcu-firmware diye bir güncelleme yaptım. AT komutları kullanmak yerine Lua dilinde yazıyorsunuz kodunuzu ve modüle gömüyorsunuz. Enerjilendirdiğinizde o yapması gerekeni yapıyor. Bir araştırın derim. Ben de tam olarak çözebilmiş değilim ancak daha anlaşılır ve işlevsel olduğunu söyleyebilirim. Belki bu şekilde çözebilirsiniz sorunu.

esp8266.com'da LUA-Firmware forumundan bulabilirsiniz gerekli bilgiyi. Ayrıca http://benlo.com/esp8266/ (http://benlo.com/esp8266/)
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Gökhan BEKEN - 22 Şubat 2015, 04:02:11
Teşekkür ederim, şurda: http://taylorcoffelt.com/article/1 (http://taylorcoffelt.com/article/1)
terminalden güncellemeyi de anlatmışlar, yaptım ama güncelleme bitince yine sürekli veriler geliyor.
Bendeki modülden şüpheleniyorum bir de direnc.net'tekinden alıp denemeyi düşünüyorum.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Cemre. - 22 Şubat 2015, 13:53:30
Hocam hangi sürüme güncelliyorsunuz?

Benim güncelleme yaptığım program ve güncellemede sorun çıkartmayan fw.ler bunlar.

0.9.5 şuan en güncel sanırım,

0.9.2.2
AT+GMR

0018000902

OK


Sonucunu  veriyor, nodemcu olan ise lua-firmware diye bahsedilen güncelleme.

Güncellemeyi de programı açıp gönderdiğim dosyadaki resimde görüldüğü gibi yapabilirsiniz. Sağdaki sekme önemli 0x00000 olması gerekiyor. Diğer tüm sekmeler kapalı olacak. Bunu yaptıktan sonra birinci sekmeden comport seçip flash diyeceksiniz. Tabi ki bunları yaparken gpio0 pini GND'ye bağlı olacak. Onun dışında herhangi bir bağlantı yapmadım. Sorunsuz çalışıyor bende.

Ek olarak, 9.2.2 sürümde MAC sorgulama amaçlı komutlarına ERROR dönüyor, onun dışında openweathermap'den veri çekmeyi sorunsuz yaptı vsvs.

9.5.0'da MAC sorgulamada sıkıntı yok ancak o da openweathermap'de sıkıntı çıkardı. İletişim için @FxDev hocamın yazdığı programı kullandım sade ve hızlı olduğunu düşündüğüm için. En azından test aşamasında bayağı işe yarıyor.

Ona da buradan teşekkürler.

http://www.dosya.tc/server39/JDSaQs/esp8266guncelleme.rar.html (http://www.dosya.tc/server39/JDSaQs/esp8266guncelleme.rar.html)
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Gökhan BEKEN - 22 Şubat 2015, 17:54:44
Hocam teşekkür ederim ama o program da işe yaramadı. Modülün bozuk olduğuna kanaat getirdim.
Bu arada modülü aldığımda versiyonu 0.9.2.4 idi. Sonra çince güncelleştirme programı ile dosya göstermeden tekrar güncelleme yaptığımda AT+GMR gönderdiğimde "0018000902" cevabını dönderiyordu.
Çince program ile dosya göstererek güncelleştirme yaptığımda sürekli saçma veriler dönderiyordu.

Ancak sizin program ile güncelleştir yaptığımda, sürekli veri döndermiyor ama AT komutlarıma da cevap vermiyor.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: Cemre. - 24 Şubat 2015, 19:33:14
Hocam bağlantılarınızı doğru yapıyorsunuz değil mi?

VCC ve CH_PD 3.3V'a bağlı olacak, GND GND'ye, diğerlerini boş bırakabilirsiniz veya GPIO0'ı 3.3V'a bağlayabilirsiniz, bunun dışında hiç bir bağlantı yapmadan CH_PD pinini sürekli çıkarıp takma işlemi uygulayınca önce saçma sapan veriler geliyor daha sonra bir anda modül reset atmışsınız gibi cevap döndürüyor. Bu tarz birşeyler yapıp modüle bir kez ulaşınca geri kalan tüm işlemler sorunsuz oluyor. Eğer modülü enerjilendirirken reset veya ch_pd pini gnd'de değilse bir daha böyle birşeye ihtiyacınız kalmıyor. Ancak bu dediğim tüm modüller için geçerli mi bilemiyorum veya kim bununla uğraşmak ister onu da bilemiyorum  :D
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: volkanunal - 21 Temmuz 2016, 10:20:02
Merhabalar esp8266 stm32f429 kitim ile basit bir web server yapmaya çalışıyorum  , kit üzerinden at komutlarına cevap alabiliyorum , ağa bağlı ve ip almış durumda , at komutlarını stm üzerinden gönderiyorum , anca html komutlarını göndererek ip üzerinden erişim sağlayamadım  , site bağlanmayı reddetti diyor , ve error döndürüyor.Daha önce deneyen var mıdır acaba?
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: MT - 21 Temmuz 2016, 13:23:19
Hocam öncelikle bunun için temel ayarları yaptıktan sonra AT+CIPMUX= Multiple olarak ayarlanacak daha sonra uygun ip port değeri ile browser üzerinden bağlandığınızda gelen sorguya cevap AT+CIPSEND=ID( kaçıncı sekmeden sorgu var ise ID yerine o yazılır) cevap olarak gönderilir kısa bir süre beklenir hemen cevap verdiğimde error vermişti bende ve HTML komutları gönderilir. Kısa bir süre derken max süre aşımını AT+CIPSTO=2000 ms olarak ayarlamak  yeterli 500ms-1000ms gibi beklemeden sonra html kodunu gönderdiğimde bir sorun yaşamadım.   Umarım sorunuzu doğru anlayıp cevaplamışımdır.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: volkanunal - 21 Temmuz 2016, 13:50:57
hocam cipmux , cwmode ayarları yapılı zaten , elinizde örnek mevcut mu acaba ?
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: volkanunal - 21 Temmuz 2016, 13:57:27
daha önce arduino üzerinde çalıştırabildim zaten
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: volkanunal - 21 Temmuz 2016, 18:25:01
bir süre çalıştı , daha sonra tekrar gitti , espnin stabil çalışmadığına tanık oldum daha önce ama bu şekilde değildi
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: seyityildirim - 19 Aralık 2016, 18:53:11
Merhaba arkadaşlar,

Öncelikle çok faydalı bir konu olmuş. Emeği geçenlere teşekkürler... Benim sorum şu;

Örnek olması açısından https://learn.adafruit.com/diy-boost-calc/the-calculator bu sitedeki gibi kullanıcıdan değer bekleniyor.

Esp8266 kullanarak bu sitede bulunan kutucuklara değer girebilir miyim ? Konudaki ilk örnekte picproje sitesine bağlanılıyor. Ama daha sonra nasıl hareket ediliyor bir bilgim yok. Mesela bu modül ile picproje de konu açıp bu soruyu sorabilir miyim?
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: MrDarK - 20 Aralık 2016, 10:32:58
Alıntı yapılan: seyityildirim - 19 Aralık 2016, 18:53:11
Merhaba arkadaşlar,

Öncelikle çok faydalı bir konu olmuş. Emeği geçenlere teşekkürler... Benim sorum şu;

Örnek olması açısından https://learn.adafruit.com/diy-boost-calc/the-calculator bu sitedeki gibi kullanıcıdan değer bekleniyor.

Esp8266 kullanarak bu sitede bulunan kutucuklara değer girebilir miyim ? Konudaki ilk örnekte picproje sitesine bağlanılıyor. Ama daha sonra nasıl hareket ediliyor bir bilgim yok. Mesela bu modül ile picproje de konu açıp bu soruyu sorabilir miyim?


Selamlar;

Örnekte dediğin gibi picproje sitesine bağlantı kurup sizi orada bıraktım. Çünkü o noktadan sonra HTTP Request, PHP programlama, HTML işlemler gibi parametreler devreye giriyor. Web tarayıcılarının hangi işlemlere hangi komutları gönderdiğini tespit edersen yapabilirsin. Lakin çok zorlar seni, o yüzden hedefine yönelik bir çalışma yapmanı tavsiye ederim. Hatta yeni bir konu açıp hedefin ile ilgili tavsiye alman yararına olacaktır.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: hasanmert - 08 Mart 2017, 09:55:19
mrb arkadaşlar,
ESP8266 uygulaması ile uğraşıyorum
sonbui/mystr.c dosyasını bulamadım. Bu dosyayı nereden bulurum?

Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: ufukv - 21 Ağustos 2017, 12:12:08
@MrDarK 
Merhaba, Haberleşmede neden full-duplex kullandın ? Genelde wifi protocolü için half-duplex tavsiye ediliyor. Özel bir sebebi var mı ? Bende STM32L011D3'ü LPUART ile ESP-WROOM-02 yi haberleştireceğim. Yardımın için şimdiden teşekkürler.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: MrDarK - 21 Ağustos 2017, 23:01:03
Özel bir sebebi yok. Istediğiniz gibi kullanabilirsiniz.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: ufukv - 02 Ekim 2017, 16:27:10
@MrDarK Hocam,
STM32F0 Discovery DK ile(STM32F051R8 mikrodenetleci) ESP WROOM-02 modülünü uart üzerinden haberleştirdim ve KEIL IDE üzerinde küçük bir buton led uygulaması yaptım. Modül çalışırken 116 mA akım çekiyor. Modülü veri alışverişi dışında belirli bir süre deep sleep modunda ve geri kalan zamanlarda power off olacak. Deep sleep modu için yazılımsal ve donanımsal müdahaleyi nasıl yapabiliriz?

https://hizliresim.com/p/yukle
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: MrDarK - 02 Ekim 2017, 17:18:38
Internette araştırabilirsin;

https://www.losant.com/blog/making-the-esp8266-low-powered-with-deep-sleep
https://openhomeautomation.net/esp8266-battery/
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: BLACK_G - 09 Şubat 2019, 19:22:32
Alıntı yapılan: Recep METE - 29 Ocak 2015, 23:18:27yukarıdaki kodlarda hata var yeniden yayınlamak ihtiyacı doğdu

Code  Pic18f4550:

#include <18F4550.h>
#DEVICE ADC=8                 
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000) 
#use rs232(UART1,baud=115200,parity=N,bits=8,stream=WIFI_ESP,errors)//Khai bao su dung uart cung 
#include <usb_cdc.h>                                 
#include <usb_desc_cdc.h>
#define ledv  PIN_C2                                 
#define ledr  PIN_C1
#define ledon output_low                                     
#define ledoff output_high                     
#define led_on output_low                                                     
#define led_off output_high                                                       
#define LCD_ENABLE_PIN PIN_D2                   
#define LCD_RS_PIN PIN_D0               
#define LCD_RW_PIN PIN_D1               
#define LCD_DATA4 PIN_D4                                           
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>                                     
#include"esp/wifi.c"   
#include"sonbui/mystr.c"

char *SSID_JOIN="TU HU";//"SonBui-AP";
char *PASS_JOIN="12345679";//"a12344321";   
char *DATA_SEND="GET /data/2.5/weather?id=1581130 HTTP/1.0\r\nHost: api.openweathermap.org\r\n\r\n" ;     //1581130: Hanoi-Viet nam
char *WEATHER_IP= "188.226.224.148"; //api.openweathermap.org   
void get_internet()
{   
char *write = ">"; 
int1 OK = False;
printf(LCD_PUTC, "\fGData Hanoi,VN\nopenweathermap.org"); 
delay_ms(1000);
if( client_Start(0,TYPE_TCP,WEATHER_IP,80))   //kET NOI TOI SERVER DE LAY DU LIEU 

printf(LCD_PUTC, "\fGet data");
int16 length=strlen(DATA_SEND);                                                           
DO
{
clear_mem();
fprintf(WIFI_ESP, AT_SEND);                     
fprintf(WIFI_ESP, "=%u", 0);       
fprintf(WIFI_ESP, ",%lu",length); 
fprintf(WIFI_ESP, CRLF);
for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

wifi_buff[n] = timed_getc();
n++;
if (n > 150) n = 0;
if (timeout_error) break;
}

char *pch = strstr(wifi_buff, write);

IF(pch) {
OK = TRUE;
break;                               
}
delay_ms(100);
}
WHILE(!OK); 
//Send http get
clear_mem();       
printf(LCD_PUTC, "\fSend Get");
fprintf(WIFI_ESP, "%s",DATA_SEND);
Long LONG timeout;   
timeout = 0;
WHILE(!kbhit(WIFI_ESP) && (++timeout < 2000000))  //20 second
{
delay_us(10);

}                                                         
WHILE(!(fgetc(WIFI_ESP)=='{')) ;       
printf(LCD_PUTC, "\f{");

wifi_buff[0]='{';n=1;                               
do {         
wifi_buff[n] = mili_getc();           
n++;                                           
if (n > 512) n = 0;   

}while(!timeout_error) ;
printf(LCD_PUTC, "\fPrint Data");
//printf(usb_cdc_putc, "\r\nWF:%s"wifi_buff);   
char *jstart="\"main\":{";
char *jstop=",\"wind\"";
char *p1 = strstr(wifi_buff,jstart);

if(p1)                             
{   
// printf(usb_cdc_putc, "\r\n\fp1:%s"p1); 
char *p2 = strstr(p1,jstop);
if(p2) 

// printf(usb_cdc_putc, "\r\n\fp2:%s"p2);
size_t len = p2-p1;   
char *jmain = (char*)malloc(sizeof(char)*(len+1)); 
strncpy(jmain, p1, len);                                 
jmain[len] = '\0'; 
// printf(usb_cdc_putc, "\r\nRes:%s"jmain);
char *temp="\"temp\":";
char *temp_min=",\"temp_min\":";   
char *ap_suat=",\"pressure\":";
char *ap_suat_end=",\"sea_level";
char *do_am="\"humidity\":";   
char *do_am_end="}";                               
double d_nhiet_do;
free(res) ;
char *nhiet_do=extract_string(temp,temp_min,jmain);
if(nhiet_do)                                                 
{
// printf(usb_cdc_putc, "\r\nNhiet do:%s"nhiet_do);
d_nhiet_do = atof (nhiet_do);//treo neu gia tri nhiet do sai dinh dang
d_nhiet_do -= 273.15; //kelvin-celsius
printf (LCD_PUTC, "\fT=%f"d_nhiet_do);
}
free(res) ;
char *ap_suat_khi=extract_string(ap_suat,ap_suat_end,jmain);
if(ap_suat)
{
//  printf(usb_cdc_putc, "\r\nAp suat:%s"ap_suat_khi);
printf (LCD_PUTC, "\nP=%s hpa"ap_suat_khi);   
}                                                         
free(res) ;                                                             
char *do_am_khi=extract_string(do_am,do_am_end,jmain);
if(do_am_khi)
{
// printf(usb_cdc_putc, "\r\nDo am khi:%s"do_am_khi);

lcd_gotoxy(10,1) ;                                     
printf (LCD_PUTC, "H=%s %%"do_am_khi);                 
}
free(jmain) ;
}
}
}
else
{                                     
printf (LCD_PUTC, "\f Can't connect to\nopenweathermap.org");
delay_ms(1000);
}                         
}
void main()                             

lcd_init ();                                                                     
printf (LCD_PUTC, "\f MuaLinhKien.Vn\nPIC 16/18 Basic Kit");
delay_ms(1000);
printf (LCD_PUTC, "\fESP8266 Test\nmualinhkien.vn");   
esp_init();
setup_AP(SSID_SET,PASS_SET,5,ECN_WAP2_PSK);                                                                                               
delay_ms(1000); 
join_AP(SSID_JOIN,PASS_JOIN);             
delay_ms(1000);
client_Start(0,TYPE_TCP,WEATHER_IP,80);   //kET NOI TOI SERVER DE LAY DU LIEU   
delay_ms(1000);
get_ip();
clear_mem();
//!   usb_cdc_init();
//!   usb_init();                                       
//!   usb_task();                                       
//!   usb_wait_for_enumeration();
//!     while(!usb_cdc_connected());                             
while (TRUE)                                                       
{                                                         
get_internet();
for(int loop=0;loop<120;loop++)     
{
output_toggle(ledr);
delay_ms(500);       
}

}
}


Wifi.c:

/*
Dung while de doc du lieu tra ve
Dung ngat de lay du lieu bat ki
*/
#INCLUDE <stdlibm.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wifi.h> 
char wifi_buff[512];           

int16 n = 0;
INT1 timeout_error;
INT8 timeout_error_count = 0;                         
char CRLF[] = "\r\n";                                                                                                           
char *SSID_SET = "VISMART.CO";
char *PASS_SET = "12345678";                                       
char *STR_OK="\r\nOK\r\n" ;                                           
char *STR_START=":" ;                                     
char data_out[50];     
                                                 
void clear_mem(void) {                                             
   for (int16 mem_loop = 0; mem_loop < 512; mem_loop++) {
      if (wifi_buff[mem_loop] == '\0')
      break;           
      else
      wifi_buff[mem_loop] = '\0';
   }
   n = 0;             

void clear_data(void) {                                             
   for (int16 mem_loop = 0; mem_loop < 50; mem_loop++) {
      if (data_out[mem_loop] == '\0')
      break;           
      else
      data_out[mem_loop] = '\0';
   }
   n = 0;             
}

char timed_getc() {

   WHILE(!kbhit(WIFI_ESP));
   IF(kbhit(WIFI_ESP))   
   RETURN(fgetc(WIFI_ESP));                     
   ELSE
   {
     
      RETURN(0);
   }
}

char *send_AT_result(char *command) {

   clear_mem();
   fprintf(WIFI_ESP, "%s", command);
   fprintf(WIFI_ESP, CRLF);   
   for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

      wifi_buff[n] = timed_getc();
      n++;
      if (n > 150) n = 0;
      if (timeout_error) break;
   }
   return wifi_buff;
}                                               

void send_AT_OK(char *command) {
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, "%s", command);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         break;
      }
      delay_ms(100);
   }
   WHILE(!OK);

                                                       
}

void esp_init() {
   int1 OK = False;
   char *oks = "OK";
   char *nc = "no change";         
do { //ATE0   
      clear_mem();
     fprintf(WIFI_ESP, AT_RESET);
      fprintf(WIFI_ESP, CRLF);
   delay_ms(2000);
      fprintf(WIFI_ESP, AT_ECHO_OFF);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fATE0");
      }
      delay_ms(100);
   }
   WHILE(!OK);

   //
   do { //AT+CWMODE=3
      clear_mem();                               
      fprintf(WIFI_ESP, MODE_AT_STA);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWMODE=3");
      } else {
         char *no_change = strstr(wifi_buff, nc);

         IF(no_change) {
            OK = TRUE;
            printf(LCD_PUTC, "\fAT+CWMODE=3\nNo change");
         }

      }
      delay_ms(100);
   }
   WHILE(!OK);

}

void setup_AP(unsigned char *ssid, unsigned char *password, int chl, int enc) {
   //AT+CWSAP="ssid","password",chl,enc
   int1 OK = False;
   char *oks = "OK";
   for (int loop = 0; loop < 5; loop++) {
      clear_mem();
      fprintf(WIFI_ESP, AT_SET_AP_PARAMS);
      fprintf(WIFI_ESP, "=\"%s\"", ssid);
      fprintf(WIFI_ESP, ",\"%s\"", password);
      fprintf(WIFI_ESP, ",%u", chl);
      fprintf(WIFI_ESP, ",%u", enc);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWSAP\nloop=%u", loop);
         break;
      }
      delay_ms(100);
   }
}

void join_AP(unsigned char *ssid, unsigned char *password) //Thuc hien mot lan vi khoi dong lai se tu ket noi
{
   //AT+CWJAP="ssid","password"
   int1 OK = False;
   char *oks = "OK";
   for (int loop = 0; loop < 3; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\fCn to:%s\nLan %u", ssid, loop);
      clear_mem();
      fprintf(WIFI_ESP, AT_JOIN_AP);
      fprintf(WIFI_ESP, "=\"%s\"", ssid);
      fprintf(WIFI_ESP, ",\"%s\"", password);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;

      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {       
         delay_us(10);   
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(10, 2);
            int pos = timeout_error_count % 4;
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1)                 
            printf(LCD_PUTC, " .  ");
            if (pos == 2)
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }               
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fCnt To:%s\nLoop=%u", ssid, loop);
         break;
      }
      ELSE
      {
         printf(LCD_PUTC, "\fCn To:%s\nError!", ssid);

      }
      delay_ms(100);
   }
}

void quit_AP() {
   //AT+CWQAP
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, AT_QUIT_AP);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;                     
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWQAP");
         break;
      }
      delay_ms(100);
   }                                 
   WHILE(!OK);
}


void get_ip()
{
   //AT+CIFSR
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, AT_GET_IP);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;     
         if (n > 150) n = 0;                     
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fIP:%s",wifi_buff);
         break;
      }
      delay_ms(100);
   }                                 
   WHILE(!OK);

}
int1 client_Start(int id, int type, char *ip, unsigned int16 port)
{

   char *cmd = AT_SET_MUL_CON;
   int1 OK = False;
   char *oks = "OK";
   char *connected="ALREAY CONNECT"; //Ket noi da duoc ket noi tu truoc toi ip nay hoac ip khac voi id nay

   
   
   DO                     
   {
      char *pch = strstr(send_AT_result(cmd), oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\f%s", AT_SET_MUL_CON);
         break;
      }
      delay_ms(100);
   }
   WHILE(!OK);
   //
   for (int loop = 0; loop < 5; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\f%s\nPort:%5lu    %u", ip, port, loop);
      clear_mem();                                                 
      fprintf(WIFI_ESP, AT_START_CON);
      fprintf(WIFI_ESP, "=%u", id);
      if (type == TYPE_TCP) 
      fprintf(WIFI_ESP, ",\"TCP\"");                                     
      else                                 
      fprintf(WIFI_ESP, ",\"UDP\""); 
      fprintf(WIFI_ESP, ",\"%s\"", ip);
      fprintf(WIFI_ESP, ",%lu", port);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;
     
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {
         delay_us(10);
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(11, 2);                         
            int pos = timeout_error_count % 4;           
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1)
            printf(LCD_PUTC, " .  ");
            if (pos == 2)                                 
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;                           
         if (n > 150) n = 0;
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks); //chu y con "ALREAY CONNECT"

      IF(pch) {
         OK = TRUE; 
         printf(LCD_PUTC, "\fIP:%s\nP:%5lu lan %u OK    ", ip, port, loop);
         break;                                 
      }
      ELSE
      { 
         char *link = strstr(wifi_buff, connected);   

         IF(link) {
            OK = TRUE;                                             
            printf(LCD_PUTC, "\fID CONNECTED!\nloop=%u", loop);
            break;       
         }       
         else                       
         {
         OK = FALSE;   
         printf(LCD_PUTC, "\fIP:%s\nP:%5lu Error", ip, port);     
         }                                             

      }
      delay_ms(100);
   
   }
     return OK;
   
}
void server_Start(unsigned int16 port)   // Truoc khi chay phai restart                                     
{

   char *cmd = AT_SET_MUL_CON;
   int1 OK = False;
   char *oks = "OK";
   char *link_builded = "link is builded";

   
   
   DO
   {
      char *pch = strstr(send_AT_result(cmd), oks); //chu y:link is builded

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\f%s", AT_SET_MUL_CON);
         break;
      }
      else
      {   
         char *pch = strstr(send_AT_result(cmd), link_builded); //chu y:link is builded

         IF(pch) {
            OK = TRUE;
            printf(LCD_PUTC, "\fLink is Builded");
            break;
         }
         
      }
      delay_ms(100);                                       
   }
   WHILE(!OK);
   //
   for (int loop = 0; loop < 5; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u", port, loop);
      clear_mem();                                                 
      //AT+CIPSERVER=1,9999     

      fprintf(WIFI_ESP, AT_SET_SERVER);
      fprintf(WIFI_ESP, "=1");
      fprintf(WIFI_ESP, ",%lu", port);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;
     
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {
         delay_us(10);         
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(11, 2);                         
            int pos = timeout_error_count % 4;           
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1)
            printf(LCD_PUTC, " .  ");
            if (pos == 2)
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;       
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;                                                       
         printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u OK", port, loop);   
         break;
      }
      ELSE
      {
         printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u Error!", port, loop);   

      }
      delay_ms(100);             
   }

}
//Cip close khi ket noi toi server phai co id
//close ket noi toi clinet(modlue khac hoac may tinh) thi ko can

void  close_connect(int id) //Tra ve ok hoac "link is not"
{                                                                                         
   // AT+CIPCLOSE=<id>
   int1 OK = False;
   char *not_link="link is not";   //chua ket noi 
   char *oks="OK";
   for (int loop = 0; loop < 5; loop++) {                                                             
      clear_mem();
      fprintf(WIFI_ESP, AT_CLOSE_CON);
      fprintf(WIFI_ESP, "=%u", id);   
      fprintf(WIFI_ESP, CRLF);                           

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;                         
      }                                     

      char *pch = strstr(wifi_buff, oks);   

      IF(pch) {
         OK = TRUE;                                             
         printf(LCD_PUTC, "\fCLOSE CONNECT\nloop=%u", loop); 
         break;
      }
      ELSE
      {
         char *link = strstr(wifi_buff, not_link);   

         IF(link) {
            OK = TRUE;                                             
            printf(LCD_PUTC, "\fNOT CONNECT\nloop=%u", loop);
            break;
         }
      }                                               
   }
}
void send_data(int id, char  *data)
{                                         
   // AT+CIPSEND= <id>,<length>
   int1 OK = False;               
   char *write = ">";
   char *send_ok="SEND OK";
   int16 length=strlen(data);
   for (int loop = 0; loop < 5; loop++) {                                                             
      clear_mem();                     
      fprintf(WIFI_ESP, AT_SEND);
      fprintf(WIFI_ESP, "=%u", id);   
      fprintf(WIFI_ESP, ",%lu",length); 
      fprintf(WIFI_ESP, CRLF);                           

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }                                     

      char *pch = strstr(wifi_buff, write);

      IF(pch) {
         OK = TRUE;                                             
         printf(LCD_PUTC, "\fSEND >\nlenght=%lu", length);
         
         
         //Gui noi dung               
         char *sent = strstr(send_AT_result(data), send_ok);

         IF(sent) {             
            OK = TRUE;
            printf(LCD_PUTC, "\fSEND OK\nlenght=%lu", length);
            break;                     
         }       
      }                                   
      else
      {
         OK = FALSE;                                             
         printf(LCD_PUTC, "\fSEND FAIL!\nloop=%u", loop); 
      }
      delay_ms(100);                                                 
   }                           
   
}


                   


//Loi khi module reset ma client ko biet no dong     




Wifi.h:

#define    ECN_OPEN          0      //Che do bao mat
#define    ECN_WEP           1
#define    ECN_WAP_PSK       2
#define    ECN_WAP2_PSK      3
#define    ECN_WAP_WAP2_PSK  4

#define    TYPE_TCP     1            //Che do ket noi
#define    TYPE_UDP     0                                 

#define    TRAN_OPEN    1         //Che do truyen nhan           
#define    TRAN_CLOSE   0

#define    MODE_STA     "AT+CWMODE=1"         //Che do wifi
#define    MODE_AP      "AT+CWMODE=2"                                         
#define    MODE_AT_STA  "AT+CWMODE=3"

#define WIFI_TX_BUFFER_SIZE 128      //Bo dem
#define WIFI_RX_BUFFER_SIZE 128   

//COMMAND
#define AT_ECHO_ON                  "ATE1" 
#define AT_ECHO_OFF                 "ATE0" 
#define AT_RESET                    "AT+RST" 
#define AT_CFW                      "AT+GMR" 
#define AT_WIFI_MODE                "AT+CWMODE"
#define AT_JOIN_AP                  "AT+CWJAP"
#define AT_GET_IP                   "AT+CIFSR"
#define AT_LIST_AP                  "AT+CWLAP"
#define AT_QUIT_AP                  "AT+CWQAP" 
#define AT_SET_AP_PARAMS            "AT+CWSAP"
#define AT_CHECK_JOIN_AP            "AT+CWQAP"
#define AT_GET_CON_STATUS           "AT+CIPSTATUS"
#define AT_START_CON                "AT+CIPSTART"
#define AT_CIP_MODE                 "AT+CIPMODE" 
#define AT_SEND                     "AT+CIPSEND" 
#define AT_CLOSE_CON                "AT+CIPCLOSE"           
#define AT_SET_MUL_CON              "AT+CIPMUX=1"
#define AT_SET_SERVER               "AT+CIPSERVER" 
#define AT_SET_SERVER_TIMEOUT       "AT+CIPSTO" 
#define AT_RECEIVED_DATA            "+IPD"




115200 baud hızında RS232 haberleşme yoluyla AT komutları kullanarak modülle iletişim kurmak için:

//COMMAND
#define AT_ECHO_ON                  "ATE1" 
#define AT_ECHO_OFF                 "ATE0" 
#define AT_RESET                    "AT+RST" 
#define AT_CFW                      "AT+GMR" 
#define AT_WIFI_MODE                "AT+CWMODE"
#define AT_JOIN_AP                  "AT+CWJAP"
#define AT_GET_IP                   "AT+CIFSR"
#define AT_LIST_AP                  "AT+CWLAP"
#define AT_QUIT_AP                  "AT+CWQAP" 
#define AT_SET_AP_PARAMS            "AT+CWSAP"
#define AT_CHECK_JOIN_AP            "AT+CWQAP"
#define AT_GET_CON_STATUS           "AT+CIPSTATUS"
#define AT_START_CON                "AT+CIPSTART"
#define AT_CIP_MODE                 "AT+CIPMODE" 
#define AT_SEND                     "AT+CIPSEND" 
#define AT_CLOSE_CON                "AT+CIPCLOSE"           
#define AT_SET_MUL_CON              "AT+CIPMUX=1"
#define AT_SET_SERVER               "AT+CIPSERVER" 
#define AT_SET_SERVER_TIMEOUT       "AT+CIPSTO" 
#define AT_RECEIVED_DATA            "+IPD"

(http://laptrinhpic.info/wp-content/uploads/2014/10/Module-esp8166-300x270.jpg)
[imghttp://laptrinhpic.info/wp-content/uploads/2014/10/esp8266_pinout-300x124.png]http://[/img]
(http://laptrinhpic.info/wp-content/uploads/2014/10/400px-IM140905002_1-300x300.jpg)
(http://laptrinhpic.info/wp-content/uploads/2014/10/ESP8266-Rboard-1-300x130.jpg)
http://youtu.be/FD3tVrwhxxw (http://youtu.be/FD3tVrwhxxw)

Alıntı yapılan: hasanmert - 08 Mart 2017, 09:55:19mrb arkadaşlar,
ESP8266 uygulaması ile uğraşıyorum
sonbui/mystr.c dosyasını bulamadım. Bu dosyayı nereden bulurum?




Bu dosya eksik görünüyor. Kodda geçen mystr.c dosyasını eklememişsiniz.
Başlık: Ynt: ESP8266 Wifi Module Örnek Uygulama
Gönderen: MrDarK - 22 Eylül 2021, 23:25:25
Selamlar,

Bazı sebeplerden linklerde problem olabileceğinden linkleri güncelliyorum. Proje embitz ile hazırlanmıştır.

Link = https://drive.google.com/file/d/0B2Ja5iH4DRMGNy1QZDBhb21MVHc/view?usp=sharing&resourcekey=0-rzCDqylZDgpP2vWi5HRaEA

Github = https://github.com/Picproje/ESP8266-Wifi-Modul-ornek-Uygulama/tree/master/ESP8266_Example