DENEYAP KART ESP-32

Ahmet

S38>S85
Katılım
31 Mayıs 2021
Mesajlar
6,052
Elime geçen 'Deneyap Kart ESP-32 WROVER-E' ile deneyler yapmaya başladım ilk deneyimiz kart üstünde dahili olarak gelen RGB ledi kontrol etmek.

Kartın 'ArduinoIDE' ye nası kuracağınızı bilmiyorsanız -->buradaki<-- konudan bulabilirsiniz.

İlk deneyimizde dahili RGB ledi kontrol ediyoruz.

RGB Ledin bağlı olduğu pinler şu şekilde;

YESIL D2
KIRMIZI D3
MAVI D10


Bu ledler ters bağlanmış durumda yani LOW yapınca ledi yakıyoruz HIGH yapınca söndürüyoruz.
Yaptığımız basit animasyon programı sırayla renkleri gezip en son beyaz yani hepsini yakıp başa dönüyor.

Yaptığım deneyleri bu konu altında paylaşmaya devam edeceğim.
Konu çok uzarsa her deneyin bulunduğu mesaja buradan gidebilirisiniz.

ZAMAN KESMESI DENEYI
DAHILI IMU SENSORU KULLANIMI
WIFI ILE LED KONTROL
CHIP-ID OKUMAK VE PROGRAMI IZOLE ETMEK
MAC ADRESI OKUMAK

KART PINOUT;
DeneyapKart_ExtendedPinOutEng_mpv1.0.png


RGB DENEYI;
RGB DENEYAP:
#define GREEN D2//YEŞİL
#define RED   D3//KIRMIZI
#define BLUE  D10//MAVI


void setup() {

  //LED PINLERI ÇIKIŞ
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);

}

void loop() {
  //KIRMIZI YANIYOR
  digitalWrite(RED,   LOW);
  digitalWrite(BLUE,  HIGH);
  digitalWrite(GREEN, HIGH);

  delay(350);
  //MAVI YANIYOR
  digitalWrite(RED,   HIGH);
  digitalWrite(BLUE,  LOW);
  digitalWrite(GREEN, HIGH);

  delay(350);
//YEŞİL YANIYOR
  digitalWrite(RED,   HIGH);
  digitalWrite(BLUE,  HIGH);
  digitalWrite(GREEN, LOW);

  delay(350);
//BEYAZ YANIYOR
  digitalWrite(RED,   LOW);
  digitalWrite(BLUE,  LOW);
  digitalWrite(GREEN, LOW);

  delay(350);

}
 
Son düzenleme:
Ikinci uygulamamız olarak zaman kesmesini inceleyeceğiz.

Bu uygulamada led blink yaptırıyoruz ama bu blink beklemelerinde işlemci duraksamıyor çalışmaya devam ediyor.

Esp32 içinde 4 tane 64 bit timer bulunuyor.
Biz bunlarda 0 numaralı olanı kullanıyoruz.
80 scala değerinde
1 saniye bekleme oluşturacağız.

blink for timer:
#define LED D3
hw_timer_t *timer = NULL;


void IRAM_ATTR onTimer() {
  digitalWrite(LED, !digitalRead(LED));
}

void setup(){
  pinMode(LED, OUTPUT);
  timer = timerBegin(0, 80, true);//TIMER 0 AKTIF ET VE 80 SCALA KULLAN
  timerAttachInterrupt(timer, &onTimer, true);//AKTIF ETTIGIMIZ TIMER'I KULLAN VE KESECEGI VODIDI GOSTER
  timerAlarmWrite(timer, 1000000, true);//TIMER'IN KESECEGI SURE 1 SANIYE
  timerAlarmEnable(timer);//AYARLANAN DUZENDE TIMER'I BASLAT
}

void loop(){
 
}
 
Bu günkü deneyimizde kartın üstündeki IMU sensöründen GYRO bilgilerini okuyacağız.
bununla ileride güzel projeler yapacağız şimdi bi temel atalım.

IMU:
#include "lsm6dsm.h"                               


LSM6DSM IMU;                                       

void setup() {
    Serial.begin(115200);
    IMU.begin();
    
}
void loop() {
    Serial.println("\nGyro degerleri");
    Serial.print("X ekseni: ");                     // X-eksen gyro verisi okunması
    Serial.print(IMU.readFloatGyroX());
    Serial.print("\tY ekseni: ");                   // Y-eksen gyro verisi okunması
    Serial.print(IMU.readFloatGyroY());
    Serial.print("\tZ ekseni: ");                   // Z-eksen gyro verisi okunması
    Serial.println(IMU.readFloatGyroZ());
    delay(350);
}
 
Bu günkü deneyimizde artık ESP32'nin asıl çalışma sahasına deney yapıyoruz deneyimiz;
Esp32'yi kablosuz bir ağa bağlayıp bu ağ üzerinden komut verip ledi kontrol edeceğiz.

Wifi adı ve şifresini doğru şekilde yazıp yükledikten sonra 115200 baud değerinde seri monitörümüzü başlatıyoruz.
Birkaç saniye sonra karşımıza 192.168. diye devam eden bir IP adresi çıkacak bu IP adresini tarayıcımızın adres çubuğuna yazıyoruz ve led'i kontrol edeceğimiz ekran geliyor.

Eğer port yönlendirme yapmıyorsanız esp32 ile aynı ağa bağlı olmak zorundasınız.

ESP32 WIFI:
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>

const char *ssid = "WIFI ADI";                                       
const char *password = "WIFI SIFRESI";

WiFiServer server(80);

void setup() {
  pinMode(LEDB, OUTPUT);                                                 
  digitalWrite(LEDB, HIGH); 

  Serial.begin(115200);                                                       

  WiFi.softAP(ssid, password);                                           
  IPAddress myIP = WiFi.softAPIP();                                                                 
  Serial.println(myIP);//TARAYICIYA YAZIP BAGLANACAGINIZ IP ADRESI
  server.begin();
  Serial.println("Server baslatildi");
}

void loop() {
  WiFiClient client = server.available();

  if(client)
  {                                                   
    String currentLine = "";                                             
    while(client.connected())
    {                     
      if(client.available())                                             
      {                       
        char c = client.read();                                                                                           
        if (c == '\n')                                                   
        {                                                                 
          if(currentLine.length() == 0)
          {                                                               
            client.println("HTTP/1.1 200 OK");                           
            client.println("Content-type:text/html");                     
            client.println();                                             
            
            client.print("Ledi <a href=\"/H\">YAK</a> <br>");             
            client.print("Ledi <a href=\"/L\">SONDUR</a> <br>");         
            client.println();                                           
            
            break;
          }
          else                                                           
          {   
            currentLine = "";
          }
        }
        else if(c != '\r')                                               
        {   
          currentLine += c;                                             
        }

        
        if(currentLine.endsWith("GET /H"))                               
        {
          digitalWrite(LEDB, LOW);                                       
        }
        if(currentLine.endsWith("GET /L"))
        {
          digitalWrite(LEDB, HIGH);                                       
        }
      }
    }
    
    client.stop();

  }
}
 
Bu deneyimizde kod çalınması olayları ile karşılaşmanın büyük ölçüde önüne geçen bir deney yapacağız.
Her ESP32'nin içindeki kendine özgü ChipID'si bulunuyor bu her esp32'de farklı(normal şartlarda)
Kendi chip ID'mizi öğrenebileceğimiz ve kod emniyetini sağlayan deneyi aşşağıda paylaştım.

Seri monitörü 115200 baud değerinde başlatıp birkaç saniye bekliyoruz ve ekrana elimizdeki esp32'nin ChipID'si geliyor.
ChipID'niz programdakiyle eşleşmediği için blink yapmadığını göreceksiniz eğer if ile izole edilmiş kısıma kendi ChipID'nizi yazarsanız blink yapmaya başlayacaktır.

ESP32-CHIPID:
/*-------ESP32---CHIP-ID-------
 *-PROGRAMIN-CALINMASI-DURUMUNDA %100 GUVENLIK-
 *
 */

uint32_t chipId = 0;
#define LED D2

void setup() {
    for(int i=0; i<17; i=i+8) {
    chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
  }
  pinMode(LED, OUTPUT);
  Serial.begin(115200);
 
}

void loop() {
 
  if(chipId == 14182133){
    digitalWrite(LED, HIGH);
    delay(350);
    digitalWrite(LED, LOW);
    delay(350);
  }
 
  else{
    Serial.print("CHIP ID:");
    Serial.println(chipId);
    while(1);
  }
 
}
 
Bu günkü deneyimizde ESP-NOW için bir temel atıyoruz.
ESP-NOW Kablosuz haberleşmesinde ESP'lerin birbini bulması el sıkışması için MAC adreslerini bilmemiz gerekiyor.

Bu deneyimizde elimizdeki ESP kartının MAC adresini öğreneceğimiz bir çalışma yapacağız.
Seri monitörümüzü 115200 baud değerinde başlatıyoruz ekrana 3 saniyede 1 kez olacak şekilde esp32'nin mac adresi geliyor.

ESP32-MAC:
#include <WiFi.h>

void setup(){
  Serial.begin(115200);;
}
 
void loop(){
  Serial.print("MAC adresi:  ");
  Serial.println(WiFi.macAddress());
  delay(3000);
}
 
Yalnız Pi Pico da şöyle bir durum var: Program çip üzerinde değil NOR flaşta saklanıyor. Herhangi bir şekilde RP2040 değiştirilince yeni RP2040 hiçbir yükleme ayar yapmadan önceki Pi Pico'ya yüklü kodları çalıştırıyor. Bu da kodların RP2040'a değil NOR Flasha yüklü olduğunu gösteriyor.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,787
Mesajlar
98,998
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top