ESP8266-01 ile Tüm Dünyadan Evinize web sitenizle bağlantı kurun. – Mikrobotik

Arduino

# ESP8266-01 ile Tüm Dünyadan Evinize web sitenizle bağlantı kurun.

Şafak Ağustoslu 10 Ağustos 2018 9 Comments

ESP8266-01 + Arduino ile Tüm Dünyadan Evinize web sitenizle bağlantı kurun. (ESP Kütüphanesine ve Gerçek IP adresinize ihtiyacınız olmadan). Hem evinizdeki bütün alıcıların durumlarını kontrol edin. Hem de evinizdeki aygıtları web siteniz üzerinden çalıştırın.

Daha önceki yazımda internete bilgi göndermeyi göstermiştim. thingspeak örneği gibi.

Şimdi ise kendi web sitenizi kullanarak ya da ücretsiz web sitesi yaparak evinize bağlanmayı göstereceğim. Burada PHP kullanımı ön planda olsa da kullanılan dosyalar anlaşılabilir ve geliştirilebilir olduğundan az bir bilgi ile kendinize göre değiştirebilirsiniz.(Benim PHP bilgim hiç yoktu. Yinede standart komutlarla bir şeyler değiştirebildim. Sizlerde küçük bir çabayla örnekleri istediğiniz şekilde değiştirebilirsiniz.)

MQTT sistemini bilmiyorum. İlk izlenimlerime göre bu sistemin MQTT benzeri bir sisteme benzediğini söyleyebilirim. MQTT sisteminde broker denilen aracı var tüm vericiler buraya bilgileri bırakır ve tüm alıcılarda buradan bilgileri alırlar. Burada anlatacağım konu da benzer bir sistem. Web sitenizi broker olarak kullanmanızı sağlayacak. GÜVENLİ Mİ? Bu haliyle güvenli değil. Güvenli hale gelebilir mi. Evet bir anahtar kelime belirlersiniz ve bu anahtar kelime olmadan web siteniz bile açılamaz. Ben güvenlik tarafına girmeyeceğim.

Sistem kafanızda canlansın diye yukarıdaki resmi koydum. Broker yazan yer WEB SİTENİZ olacak.Resimdeki gibi bir web sitesinde alıcı ve vericileri buluşturabileceksiniz.( Tabii ki şimdilik güvenli anahtar olmayacak. )

Ayrıca evinize bağlanmak için Modeminizin gerçek IP sini bile bilmenize gerek yok. ( Bu konuya da ileride değineceğiz. ESP8266-01 ile Gerçek IP nizi nasıl bulacaksınız ve daima güncel olacak. istediğinizde sanki ev ağınızı kullanıyormuş gibi bağlanabileceksiniz. )

Artık konumuza geçelim.

Öncelikle 1. videoda çalışma sistemini göreceksiniz. Bunu arduino ile gösteremiyorum çünkü bütün çıktıları bir arada görebilmeniz gerekiyor. Bunu da proteus simulatör ve seri port’a bağlı gerçek ESP8266-01 modülüyle gösterebiliyorum. ESP kütüphanelerinin kullanılmasına gerek yok. ya da ESP ye program yüklemenize gerek yok.
Zaten ESP modül satın alındığında 115200 baud hızında AT komut seti kullanılabilir olarak geliyor. Sadece arduino nun TX ve RX uçlarını bağlamanız yetiyor. (Tecrübesiz olanlar için uyarı. TX RX uçları bağlıyken arduinoya program yükleyemeyebilirsiniz. TX RX uçlarını programınızı yükledikten sonra bağlayın.)
Programda F komutları göreceksiniz. Bunlar sadece değişkenlerin az olan data belleğinde değil program belleğinde saklanması içindir. Data belleğini verimli kullanmak için bunu yapıyorum.
Arduino Nano yada Uno kullanılabilir. DHT22 kütüphanesi mevcut olduğundan programda DHT22 kütüphanesini kullandım. Bu sensör yerine DHT11 ve benzeri sıcaklık ve nem sensörleri kullanılabilir. ( program içerisinde sensöroku kısmını dht11 e göre revize etmeniz gerekebilir. )
ESP kütüphanelerine ihtiyacınız yok fakat DHT-sensor-library-master, ve o kütüphanenin kullanılmasında gereken, Adafruit_Sensor-master kütüphaneleri ile birlikte JSON formatını çözümleyen ArduinoJson-master kütüphanelerini buradan indirebilirsiniz.

Normalde sistem 3 ışık kontrolüne göre yapılsa da proteus ta 4 temsili led göreceksiniz.
Sensör sayısında yada kontrol edeceğiniz lamba röle gibi cihazların sayısında sınırlama yok. Bu sınır ancak web sitesinde kullanacağınız MYSQL denilen veritabanı sınırlarına kadar kullanılabilir, ki bu kadar sensörü bir yerde toplamanız çok zordur. çünkü veritabanları binlerce bilgi alır. Tabii ki bir de Arduino nun kontrol kapasitesine bağlıdır. Dosyaları anladığınızda bunun bir sorun olmadığını göreceksiniz.

Sistemin mantığı : ESP, sensör bilgilerini arduino ile okuduktan sonra verileri web sitemizdeki veritabanına iletir. Bizim web sitemizden gönderdiğimiz komutları ise php dosyaları veritabanına yazar. ESP veritabanına yazdığımız komutları okuyup arduinoya iletir ve arduino bu bilgileri JSON kütüphanesiyle ayrıştırıp, uygulamaya koyar. PHP dosyaları da arduinonun kaydettiği sensör bilgilerini web sitesinden bize gösterir.
Örnek senaryo: Evimizde yokken bir duman sensörü aktif oldu. bunu arduino ile hissedip veritabanına yazdık. Veri tabanına biz okuyuncaya kadar haberdar olamayız. Bu durumda haberdar olmamız için PHP dosyasına bir kontrol mekanizması oluşturup acil durumlarda sms atmasını söyleyebiliriz. Ya da ESP burada devreye girerek hem bilgileri veritabanına iletir ve hem de SMS ile bizi bilgilendirir. Kullanıcı acil mesajı alır almaz web sitesini açar ve duruma müdahale etmek için evin elektriğini keser. Ayrıca yangın sistemi varsa yangın sistemini çalıştırabilir. Bu yangın sadece bir odadaysa o zaman kullanıcı sadece o odanın söndürme sistemine komut verebilir. Kamera olmadan sensörlerin durumuna göre karar verebilir ya da internete bağlı kamerası varsa evin içerisini görüp web sayfasından komut vererek problemi çözmeye çalışır.
Bu sistem acil durum haricinde her 30sn de bir kullanıcı komutu var mı diye veritabanını okumaya gidecek şeklinde ayarlanabilir. ben videoda süreklilik olsun diye 3-5 saniye kadar ayarladım.

video sistemin proteusta çalışmasını gösteren küçük bir video.

Şimdi bu videodaki sistemin arka planını inceleyelim. Sistemin mantığını yukarıda okudunuz. Bu işlemi 2 şekilde yapacağız.

1.yol : Web sitemiz yoksa 000webhost.com adresinden web sitemizi oluşturarak .
2.yol : Önceden Web sitemiz varsa ve PHP destekliyorsa kendi web sitemizi kullanmak.

Burada göstermek istediğim birinci yol free hosting veren 000webhost sitesinden bağlantı. (2017 yılında bu site kendi domainini vermeyi durdurduğundan farklı bir ücretsiz domain almanız ve bu siteye videodaki gibi bağlamanız gerekecek. Unutmayın domain, aldıktan 1-2 gün sonra sisteme girer. bu süreçte webhost kısmını ayarlayıp beklemelisiniz. ) Domain nedir derseniz: Kısaca sitenizin ismi olarak söyleyebilirim.
Free domain her yerden alabilirsiniz.
ben, (http://www.freenom.com/tr/index.html?lang=tr) adresinden 3 aylık ücretsiz aldım. Uzun süre kullanmak isterseniz buradan ya da başka bir yerden paralı almalısınız.
Domain açıldı mı diye kontrol etmek için 000webhost da örnek web sitelerinden birini ücretsiz olarak kendi alanıma yükledim. web sitesi yayındaysa artık domain hayata geçmiştir.
Webhost kısmı 2. videoda ayrıntılı anlatılacağından burada yazmak istemiyorum.

2. video webhost kurulumu:

Bu 000webhost sistemindeki dosyaları ben yapmadım. Bunların orjinal adresi burasıdır. Yabancı bir kaynaktır. Ben bu kaynağa göre kendim tecrübe ederek videoda anlattım. Çünkü video eski olduğundan aynı şeyleri yapsanız da başarılı olamıyorsunuz. 000WEBHOST bazı sistematik değişiklikler yapmış. Videoda göreceğiniz gibi sadece veritabanı bağlantı parametresi değiştirmek için config.php dosyasında bilgiler değişecek. diğer dosyaları değişiklik yapmadan kullanabilirsiniz.
000webhost sitesindeki Programların orjinal sahibi : http://iotmonk.com/courses/creating-iot-cloud-scratch-using-php-mysql-esp12e/

NOT: bu dosyalar PHP 5.2 kullandığından ve yeni web siteleri ise PHP 7.0 a geldiğinden verilen kodlar sadece 000webhost gibi yerlerde php5.2 nin bulunduğu yerlerde geçerli olacaktır.Videoda belirtildiği gibi ayarlar bölümünden genel kısmı seçip PHP versiyonunu değiştirebilirsiniz.
www.mikrobotik.com sitemde yeni versiyonları nasıl kullanabileceğinizi görebileceksiniz.

000WEBHOST php dosyaları.

Birde denemelerinizi yapabileceğiniz google eklentisi var. POSTMAN. Bu program sitenize ulaşıp PHP dosyalarını çalıştırıp sonuçları görmenizi sağlar. Bu sadece bilgisayarda denemelerinizi yapabilmeniz içindir. Postman kullanımı 4. videoda anlatılacaktır.

Şimdi gelelim kendi sitemde kullandığım metotlara. Burada ki dosyaları da indirebilirsiniz. kendi sitenizde kullanıma açabilirsiniz. Kendi php programlarınızda değişecek olan tek yer. veritabanı ismi veri tabanı kullanıcı adı, veri tabanı şifresidir. Bunları değiştirdikten sonra tüm dosyaları rahatlıkla kullanabilirsiniz. Videoda dizin yapısı mevcuttur.
Burada benim PHP versiyonum 5.5 olarak ayarlı. videoda Cpanelde nasıl yapılacağını gösterdim. Sizlerde sitelerinizde bu ayarı yapabilirsiniz.
POSTMAN programıyla PHP sisteminizin ve MYSQL sisteminizin çalıştığını kontrol edin. Daha sonra web sitesi aracılığıyla kullanılacak olan programı da kurup deneyin.
Dosyalar yaklaşık 2 ay boyunca test amaçlı kullanılabilir. Postman vasıtasıyla verileri görüp değiştirebilirsiniz.

Mikrobotik_php_dosyalar.

3. video mikrobotik sitesindeki kullanım.

Artık Arduino ile ESP8266-01 kullanımına sıra geldi. Burada da ESP nin AT komutlarını kullanacağız. Bunlar için hiç bir kütüphaneye ihtiyacınız olmayacak. zaten 3-5 komut ile internete bağlanabileceksiniz.(baud hızı 115200 olarak ayarlanacak.Çünkü ESP8266-01 modüller genellikle 115200baud hızında çalışacak şekilde geliyor. Şayet ilk bağlantı durumunu test etmek isterseniz bu sitede ESP 8266 giriş yazısı var. o yazıdaki programla ve usb seri çevirici kullanarak ilk testlerinizi yapabilirsiniz. )

Arduino programında Modeminizin bağlantı kurması için gerekli olan SSID ve password yazdığınızda ESP01, modeminize bağlanıp internete çıkmaya hazır olacak. Aynı postman daki gibi verileri web sitenize gönderecek. Web sitenizde ısı ve nem değerlerini kayıt edecek, Lamba durumunu da web sitenizdeki veri tabanından alıp uygulayacak. Bütün bu dataları kaydederken ve okurken kullanıcının web sitesi üzerinden gönderdiği light on ve off komutlarını alarak gerekli işlemleri yapabilecek. Kütüphane kullanmadan derken ESP ile ilgili kütüphaneyi kastettim. Fakat gelen bilgi JSON formatında geldiğinden bunu ayrıştırmak için arduino json kütüphanesini kullandım. Json formatı artık günümüzde bir çok yerde programlar arası data aktarımı için kullanılmaktadır.
Json formatı hakkında geniş bilgiyi bu siteden elde edebilirsiniz. Json site
bu formatı değiştirirken hata yaparsanız tüm dizi çalışmaz. bundan dolayı formatı değiştirdiğinizde formatı bir format kontrol noktasında deneyebilirsiniz.
Ayrıca Arduino için kendi formatınızın JSON parçalamasına ait kodlamayı da bu siteden alabilirsiniz.

Arduino program link:Programda delay süreleri proteusa göre verildi kendinize göre ayarlayabilirsiniz.

esp8266-01_webkontrol
Arduino
#include <ArduinoJson.h> #include "DHT.h" #include <SoftwareSerial.h> // ************ SADECE PROTEUSTA GÖSTERİLSİN DİYE KULLANILIYOR GERÇEK PROGRAMDA OLMASINA GEREK YOK SoftwareSerial mySerial(10, 11); // RX, TX #define DHTPIN 2 // what digital pin we're connected to #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 DHT dht(DHTPIN, DHTTYPE); __FlashStringHelper *srv1 ; __FlashStringHelper *srv2 ; __FlashStringHelper *srv3 ; __FlashStringHelper *srv4 ; __FlashStringHelper *srv5 ; __FlashStringHelper *srv6 ; __FlashStringHelper *srv7 ; __FlashStringHelper *srv8 ; __FlashStringHelper *srv9 ; __FlashStringHelper *srv10 ; __FlashStringHelper *srv11 ; __FlashStringHelper *srv12 ; __FlashStringHelper *srv13 ; String idstr="1"; String tempstr; String humstr; String subindata ; String indata ; String strdata ; int say=0; int say2=0; int findstart; int findend; int incomingByte = 0; long unsigned int milissay; int kont=0; // ****** BU SENSOR NUMARASINA GÖRE DEĞİŞECEK. void sensoku() { delay(100); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); tempstr=String(t); humstr=String(h); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { mySerial.println("Failed to read from DHT sensor!"); return; } mySerial.print("Humidity: "); mySerial.print(h); mySerial.println(" %\t"); mySerial.print("Temperature: "); mySerial.print(t); mySerial.println(" *C "); } void bakgel(){ // bekleme komutunu tekrar tekrar kullanmak yerine bu şekilde yapıldı hafıza kaplamasın diye. while(Serial.available() > 0) { subindata = Serial.read(); } delay(100); // 1000 delay ver. esp datası yollanırken kullanılıyor. } void setup() { // Initialize serial port Serial.begin(9600); mySerial.begin(9600); mySerial.println("STARTUP"); dht.begin(); pinMode(6, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); // Serial.println("SSIDNO"); // Serial.println("PASSNO"); espready(); // *************** son halinde } // ***** ESP 8266-01 AT KOMUTLARIYLA MODEME BAĞLANTI ********************** void espready() { srv1=F("AT+CWMODE=3"); // F fonksiyonu ile program belleğine gönderildi bu değişkenler. srv2=F("AT+CIPMODE=0"); srv3=F("AT+CIPMUX=1"); srv4=F("AT+CWDHCP=1,0"); srv5=F("AT+CIPSTA=\"192.168.1.140\""); srv6=F("AT+CWJAP=\"Guest_SSID_1_4A09\",\"misafir1234\""); srv7=F("AT+CIPSTART=0,\"TCP\",\"www.mikrobotik.com\",80"); srv8=F("AT+CIPSEND=0,66"); srv9=F("GET /api/led/Lreadmysql.php HTTP/1.1"); srv10=F("Host: www.mikrobotik.com"); srv11=F("GET /api/weather/wupdate.php?id=1&hum=28 HTTP/1.1"); srv12=F("Host: www.mikrobotik.com"); // Serial.println("AT+RST"); //3000 delay ver // delay(2000); Serial.println(srv1); bakgel();delay(500); Serial.println(srv2); bakgel();delay(500); Serial.println(srv3); bakgel();delay(500); Serial.println(srv4); bakgel();delay(500); Serial.println(srv5); bakgel();delay(500); Serial.println(srv6); delay(3000); bakgel(); } // ************** GELEN JSON FORMATLI BİLGİNİN AYRIŞTIRILMASI VE UYGULANMASI void jsonpar() { mySerial.println("GELEN JSON FORMATLI BiLGi AYRISTIRILIYOR"); delay(1000); findstart=indata.indexOf("["); findend=indata.indexOf("]"); if (findstart>0){ subindata=indata.substring(findstart, findend+1); indata=subindata; } //char responseBody[] = R"raw([{"id":"1","status":"on"},{"id":"2","status":"off"},{"id":"3","status":"on"},{"id":"4","status":"on"}],0 closed)raw"; // jsonda kullanılacak formatın tırnak işaretlerini \" yazmaktan kurtarıyor. // *********************** şayet standart json formatını kopyalayıp gönderme yapılacaksa kullanılabilir. //"[{\"id\":\"1\",\"status\":\"on\"},{\"id\":\"2\",\"status\":\"off\"},{\"id\":\"3\",\"status\":\"on\"}]"; ** arduinonun anladığı format char responseBody[150] ; indata.toCharArray(responseBody, 150); // seri porttan gelen string datayı chararray şekline dönüştürür. data eklendikçe karakter sayısını yükselt.***** //____________________________________ const size_t bufferSize = JSON_ARRAY_SIZE(4) + 4*JSON_OBJECT_SIZE(2) + 70; // BU LİNKTEN FORMATINIZI KONTROL EDİN VE BU SATIRI DEĞİŞTİRİN https://arduinojson.org/v5/assistant/ DynamicJsonBuffer jsonBuffer(bufferSize); const char* json = responseBody; JsonArray& root = jsonBuffer.parseArray(json); JsonArray& root_ = root; // **************************************************** const char* root_0_id = root_[0]["id"]; // "1" mySerial.println(root_0_id); say=atoi(root_0_id); const char* root_0_status = root_[0]["status"]; // "on" mySerial.println(root_0_status); strdata=String(root_0_status); if (say==1 && strdata=="on"){ mySerial.println("LIGHT_1 ON"); digitalWrite(6, HIGH); }else if (say==1 && strdata=="off" ){ mySerial.println("LIGHT_1 OFF"); digitalWrite(6, LOW); } // **************************************************** const char* root_1_id = root_[1]["id"]; // "2" say=atoi(root_1_id); mySerial.println(root_1_id); const char* root_1_status = root_[1]["status"]; // "off" mySerial.println(root_1_status); strdata=String(root_1_status); if (say==2 && strdata=="on"){ mySerial.println("LIGHT_2 ON"); digitalWrite(3, HIGH); }else if (say==2 && strdata=="off" ){ mySerial.println("LIGHT_2 OFF"); digitalWrite(3, LOW); } // **************************************************** const char* root_2_id = root_[2]["id"]; // "3" say=atoi(root_2_id); mySerial.println(root_2_id); const char* root_2_status = root_[2]["status"]; // "off" mySerial.println(root_2_status); strdata=String(root_2_status); if (say==3 && strdata=="on"){ mySerial.println("LIGHT_3 ON"); digitalWrite(4, HIGH); }else if (say==3 && strdata=="off" ){ mySerial.println("LIGHT_3 OFF"); digitalWrite(4, LOW); } // **************************************************** 4 TEN FAZLA IŞIK VARSA BU KISMI KOPYALAYIP AYARLARINI YAP. ********************** const char* root_3_id = root_[3]["id"]; // "4" say=atoi(root_3_id); mySerial.println(root_3_id); const char* root_3_status = root_[3]["status"]; // "on" mySerial.println(root_3_status); strdata=String(root_3_status); if (say==4 && strdata=="on"){ mySerial.println("LIGHT_4 ON"); digitalWrite(5, HIGH); }else if (say==4 && strdata=="off" ){ mySerial.println("LIGHT_4 OFF"); digitalWrite(5, LOW); } } void weatherkontrol() { srv11=F("GET /api/weather/wupdate.php?id=1&hum=28&temp=34 HTTP/1.1"); idstr="1"; // ******************** SENSOR NUMARASINA GORE DEĞİŞECEK **************************** //tempstr="10"; //humstr="100"; subindata="GET /api/weather/wupdate.php?id="+idstr+"&temp="+tempstr+" HTTP/1.1"; strdata=subindata; say=subindata.length()+30; indata=String (say); indata="AT+CIPSEND=0,"+indata; mySerial.println(subindata); mySerial.println(indata); delay(200); Serial.println(srv7); bakgel();delay(1000); Serial.println(indata); bakgel();delay(500); Serial.println(strdata); delay(500); Serial.println(srv10); bakgel();delay(500); Serial.println(""); delay(1500); subindata="GET /api/weather/wupdate.php?id="+idstr+"&hum="+humstr+" HTTP/1.1"; strdata=subindata; say=subindata.length()+30; indata=String (say); indata="AT+CIPSEND=0,"+indata; mySerial.println(subindata); mySerial.println(indata); delay(500); Serial.println(srv7); bakgel();delay(1000); Serial.println(indata); bakgel();delay(500); Serial.println(strdata); delay(500); Serial.println(srv10); bakgel();delay(500); Serial.println(""); delay(500); // Serial.println(""); bakgel(); } void webkontrol() { kont=0; delay(200); Serial.println(srv7); bakgel();delay(500); Serial.println(srv8); bakgel();delay(500); Serial.println(srv9); bakgel();delay(500); Serial.println(srv10); bakgel();delay(500); Serial.println(""); //delay(200); // Serial.println(""); while (kont<1){ if(Serial.available() > 0) { indata = Serial.readStringUntil (']'); //Serial.println(indata); indata =indata+"]"; jsonpar(); indata="";kont=1; } } mySerial.println ("WEB UZERINDEN KOMUT ALINDI UYGULANDI"); } void loop() { milissay=millis(); while (milissay+1000>=millis()){ } mySerial.println (""); mySerial.println("WEB SAYFASINDAN BiLGi AL"); webkontrol(); delay(3000); mySerial.println ("SENSOR OKUNUYOR VE GONDERiLiYOR"); sensoku(); delay(3000); weatherkontrol(); delay(3000); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325

#include <ArduinoJson.h>
#include "DHT.h"
#include <SoftwareSerial.h> // ************ SADECE PROTEUSTA GÖSTERİLSİN DİYE KULLANILIYOR GERÇEK PROGRAMDA OLMASINA GEREK YOK
SoftwareSerial mySerial(10, 11); // RX, TX
#define DHTPIN 2 // what digital pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
__FlashStringHelper *srv1 ;
__FlashStringHelper *srv2 ;
__FlashStringHelper *srv3 ;
__FlashStringHelper *srv4 ;
__FlashStringHelper *srv5 ;
__FlashStringHelper *srv6 ;
__FlashStringHelper *srv7 ;
__FlashStringHelper *srv8 ;
__FlashStringHelper *srv9 ;
__FlashStringHelper *srv10 ;
__FlashStringHelper *srv11 ;
__FlashStringHelper *srv12 ;
__FlashStringHelper *srv13 ;
String idstr="1";
String tempstr;
String humstr;
String subindata ;
String indata ;
String strdata ;
int say=0;
int say2=0;
int findstart;
int findend;
int incomingByte = 0;
long unsigned int milissay;
int kont=0;
// ****** BU SENSOR NUMARASINA GÖRE DEĞİŞECEK.
void sensoku() {
delay(100);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
tempstr=String(t);
humstr=String(h);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
mySerial.println("Failed to read from DHT sensor!");
return;
}
mySerial.print("Humidity: ");
mySerial.print(h);
mySerial.println(" %\t");
mySerial.print("Temperature: ");
mySerial.print(t);
mySerial.println(" *C ");
}
void bakgel(){ // bekleme komutunu tekrar tekrar kullanmak yerine bu şekilde yapıldı hafıza kaplamasın diye.
while(Serial.available() > 0)
{
subindata = Serial.read();
}
delay(100); // 1000 delay ver. esp datası yollanırken kullanılıyor.
}
void setup() {
// Initialize serial port
Serial.begin(9600);
mySerial.begin(9600);
mySerial.println("STARTUP");
dht.begin();
pinMode(6, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
// Serial.println("SSIDNO");
// Serial.println("PASSNO");
espready(); // *************** son halinde
}
// ***** ESP 8266-01 AT KOMUTLARIYLA MODEME BAĞLANTI **********************
void espready() {
srv1=F("AT+CWMODE=3"); // F fonksiyonu ile program belleğine gönderildi bu değişkenler.
srv2=F("AT+CIPMODE=0");
srv3=F("AT+CIPMUX=1");
srv4=F("AT+CWDHCP=1,0");
srv5=F("AT+CIPSTA=\"192.168.1.140\"");
srv6=F("AT+CWJAP=\"Guest_SSID_1_4A09\",\"misafir1234\"");
srv7=F("AT+CIPSTART=0,\"TCP\",\"www.mikrobotik.com\",80");
srv8=F("AT+CIPSEND=0,66");
srv9=F("GET /api/led/Lreadmysql.php HTTP/1.1");
srv10=F("Host: www.mikrobotik.com");
srv11=F("GET /api/weather/wupdate.php?id=1&hum=28 HTTP/1.1");
srv12=F("Host: www.mikrobotik.com");
// Serial.println("AT+RST"); //3000 delay ver
// delay(2000);
Serial.println(srv1);
bakgel(); delay(500);
Serial.println(srv2);
bakgel(); delay(500);
Serial.println(srv3);
bakgel(); delay(500);
Serial.println(srv4);
bakgel(); delay(500);
Serial.println(srv5);
bakgel(); delay(500);
Serial.println(srv6);
delay(3000);
bakgel();
}
// ************** GELEN JSON FORMATLI BİLGİNİN AYRIŞTIRILMASI VE UYGULANMASI
void jsonpar() {
mySerial.println("GELEN JSON FORMATLI BiLGi AYRISTIRILIYOR");
delay(1000);
findstart=indata.indexOf("[");
findend=indata.indexOf("]");
if (findstart>0){
subindata=indata.substring(findstart, findend+1);
indata=subindata;
}
//char responseBody[] = R"raw([{"id":"1","status":"on"},{"id":"2","status":"off"},{"id":"3","status":"on"},{"id":"4","status":"on"}],0 closed)raw"; // jsonda kullanılacak formatın tırnak işaretlerini \" yazmaktan kurtarıyor.
// *********************** şayet standart json formatını kopyalayıp gönderme yapılacaksa kullanılabilir.
//"[{\"id\":\"1\",\"status\":\"on\"},{\"id\":\"2\",\"status\":\"off\"},{\"id\":\"3\",\"status\":\"on\"}]"; ** arduinonun anladığı format
char responseBody[150] ;
indata.toCharArray(responseBody, 150); // seri porttan gelen string datayı chararray şekline dönüştürür. data eklendikçe karakter sayısını yükselt.*****
//____________________________________
const size_t bufferSize = JSON_ARRAY_SIZE(4) + 4*JSON_OBJECT_SIZE(2) + 70; // BU LİNKTEN FORMATINIZI KONTROL EDİN VE BU SATIRI DEĞİŞTİRİN https://arduinojson.org/v5/assistant/
DynamicJsonBuffer jsonBuffer(bufferSize);
const char* json = responseBody;
JsonArray& root = jsonBuffer.parseArray(json);
JsonArray& root_ = root;
// ****************************************************
const char* root_0_id = root_[0]["id"]; // "1"
mySerial.println(root_0_id);
say=atoi(root_0_id);
const char* root_0_status = root_[0]["status"]; // "on"
mySerial.println(root_0_status);
strdata=String(root_0_status);
if (say==1 && strdata=="on"){
mySerial.println("LIGHT_1 ON");
digitalWrite(6, HIGH);
}else if (say==1 && strdata=="off" ){
mySerial.println("LIGHT_1 OFF");
digitalWrite(6, LOW);
}
// ****************************************************
const char* root_1_id = root_[1]["id"]; // "2"
say=atoi(root_1_id);
mySerial.println(root_1_id);
const char* root_1_status = root_[1]["status"]; // "off"
mySerial.println(root_1_status);
strdata=String(root_1_status);
if (say==2 && strdata=="on"){
mySerial.println("LIGHT_2 ON");
digitalWrite(3, HIGH);
}else if (say==2 && strdata=="off" ){
mySerial.println("LIGHT_2 OFF");
digitalWrite(3, LOW);
}
// ****************************************************
const char* root_2_id = root_[2]["id"]; // "3"
say=atoi(root_2_id);
mySerial.println(root_2_id);
const char* root_2_status = root_[2]["status"]; // "off"
mySerial.println(root_2_status);
strdata=String(root_2_status);
if (say==3 && strdata=="on"){
mySerial.println("LIGHT_3 ON");
digitalWrite(4, HIGH);
}else if (say==3 && strdata=="off" ){
mySerial.println("LIGHT_3 OFF");
digitalWrite(4, LOW);
}
// **************************************************** 4 TEN FAZLA IŞIK VARSA BU KISMI KOPYALAYIP AYARLARINI YAP. **********************
const char* root_3_id = root_[3]["id"]; // "4"
say=atoi(root_3_id);
mySerial.println(root_3_id);
const char* root_3_status = root_[3]["status"]; // "on"
mySerial.println(root_3_status);
strdata=String(root_3_status);
if (say==4 && strdata=="on"){
mySerial.println("LIGHT_4 ON");
digitalWrite(5, HIGH);
}else if (say==4 && strdata=="off" ){
mySerial.println("LIGHT_4 OFF");
digitalWrite(5, LOW);
}
}
void weatherkontrol() {
srv11=F("GET /api/weather/wupdate.php?id=1&hum=28&temp=34 HTTP/1.1");
idstr="1"; // ******************** SENSOR NUMARASINA GORE DEĞİŞECEK ****************************
//tempstr="10";
//humstr="100";
subindata="GET /api/weather/wupdate.php?id="+idstr+"&temp="+tempstr+" HTTP/1.1";
strdata=subindata;
say=subindata.length()+30;
indata=String (say);
indata="AT+CIPSEND=0,"+indata;
mySerial.println(subindata);
mySerial.println(indata);
delay(200);
Serial.println(srv7);
bakgel(); delay(1000);
Serial.println(indata);
bakgel(); delay(500);
Serial.println(strdata);
delay(500);
Serial.println(srv10);
bakgel(); delay(500);
Serial.println("");
delay(1500);
subindata="GET /api/weather/wupdate.php?id="+idstr+"&hum="+humstr+" HTTP/1.1";
strdata=subindata;
say=subindata.length()+30;
indata=String (say);
indata="AT+CIPSEND=0,"+indata;
mySerial.println(subindata);
mySerial.println(indata);
delay(500);
Serial.println(srv7);
bakgel(); delay(1000);
Serial.println(indata);
bakgel(); delay(500);
Serial.println(strdata);
delay(500);
Serial.println(srv10);
bakgel(); delay(500);
Serial.println("");
delay(500);
// Serial.println("");
bakgel();
}
void webkontrol() {
kont=0;
delay(200);
Serial.println(srv7);
bakgel(); delay(500);
Serial.println(srv8);
bakgel(); delay(500);
Serial.println(srv9);
bakgel(); delay(500);
Serial.println(srv10);
bakgel(); delay(500);
Serial.println("");
//delay(200);
// Serial.println("");
while (kont<1){
if(Serial.available() > 0)
{
indata = Serial.readStringUntil (']');
//Serial.println(indata);
indata =indata+"]";
jsonpar();
indata=""; kont=1;
}
}
mySerial.println ("WEB UZERINDEN KOMUT ALINDI UYGULANDI");
}
void loop() {
milissay=millis();
while (milissay+1000>=millis()){
}
mySerial.println ("");
mySerial.println("WEB SAYFASINDAN BiLGi AL");
webkontrol();
delay(3000);
mySerial.println ("SENSOR OKUNUYOR VE GONDERiLiYOR");
sensoku();
delay(3000);
weatherkontrol();
delay(3000);
}

Programda bakgel alt programı sadece esp den dönen bilgileri bufferdan siler. ve ortalama gecikmeyi sağlar.
espready alt programı ESP nin göndermesi gereken bilgileri göndermek için hafızaya alır ve ilk komutları yollar.
Jsonpar alt programı JSON dizisini parçalar ve komutları uygular.
Weatherkontrol alt programı temp ve hum değişkenlerindeki ısı ve nem değerlerini gönderir.
webkontrol alt programı kullanıcıdan gelen bilgileri okuyup json parçalamaya gönderir.
( burada readstring json son karakteri olan “]” parantezi arar ve bulduğunda alımı durdurur. bundan dolayı son parantezi bir alt satırda ekleme yapıyoruz.)
loop alt programı ise gerekli ara gecikmeyi verip organizasyonu başlatır.

## NOT: program içerisinde 155. satırda bir not var. Işık sayısı arttırıldığında bu sayıyı değiştirmeniz gerekir. bunu da oradaki linkten alabilirsiniz. Ayrıca gelen data büyüdükçe 151 ve 152. satırlardaki numaralarıda değiştirmeniz gerekecektir. sistem şu an 4 ışığa kadar kullanılabilecek durumdadır.

WEB sayfası oluşumu ise yine PHP dosyasıdır. Herhangi bir cihazdan google gibi bir internet göstericisinden web sitesi olarak çağırabilirsiniz. Gelen sistemde 1. videoda gösterildiği gibi light butonları ve sensör kontrolleri vardır. bu dosya veri tabanına ulaşıp ESP den gelen verileri kontrol eder ve gösterir. Ayrıca kullanıcının komutlarını veri tabanına kayıt eder ve ESP nin almasını uygulamasını bekler.
İsterseniz daha da geliştirerek uyguladım mesajını da veri tabanına yazıp kullanıcıya iletebilirsiniz. Program kolaylıkla geliştirilebilir.

webuygun.php
PHP
<?php $conn=""; $dene=""; $bak=$GLOBALS["webid"]; // bir önceki dosyadan gelen istek id numarası. $dbhost = "localhost"; // don't change, değişmeeyecek $dbuser = "database user"; // veritabanı kullanıcı ismi $dbpass = "password"; // sifre $dbname = "database name"; // veritabanı ismi $conn = new mysqli($dbhost, $dbuser, $dbpass,$dbname); if ($conn->connect_error) { die('Connect Error (' . $conn->connect_errno . ') ' . $conn->connect_error); } if (mysqli_connect_error()) { die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } // mysql database bağlantı sağlandığında bu satıra gelir. ********************** /* if (isset($_GET['id'])) { $id = $_GET['id']; } */ $sql = "SELECT id, temp , hum FROM weather"; // **************** Bu satır açıldığında weather kısmı çalışıyor // $sql = "SELECT id, status FROM led"; // *************** bu satır açıldığında LED kısmı çalışıyor $result =mysqli_query($conn,$sql); if (mysqli_num_rows($result) > 0) { // echo " WEATHER TABLE " ; while($row = mysqli_fetch_array($result)) { // echo "<br> id: ". $row["id"]. " - temp: ". $row["temp"]. " hum: " . $row["hum"] . "<br>";// **************** Bu satır açıldığında weather kısmı çalışıyor if ($row["id"]==1) { $webid1=$row["id"]; $webhum1=$row["hum"]; $webtemp1=$row["temp"]; } if ($row["id"]==2) { $webid2=$row["id"]; $webhum2=$row["hum"]; $webtemp2=$row["temp"]; } if ($row["id"]==3) { $webid3=$row["id"]; $webhum3=$row["hum"]; $webtemp3=$row["temp"]; } //echo "<br> id: ". $row["id"]. " - status: ". $row["status"]. "<br>"; // *************** bu satır açıldığında LED kısmı çalışıyor } } else { echo "0 results<br>".mysqli_error($conn); } $sql = "SELECT id, status FROM led"; // *************** bu satır açıldığında LED kısmı çalışıyor $result =mysqli_query($conn,$sql); if (mysqli_num_rows($result) > 0) { // echo " LED TABLE " ; while($row = mysqli_fetch_array($result)) { // ****************** kaç adet light varsa o kadar if cümlesini kopyalayıp değişken numarası verilecek. ********************* if ($row["id"]==1) { $webid1=$row["id"]; $webstatus1=$row["status"]; } if ($row["id"]==2) { $webid2=$row["id"]; $webstatus2=$row["status"]; } if ($row["id"]==3) { $webid3=$row["id"]; $webstatus3=$row["status"]; } //echo "<br> id: ". $row["id"]. " - status: ". $row["status"]. "<br>"; // *************** bu satır açıldığında LED kısmı çalışıyor } } else { echo "0 results<br>".mysqli_error($conn); } // $conn= $GLOBALS [dene]; //echo "Connected SON<br>"; $conn -> close(); ?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115

<?php
$conn="";
$dene="";
$bak=$GLOBALS["webid"]; // bir önceki dosyadan gelen istek id numarası.
$dbhost = "localhost"; // don't change, değişmeeyecek
$dbuser = "database user"; // veritabanı kullanıcı ismi
$dbpass = "password"; // sifre
$dbname = "database name"; // veritabanı ismi
$conn = new mysqli($dbhost, $dbuser, $dbpass,$dbname);
if ($conn->connect_error) {
die('Connect Error (' . $conn->connect_errno . ') '
. $conn->connect_error);
}
if (mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
// mysql database bağlantı sağlandığında bu satıra gelir. **********************
/* if (isset($_GET['id'])) {
$id = $_GET['id'];
}
*/
$sql = "SELECT id, temp , hum FROM weather"; // **************** Bu satır açıldığında weather kısmı çalışıyor
// $sql = "SELECT id, status FROM led"; // *************** bu satır açıldığında LED kısmı çalışıyor
$result =mysqli_query($conn,$sql);
if (mysqli_num_rows($result) > 0) {
// echo " WEATHER TABLE " ;
while($row = mysqli_fetch_array($result)) {
// echo "<br> id: ". $row["id"]. " - temp: ". $row["temp"]. " hum: " . $row["hum"] . "<br>";// **************** Bu satır açıldığında weather kısmı çalışıyor
if ($row["id"]==1)
{
$webid1=$row["id"];
$webhum1=$row["hum"];
$webtemp1=$row["temp"];
}
if ($row["id"]==2)
{
$webid2=$row["id"];
$webhum2=$row["hum"];
$webtemp2=$row["temp"];
}
if ($row["id"]==3)
{
$webid3=$row["id"];
$webhum3=$row["hum"];
$webtemp3=$row["temp"];
}
//echo "<br> id: ". $row["id"]. " - status: ". $row["status"]. "<br>"; // *************** bu satır açıldığında LED kısmı çalışıyor
}
} else {
echo "0 results<br>".mysqli_error($conn);
}
$sql = "SELECT id, status FROM led"; // *************** bu satır açıldığında LED kısmı çalışıyor
$result =mysqli_query($conn,$sql);
if (mysqli_num_rows($result) > 0) {
// echo " LED TABLE " ;
while($row = mysqli_fetch_array($result)) {
// ****************** kaç adet light varsa o kadar if cümlesini kopyalayıp değişken numarası verilecek. *********************
if ($row["id"]==1)
{
$webid1=$row["id"];
$webstatus1=$row["status"];
}
if ($row["id"]==2)
{
$webid2=$row["id"];
$webstatus2=$row["status"];
}
if ($row["id"]==3)
{
$webid3=$row["id"];
$webstatus3=$row["status"];
}
//echo "<br> id: ". $row["id"]. " - status: ". $row["status"]. "<br>"; // *************** bu satır açıldığında LED kısmı çalışıyor
}
} else {
echo "0 results<br>".mysqli_error($conn);
}
// $conn= $GLOBALS [dene];
//echo "Connected SON<br>";
$conn -> close();
?>

WEB üzerinde siz www.mikrobotik.com/api/webbutton.php olarak çağırdığınızda bu program yukarıdaki webuygun.php dosyasını çağırır. Çağırırken de hangi butona bastıysanız o butonu webuygun.php ye aktarır. Programı takip ettiğinizde kaç sensör ya da light buton varsa o sensör numarasına kadar ve light numarasına kadar arttırmalısınız. satır kopyalayarak yapabilirsiniz.
Bir de 11-13 satırlar arasındaki bilgileri veritabanınıza göre doldurmanız gerekir ki veritabanını açabilsin.
webbutton.php de ise yine satır kopyalayarak sensör ve lamba sistemini arttırabilirsiniz.

Not: mikrobotik.com sitemdeki Sistem kurulurken 3 sensör ve 3 ışık üzerine kuruldu. bunlar kolaylıkla arttırılabilir. Hatta 000webhost taki gibi insert.php yapılıp, datalog oluşturulabilir ve daha sonra bu listeler analiz edilebilir. Aynı thingspeak yazımdaki gibi.

POSTMAN VİDEOSU :

Başta da dediğim gibi Güvenlik herkesin kendi sorunudur. ben bunları deneme olarak kullanacağım diyorsanız veriler de çok önemli veriler değil diyorsanız rahatlıkla denemelerinizi yapabilirsiniz. Ben dosyaların isimlerini değiştireceğim derseniz değiştirebilirsiniz fakat bazı php dosyalarının içerisinde bulunan isimleri de değiştirmeniz gerekecektir. Özellikle web üzerinden ayar yapan programa bir şifre ilave ederseniz sizden başkası bu web sayfasına bağlanamaz.

Videodaki bilgiler ışığında ve buradaki bilgiler ışığında hala sorun varsa buradan bana ulaşabilirsiniz. PHP bilgim var mı diye sorarsanız hiç yok. Yinede kullanılan komutlar standart olduğundan sizlerde benim gibi küçük bir çabayla değişiklik yapabilirsiniz.

POSTMAN denemelerinizde kullanılacak linkler. 2 ay boyunca orjinal dosyaları kontrol edebilirsiniz.

http://phpdene.tk/api/led/read_all.php
http://phpdene.tk/api/led/update.php?id=2&status=on
http://phpdene.tk/api/weather/read_all.php
http://phpdene.tk/api/weather/update.php?id=1&temp=21

http://www.mikrobotik.com/api/led/Lreadmysql.php
http://www.mikrobotik.com/api/led/Lupdate.php?id=2&status=”off”
http://www.mikrobotik.com/api/weather/wreadmysql.php
http://www.mikrobotik.com/api/weather/wupdate.php?id=1&hum=35&temp=20

Dosyalar yaklaşık 2 ay boyunca test amaçlı kullanılabilir. Postman vasıtasıyla verileri görüp değiştirebilirsiniz.

Bu sistemin gerçekleştirilmesinde bana yardımcı olan arkadaşlara teşekkür ederim.

Thank you for your valuable assistance.

## 9 Comments

1. Slm hocam, hay senden allah razı olsun öncelikle aradığım sorunun cevabını sayende bulmuş oldum. Şimdi bir sıkıntım kaldı yardımcı olursanız cok sevinirim. Benim yapmak istediğim sey kendi web sitemden (turhostan aldığım) bir ledi yakıp söndürmek. Bana nodemcu ESP12E de seriale bulaşmadan nasıl yapılır anlatabilirmisiniz hocam. Mümkünse küçük bir gönderme alma sizin sitenizden mesela. Teşekkürler.
   İyi Çalışmalar. saygılar

   Cevapla

2. esp12E modülüm yok fakat nodemcu da illaki seri port kullanmak zorunda değilsiniz. esp12 kendi aldığı bilgiye göre kendi portuna bağlı ledi yakabilir. Sanırım bu sitede esp12E nin nodemcu kullanımı size yol gösterecektir. Fakat buradaki bilgilere bakarak php kısmında düzenlemeler yapıp kendi sitenizde PHP dosyalarınızı oluşturmanız gerek. yani benim sitenin benzerini oluşturabilirsiniz. kendi sitenize web üzerinden bağlanıp alabildiğiniz bilgileri esp12 de alabilecektir.
   Şayet sorunuzu yanlış anladıysam lütfen belirtin .
   örnek site: https://www.instructables.com/id/Programming-ESP8266-ESP-12E-NodeMCU-Using-Arduino-/

   NOdemcu kullanıyorsanız arduinoya ihtiyacınız olmaz. esp yazılarıma bakarsanız orada nodemcu kullanımı var.

   Cevapla

3. merhaba öncelikle böyle bir örnek çalışması yaptığınız için ne kadar teşekkür etsek az olur.
   Ben tüm dediklerinizi tek tek uyguladım site urlleri posman da oldukça iyi durumda çalışıyor ancak arduinoya yüklediğimde ver i tabanımda herhangi bir değişiklik olmadığını görüyorum
   findstart=indata.indexOf(“[“);
   findend=indata.indexOf(“]”);
   bu kısım böylemi kalacak aca bir buraya anlam veremedim.Bir yerde eksiklik hata var sanırım ama bir türlü bulamadım.
   Yardımlarınıoz için şimdiden teşekkürler

   Cevapla

   1. öncelikle gelen veriyi tamamen seri monitöre yazdırın ve postman da ki gelen veri ile aynı olup olmadığını görün.
      kayıt için ise gönderdiğiniz diziyi seri monitöre yazdırın postman da gönderdiklerinizle aynı mı buna bir bakın.
      Bir de espgiriş kısmındaki firat deveci beyin yaptığı bir esp kontrol programı var. esp yi ona seri port ile bağlarsanız arduinodan önce orada bu verileri esp üzerinden değiştirip doğru dizilimi yazdığınızı görün.
      Ayrıca postman kısmındaki videoyu izleyerek esp için gerekli dizilimin nasıl alındığına bakın. bazen bir boşluk bile önemli olabiliyor esp ile gönderirken. dediğim gibi firat devecinin kontrol programıyla yaptığınızda esp ye yani arduino üzerinden gönderdiğiniz dizini buraya yapıştırıp bilgiye erişebileceğinizi test edin. sonrasında bilgiyi değiştirin. bunları yapınca buradaki dizilimi arduinoya yapıştırın. arduinoya yapıştırırken ” işareti gibi şeyler olduğunda bunları arduino kurallarına göre yazın.
      seri monitöre aldığınız bilgileri benimle paylaşırsanız belki daha başka şeyler söyleyebilirim. findstart kısımlarında sadece bu parantezi arar gelen bilgide bu parantez ile bitmeli yoksa bulamaz.

      Cevapla

   2. 1.GET /api/weather/read_all.php HTTP/1.1
      2.Host: phpdene.tk
      3.
      yukarıdaki 3. satır boşluk. buna göre tekrar dizilimi kontrol et. postmanda bu önemli olmayabilir ama esp de önemli yani 3. satırıda kopyalayıp arduino programına koyman gerek. hatta gönderilecek karakter sayısına da dahil etmen gerek. cipsend 0,66 daki 66 sayısına dahil edilmeli.

      Cevapla

   3. bir de postman videosunda postmandan arduinoya nasıl satır kopyalanacağı anlatılıyor. 5.57 sn noktasından başlayarak izlemenizi tavsiye ederim. buradaki yapı önemli. bunu zaten test programını kullanırsanız göreceksiniz. dediğim gibi görünmese de boşluk ve cr lf kısımları olmalı.

      Cevapla

4. STARTUP
   21:42:58.263 -> AT+CWMODE=3
   21:42:58.867 -> AT+CIPMODE=0
   21:42:59.473 -> AT+CIPMUX=1
   21:43:00.077 -> AT+CWDHCP=1,0
   21:43:00.682 -> AT+CIPSTA=”***************”
   21:43:01.251 -> AT+CWJAP=”*********”,”**********”
   21:43:05.387 ->
   21:43:05.387 -> WEB SAYFASINDAN BiLGi AL
   21:43:05.556 -> AT+CIPSTART=0,”TCP”,”************”,80
   21:43:06.158 -> AT+CIPSEND=0,66
   21:43:06.760 -> GET /apideneme/led1/read_all.php HTTP/1.1
   21:43:07.368 -> Host: ************.tk
   21:43:07.940 ->
   21:43:18.559 -> GELEN JSON FORMATLI BiLGi AYRISTIRILIYOR
   21:43:19.567 ->
   21:43:19.567 ->
   21:43:19.567 ->
   21:43:19.567 ->
   21:43:19.567 ->
   21:43:19.567 ->
   21:43:19.567 ->
   21:43:19.567 ->
   21:43:19.567 -> WEB UZERINDEN KOMUT ALINDI UYGULANDI
   21:43:22.561 -> SENSOR OKUNUYOR VE GONDERiLiYOR
   21:43:22.932 -> Humidity: 1484.80 %
   21:43:22.932 -> Temperature: 665.60 *C
   21:43:25.920 -> GET /apideneme/weather/update.php?id=1&temp=665.60 HTTP/1.1
   21:43:25.954 -> AT+CIPSEND=0,89
   21:43:26.124 -> AT+CIPSTART=0,”TCP”,”***********”,80
   21:43:27.236 -> AT+CIPSEND=0,89
   21:43:27.842 -> GET /apideneme/weather/update.php?id=1&temp=665.60 HTTP/1.1
   21:43:28.347 -> Host: ***********.tk
   21:43:28.918 ->
   21:43:30.427 -> GET /apideneme/weather/update.php?id=1&hum=1484.80 HTTP/1.1
   21:43:30.461 -> AT+CIPSEND=0,89
   21:43:30.932 -> AT+CIPSTART=0,”TCP”,”************”,80
   21:43:32.046 -> AT+CIPSEND=0,89
   21:43:32.650 -> GET /apideneme/weather/update.php?id=1&hum=1484.80 HTTP/1.1
   21:43:33.153 -> Host: **********.tk
   21:43:33.723 ->
   21:43:38.363 ->
   21:43:38.363 -> WEB SAYFASINDAN BiLGi AL
   21:43:38.533 -> AT+CIPSTART=0,”TCP”,”**********.tk”,80
   21:43:39.138 -> AT+CIPSEND=0,66
   21:43:39.743 -> GET /apideneme/led1/read_all.php HTTP/1.1
   21:43:40.354 -> Host: ***********.tk
   21:43:40.928 ->
   21:43:41.934 -> GELEN JSON FORMATLI BiLGi AYRISTIRILIYOR
   21:43:42.940 ->
   21:43:42.940 ->
   21:43:42.940 ->
   21:43:42.940 ->
   21:43:42.940 ->
   21:43:42.940 ->
   21:43:42.940 ->
   21:43:42.940 ->
   21:43:42.940 -> WEB UZERINDEN KOMUT ALINDI UYGULANDI
   21:43:45.936 -> SENSOR OKUNUYOR VE GONDERiLiYOR
   21:43:46.303 -> Humidity: 1433.60 %
   21:43:46.303 -> Temperature: 640.10 *C

   Cevapla

5. postmandan gönderdiğimde bu dizilim çalışıyor.Ancak arduinoda veri alışverişi olmuyor

   Cevapla

   1. esp yi son cavabımdaki videodaki gibi kopyalayıp test programından o dizlimi göndersen, ne demek istediğimi daha iyi anlayabilirsin. elimde 1 tane esp olacaktı AT komut setli onu bulursam sana video gönderirim. fakat sen de o yazıda da linkini vermişim, espgiris yazısında olan program ile bağlantı kurarsan, gelen verileri görebilirsin. oradaki çalıştığı halini arduinoya koyduğunda tam çalışacaktır. postman ile farklılık olabiliyor ve dediğim gibi dizilimde değil cr lf denilen görünmeyen karakterlerde. bu karakterler olmazsa oradaki 66 sayısının tamamlanmadığını görebilirsin. 66 görünür ve görünmez karakter sayısıdır.

      Cevapla

### Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorum

İsim *

E-posta *

İnternet sitesi