- Katılım
- 27 Şubat 2019
- Mesajlar
- 12,203
Merhabalar,
Çoğumuz evimizin eksiklerini almak üzere elimize liste tutuşturularak markete gönderiliriz. Bir elde liste diğer elde alış-veriş sepeti dolanır dururuz markette.
Tabi çoğu zaman yanımız da kalem de taşımadığımızdan listede ne aldık? ne almadık? Hangi ürün nerede? gibi problemler ile boğuşabilmekteyiz.
Bu projemizde buzdolabımızın üzerine bir cihaz yaptık. Bu cihaz ile NodeMcu kullanarak evdeki wi-fi'a bağlanıyoruz ve önceden oluşturduğumuz veritabanımıza ürünleri yazdırıyoruz. Sonra da markette iken cep telefonumuzdan veritabanına bağlanarak bu ürünleri listeliyoruz.
Veritabanının yanısıra birde web sitesi yaparak aynı ürünlerin tablet, telefon, bilgisayar gibi cihazlardan da veritabanına eklenebilmesini sağladık.
Başlarda "Evlist" olarak düşündüğüm projenin ismini, projeye yoğun katkısından dolayı @uyesercan 'ın önerdiği "Tuşla Gelsin" ismini verdim. NodeMcu tarafındaki kodların çok büyük çoğunluğunu kendisi yazmıştır. Benim sadece kendi ayarlarıma göre ufak tefek değişiklikler yapmam gerekti.
Sistemi halihazırda kullanmaya başladığım için sizlerin ulaşımına kapatmak durumundayım. Çünkü kişisel kullanıma göre tasarlandı.
Ancak ileri de hem web sitesini çoklu kullanıcıya açacağım hem de raspberry kullanarak ürünleri ses komutu ile girmek üzere çalışmalar yapacağım.
EDİT: Siteyi güncelledim. Dosyayı evlist v2 olarak ekledim.
Admin için Kullanıcı adı: admin Şifre: admin
Normal Kullanıcı için Kullanıcı adı: Mekatronik Şifre: 1234
Tanıtım Videosu;
Kullanılan Malzemeler;
3D Printerdan Kasa Basıldı,
NodeMcu
4x4 Keypad
16x2 Lcd Ekran
i2c Seri Haberleşme Modülü
PCF8574 Seri Haberleşme Modülü
Jumper Kablo
Vida, Somun
NodeMcu Kodları;
Çoğumuz evimizin eksiklerini almak üzere elimize liste tutuşturularak markete gönderiliriz. Bir elde liste diğer elde alış-veriş sepeti dolanır dururuz markette.
Tabi çoğu zaman yanımız da kalem de taşımadığımızdan listede ne aldık? ne almadık? Hangi ürün nerede? gibi problemler ile boğuşabilmekteyiz.
Bu projemizde buzdolabımızın üzerine bir cihaz yaptık. Bu cihaz ile NodeMcu kullanarak evdeki wi-fi'a bağlanıyoruz ve önceden oluşturduğumuz veritabanımıza ürünleri yazdırıyoruz. Sonra da markette iken cep telefonumuzdan veritabanına bağlanarak bu ürünleri listeliyoruz.
Veritabanının yanısıra birde web sitesi yaparak aynı ürünlerin tablet, telefon, bilgisayar gibi cihazlardan da veritabanına eklenebilmesini sağladık.
Başlarda "Evlist" olarak düşündüğüm projenin ismini, projeye yoğun katkısından dolayı @uyesercan 'ın önerdiği "Tuşla Gelsin" ismini verdim. NodeMcu tarafındaki kodların çok büyük çoğunluğunu kendisi yazmıştır. Benim sadece kendi ayarlarıma göre ufak tefek değişiklikler yapmam gerekti.
Sistemi halihazırda kullanmaya başladığım için sizlerin ulaşımına kapatmak durumundayım. Çünkü kişisel kullanıma göre tasarlandı.
Ancak ileri de hem web sitesini çoklu kullanıcıya açacağım hem de raspberry kullanarak ürünleri ses komutu ile girmek üzere çalışmalar yapacağım.
EDİT: Siteyi güncelledim. Dosyayı evlist v2 olarak ekledim.
Admin için Kullanıcı adı: admin Şifre: admin
Normal Kullanıcı için Kullanıcı adı: Mekatronik Şifre: 1234
Tanıtım Videosu;
Kullanılan Malzemeler;
3D Printerdan Kasa Basıldı,
NodeMcu
4x4 Keypad
16x2 Lcd Ekran
i2c Seri Haberleşme Modülü
PCF8574 Seri Haberleşme Modülü
Jumper Kablo
Vida, Somun
NodeMcu Kodları;
Kod:
// Sercan & Gökhan
// https://mekatronik.org/forum
#include <ESP8266WiFi.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266HTTPClient.h>
#include "Wire.h"
#include "I2CKeyPad.h"
// WiFi ayarları
const char* WiFi_Adi="TPLINK_WIFI";
const char* WiFi_Sifre = "password";
// Verinin gönderileceği SSL URL adresi
String url_ekle = "http://webadresi.com/int/keypad.php?siparis=";
String url_sil = "http://webadresi.com/int/keypad.php?id=";
// true seri port ile heberleşir, false kapatır.
bool konsol = false;
// LCD ekran bilgileri
LiquidCrystal_I2C lcd(0x27,16,2);
const uint8_t KEYPAD_ADDRESS = 0x20;
I2CKeyPad keyPad;
int ToplamSayi = 0;
int NoktaSay = 0;
void setup()
{
pinMode(D0, OUTPUT);
pinMode(D8, OUTPUT);
digitalWrite(D8, LOW);
digitalWrite(D0, HIGH);
delay(300);
Serial.begin(115200);
Wire.begin();
if (keyPad.begin(KEYPAD_ADDRESS) == false)
{
Serial.println("\nERROR: cannot communicate to keypad.\nPlease reboot.\n");
while(1);
}
if (konsol) {
Serial.begin(115200);
delay(500);
Serial.println(F("Tusla Gelsin v1"));
}
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Tusla Gelsin v1");
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) {
SatirTemizle(0);
lcd.setCursor(0,0);
lcd.print("WiFi'ya baglandi");
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("IP:");
lcd.setCursor(4,1);
lcd.print(WiFi.localIP());
digitalWrite(D8, HIGH);
delay(5000);
//}
SatirTemizle(0);
lcd.setCursor(0,0);
lcd.print("Tusla Gelsin v1");
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("Urun No Giriniz");
}
void loop()
{
uint8_t idxx = keyPad.getKey();
char idx = "D#0*C987B654A321"[idxx];
if ( isdigit(idx) ) {
uint8_t sayi = idx - '0';
ToplamSayi = ((ToplamSayi * 10) + sayi);
if (konsol) {
Serial.print( "Tuslanan Sayi:" );
Serial.println(ToplamSayi);
}
SatirTemizle(1);
lcd.print(ToplamSayi);
} else if ( idx == '#' ) {
// # tuşu enter gibi davranır
SatirTemizle(1);
lcd.print("Urun Ekleniyor.");
if (konsol) {
Serial.print(ToplamSayi);
Serial.println( " Urun Eklendi.\n" );
}
int urlEk = ToplamSayi;
String TamUrl = url_ekle + urlEk;
SiparisVer(TamUrl, urlEk);
ToplamSayi = 0;
} else if ( idx == '*' ) {
// * 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(1);
lcd.print("Sayi Silindi...");
delay(4000);
SatirTemizle(1);
lcd.print("Urun No Giriniz");
} else if ( idx == 'A' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
if (konsol) {
Serial.println("A tuşuna basıldı");
}
SatirTemizle(1);
lcd.print("A");
} else if ( idx == 'B' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
if (konsol) {
Serial.println("B tuşuna basıldı");
}
SatirTemizle(1);
lcd.print("B");
} else if ( idx == 'C' ) {
// C Tuşu NodeMCU ya Reset Atar!
digitalWrite(D0, LOW);
} else if ( idx == 'D' ) {
// D Tuşu numarası girilen ürünü siler!
SatirTemizle(1);
lcd.print("Urun Ekleniyor.");
if (konsol) {
Serial.print(ToplamSayi);
Serial.println( " Urun Eklendi.\n" );
}
int urlEk = ToplamSayi;
String TamUrl = url_sil + urlEk;
SiparisSil(TamUrl, urlEk);
ToplamSayi = 0;
}
delay(300);
}
void SiparisVer(String TamUrl, int urlEk) {
// Sipariş Verme Fonksiyonu
SatirTemizle(0);
lcd.setCursor(0,0);
lcd.print("Tusla Gelsin v1");
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("Baglaniyor...");
delay(4000);
//TCP bağlantıları oluşturmak için HTTPClient sınıfını kullanın
HTTPClient http;
http.begin(TamUrl);
SatirTemizle(0);
SatirTemizle(1);
lcd.setCursor(0,0);
lcd.print("Baglandi...");
lcd.setCursor(0,1);
lcd.print("Urun Ekleniyor..");
delay(4000);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
Serial.print("Gönderilen Url: ");
Serial.println(TamUrl);
Serial.print("Sayfa yanıtı:");
Serial.println(payload);
if(payload == "0"){
SatirTemizle(0);
lcd.setCursor(0,0);
lcd.print("Urun Eklendi");
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("Yeni Urun Girinz");
}else if(payload == "1"){
SatirTemizle(0);
lcd.setCursor(0,0);
lcd.print("Urun Zaten Var");
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("Yeni Urun Girinz");
}else if(payload == "2"){
lcd.setCursor(0,0);
lcd.print("Hatali Numara");
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("Yeniden Deneyin.");
}else{
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("Baglanti Hatasi.");
digitalWrite(D0, LOW);
}
}
http.end();
delay(2000); // 2 saniyede bir işlemi tekrarlayacak
}
void SiparisSil(String TamUrl, int urlEk) {
// Sipariş Silme Fonksiyonu
SatirTemizle(0);
lcd.setCursor(0,0);
lcd.print("Tusla Gelsin v1");
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("Baglaniyor...");
delay(5000);
//TCP bağlantıları oluşturmak için HTTPClient sınıfını kullanın
HTTPClient http;
http.begin(TamUrl);
SatirTemizle(0);
SatirTemizle(1);
lcd.setCursor(0,0);
lcd.print("Baglandi...");
lcd.setCursor(0,1);
lcd.print("Urun Siliniyor..");
delay(4000);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
Serial.print("Gönderilen Url: ");
Serial.println(TamUrl);
Serial.print("Sayfa yanıtı:");
Serial.println(payload);
if(payload == "0"){
SatirTemizle(0);
lcd.setCursor(0,0);
lcd.print("Urun Silindi");
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("Yeni Urun Girinz");
}else if(payload == "1"){
SatirTemizle(0);
lcd.setCursor(0,0);
lcd.print("Urun Bulunamadi");
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("Yeni Urun Girinz");
}else if(payload == "2"){
lcd.setCursor(0,0);
lcd.print("Hatali Numara");
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("Yeniden Deneyin.");
}else{
SatirTemizle(1);
lcd.setCursor(0,1);
lcd.print("Baglanti Hatasi.");
digitalWrite(D0, LOW);
}
}
http.end();
delay(2000); // 2 saniyede bir işlemi tekrarlayacak
}
void SatirTemizle(int satir) {
lcd.setCursor(0,satir);
lcd.print(" ");
lcd.setCursor(0,satir);
}
Ekler
Son düzenleme: