Merhaba Nodemcudan delphiye json olarak bilgi gönderip ve delphiden nodemcuya komut göndereceğiz bu projeyi paylaşmak istedim umarım delphican ailesine katkım olur

4Adet röle kontrol edip ve sıcaklık bilgisini okiyacağız bu proje örnek amaçlıdır kendinize göre uyarliyabilirsiniz.
Öncelikle Nodemcumuza Kodu yükliyelim
Bu kodu nodemcumuza yükledikten sonra sıra geldi Delphi kısmına
Rest client,Restrequrest ve response componentlerini formumuza ekliyoruz
sıcaklık bilgisini labele butonlarla ise nodemcuya komut göndereceğiz
Restclient'in base url kısmına nodemcunun ip adresini yazıyorız VE RootUnit adlı pas dosyasını projemize ekliyoruz
form1 kodu:

4Adet röle kontrol edip ve sıcaklık bilgisini okiyacağız bu proje örnek amaçlıdır kendinize göre uyarliyabilirsiniz.
Öncelikle Nodemcumuza Kodu yükliyelim
Kod: (Select All)
#include <ESP8266WiFi.h> // nodemcu kütüphanesi
#include <ArduinoJson.h> // json kütüphanesi
const char* ssid = "wifi-name"; // wifi adı
const char* password = "wifi-pass."; // wifi şifresi
int role1 = 4; // D2
int role2 = 00; // D3
int role3 = 14; // D5
int role4 = 12; // D6
WiFiServer server(80);
void setup() {
Serial.begin(9600);
delay(10);
pinMode(role1, OUTPUT); // röle1 çıkış olarak tanımlandı
pinMode(role2, OUTPUT); // röle2 çıkış olarak tanımlandı
pinMode(role3, OUTPUT); // röle3 çıkış olarak tanımlandı
pinMode(role4, OUTPUT); // röle4 çıkış olarak tanımlandı
Serial.println();
Serial.println();
Serial.print("Bağlanılıyor ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { // Bağlantı yok ise
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WIFI bağlandı.");
// Start the server
server.begin();
Serial.println("server başlatıldı");
// Print the IP address
Serial.print("Lütfen Bu Adrese Bağlanınız ");
Serial.print("http://");
Serial.print(WiFi.localIP()); // Ip adresini Serial ekrana yaz
Serial.println("/");
}
void loop() {
WiFiClient client = server.available(); // Nodemcuya bağlanan varmı
if (!client) {
return;
}
Serial.println("Yeni Client");
while (client.available()) client.read();
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
if (request.indexOf("/role1=ON") != -1) { // '/role1=ON' Komutu Geldiyse Röle 1'i Aç
digitalWrite(role1, HIGH);
}
if (request.indexOf("/role1=OFF") != -1) { // '/role1=OFF' Komutu Geldiyse Röle 1'i Kapat
digitalWrite(role1, LOW);
}
if (request.indexOf("/role2=ON") != -1) { // '/role2=ON' Komutu Geldiyse Röle 2'i Aç
digitalWrite(role2, HIGH);
}
if (request.indexOf("/role2=OFF") != -1) { // '/role2=OFF' Komutu Geldiyse Röle 2'i Kapat
digitalWrite(role2, LOW);
}
if (request.indexOf("/role3=ON") != -1) { // '/role3=ON' Komutu Geldiyse Röle 3'i Aç
digitalWrite(role3, HIGH);
}
if (request.indexOf("/role3=OFF") != -1) { // '/role3=OFF' Komutu Geldiyse Röle 3'i Kapat
digitalWrite(role3, LOW);
}
if (request.indexOf("/role4=ON") != -1) { // '/role4=ON' Komutu Geldiyse Röle 4'i Aç
digitalWrite(role4, HIGH);
}
if (request.indexOf("/role4=OFF") != -1) { // '/role4=OFF' Komutu Geldiyse Röle 4'i Kapat
digitalWrite(role4, LOW);
}
int deger; // değer adında integer tipli bir değişken tanımlanılıyor
double sicaklik; //sicaklik adında double tipli bir değişken tanımlanılıyor
deger = analogRead(A0); // analog değeri oku deger değişkenine at
sicaklik = Termistor(deger);
/////////////////////////////////////////JSON OLUŞTURMA///////////////////////////////////////////////////////////////
//JSON oluştur
StaticJsonBuffer<500> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
JsonObject& okunan = root.createNestedObject("Arduino_okunan");
okunan["SICAKLIK"] = sicaklik;
JsonObject& digitalokunan = root.createNestedObject("Digital_durumlar");
digitalokunan["ROLE1"] = digitalRead(role1);
digitalokunan["ROLE2"] = digitalRead(role2);
digitalokunan["ROLE3"] = digitalRead(role3);
digitalokunan["ROLE4"] = digitalRead(role4);
root.printTo(Serial);
delay(1);
////////////////////////////////////////////////////////////////////////////////////////////////////////
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: application/json");
client.println("Connection: close");
client.println();
root.prettyPrintTo(client);
delay(1);
Serial.println("Client disonnected");
Serial.println("");
}
double Termistor(int analogOkuma) //Sıcaklık okuma matematiksel işlemler
{
double sicaklik;
sicaklik = log(((10240000 / analogOkuma) - 10000));
sicaklik = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * sicaklik * sicaklik )) * sicaklik );
sicaklik = sicaklik - 273.15;
return sicaklik;
}Bu kodu nodemcumuza yükledikten sonra sıra geldi Delphi kısmına
Rest client,Restrequrest ve response componentlerini formumuza ekliyoruz
sıcaklık bilgisini labele butonlarla ise nodemcuya komut göndereceğiz
Restclient'in base url kısmına nodemcunun ip adresini yazıyorız VE RootUnit adlı pas dosyasını projemize ekliyoruz
unit RootUnit;
interface
uses Generics.Collections, Rest.Json;
type
TDigital_durumlarClass = class
private
FROLE1: String;
FROLE2: String;
FROLE3: String;
FROLE4: String;
public
property ROLE1: String read FROLE1 write FROLE1;
property ROLE2: String read FROLE2 write FROLE2;
property ROLE3: String read FROLE3 write FROLE3;
property ROLE4: String read FROLE4 write FROLE4;
function ToJsonString: string;
class function FromJsonString(AJsonString: string): TDigital_durumlarClass;
end;
TArduino_okunanClass = class
private
FSICAKLIK: String;
public
property SICAKLIK: String read FSICAKLIK write FSICAKLIK;
function ToJsonString: string;
class function FromJsonString(AJsonString: string): TArduino_okunanClass;
end;
TRootClass = class
private
FArduino_okunan: TArduino_okunanClass;
FDigital_durumlar: TDigital_durumlarClass;
public
property Arduino_okunan: TArduino_okunanClass read FArduino_okunan write FArduino_okunan;
property Digital_durumlar: TDigital_durumlarClass read FDigital_durumlar write FDigital_durumlar;
constructor Create;
destructor Destroy; override;
function ToJsonString: string;
class function FromJsonString(AJsonString: string): TRootClass;
end;
implementation
{TDigital_durumlarClass}
function TDigital_durumlarClass.ToJsonString: string;
begin
result := TJson.ObjectToJsonString(self);
end;
class function TDigital_durumlarClass.FromJsonString(AJsonString: string): TDigital_durumlarClass;
begin
result := TJson.JsonToObject<TDigital_durumlarClass>(AJsonString)
end;
{TArduino_okunanClass}
function TArduino_okunanClass.ToJsonString: string;
begin
result := TJson.ObjectToJsonString(self);
end;
class function TArduino_okunanClass.FromJsonString(AJsonString: string): TArduino_okunanClass;
begin
result := TJson.JsonToObject<TArduino_okunanClass>(AJsonString)
end;
{TRootClass}
constructor TRootClass.Create;
begin
inherited;
FArduino_okunan := TArduino_okunanClass.Create();
FDigital_durumlar := TDigital_durumlarClass.Create();
end;
destructor TRootClass.Destroy;
begin
FArduino_okunan.Free;
FDigital_durumlar.Free;
inherited;
end;
function TRootClass.ToJsonString: string;
begin
result := TJson.ObjectToJsonString(self);
end;
class function TRootClass.FromJsonString(AJsonString: string): TRootClass;
begin
result := TJson.JsonToObject<TRootClass>(AJsonString)
end;
end.
form1 kodu:
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
sicaklik:string;
role1:string;
role2:string;
role3:string;
role4:string;
implementation
{$R *.fmx}
uses RootUnit;
procedure TForm1.Button1Click(Sender: TObject);
var
RootUnit: TRootClass;
begin
Application.ProcessMessages;
RESTRequest1.ExecuteAsync(
procedure
begin
if RESTRequest1.Response.StatusCode = 200 then
begin
Rootunit := TRootClass.FromJsonString(RESTResponse1.Content);
end;
sicaklik:=RootUnit.Arduino_okunan.SICAKLIK; //Sıcaklık bilgisini sıcaklık değişkenine ata
role1:=RootUnit.Digital_durumlar.ROLE1; // burada RÖLE1 açık olup olmadığını kontrol ediyoruz
role2:= RootUnit.Digital_durumlar.ROLE2; // burada RÖLE2 açık olup olmadığını kontrol ediyoruz
role3:= RootUnit.Digital_durumlar.ROLE3; // burada RÖLE3 açık olup olmadığını kontrol ediyoruz
role4:= RootUnit.Digital_durumlar.ROLE4; // burada RÖLE4 açık olup olmadığını kontrol ediyoruz
end);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
RESTRequest1.ExecuteAsync(
procedure
begin
if RESTRequest1.Response.StatusCode = 200 then
begin
RESTRequest1.Resource:='role1=ON';
RESTRequest1.Execute;
end;
end);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
RESTRequest1.ExecuteAsync(
procedure
begin
if RESTRequest1.Response.StatusCode = 200 then
begin
RESTRequest1.Resource:='role1=OFF';
RESTRequest1.Execute;
end;
end);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
RESTRequest1.ExecuteAsync(
procedure
begin
if RESTRequest1.Response.StatusCode = 200 then
begin
RESTRequest1.Resource:='role2=ON';
RESTRequest1.Execute;
end;
end);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
RESTRequest1.ExecuteAsync(
procedure
begin
if RESTRequest1.Response.StatusCode = 200 then
begin
RESTRequest1.Resource:='role2=OFF';
RESTRequest1.Execute;
end;
end);
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
RESTRequest1.ExecuteAsync(
procedure
begin
if RESTRequest1.Response.StatusCode = 200 then
begin
RESTRequest1.Resource:='role3=ON';
RESTRequest1.Execute;
end;
end);
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
RESTRequest1.ExecuteAsync(
procedure
begin
if RESTRequest1.Response.StatusCode = 200 then
begin
RESTRequest1.Resource:='role3=OFF';
RESTRequest1.Execute;
end;
end);
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
RESTRequest1.ExecuteAsync(
procedure
begin
if RESTRequest1.Response.StatusCode = 200 then
begin
RESTRequest1.Resource:='role4=ON';
RESTRequest1.Execute;
end;
end);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
RESTRequest1.ExecuteAsync(
procedure
begin
if RESTRequest1.Response.StatusCode = 200 then
begin
RESTRequest1.Resource:='role4=OFF';
RESTRequest1.Execute;
end;
end);
end;
end.

