ESP-12E (ESP8266) İle Arduino Uno Wifi Bağlantısı

ESP-12E, popüler ESP8266 WiFi modülünün gömülü projelerde kullanılmak üzere tasarlanmış SMD sürümüdür. Internet Of Things (IOT) uygulamalarınız için mükemmel bir seçimdir. ESP8266 WiFi Modülü, WiFi ağınıza herhangi bir mikrodenetleyici erişimi verebilen dahili TCP / IP protokolüne sahip, kendi kendine yeten bir modüldür.
ESP-12E (ESP8266) İle Arduino Uno Wifi Bağlantısı ESP-12E (ESP8266) İle Arduino Uno Wifi Bağlantısı

 

ESP-12E (ESP8266) İle Arduino Uno Wifi Bağlantısı

Özellikler:

  • 802.11 b/g/n kablosuz ağ desteği
  • Dahili 32-bit düşük güç tüketimli işlemci (CPU)
  • Dahili 10-bit DAC (dijitalden analoga dönüştürücü)
  • TCP/IP stack desteği
  • 4MB SPI flash (program hafızası)
  • Dahili PLL, regülatör ve güç yönetimi
  • Anten diversity özelliği
  • WPA/WPA2 destekli WiFi (2.4 GHz)
  • STA/AP/STA+AP WiFi modları
  • Android ve iOS cihazlar için SmartLink desteği
  • SDIO 2.0, (H)SPI, UART, I2C, I2S, IRDA, PWM ve GPIO haberleşme desteği
  • Derin uyku durumunda <10µA, güç kapalı durumda 5<µA güç tüketimi
  • Uyandıktan sonra veri gönderme süresi <2ms
  • Bekleme durumunda <1.0mW güç tüketimi (DTIM3)
  • 802.11b modunda +20dBm RF çıkış gücü
  • Çalışma sıcaklığı:  -40ºC ~ 125ºC

ESP8266, bir uygulamayı barındırabilir veya başka bir uygulama işlemcisinden tüm Wi-Fi ağ işlevlerini kaldırabilir. Bu modül, arduino wifi shield gibi işlevsellik kazanmanızı sağlayan AT komutları ile birlikte gelir, ayrıca modüllerin bellek ve işlemcisi üzerinde kendi uygulamanızı yapmak için farklı yazılımlar yükleyebilirsiniz.

Bu modül, özel yazılımlar için kullanılabilecek 80Mhz düşük güçlü 32 bit işlemci içerir. Bu ayrıca herhangi bir harici denetleyici olmadan küçük web sayfalarını barındırabileceğiniz anlamına gelir. ESP8266, VoIP uygulamaları ve Bluetooth ortak kullanım arayüzleri için APSD'yi destekler, tüm çalışma koşullarında çalışmasına izin veren ve harici RF parçaları gerektirmeyen kendi kendini kalibre eden bir RF içerir.

ESP8266, düşük maliyet ve yüksek özellikleriyle dünyayı dönüştürüyor ve bu da onu Internet Of Things (IOT) için ideal bir modül haline getiriyor. Yerel ağınıza veya internete bir cihaz bağlamanız gereken herhangi bir uygulamada kullanılabilir.

ESP-12'de 7 GPIO bulunur.

Dikkat

  • ESP8266 Modülü sadece 3.3V gerilim seviyesiyle uyumludur ve 5V cihazlarla doğrudan çalışmaz (hem seri hem de GPIO erişimi için). Eğer devreniz veya projeniz 3.3V uyumlu değilse bir çevirici kullanmanız gerekir. 3.3V yerine 5V uygulanırsa kart yanacaktır.
  • ESP modülünüzü çalıştırmak için Arduino UNO üzerindeki 3.3V pimini kullanmayın. ESP, 3.3V pininin sağlayabildiğinden daha fazla akım çeker. Arduino 50mA maksimum akım verebilirken ESP 250mA akım çeker. En az 500mA akım verebilen kaynak kullanın. Mesela LM1117 3.3V Voltage Regulatorü. ESP modüllerinde bazı kişilerin 420mA'ya kadar yükselen akım çekimlerini fark ettiğinden emin olmak için en az 500mA sağlayabilen bir şey kullanın.
  • RX ve TX pinleri takılı iken Arduino’ya kod atılamıyor, RX ve TX pinlerini çıkartıp kod attıktan sonra tekrar takmamız gerekmekte.

Reset pini Low konumda iken modüle reset atmakta, bu yüzden 10k lık bir direnç ile 5V’ a bağlanması olası sorunları en aza indirgemenize yardımcı olur. Son olarak da CH_PD pinine değinelim. Bu pin modülün hazır konuma geçmesi için anahtar görevi görür. Yani siz her şeyi bağlayıp bu pini boş bırakır yada Low konuma çekerseniz modül size cevap vermeyecektir. Size tavsiyem bu pini 10k ‘ lık bir direnç ile Arduino’ ya bağlamanızdır. Bu sayede pini modülün ne zaman çalışmaya başlayacağına karar verebilirsiniz.

Genel olarak, güç için bir VCC'niz ve ortak GND'niz var. Ayrıca data göndermek ve almak için TX ve RX’iniz de vardır. İki GPIO pininiz, sıfırlama pininiz ve bir CH_PD pininiz var. Bu kart, başka bir mikro denetleyiciye eklenecek şekilde tasarlanmıştır ve CH_PD pimini Yüksek'ten Düşük'e ayarlayarak açıp kapatabilme özelliği sunar. Benim durumumda, her zaman açık bırakacağım, bu yüzden sürekli yüksek tutuyorum.

ESP-12E (ESP8266) İle Arduino Uno Wifi Bağlantısı

GND Güç kaynağından topraklama
GPIO2 Dijital I / O programlanabilir, boşta kalabilir
GPIO0

Dijital G / Ç programlanabilir, BOOT modları için de kullanılır. Normal çalışma: 10kΩ direnç VEYA yüzer halde HIGH çekildi (hiçbir şeye bağlı değil) Yanıp sönüyor / yükleniyor: "FLASH" düğmesine basıldığında GND'ye bağlı.

GPIO 0 normal çalışma için hiçbir şeye bağlanmamalıdır, yazılımını flaş etmek veya eskiz yüklemek istediğinizde manuel olarak GND'ye bağlayın.

GPIO15 10kΩ dirençle LOW (GND'ye)
RX UART Alıcı kanalı
TX UART Verici kanal
EN veya CH_PD Açma / kapatma, doğrudan 3.3V'a (VCC) 10K direnç üzerinden çekilmelidir. Bu pini 10k ‘ lık bir direnç ile Arduino’ ya bağllarsanız modülün ne zaman çalışmaya başlayacağına karar verebilirsiniz.
REST

RST normalde 10kΩ'luk bir dirençle HIGH (VCC) çekildi, ancak “RESET” düğmesine basıldığında GND'ye bağlandı. VCC hattını söküp yeniden bağlayarak RST'nin yüksek çıkmasını ve ESP'yi açıp kapatmasını sağlar.

Boşta kalabilir.

VCC 3.3v güç kaynağı

Aşağıdaki gibi bir bağlantımız olmalı.

ESP-12E (ESP8266) İle Arduino Uno Wifi BağlantısıArduino önyükleyicisini atlamak için Uno'daki sıfırlama pimini GND'ye bağlayabilirsiniz. Bu, Uno’nun TX’ine ve RX’ine Modül ile bağlanmanıza olanak sağlar. Uno’nun USB kablosu Uno’nun TX ve RX’ine doğru şekilde bağlandığında, bu hatlara gönderilen sinyaller doğrudan modüle geçer. İşin püf noktası, bu durumda, Uno'daki TX'in modüldeki TX'e ve RX'in Uno'dan Modül'deki RX'e bağlanmasını istiyoruz. Burada yaptığımız tek şey, TX hattını modüle genişletmek. Geçiş, bu durumda, USB bağdaştırıcısında zaten yönetilmiş. Sadece bu köprü modelinde TX’ten TX’e ve RX’den RX’e kullanılır.

ESP-12E (ESP8266) İle Arduino Uno Wifi BağlantısıYukarıdaki Örnek Devrede:

VCC, breadboard pozitif hattına
GND'den breadboard negatifine
EN (veya CH_PD) 10kΩ dirençle (3.3V'a) HIGH
RST normalde 10kΩ'luk bir dirençle HIGH, ancak “RESET” düğmesine basıldığında GND'ye bağlandı
GPIO15, 10kΩ dirençle LOW (GND'ye)
GPIO0:

    Normal çalışma: 10kΩ direnç VEYA yüzer halde HIGH (hiçbir şeye bağlı değil)
    Yanıp sönüyor / yükleniyor: "FLASH" düğmesine basıldığında GND'ye bağlı

Düğmeleri kullanmak istemiyorsanız:

    RST HIGH olmalıdır; ESP’nin sıfırlanması gerektiğinde GND’ye elle bağlayın ve bağlantıyı kesin; alternatif olarak VCC hattını söküp yeniden bağlayarak RST'nin HIGH olmasını ve ESP'yi açıp kapatmasını sağlayın.
    GPIO0 normal çalışma için hiçbir şeye bağlanmamalıdır, firmware yazılımını flaş etmek veya kod yüklemek istediğinizde manuel olarak GND'ye bağlayın

ESP üzerindeki TX - Arduino'daki TX pin (pin # 1)

ESP üzerindeki RX'ten Arduino'daki RX pinine (pim # 0)

RESET pimi GND pimine bağlanmalıdır (bu, Arduino'da seri com başlatma işleminde boardı sıfırlamayı devre dışı bırakır)

Her şeyi doğru bağladıysanız, sıfırladığınızda / yeniden başlattığınızda en azından ESP üzerindeki mavi LED'i görmelisiniz, Bazen yanmada bilir.

 

Serial Monitör İle Kontrol

Arduino IDE ve Seri Monitor'ü açın

ESP-12E (ESP8266) İle Arduino Uno Wifi Bağlantısı
Şimdi, ESP8266'nızla Seri Monitörden Arduino UNO üzerinden iletişim kurmaya hazır olmalısınız.

Tüm kullandığım ESP'lerim, AT komut kitaplığıyla önceden yüklenmiş olarak geldi. Bazıları ESP'lerinin başlangıçta üzerlerinde hiçbir şey bulunmadığını ve bir firmware'i veya diğerini flaş etmek zorunda olduklarını söylüyorlar.

Arduino IDE'yi açın, Arduino UNO'nuzun bağlı olduğu Port'u seçin ve ardından Seri Monitörü açın.

Seri Monitörün sağ alt köşesinde, baud hızı olarak 115200'ü seçin. Ayrıca "Both NL & CR" seçili olmalıdır.

Önceki adımdaki tüm bağlantıların doğru olduğundan emin olun - burada temel işlem yapmayı hedefliyoruz, yanıp sönmüyoruz, bu nedenle GPIO0 HIGH çekilmeli veya bağlantısı kesilmiş (boş) halde bırakılmalıdır.

ESP modülünü sıfırlayın / yeniden başlatın. Her şey yolundaysa, seri monitörde ilk önce "hazır" yazan bazı mumbo-jumbo karakterleri görmelisiniz. Bunu gösteriyorsa, birkaç komutu test etmeye hazırsınız, bu yüzden bir sonraki adıma geçin.

Dikkat

  • Arduino RESET pimi GND pimine bağlanmalıdır (bu, Arduino'da seri com başlatma işleminde boardı sıfırlamayı devre dışı bırakır)
  • Serial Monitörü her arduinoyu açıp kapattıktan sonra yeniden açın kapatın.


AT Komutları

Şimdi seri monitörde birkaç komut yazmaya hazırız. İşte kullanılan en yaygın komutların bir listesi. Komutları uygularken hata mesajı alırsanız sebebi komutu yazarken veya kopyala yapıştır yaparken arada boşluklar oluşması. Boşlukları silip yeniden deneyin.

Komut Açıklama
AT Modülün düzgün bağlanıp bağlanmadığını ve çalışıp çalışmadığını kontrol ettikten sonra, modül bir onay ile cevap verecektir.
AT+RST Wifi modülünü sıfırlar. Programlanmadan önce veya sonra sıfırlamak iyi bir uygulamadır.
AT+GMR ESP8266'da yüklü ürün yazılımı sürümünü listeler.
AT+CWLAP Bölgede bulunan Erişim noktalarını (wifi ağları) ve sinyal güçlerini tespit eder. LAP Erişim Noktalarını Listele anlamına gelir

AT+CWMODE?

Modülün hangi wifi moduna ayarlanmış olduğunu söyleyecektir.
1, İSTASYON (diğer ağlara bağlanmak için kullanılır, sensör verilerini ölçmek ve bir web sitesine göndermek için kullandığınız şeydir),
2 Erişim Noktasıdır (kendi içinde bir wifi ağı)
3, hibrid bir İSTASYON ERİŞİM NOKTASI'dır.
AT+CWMODE=1 Wifi modunu ayarlar. Wifi modunu değiştirdikten sonra AT+RST ile sıfırlayın.
AT+CWJAP? Şu an bağlanılmış wifi ismi
AT+CWJAP="SSID","Password" İsmi ve şifresi verilen wifiye bağlan
AT+CWSAP= <ssid>,<pwd>,<chl>, <ecn> Parametreli bağlantı
AT+CWQAP Bağlantıyı kes
AT+CIPSTART=? Bağlantı yardımını görüntüler
(CIPMUX=0) AT+CIPSTART = <type>,<addr>,<port>
(CIPMUX=1) AT+CIPSTART= <id><type>,<addr>, <port>
TCP veya UDP Bağlantısı
AT+CIPMUX? TCP, UDP hangisi aktif olduğunu gösterir
AT+CIPMUX=0
AT+CIPMUX=1
0 ise sadece TCP, 1 ise TCP + UDP
AT+CWLIF  
AT+CIPSTATUS TCP Bağlantı durumu

(CIPMUX=0) AT+CIPSEND=<length>

(CIPMUX=1) AT+CIPSEND= <id>,<length>

Veri gönderme
AT+CIPCLOSE=<id> or AT+CIPCLOSE TCP, UDP Bağlantısını kapatma
AT+CIPSERVER= <mode>[,<port>] Server gibi çalıştırma
AT+CIPSTO?
AT+CIPSTO=<time>
Server timeout süresini ayarlama, ilk komut şu anki değeri öğrenmek için kullanılır.
AT+CIOBAUD?
Supported: 9600, 19200, 38400, 74880, 115200, 230400, 460800, 921600
Bağlantı hızı, ilk komut şu anki değeri öğrenmek için kullanılır.
AT+CIFSR Kendi Ip adresini kontrol etmek için kullanılır.
AT+CIUPDATE Bulut üzerinden Firmware güncellemesi
+CIPUPDATE:1 found server
+CIPUPDATE:2 connect server
+CIPUPDATE:3 got edition
+CIPUPDATE:4 start update
AT+CSYSWDTENABLE
AT+CSYSWDTDISABLE
Watchdog hata takipcisini açıp kapatma

ESP-12E (ESP8266) İle Arduino Uno Wifi Bağlantısı

ESP-12E (ESP8266) İle Arduino Uno Wifi Bağlantısı

AT komutları ile daha derinlemesine gitmek istiyorsanız, tüm olası AT talimatlarını içeren resmi belge için buraya tıklayabilirsiniz.

Kodlamayla Kontrol

Şimdi Arduino üzerinden komutlar vererek örneğimizi ilerletelim.

RX, TX pinleri bağlandıktan sonra asla yeni bir program yükleyemezsiniz. Programlarken bu bacakları sökmelisiniz.

Normalde arduinodaki Serial Monitör kısmını arduino komutlarımızın sonuçlarını görmek için kullanıyoruz ve bu bir hardwareserial olayı. Şimdi sofware serial kımını ESPmiz için kullanacağız. Sonuçta iki serial elemanımız olacak.

HardwareSerial Arduino içerisinde ADC gibi bir modüldür, SoftwareSerial ise yazılımsal oluşturulmuştur. Yazılımsal oluşturulmuş olmasının dezavantajı olarak yüksek veri transfer hızlarında çalışamaz. Arduino ‘ nun kendi içerisindeki SoftwareSerial kütüphanesi ile kullanılabilecek en fazla haberleşme hızı Arduino’ nun web sitesinde de belirtildiği üzere 38400 baud ‘ dır

Arduino donanımı, 0 ve 1 pinlerinde (ayrıca USB bağlantısıyla bilgisayara da gider) seri haberleşme için yerleşik desteğe sahiptir. Yerel seri destek, UART adı verilen bir donanım parçası (çipte yerleşik) aracılığıyla gerçekleşir. Bu donanım, Atmega yongasının 64 byte seri arabellekte yer alır ve diğer görevlerde çalışırken bile seri iletişim almasını sağlar.

SoftwareSerial kütüphanesi, işlevselliği çoğaltmak için yazılımı kullanarak Arduino'nun diğer dijital pinlerinde seri iletişime izin vermek için geliştirilmiştir (bu nedenle "SoftwareSerial" adı). 115200 bps hıza kadar çoklu yazılım seri portlarına sahip olmak mümkündür. Bir parametre, bu protokolü gerektiren cihazlar için ters sinyalleri mümkün kılar.

Arduino SDKsının 1.0 ve sonraki sürümlerde bulunan SoftwareSerial sürümü, Mikal Hart'ın NewSoftSerial kütüphanesine dayanmaktadır.

Öncelikle, modül için software serial'i dahil etmemiz gerekiyor. Kütüphaneyi ekleyeceğiz ve değişkeni tanımlayacağız.

#include <SoftwareSerial.h>
#define RX 10
#define TX 11
SoftwareSerial esp8266(RX,TX);

 

Kodlamayla kontrol ve Serial Monitörle kontrol arasındaki büyük fark ESP8266dan çıkan Rx'in Arduinonun Tx'ine, ESP8266dan çıkan Tx'in Arduinonun Rx'ine bağlanması gerekliliğidir.

Bundan sonra “esp8266” üzerinden Modül ile konuşacağız ve “Serial” (esp8266) üzerinden IDE ile konuşacağız.

Serial Monitör için bağlantıyı 9600 baud oranına, esp8266 bağlantısını da 115200 baud hızına ayarladığımızı unutmayın. IDE Seri Monitörünüzü doğru baud'a ayarladığınızdan ve esp8266 değerini daha önce onayladığınız modülün baud hızına ayarlayın.

Daha fazlasını ekleyelim ve daha önce yaptığımız komutları ileterek çalışıp çalışmadığını görelim.  

#include <stdio.h>
#include <SoftwareSerial.h>

namespace {

const int EspRx = 2;
const int EspTx = 3;
String WifiAdi = "dulkadiroglu";
String Sifre = "12345678";
int countTrueCommand;
int countTimeCommand;
boolean found = false;
SoftwareSerial esp8266(EspRx, EspTx); //arduino ile capraz baglanmali

void sendCommand(String command, int maxTime, String readReplay2) {

int str_len = readReplay2.length() + 1;
char readReplay[str_len];
readReplay2.toCharArray(readReplay, str_len);

  /*Serial.print(countTrueCommand);
  Serial.print(". Komut: ");*/

  Serial.print(command);
  Serial.print(" ");
  while (countTimeCommand < (maxTime * 1)) {

    esp8266.println(command);//at+cipsend
    if (esp8266.find(readReplay)) { //Beklenen cevap geldiyse
      found = true;
      break;
    }
    countTimeCommand++;
  }
 
  if (found == true){
    Serial.println("[Komut Başarılı]");
    countTrueCommand++;
    countTimeCommand = 0;

  } else {

    Serial.println("[Komut BAŞARISIZ]");
    countTrueCommand = 0;
    countTimeCommand = 0;
  }
  found = false;
}

void WifiReset() {
  /*esp8266.println("AT+RST"); //sendCommand'a Alternatif yöntem
  delay(1000);
  if (esp8266.find((char*)"OK")) {
    //if (esp8266.find("OK")) { //Hata veren kullanım
    Serial.println("Module Resetlendi");
  }
  else {
    Serial.println("Module RESETLENMEDİ");
  }*/

  sendCommand("AT+RST", 5, "OK");
}

void printResponse() { //sendCommand'a Alternatif yöntem
  while (esp8266.available()) {
    Serial.println(esp8266.readStringUntil('n'));
  }
}

void WifiBaglan() {
 
  /*esp8266.println("AT+CWMODE=1");
  delay(1000);
  printResponse();
  esp8266.println("AT+CWJAP="" + WifiAdi + "","" + Sifre + """);
  delay(1000);
  printResponse();*/


  sendCommand("AT+CWMODE=1", 5, "OK");
  sendCommand("AT+CWJAP="" + WifiAdi + "","" + Sifre + """, 20, "OK");
}
}

void setup() {
  pinMode(Musluk, OUTPUT);

  Serial.begin(9600);
  esp8266.begin(115200);

  //SaatiKur(); //internetten update eger saat yanlissa
  rtc.writeProtect(false);
  rtc.halt(false);

  WifiReset();
  WifiBaglan();

}

void loop() {
  delay(1000);
  //printTime();

  Alarm();

  //WifiKontrol();

  //esp8266.println("AT+CIPMUX=1");
  //delay(1000);
  //printResponse();
}

 

Kaynaklar

 

 

 

 

Yorumunuzu Ekleyin
ESP-12E (ESP8266) İle Arduino Uno Wifi Bağlantısı Yorumları +1 Yorum
  • Cemal
    1
    Cemal
    Merhaba

    Esp8266 modülümün içerisinde yüklü olan kod var bu modülü kendi wifi si ne bağlanarak kontrol sağlıyorum modülü ev ağına bağlayıp uzaktanda kontrol edebilmek istiyorum bunu yaptığımda modül içerisinde bulunan kodlama silinirmi
    22 Ocak 2021 17:17:29, Cuma


Yükleniyor...
    Yükleniyor...