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)
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.
Hocam ellerinize saglik.
Ne olur ne olmaz : https://github.com/Picproje/ESP8266-Wifi-Modul-ornek-Uygulama
Teşekkürler MrDarK
CCS CCS CCS :D
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 :)
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.
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?
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.
resimdeki pcb uygunsa gönderebilirim.
Selim Koç arkadaşımızdan almıştım.
(https://elektrokod.files.wordpress.com/2014/09/dsc_0135.jpg)
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?
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)
Gören biri wordpress dışında bir yere upload edebilir mi?Ben bazı sayfaları görüntüleyemiyorum.Firewall var.
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.
@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ş...
@vitruvius teşekkürler.
@elektronik.Uygundur. Eğer yanında pic programlayıcı da olursa güzel olur.
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)
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;
}
}
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 ?
Ö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.
İ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.
https://drive.google.com/file/d/0BxS9lo0yCui7MnFraF9xaDdWTVE/view?usp=sharing
Yeni link burada.Gereksiz dosyaları kaldırdım.
Hocam elinize, emeğinize sağlık. Akşam eve gidince verdiğiniz ccs c kodunu denemek olacak.Çok teşekkürler.
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)
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.
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?
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.
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ürler arkadaşlar eklentileriniz için.
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.
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/"
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)
@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/)
Güncel...
Sorunum hakkında bilgisi olan var mı?
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/)
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.
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)
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.
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
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?
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.
hocam cipmux , cwmode ayarları yapılı zaten , elinizde örnek mevcut mu acaba ?
daha önce arduino üzerinde çalıştırabildim zaten
bir süre çalıştı , daha sonra tekrar gitti , espnin stabil çalışmadığına tanık oldum daha önce ama bu şekilde değildi
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?
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.
mrb arkadaşlar,
ESP8266 uygulaması ile uğraşıyorum
sonbui/mystr.c dosyasını bulamadım. Bu dosyayı nereden bulurum?
@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.
Özel bir sebebi yok. Istediğiniz gibi kullanabilirsiniz.
@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
Internette araştırabilirsin;
https://www.losant.com/blog/making-the-esp8266-low-powered-with-deep-sleep
https://openhomeautomation.net/esp8266-battery/
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.
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