Aduino - MSSQL

Merhabalar,

Kütüphanenin 0.3.0 sürümünü yayımladım, yeni sürümde uno wifi r2 ile olan uyumsuzluğu da giderdim, bilginize.

https://github.com/mustafakemalgilor/tdslite/releases/tag/v0.3.0
Merhabalar,

UNO WiFi R2 ile Kütüphane denenmiştir sağlıklı bir şekilde SQL bağlanıp veri işlemleri sağlanmaktadır. Teşekkür ederim Mustafa Kemal Gilor.

Bonus olarak bir şey daha sormak istiyorum size cihaz ilk çalıştığında SQL de mevcut veritabanının olup olmadığını kontrol eden varsa işleme devam eden yoksa veritabanı oluşturup işleme devam eden kod bloğunu nasıl yapabilirim ?
 
char DBServer[30] = { 0 };
char DBKullanicisi[30] = { 0 };
char DBSifresi[30] = { 0 };
char DBAdi[30] = { 0 };

Nextion Ekran üzerinden kullanıcıdan alıp bu dizilerde saklıyorum bilgileri bağlantı sağlayacağım zaman da
decltype(driver):rogmem_connection_parameters params;
params.server_name = DBServer;
params.port = 1433;
params.user_name = DBKullanicisi;
params.password = DBSifresi;
params.client_name = TDSL_PMEMSTR("ANADOLU_IPLIK");
params.app_name = TDSL_PMEMSTR("AIR VIEW STATION");
params.db_name = DBAdi;
params.packet_size = { 1400 };
DBSonuc.setText("Bağlantı kuruluyor!");
auto result = driver.connect(params);

bu şekilde kullanmak istiyorum fakat donup kalıyor diziden kaynaklı mı acaba ? seri monitörden dizinin içindeki verileri görüyorum.
 
Merhabalar,

Kütüphanenin 0.3.0 sürümünü yayımladım, yeni sürümde uno wifi r2 ile olan uyumsuzluğu da giderdim, bilginize.

https://github.com/mustafakemalgilor/tdslite/releases/tag/v0.3.0

char ssid[30] = { 0 };
char pass[30] = { 0 };
char DBServer[30] = { 0 };
char DBKullanicisi[30] = { 0 };
char DBSifresi[30] = { 0 };
char DBAdi[30] = { 0 };

bu şekilde tanımladığım dizilerim var bu dizilere Nextion ekranında girilen textte ki değeri alıp atıyorum;

void ReadWiFi() {
memset(ssid, 0, sizeof(ssid));
ssidText.getText(ssid, sizeof(ssid));
memset(pass, 0, sizeof(pass));
passwordText.getText(pass, sizeof(pass));
}
void ReadSQL() {
memset(DBServer, 0, sizeof(DBServer));
DBSunucusu.getText(DBServer, sizeof(DBServer));
memset(DBKullanicisi, 0, sizeof(DBKullanicisi));
DBUser.getText(DBKullanicisi, sizeof(DBKullanicisi));
memset(DBSifresi, 0, sizeof(DBSifresi));
DBPassword.getText(DBSifresi, sizeof(DBSifresi));
memset(DBAdi, 0, sizeof(DBAdi));
DBName.getText(DBAdi, sizeof(DBAdi));
}

fakat DB şifresini alırken karakter sorununa takılıyorum max 30 karakterlik bir dizi olduğu için şifreden sonra boşlukları da algılıyor ve şifre yanlış hatası veriyor,ssid,password, dbsunucusu, dbkullanıcısı ve dbadında herhangi bir problem yok ama şifrede böyle bir problem var şifreyi programda tanımladığımda veya dizinin karakter uzunluğunu tam şifre kadar yaptığımda bağlantı sağlayabiliyorum. konu ile alakalı revize yapabilirmisin yada ben kodumda değiştirmem gereken bir yer varsa yardımcı olurmusun
 
Selamlar,

Aşağıda gösterdiğim şekilde parolanın uzunluğunu limitleyebilirsin.

decltype(driver)::connection_parameters params; // progmem_connection_parameters yerine connection_parameters kullanılmalı
int db_sifresi_uzunlugu = 5; //gerçek uzunluğu buraya
params.password = tdsl::string_view{DBSifresi, db_sifresi_uzunlugu};
 

O problemi çözdüm teşekkür ediyorum fakat loop döngüsünde her 1 dk da veritabanına insert ile kayıt ekliyorum belirli bir süreden sonra kayıt eklerken kart donuyor ve işlem yapmaz hale geliyor sebebi ne olabilir,

Kod:
now = rtc.now();
  int s1 = bme.readTemperature() * 10;
  int s2 = bme.readHumidity() * 10;
  int s3 = bme.readPressure() / 10;
  int s4 = (bme.readPressure() / 10) / 1.333;
  x0.setValue(s1);
  x1.setValue(s2);
  x2.setValue(s3);
  x3.setValue(s4);
  SensorAdiReadNexEeprom();
  sprintf(query, "INSERT INTO AVS_ReadData VALUES (%d, %d, %d, %d, '3801CC6D1911FA363EB5','%s','%d/%d/%d','%d:%d:%d')", s1, s2, s3, s4, Sensor, now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second());
  driver.execute_query(query);
 

Muhtemelen hafıza alanı doluyor, loop içerisinde kalan boş hafıza alanını ekrana yazdırarak teyit edebilirsin. Linkteki kütüphaneyi projene ekledikten sonra aşağıdaki gibi kullanabilirsin:

https://github.com/mustafakemalgilor/tdslite/tree/main/extras/vendor/MemoryFree
https://github.com/mustafakemalgilo...ts/sketches/arduino/arduino.cpp#L81C33-L81C45
 
programın derleme sonucu şu şekilde ;

Sketch uses 48631 bytes (99%) of program storage space. Maximum is 48640 bytes.
Global variables use 4539 bytes (73%) of dynamic memory, leaving 1605 bytes for local variables. Maximum is 6144 bytes.
 
Derleme sonucundan ziyade çalışma anındaki maksimum hafıza kullanımı önemli, bunu da bir önceki postta anlattığım şekilde ölçebilirsin.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…