kumandan11
Üye
- Katılım
- 4 Ağu 2013
- Mesajlar
- 26
- Puanları
- 1
void Sending_To_database() //CONNECTING WITH MSSQL
{
Serial.println("Login to the server");
if (MSSQL.connect()) // Check if the connection with the Data Base is correct
{
Serial.println("Registration ok");
// The database, the login name, the PW, and a "Sender" name are passed
MSSQL.setCredentials(L"deneme", L"sa", L"1234", L"Mustafa"); // For login to the Data Base
Serial.println("MSSQL-Login");
MSSQL.login(); // Now we are able to send queries
String tarihs = calcDateTime();
String saats = calcDateTime1();
char newName [102];
sprintf(newName, "INSERT INTO dbo.TestB (Tarih,Saat,Nem,Sicaklik) VALUES('%s','%s','%d.%02d','%d.%02d')", tarihs.c_str(), saats.c_str(), int(nem), int(round(nem * 100)) % 100, int(temp), int(round(temp * 100)) % 100);
wchar_t fileName[102];
int i;
for (i = 0; i < 102; i++)
{
fileName[i] = newName[i];
}
for (i = 0 ; i < 102 ; i++)
Serial.write(fileName[i]);
Serial.println("");
MSSQL.executeNonQuery(fileName); // Databese'e queryi gönder.
Serial.println("Done");
}
else
{
Serial.print("Login error");
}
}
Cevabın için teşekkür ederim.Veritabanlarına doğrudan bağlanabilmek için hosting firmasının uzaktan veritabanı erişimini desteklemesi gerekir. Eğer doğrudan bir web hosting paketi aldıysan ve localhost gibi bir sunucuya bağlanıyorsan uzaktan erişim yok demektir. Eğer varsa şunu söyleyebilirim mssql yerine mysql kullanmanı tavsiye ederim. Gönderdiğin kitaplık en son 4 sene önce güncellenmiş ve neredeyse hiç bir dökümanatasyon yapılmamış. Arduino için mysql kitaplıkları mevcut ve halihazırda kullanılıyor, çok sayıda örnek bulabilirsin.
Ben kendi web sayfamdaki sql veritabanına php de yazılmıs bir arayüz programı üzerinden veri alıp,yazabiliyorum.Bu sayede herhangibir kısıtlama ile karşılaşmadan vertabanı baglantısı saglayabiliyorum.Veritabanlarına doğrudan bağlanabilmek için hosting firmasının uzaktan veritabanı erişimini desteklemesi gerekir. Eğer doğrudan bir web hosting paketi aldıysan ve localhost gibi bir sunucuya bağlanıyorsan uzaktan erişim yok demektir. Eğer varsa şunu söyleyebilirim mssql yerine mysql kullanmanı tavsiye ederim. Gönderdiğin kitaplık en son 4 sene önce güncellenmiş ve neredeyse hiç bir dökümanatasyon yapılmamış. Arduino için mysql kitaplıkları mevcut ve halihazırda kullanılıyor, çok sayıda örnek bulabilirsin.
MSSQL.executeReader diye bir komut var fakat nasıl yapacağımı çözemedim. Buradaki komut verileri nereye gönderiyor client ' e mı ?
SQLardTableResult * executeReader(const wchar_t* query)
sqlard-test.cpp'deki wprintf yerine ne kullanabilirim. Arduino desteklemiyor sanırım. Serial ekranda veri gelip gelmediğini kontrol etmek için ?C++:SQLardTableResult * executeReader(const wchar_t* query)
Hayır SQLardTableResult sınfına ait bir nesnenin pointeranı alıyor. Yani okuduğu veriyi bir nesnede topluyor. Verileri o sınıfın içindeki fonksiyonlarla çekmek gerekiyor. Bunun için kitaplığı baştan sona incelemek gerekiyor yani bunu kimse senin için yapmaz. Bu konuda yalnızsın diyebilirim.
wprintf(L"%s|", tr->m_arColumnData[i]->m_wcstrColumnName);
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include "sqlard.h"
#include <ArduinoJson.h>
//ağ bilgilerinizi girin
#ifndef STASSID
#define STASSID "yedek"
#define STAPSK "1234*"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
int d = 0;
int kk_flag = 0;
char c;
unsigned long asyncDelay = 0; // Maksimum alabileceği rakam : 4,294,967,295
int delayLength = 10000;
uint8_t Ethernet_MacAddr[6] = { 0x74, 0x69, 0x69, 0x2D, 0x30, 0x31 }; /* MAC ADRESİ */
static byte Server_IPAddr[] = { 192, 168, 2, 22 }; // IP-Adres MS-SQL-Server
static byte Static_IPAddr[] = { 192, 168, 2, 195 };
static byte Gateway_IPAddr[] = { 192, 168, 2, 1 };
static byte Subnet_Mask[] = { 255, 255, 255, 0 };
WiFiClient client;
SQLard MSSQL(Server_IPAddr, 1433, &client); // Create the connection with the Server Data Base
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
while (!Serial);
StartWiFi(ssid, password);
}
void loop() {
recvWithStartEndMarkers();
if (millis() > asyncDelay + delayLength) {
if (asyncDelay > (4294967295 - delayLength)) {
asyncDelay = (4294967295 - asyncDelay) + (delayLength - (4294967295 - asyncDelay));
} else {
asyncDelay += delayLength;
}
Sending_To_database();
}
delay(2000);
}
void Sending_To_database() //CONNECTING WITH MS SQL
{
Serial.println("Login to the server");
if (MSSQL.connect()) // Check if the connection with the Data Base is correct
{
Serial.println("Registration ok");
// The database, the login name, the PW, and a "Sender" name are passed
MSSQL.setCredentials(L"deneme", L"sa", L"1234", L"Mustafa"); // For login to the Data Base
Serial.println("MSSQL-Login");
MSSQL.login(); // Now we are able to send querie
// String tarihs = "09.06.22";
// String saats = "14.42";
// float nem = 70.22;
// float temp = 28.50;
char newName [102];
// sprintf(newName, "INSERT INTO dbo.TestB (Tarih,Saat,Nem,Sicaklik) VALUES('%s','%s','%d.%02d','%d.%02d')", tarihs.c_str(), saats.c_str(), int(nem), int(round(nem * 100)) % 100, int(temp), int(round(temp * 100)) % 100);
sprintf(newName, "SELECT TOP 10 * FROM TestB ORDER BY ID DESC FOR JSON AUTO");
wchar_t fileName[102];
int i;
for (i = 0; i < 102; i++)
{
fileName[i] = newName[i];
}
for (i = 0 ; i < 102 ; i++)
Serial.write(fileName[i]);
Serial.println("");
MSSQL.executeNonQuery(fileName); // Databese'e queryi gönder.
Serial.println("Done");
if (!client) {
Serial.println("disconnecting.");
client.stop();
}
}
else
{
Serial.println("Login error");
}
}
////////////// WiFi, Time and Date Functions /////////////////
int StartWiFi(const char* ssid, const char* password) {
int connAttempts = 0;
Serial.print(F("\r\nBağlanıyor: ")); Serial.println(String(ssid));
WiFi.mode(WIFI_AP_STA);
WiFi.config(Static_IPAddr, Gateway_IPAddr, Subnet_Mask, Gateway_IPAddr);
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() != WL_CONNECTED ) {
Serial.print(".");
if (connAttempts > 20) {
Serial.println("\nWi-Fi ağına bağlanılamadı");
return 0;
}
connAttempts++;
}
WiFi.macAddress(Ethernet_MacAddr);
Serial.print("MAC: ");
Serial.print(Ethernet_MacAddr[5], HEX);
Serial.print(":");
Serial.print(Ethernet_MacAddr[4], HEX);
Serial.print(":");
Serial.print(Ethernet_MacAddr[3], HEX);
Serial.print(":");
Serial.print(Ethernet_MacAddr[2], HEX);
Serial.print(":");
Serial.print(Ethernet_MacAddr[1], HEX);
Serial.print(":");
Serial.println(Ethernet_MacAddr[0], HEX);
Serial.println("");
Serial.print(F("WiFi Bağlandı: "));
Serial.println(WiFi.localIP());
return 1;
}
void recvWithStartEndMarkers() { // Databaseden gelen verileri ayrıştırma işlemi yapılır.
String data_from_display = "";
while (client.available() > 0) {
c = client.read();
// Serial.print(c);
if ( c == '[') {
kk_flag = 1;
}
if (kk_flag == 1) {
data_from_display += c;
}
if ( c == ']') {
kk_flag = 0;
}
}
Serial.println(data_from_display);
Serial.println(utf8ascii(data_from_display));
String input = data_from_display;
DynamicJsonDocument doc(1536);
DeserializationError error = deserializeJson(doc, utf8ascii(data_from_display));
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
for (JsonObject item : doc.as<JsonArray>()) {
int ID1 = item["ID"]; // 29, 28, 27, 26, 25, 24, 23, 22, 21, 20
const char* Tarih1 = item["Tarih"]; // "09.06.22", "09.06.22", "09.06.22", "09.06.22", "09.06.22", ...
const char* Saat1 = item["Saat"]; // "14.42", "14.42", "14.42", "14.42", "14.42", "14.42", "14.42", ...
const char* Nem1 = item["Nem"]; // "70.22", "70.22", "70.22", "70.22", "70.22", "70.22", "70.22", ...
const char* Sicaklik1 = item["Sicaklik"]; // "28.50", "28.50", "28.50", "28.50", "28.50", "28.50", ...
Serial.println("ID: " + String(ID1));
Serial.println("Tarih: " + String(Tarih1));
Serial.println("Saat: " + String(Saat1));
Serial.println("Nem: " + String(Nem1));
Serial.println("Sıcaklık: " + String(Sicaklik1));
}
Serial.println(input.length());
}
// ****** UTF8-Decoder: convert UTF8-string to extended ASCII *******
static byte c1; // Last character buffer
// Convert a single Character from UTF8 to Extended ASCII
// Return "0" if a byte has to be ignored
byte utf8ascii(byte ascii) {
if ( ascii < 128 ) // Standard ASCII-set 0..0x7F handling
{ c1 = 0;
return ( ascii );
}
// get previous input
byte last = c1; // get last char
c1 = ascii; // remember actual character
switch (last) // conversion depending on first UTF8-character
{ case 0xC2: return (ascii); break;
case 0xC3: return (ascii | 0xC0); break;
case 0x82: if (ascii == 0xAC) return (0x80); // special case Euro-symbol
}
return (0); // otherwise: return zero, if character has to be ignored
}
// convert String object from UTF8 String to Extended ASCII
String utf8ascii(String s)
{
String r = "";
char c;
for (int i = 0; i < s.length(); i++)
{
c = utf8ascii(s.charAt(i));
if (c != 0) r += c;
}
return r;
}
// In Place conversion UTF8-string to Extended ASCII (ASCII is shorter!)
void utf8ascii(char* s)
{
int k = 0;
char c;
for (int i = 0; i < strlen(s); i++)
{
c = utf8ascii(s[i]);
if (c != 0)
s[k++] = c;
}
s[k] = 0;
}
Login to the server
Registration ok
MSSQL-Login
SELECT TOP 10 * FROM TestB ORDER BY ID DESC FOR JSON AUTO
Done
[{"ID":29,"Tarih":"09.06.22","Saat":"14.42","Nem":"70.22","Sicaklik":"28.50"},{"ID":28,"Tarih":"09.06.22","Saat":"14.42","Nem":"70.22","Sicaklik":"28.50"},{"ID":27,"Tarih":"09.06.22","Saat":"14.42","Nem":"70.22","Sicaklik":"28.50"},{"ID":26,"Tarih":"09.06.22","Saat":"14.42","Nem":"70.22","Sicaklik":"28.50"},{"ID":25,"Tarih":"09.06.22","Saat":"14.42","Nem":"70.22","Sicaklik":"28.50"},{"ID":24,"Tarih":"09.06.22","Saat":"14.42","Nem":"70.22","Sicaklik":"28.50"},{"ID":23,"Tarih":"09.06.22","Saat":"14.42","Nem":"70.22","Sicaklik":"28.50"},{"ID":22,"Tarih":"09.06.22","Saat":"14.42","Nem":"70.22","Sicaklik":"28.50"},{"ID":21,"Tarih":"09.06.22","Saat":"14.42","Nem":"70.22","Sicaklik":"28.50"},{"ID":20,"Tarih":"09.06.22","Saat":"14.42","Nem":"70.22","Sicaklik":"28.50"}]
ID: 29
Tarih: 09.06.22
Saat: 14.42
Nem: 70.22
Sıcaklık: 28.50
ID: 28
Tarih: 09.06.22
Saat: 14.42
Nem: 70.22
Sıcaklık: 28.50
ID: 27
Tarih: 09.06.22
Saat: 14.42
Nem: 70.22
Sıcaklık: 28.50
ID: 26
Tarih: 09.06.22
Saat: 14.42
Nem: 70.22
Sıcaklık: 28.50
ID: 25
Tarih: 09.06.22
Saat: 14.42
Nem: 70.22
Sıcaklık: 28.50
ID: 24
Tarih: 09.06.22
Saat: 14.42
Nem: 70.22
Sıcaklık: 28.50
ID: 23
Tarih: 09.06.22
Saat: 14.42
Nem: 70.22
Sıcaklık: 28.50
ID: 22
Tarih: 09.06.22
Saat: 14.42
Nem: 70.22
Sıcaklık: 28.50
ID: 21
Tarih: 09.06.22
Saat: 14.42
Nem: 70.22
Sıcaklık: 28.50
ID: 20
Tarih: 09.06.22
Saat: 14.42
Nem: 70.22
Sıcaklık: 28.50
#ifndef SQLARD_H
#define SQLARD_H
//#define UIPETHERNET
#include <stdarg.h>
#ifdef WINDOWS
#define F
#define PROGMEM
#include <boost/array.hpp>
#include <boost/asio.hpp>
#else
#ifdef UIPETHERNET
#include <UIPEthernet.h>
#else
[B] [/B]//#include <Ethernet.h>
#include <WiFiClient.h>
#endif
#endif
SQLard(uint8_t * serverIP, const uint16_t port, WiFiClient * pEthCl) { //WiFiClient
setServer(serverIP, port, pEthCl);
m_pLogin7 = nullptr;
m_bConnected = false;
m_bLoggedIn = false;
m_uiPacketIndex = 0;
}
SQLard() {
m_pLogin7 = nullptr;
m_bConnected = false;
m_bLoggedIn = false;
m_uiPacketIndex = 0;
}
void setServer(uint8_t * serverIP, const uint16_t port, WiFiClient * pEthCl) { // WiFiClient
memcpy(m_arrServerIPv4, serverIP, 6);
m_usPort = port;
m_pEthClient = pEthCl;
}
private:
bool m_bConnected;
bool m_bLoggedIn;
uint8_t m_arrServerIPv4[6];
uint16_t m_usPort;
#ifndef WINDOWS
WiFiClient * m_pEthClient; //WifiClient
#else
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver;
boost::asio::ip::tcp::socket socket;
#endif
SQLardLOGIN7 * m_pLogin7;
uint32_t m_uiPacketIndex;
uint32_t m_uiDoneCount;
uint16_t m_usDoneStatus;
uint16_t m_usDoneCurCmd;
};
#endif
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?