Deneme amaçlı "Arduino Due" ye "uno" da stabil olarak kullandığım kodları yükledim. Arduino Due, nodemcu dan veri alamıyor.
iki kartta 3.3v olduğundan stabil çalışır diye düşünüyordum ama 5v Uno ile uyumlu çalışan nodemcu 3.3v due ile çalışmıyor. Tabi burada asıl çalışmayan due. Çünkü nodemcu'nun veri gönderdiğini test edip onaylamıştık.
 
Benim kodlar fakir. Öyle ssl bağlantı filan hak getire. Ben şimdilik lokalde olduğum için direk tabletin ip'sini yazdım geçtim. :D
SSL kullanmak için herkese açık olması gerekmiyor. Benim sunucu da ağ içinde. Bunlar da benim kodlar.
C++:
/*
TuşlaGelsin v1.0

Bu yazılım, NODEMCU v0.9 üzerinde ESP8266 ile 4x4 tuş takımı ve 4x20 I2C LCD ekran kullanılarak geliştirilmiştir.
# tuşu enter gibi davranır. * tuşu ise hatalı girişlere karşı girilen değeri sıfırlar.
Dijital pinleri korumak ve terminale gelen ters soru işaretini kaybetmek için PCF8574 gibi bir entegre ile tuş takımı için de I2C kullanılabilir.
Not: Tuş takımı için D8'pini kullanılamıyor. Fiziksel olarak "10k PULL_DOWN" direncine sahip.
*/
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>

/* ******************** Dikkat! bu tanımları özelleştir! ******************** */
    // WiFi ayarları
    const char* WiFi_Adi="SSID";
    const char* WiFi_Sifre = "Şifre";
    // Verinin gönderileceği SSL URL adresi
    String url = "https://www.google.com/esp_post.php?siparis=";
    // true seri port ile heberleşir, false kapatır.
    bool konsol = false;
    // LCD ekran bilgileri
    uint8_t lcd_adres = 0x3F;
    uint8_t lcd_sutun = 20;
    uint8_t lcd_satir = 4;
    // Keypad ayarları
    const byte n_rows = 4;
    const byte n_cols = 4;
    char keys[n_rows][n_cols] = {    {'1', '2', '3', 'A'},
                                    {'4', '5', '6', 'B'},
                                    {'7', '8', '9', 'C'},
                                    {'*', '0', '#', 'D'}};
    byte rowPins[n_rows] = {D0, D3, D4, D5};
    byte colPins[n_cols] = {D6, D7, D9, D10};

/* ******************** Dikkat! Bu değişkenler kodun iç yapısı için kullanılır. Değiştirmeyin! ******************** */
    int ToplamSayi = 0;
    int NoktaSay = 0;

LiquidCrystal_I2C lcd(lcd_adres, lcd_sutun, lcd_satir);
Keypad TusTakimi = Keypad(makeKeymap(keys), rowPins, colPins, n_rows, n_cols);

void setup() {
    pinMode(D0, INPUT_PULLUP);
    pinMode(D3, INPUT_PULLUP);
    pinMode(D4, INPUT_PULLUP);
    pinMode(D5, INPUT_PULLUP);
    pinMode(D6, INPUT_PULLUP);
    pinMode(D7, INPUT_PULLUP);
    pinMode(D9, INPUT_PULLUP);
    pinMode(D10, INPUT_PULLUP);
    delay(500);
    if (konsol) {
        Serial.begin(115200);
        delay(500);
        Serial.println(F("* * * Tuşla Gelsin v1.0 * * *"));
    }
    lcd.init();
    lcd.backlight();
    lcd.setCursor(1,0);
    lcd.print("Tusla Gelsin v 1.0");
    WiFi.mode(WIFI_STA);
    WiFi.begin(WiFi_Adi,WiFi_Sifre);
    lcd.setCursor(0,1);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        if (konsol) {
            Serial.print(".");
        }
        if (NoktaSay++ < 20) {
            lcd.print(".");
        } else {
            SatirTemizle(1);
            NoktaSay = 0;
        }
    }
    if (konsol) {
        Serial.println(F("WiFi'ya bağlandı, ESP hazır!"));
        Serial.print("IP Adresi: ");
        Serial.println(WiFi.localIP());
    }
    SatirTemizle(1);
    lcd.print(" IP : ");
    lcd.setCursor(6,1);
    lcd.print(WiFi.localIP());
    lcd.setCursor(0,2);
    lcd.print("Hazir komut bekliyor");
    lcd.setCursor(0,3);
    lcd.print("Gravite, 2020-09-09");
}

void loop() {
    char tus_degeri = TusTakimi.getKey();
    if ( isdigit(tus_degeri) ) {
        uint8_t sayi = tus_degeri - '0';
        ToplamSayi = ((ToplamSayi * 10) + sayi);
        if (konsol) {
            //Serial.println(tus_degeri);
            Serial.print( "Tuşlanan sayı " );
            Serial.println(ToplamSayi);
        }
        SatirTemizle(3);
        lcd.print(ToplamSayi);
    } else if ( tus_degeri == '#' ) {
// # tuşu enter gibi davranır
        SatirTemizle(3);
        lcd.print("Siparis isteniyor.");
        if (konsol) {
            Serial.print(ToplamSayi);
            Serial.println( " numaralı sipariş istendi.\n" );
        }
        int urlEk = ToplamSayi;
        String TamUrl = url + urlEk;
        SiparisVer(TamUrl);
        ToplamSayi = 0;
    } else if ( tus_degeri == '*' ) {
// * tuşu yanlış girişi sıfırlar....
        ToplamSayi = 0;
        if (konsol) {
            Serial.print("ToplamSayi ");
            Serial.print(ToplamSayi);
            Serial.println(" sıfırlandı.\n");
        }
        SatirTemizle(3);
        lcd.print("sayi iptal edildi");
    } else if ( tus_degeri == 'A' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("A tuşuna basıldı");
            }
        SatirTemizle(3);
        lcd.print("A");
    } else if ( tus_degeri == 'B' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("B tuşuna basıldı");
            }
        SatirTemizle(3);
        lcd.print("B");
    } else if ( tus_degeri == 'C' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("C tuşuna basıldı");
        }
        SatirTemizle(3);
        lcd.print("C");
    } else if ( tus_degeri == 'D' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("D tuşuna basıldı");
        }
        SatirTemizle(3);
        lcd.print("D");
    }
}

/*
* @brief    Bu fonksiyon belirtilen url adresine GET değeri taşır ve apache koduna göre sonuçları ekran yazdırır.
*/
void SiparisVer(String TamUrl) {
    std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
    client->setInsecure();
    HTTPClient https;
/*
    if (konsol) {
        Serial.println(TamUrl);
    }
*/
    if (https.begin(*client, TamUrl )) {
        // HTTPS
        int httpKod = https.GET();
        if (httpKod > 0) {
            if (konsol) {
                Serial.printf("[HTTPS] Header Kod: %d\n", httpKod);
            }
            if (httpKod == HTTP_CODE_OK) {
                String SayfaDonus = https.getString();
                if (konsol) {
                    Serial.print(String("[HTTPS] Sayfanın yaptığı dönüş: ") + SayfaDonus);
                }
                SatirTemizle(3);
                lcd.print(SayfaDonus);
            } else {
                SatirTemizle(3);
                lcd.print("Sayfa cevap vermiyor");
            }
        } else {
            if (konsol) {
                Serial.printf("[HTTPS] GET... uyarı, hata: %s\n\r", https.errorToString(httpKod).c_str());
            }
            SatirTemizle(3);
            lcd.print("Hata:");
            lcd.setCursor(6,3);
            lcd.print(httpKod);
        }
        https.end();
    } else {
        if (konsol) {
            Serial.printf("[HTTPS] Bağlantı Hatası!\n\r");
        }
        SatirTemizle(3);
        lcd.print("Baglanti Hatasi!");
    }
}

/*
* @brief    Bu fonksiyon LCD ekranda belirtilen satırı temizler ve satır başına döner.
*/
void SatirTemizle(int satir) {
    lcd.setCursor(0,satir);
    lcd.print("                    ");
    lcd.setCursor(0,satir);
}
Tüm hakkı saklıdır.
 
Son düzenleme:
Bu da php tarafı, basitçe gelen numaraları metin dosyasına yazar.

PHP:
<?php
    $metin_dosyasi = __DIR__.'/post.txt';
    if (isset($_GET["siparis"])) {
        $siparis = preg_replace('/\D/', '', $_GET["siparis"]); // Sadece sayılar kabul ediliyor!
        // İçeriğini almak için dosyayı açalım
        $icerik = file_get_contents($metin_dosyasi);
        // İçeriğe yeni bir kişi ekleyelim
        $icerik .= $siparis;
        $icerik .= "\n";
        // İçeriği dosyaya yazalım
        file_put_contents($metin_dosyasi, $icerik);
        echo $siparis . ' eklendi';
    } else {
        echo 'Bu istegi bilmiyorum';
    }
?>
 
Benim bunları anlamam 1 ayı mı alır :D
Şimdi ben bitane esp alıp unoya taksam ve gerekli ayarlamaları yapıp direk bu kodu kullansam yek seferde halleder miyim işi?
Bu sadece işin yeni bir macera kısmı.

Şimdi benim tarafımdaki işi biraz daha kolaylaştırsak. Sen bana nodemcu ya get ile nasıl veri çekeceğimi söylesen nasıl olur? :D
 
Şimdi ben bitane esp alıp unoya taksam ve gerekli ayarlamaları yapıp direk bu kodu kullansam yek seferde halleder miyim işi?
ESP aldım ama hiç uno'ya bağlayıp kullanmak kurcalamak gibi bir vaktim olmadı. Bu yüzden emin değilim ama ufak değişiklikle çalışır diye düşünüyorum.
Şimdi benim tarafımdaki işi biraz daha kolaylaştırsak. Sen bana nodemcu ya get ile nasıl veri çekeceğimi söylesen nasıl olur? :D
Akışı takip etsen çok kolay bulursun:
String SayfaDonus = https.getString();
 
ESP aldım ama hiç uno'ya bağlayıp kullanmak kurcalamak gibi bir vaktim olmadı. Bu yüzden emin değilim ama ufak değişiklikle çalışır diye düşünüyorum.
Esp yoksa neyle kullanıyorsun bu kodları? Raspberry mi?
 
Kod:
    byte rowPins[n_rows] = {D0, D3, D4, D5};
    byte colPins[n_cols] = {D6, D7, D9, D10};
@uyesercan
D1,D2 pinleri sanırım i2c lcd için ayırdın. Bu gün bende i2c alıp tek nodemcu kullanmayı deneyeceğim. Bu i2c pinleri tam olarak söyler misin? Birde D9 ve D10 pinleri hangi bacaklara denk geliyor?
 
D1 ve D2 I2C için kullanılıyor. Modüller :

LCD için I2C

keypad için I2C


1600090409062.png


Pin Names on NodeMCU Development KitESP8266 Internal GPIO Pin number
D0GPIO16
D1GPIO5
D2GPIO4
D3GPIO0
D4GPIO2
D5GPIO14
D6GPIO12
D7GPIO13
D8GPIO15
D9/RXGPIO3
D10/TXGPIO1
D11/SD2GPIO9
D12/SD3GPIO10


kaynak
 
D1 ve D2 I2C için kullanılıyor. Modüller :

LCD için I2C

keypad için I2C


5397 eklentisine bak

Pin Names on NodeMCU Development KitESP8266 Internal GPIO Pin number
D0GPIO16
D1GPIO5
D2GPIO4
D3GPIO0
D4GPIO2
D5GPIO14
D6GPIO12
D7GPIO13
D8GPIO15
D9/RXGPIO3
D10/TXGPIO1
D11/SD2GPIO9
D12/SD3GPIO10


kaynak
Senin keypad de i2c gömülü mü yoksa sonradan mı taktın? Bendekinde gömülü değil. i2c alıp onada takayım dedim @taydin abi olmaz dedi.
 
Üzerinde takılı geldi. LCD için modül olarak alırsan 6 tl birleşik alırsan 20 TL... ikisine de kargo parası ödüyorsun. @taydin neden öyle söyledi bilmiyorum ama söylediğine göre vardı bilmediğimiz bir detayı. Ben olur diye biliyorum.

O zaman bence I2C birleşik LCD al, yanın da keypad için PCF8574 modül al. Toplamda 30TL'ye D1, D2 hariç tüm pinler sana kalır.
 
Bu arada aşağıdaki ürünü (PCF8574) alırsan sadece keypad için kullabilirsin. LCD için olmaz. Bunu mu kast etti acaba. LCD farklı çünkü.

 
Üzerinde takılı geldi. LCD için modül olarak alırsan 6 tl birleşik alırsan 20 TL... ikisine de kargo parası ödüyorsun. @taydin neden öyle söyledi bilmiyorum ama söylediğine göre vardı bilmediğimiz bir detayı. Ben olur diye biliyorum.

O zaman bence I2C birleşik LCD al, yanın da keypad için PCF8574 modül al. Toplamda 30TL'ye D1, D2 hariç tüm pinler sana kalır.
Taydin abi lcd için demedi. Keypad için dedi i2c olmaz diye. Lcd için aldım zaten i2c. Bu keypad için pfc8574 hazır modül mü var yoksa entegre alıp benim mi yapmam lazım? Linki filan varsa verir misin? Alayım direk.
 
Bu arada aşağıdaki ürünü (PCF8574) alırsan sadece keypad için kullabilirsin. LCD için olmaz. Bunu mu kast etti acaba. LCD farklı çünkü.

Tamam şimdi oturdu taşlar yerine.
 
Keypad'i doğrudan I2C ye dönüştüren bir entegre olan modül diye anladım ben. Yani I2C ile doğrudan tuş bilgisi okuma diye anladım. Sercan'ın linkini verdiği IO expander denen bir modül. Yani belli sayida GPIO nun durumunu I2C komutları ile okuyorsun. Statik veri barındıran pinleri okumak için kullanışlı olur ama keypad için çok verimli olmaz diye düşünüyorum. Zaten taramalı kullanıyorsun, her bir pin için bir I2C döngüsü yapman gerekecek. Bir de sonradan debounce özelliği eklersen tarama sayısı katlanacak. Tuş tepki süresi iyi olmaz diye düşünüyorum.

LCD'yi I2C ile sürersen, keypad'leri doğrudan GPIO ile halledemiyor musun? Bu mümkün ise bu daha verimli bir çözüm.
 
Keypad'i doğrudan I2C ye dönüştüren bir entegre olan modül diye anladım ben. Yani I2C ile doğrudan tuş bilgisi okuma diye anladım. Sercan'ın linkini verdiği IO expander denen bir modül. Yani belli sayida GPIO nun durumunu I2C komutları ile okuyorsun. Statik veri barındıran pinleri okumak için kullanışlı olur ama keypad için çok verimli olmaz diye düşünüyorum. Zaten taramalı kullanıyorsun, her bir pin için bir I2C döngüsü yapman gerekecek. Bir de sonradan debounce özelliği eklersen tarama sayısı katlanacak. Tuş tepki süresi iyi olmaz diye düşünüyorum.

LCD'yi I2C ile sürersen, keypad'leri doğrudan GPIO ile halledemiyor musun? Bu mümkün ise bu daha verimli bir çözüm.
Tost makinesini topluyum pinleri sayacağım abi. Kurtarırsa uğraşmam. Kurtarmazsa PCF8574 alıcam mecburen.
 
LCD'yi I2C ile sürersen, keypad'leri doğrudan GPIO ile halledemiyor musun? Bu mümkün ise bu daha verimli bir çözüm.
Şu an ben öyle yapıyorum. Aslında keypad I2C olayını hem teknik hem de tecrübe bakımından bilmiyorum. Dijital pinler sınırlı ve başka amaçlar için kullanılanlarla beraber seri haberleşme sapıttığı için araştırdığımda aşağıdaki sitede gördüm. Benim kodun sıkıntısı şu D9 ve D10 pinlerini kullandığımda mikroişlemci seri monitöre ters soru işareti gönderiyor. Diğer türlü de ekranla birlikte keypad için dijital çıkışlar yeterli gelmiyor.

I2C-KEYPAD-PIN-CONFIG-01 (2).png
 
Burada başka biri daha LCD ile birlikte keypad kullanmış. Videoya bakılırsa herhangi bir sorun görünmüyor. 7:36 sn de çalışması gözlemlenebilir.

 
@uyesercan şu üçünün kütüphanedeki tam isimlerini öğrenebilir miyim? Bulamadım bir türlü

Kod:
#include <Arduino.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
 

Forum istatistikleri

Konular
6,953
Mesajlar
118,768
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top