{"id":1719,"date":"2020-05-04T01:54:19","date_gmt":"2020-05-03T22:54:19","guid":{"rendered":"http:\/\/mikrobotik.com\/wp2\/?p=1719"},"modified":"2020-05-04T01:54:19","modified_gmt":"2020-05-03T22:54:19","slug":"esp8266-01-firebase-database-picarduinostm","status":"publish","type":"post","link":"https:\/\/www.mikrobotik.com\/wp2\/2020\/05\/04\/esp8266-01-firebase-database-picarduinostm\/","title":{"rendered":"ESP8266-01, Firebase database, Pic+Arduino+Stm &#8230;"},"content":{"rendered":"<p>Daha \u00f6nce d\u00fcnyadan evinizi kontrol edebilirsiniz konulu bir yaz\u0131 yazm\u0131\u015ft\u0131m. O yaz\u0131da, web sitemde mysql database ve php kullan\u0131yordum. PHP bilmeyenler veya database a\u00e7may\u0131 bilmeyenler i\u00e7in biraz karma\u015f\u0131k gibi g\u00f6r\u00fcnse de kolay \u015fekilde nas\u0131l yap\u0131laca\u011f\u0131n\u0131 anlatm\u0131\u015ft\u0131m.<br \/>\n<strong>D\u00fcnyadan evinizi kontrol edin yaz\u0131m\u0131<\/strong> <a href=\"https:\/\/www.mikrobotik.com\/wp2\/2018\/08\/10\/esp8266-01-ile-dunyadan-evinize-web-sitenizle-baglanti-kurun\/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>buradan okuyabilirsiniz.<\/strong>\u00a0<\/a><\/p>\n<p><span style=\"color: #ff6600;\">\u015eimdi ise b\u00fct\u00fcn bunlar\u0131 bir kenara at\u0131p database ihtiyac\u0131n\u0131z\u0131 kolayca, web sitesine bile gerek kalmadan nas\u0131l kar\u015f\u0131layaca\u011f\u0131n\u0131z\u0131 anlatmaya \u00e7al\u0131\u015faca\u011f\u0131m.<\/span> Bunu nas\u0131l kullanaca\u011f\u0131z derseniz ESP8266-01 mod\u00fcl\u00fc nodemcu gibi tek ba\u015f\u0131na kullan\u0131lacak ve database ile haberle\u015fip istedi\u011finiz bilgiyi size aktaracak.<br \/>\nEsp8266-01 mod\u00fcl\u00fc ile seri port haberle\u015fmesi yaparak. Hangi i\u015flemciyi kullanaca\u011f\u0131m derseniz, PIC, ARDUINO, STM, RASPberry pi gibi seri port haberle\u015fmesi yapan herhangi bir ortamdan database bilgilerinize ula\u015f\u0131p kontrol edebilirsiniz.<br \/>\nHatta yeni bir sens\u00f6r eklemek istedi\u011finizde, seri port \u00fczerinden sens\u00f6r\u00fcn ismini tan\u0131mlaman\u0131z yeter. Sens\u00f6r bilgilerinizi kolayca g\u00f6nderip alabileceksiniz.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>Nas\u0131l yapabileceksiniz:\u00a0<\/strong><\/span><br \/>\n\u00d6ncelikle \u015funu s\u00f6ylemeliyim bir FT232RL ( usb seri \u00e7evirici), ESP8266-01 mod\u00fcl ve arduino ide \u00fczerinden ESP8266-01 programlamas\u0131n\u0131 kulland\u0131m. Sizler FT232 usb seri \u00e7eviriciye sahip olmak zorunda de\u011filsiniz. Kendi Arduino mod\u00fcl\u00fcn\u00fcz\u00fc usb seri \u00e7evirici olarak kullanabilirsiniz.<span style=\"color: #ff6600;\"> Arduino&#8217;nun USB seri \u00e7evirici olarak kullan\u0131lmas\u0131n\u0131 ve ESP8266-01 in nas\u0131l programlanaca\u011f\u0131n\u0131<\/span> <a href=\"https:\/\/www.mikrobotik.com\/wp2\/2020\/02\/28\/arduino-usb-seri-cevirici-olarak-kullanmak\/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>buradan okuyabilirsiniz.<\/strong><\/a><\/p>\n<p>\u015eimdi ad\u0131m ad\u0131m google firebase sitesinde, nas\u0131l database a\u00e7abilece\u011fimizi g\u00f6relim.<br \/>\nBuradan<strong><a href=\"https:\/\/firebase.google.com\/products\/realtime-database\/\" target=\"_blank\" rel=\"noopener noreferrer\"> siteye<\/a><\/strong> gidelim. Sitenin sa\u011f \u00fcst k\u00f6\u015fesindeki <strong>konsola git<\/strong> butonuna basal\u0131m. Sizden google hesab\u0131n\u0131zda oturum a\u00e7man\u0131z\u0131 isteyecek. Oturum a\u00e7\u0131n. Gelen ekranda <strong>PROJE EKLE<\/strong> butonuna bas\u0131n.<br \/>\nProje isminizi yaz\u0131p devam edin.<br \/>\n\u0130lk \u00e7al\u0131\u015fman\u0131zda google analytics k\u0131sm\u0131n\u0131 <strong>s\u00fcrg\u00fcl\u00fc butondan kapat\u0131n<\/strong>.<br \/>\n<strong>Proje olu\u015ftur<\/strong> butonuna bas\u0131n. Olu\u015ftu\u011funda devam edin.<br \/>\nEkran\u0131n sol taraf\u0131ndaki men\u00fcden <strong>Database&#8217;<\/strong>i se\u00e7in.<br \/>\nSize ekranda se\u00e7enekler gelecek. ( <strong>cloud firestore<\/strong>, <span style=\"color: #ff0000;\"><strong>Realtime database<\/strong><\/span>) Siz <strong><span style=\"color: #ff6600;\">Realtime database<\/span> se\u00e7eceksiniz.<\/strong> ( Cloud firestore biraz daha detayl\u0131 ve ESP ile eri\u015fimde realtime database kadar kolay de\u011fil. Bundan dolay\u0131 <strong>realtime database ile \u00e7al\u0131\u015fmas\u0131n\u0131 anlataca\u011f\u0131m<\/strong>)<br \/>\n<strong>Realtime Database<\/strong> se\u00e7ti\u011finizde gelen ekranda <span style=\"color: #ff6600;\">2 se\u00e7enek var<\/span>. Biri test ama\u00e7l\u0131 ve 30 g\u00fcn s\u00fcreli. Bunu se\u00e7erseniz, gizli anahtara bile ihtiyac\u0131n\u0131z olmaz. Deneme i\u00e7indir.<br \/>\nBu \u00e7al\u0131\u015fmada <span style=\"color: #ff6600;\">kilitli modda ba\u015fla se\u00e7ene\u011fini se\u00e7ece\u011fiz.<\/span> Gizli anahtara ihtiyac\u0131m\u0131z olsun.<br \/>\n<span style=\"color: #ff6600;\">Detaylar ilk videoda pratik olarak g\u00f6sterilmi\u015ftir.\u00a0<\/span><br \/>\n<a class=\"lightbox\" href=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ilkdatabase.jpg\" rel=\"lightbox[1719]\"><img decoding=\"async\" class=\"aligncenter wp-image-1721 size-medium lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ilkdatabase-300x149.jpg\" alt=\"\" width=\"300\" height=\"149\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ilkdatabase-300x149.jpg 300w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ilkdatabase.jpg 734w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/149;\" \/><\/a>\u0130lk database olu\u015ftu art\u0131k burada istedi\u011fimiz bilgilerin yerlerini ay\u0131rabiliriz. \u0130lk veri giri\u015fi bu \u015fekildedir.\u00a0<a class=\"lightbox\" href=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ilk_veri.jpg\" rel=\"lightbox[1719]\"><img decoding=\"async\" class=\"aligncenter wp-image-1722 size-medium lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ilk_veri-300x172.jpg\" alt=\"\" width=\"300\" height=\"172\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ilk_veri-300x172.jpg 300w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ilk_veri-768x441.jpg 768w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ilk_veri.jpg 863w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/172;\" \/><\/a><br \/>\nyukar\u0131daki gibi veri giri\u015fi yap\u0131lacak fakat g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bir grup olu\u015fturuldu bu nas\u0131l olu\u015fur. A\u015fa\u011f\u0131daki resimde oldu\u011fu gibi a\u00e7\u0131lan kutunun yan\u0131ndaki + ya bast\u0131\u011f\u0131n\u0131zda bir kutu daha a\u00e7ar. \u00f6nce grup ad\u0131n\u0131 sonras\u0131nda veri ad\u0131n\u0131 yaz\u0131p bir kerede EKLE butonuna bas\u0131n.<br \/>\n<a href=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ikinci_veri.jpg\" rel=\"lightbox[1719]\"><img decoding=\"async\" class=\"lightbox aligncenter wp-image-1723 size-medium lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ikinci_veri-300x194.jpg\" alt=\"\" width=\"300\" height=\"194\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ikinci_veri-300x194.jpg 300w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ikinci_veri-768x498.jpg 768w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/ikinci_veri.jpg 852w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/194;\" \/><\/a><br \/>\nDatabase haz\u0131r. Bunu kullanmak i\u00e7in ESP8266-01 mod\u00fcl\u00fcn\u00fc <span style=\"color: #ff6600;\">programlama moduna al\u0131n<\/span>.<br \/>\n( <strong>Programlama modu: GPIO-0 ucunu GND ile birle\u015ftirmektir.<\/strong> )<br \/>\nTx, \u00a0RX, 3.3V, GND u\u00e7lar\u0131n\u0131 FT232RL nin u\u00e7lar\u0131na ba\u011flay\u0131p FT232RL mod\u00fcl\u00fcn\u00fc 3.3V \u00e7al\u0131\u015fma moduna alabilirsiniz. ( Ben 5V besleme i\u00e7in powerbank ve 3.3V i\u00e7in ise ams1117 3.3V reg\u00fclat\u00f6r kulland\u0131m. Kart\u0131m\u0131 ona g\u00f6re dizayn etti\u011fimden sizler arduinonun 3.3V k\u0131sm\u0131ndan alabilirsiniz. <span style=\"color: #ff6600;\">Arduino kullan\u0131yorsan\u0131z esp Rx pimi i\u00e7in seviye d\u00f6n\u00fc\u015f\u00fcm diren\u00e7leriyle gelen sinyal seviyesini 3.3;V seviyesine d\u00fc\u015f\u00fcrebilirsiniz<\/span>. ESP8266-01 kategorisine bakt\u0131\u011f\u0131n\u0131zda ESP ye giri\u015f konusunda detayl\u0131 bilgiler bulabilirsiniz.)<\/p>\n<p>Ba\u011flant\u0131lar\u0131n\u0131z tamam ise Arduino ide ye program\u0131 y\u00fckleyebilirsiniz. Ayr\u0131ca \u015fu yaz\u0131y\u0131 da okumal\u0131s\u0131n\u0131z. <strong>Nedeni ise<\/strong> arduinoyu usb seri \u00e7evirici kullanmak ve arduino ide i\u00e7in ESP kart ayarlar\u0131n\u0131 bu yaz\u0131da bulacaks\u0131n\u0131z.<br \/>\n<strong>Arduino USB seri \u00e7evirici olarak kullanmak ve<a href=\"https:\/\/www.mikrobotik.com\/wp2\/2020\/02\/28\/arduino-usb-seri-cevirici-olarak-kullanmak\/\" target=\"_blank\" rel=\"noopener noreferrer\"> ESP8266-01 programlamak.<\/a><\/strong><\/p>\n<p>Y\u00fckledi\u011finiz program Firebase k\u00fct\u00fcphanesini kullan\u0131yor. Bu k\u00fct\u00fcphaneyi de buradan bulabilirsiniz. K\u00fct\u00fcphaneyi buradan zip olarak indirip, Arduino program dizininizde library dizinine eklemeniz gerekir. \u0130sterseniz ide \u00fczerinden ekleyin, isterseniz kendiniz kopyalay\u0131n.<br \/>\n<a href=\"https:\/\/github.com\/FirebaseExtended\/firebase-arduino\" target=\"_blank\" rel=\"noopener noreferrer\">FIREBASE K\u00fct\u00fcphanesi.\u00a0<\/a><\/p>\n<p>Databese&#8217;in son durumu bu \u015fekildedir.<span style=\"color: #ff0000;\"> Dikkat etmeniz gereken yer veri tipleridir.<\/span> Verileriniz <strong><span style=\"color: #ff0000;\">integer<\/span> <\/strong>ve <strong><span style=\"color: #ff0000;\">string<\/span><\/strong> olabilir. Veya daha farkl\u0131 modlarda olabilir. Buna g\u00f6re de verilerinizi g\u00f6nderip almak zorundas\u0131n\u0131z. Ben programda String ve integer kulland\u0131m fakat boolean da kullanabilirsiniz. K\u00fct\u00fcphaneye bak\u0131p nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 \u00f6\u011frenebilirsiniz.<br \/>\n<a href=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/son_veri.jpg\" rel=\"lightbox[1719]\"><img decoding=\"async\" class=\"lightbox aligncenter wp-image-1724 size-medium lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/son_veri-300x214.jpg\" alt=\"\" width=\"300\" height=\"214\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/son_veri-300x214.jpg 300w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/son_veri.jpg 736w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/214;\" \/><\/a><br \/>\nProgram ile database i\u00e7erisinde belirledi\u011fimiz anahtar i\u00e7erisindeki bilgi de\u011fi\u015ftirilebilir. Yeni anahtarlar olu\u015fturulabilir, Denemedim ama a\u00e7t\u0131\u011f\u0131n\u0131z anahtarlar\u0131n\u0131 da remove komutuyla silebilirsiniz. K\u00fct\u00fcphanesini inceledi\u011finizde g\u00f6rebilirsiniz.<br \/>\nProgram\u0131n \u00e7al\u0131\u015fmas\u0131 esnas\u0131nda baz\u0131 kontroller yap\u0131lmaktad\u0131r. Verece\u011finiz anahtar ve de\u011ferin aralar\u0131nda virg\u00fcl olmas\u0131 gerekir. Ayr\u0131ca veri okunacak m\u0131 yaz\u0131lacak m\u0131 bunun belirtilmesi gerekir. Bununla birlikte veri tiplerinin, (int ve string gibi) \u00f6nemli olmas\u0131ndan dolay\u0131 veri tipine g\u00f6re yazmak gerekir. \u00d6rnek: yazstr,mutfak\/priz1,on \u00a0 Burada komut ve di\u011ferlerini ay\u0131rmak i\u00e7in virg\u00fclden faydalan\u0131l\u0131r. Arduino \u00a0komutu olan index of komutunu kullanarak, ESP mod\u00fcl\u00fcm\u00fcz gelen veriyi par\u00e7alar ve g\u00f6nderilecek hale getirir.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>G\u00f6nderilebilecek veriler : <\/strong><\/span><strong>Veri yap\u0131s\u0131 : Komut,anahtar,de\u011fer \u015feklindedir.\u00a0<\/strong><br \/>\n<strong>yazstr,mutfak\/priz1,on<\/strong> \u00a0anlam\u0131: string olarak yaz ve mutfak dizinindeki priz1 verisini de\u011fi\u015ftir.<br \/>\n<strong>yazint,oturma_odasi\/lamba1,200<\/strong> \u00a0 anlam\u0131: int olarak yaz ve oturma_odas\u0131 i\u00e7erisindeki lamba1 de\u011ferini de\u011fi\u015ftir. ( <span style=\"color: #ff6600;\">Burada g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi t\u00fcrk\u00e7e karakter yanl\u0131\u015fl\u0131kla kulland\u0131m. Database sitesinde sorun olmaz ama, bunun ismini seri port \u00fczerinden g\u00f6ndermeniz sorun olabilir. Database sayfas\u0131nda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz oturma_odas\u0131 asl\u0131nda nas\u0131l g\u00f6r\u00fcn\u00fcyor derseniz, database i\u00e7erisinde g\u00f6r\u00fcnen \u00a0\u015fekli budur.<\/span> (<strong>oturma%20odas%C4%B1) <span style=\"color: #ff0000;\">T\u00fcrk\u00e7e karakter kullanmamaya \u00f6zen g\u00f6stermelisiniz.\u00a0<\/span><br \/>\noku,mutfak\/priz2,x \u00a0<\/strong> burada <strong>X<\/strong> \u00f6nemsiz bir karakter. Sadece substring ile string i\u00e7erisinde par\u00e7a al\u0131rken s\u0131f\u0131r \u00e7\u0131kmas\u0131n diye herhangi bir karakter konulmas\u0131 sa\u011flanmal\u0131. Program i\u00e7erisinde bu karakter zaten kullan\u0131lmayacak. <strong><br \/>\n<span style=\"color: #ff0000;\">\u015e\u00f6yle olma-mal\u0131.<\/span>oku,mutfak\/priz2, \u00a0<\/strong><\/p>\n<p><span style=\"color: #ff0000;\"><strong>Program i\u00e7erisindeki kontroller.\u00a0<\/strong><\/span><br \/>\nSeri port \u00fczerinden g\u00f6nderece\u011fimiz bilgide <span style=\"color: #ff0000;\"><strong>2 adet virg\u00fcl olmal\u0131<\/strong><\/span>. bunlardan biri bile eksik olsa veriler yanl\u0131\u015f olur. Bu durum kontrol ediliyor.<br \/>\n<span style=\"color: #ff0000;\"><strong>yazstr ve yazint ile yaz kelimesi gelebilir.<\/strong><\/span> bu da kontrol ediliyor. Yanl\u0131\u015f yaz\u0131labilir diye.<br \/>\noku,mutfak\/priz2,<strong><span style=\"color: #ff0000;\">x<\/span> <\/strong>\u00a0 \u00a0X herhangi bir karakter. bunun olup olmad\u0131\u011f\u0131n\u0131 program kontrol ediyor.<br \/>\nProgram bunlar i\u00e7in geri bildirim veriyor. Di\u011fer \u00f6ng\u00f6r\u00fclmeyen hatalardan dolay\u0131 kay\u0131t i\u015flemi yapm\u0131yor veya okumuyor bunu size bildirmiyor. Program\u0131 geli\u015ftirmek isteyenler bu geri bildirimleri de yine k\u00fct\u00fcphane komutu olan firebase error bilgisine g\u00f6re geri bildirim verebilir.<\/p>\n<p><strong>Program\u0131n ihtiyac\u0131 olan bilgileri nas\u0131l sa\u011flayabiliriz:<\/strong><br \/>\nBirinci bilgi internete \u00e7\u0131kmak i\u00e7in modeminizin kullan\u0131c\u0131 ismi ve \u015fifresi. ( SSID , PASSWORD)<br \/>\n\u0130kincisi ise Firebase database yolu ve gizli anahtar.<br \/>\n<span style=\"color: #ff6600;\">#define WIFI_SSID &#8220;SSID&#8221;<\/span><br \/>\n<span style=\"color: #ff6600;\">#define WIFI_PASSWORD &#8220;PASSWORD&#8221;<\/span><br \/>\n<span style=\"color: #ff6600;\">#define FIREBASE_HOST &#8220;esp8266-4140a.firebaseio.com&#8221;<\/span><br \/>\n<span style=\"color: #ff6600;\">#define FIREBASE_AUTH &#8220;2NaRXXwRefCCxTx9KBarrDm957KKDJsN4nJj1Dqq&#8221;<\/span><\/p>\n<p>Yukar\u0131daki firebase HOST ve AUTH k\u0131sm\u0131n\u0131 denemek i\u00e7in kullanabilirsiniz. Fakat kendi database&#8217;iniz olu\u015ftu\u011funda bunlar\u0131 da de\u011fi\u015ftirmeniz gerekecek. A\u015fa\u011f\u0131daki resimde Firebase HOST nerede yazar bunu g\u00f6r\u00fcyorsunuz. <a href=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/hostname.jpg\" rel=\"lightbox[1719]\"><img decoding=\"async\" class=\"lightbox aligncenter wp-image-1726 size-medium lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/hostname-300x230.jpg\" alt=\"\" width=\"300\" height=\"230\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/hostname-300x230.jpg 300w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/hostname.jpg 669w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/230;\" \/><\/a><\/p>\n<p>Gizli anahtar\u0131m\u0131za ula\u015fmak i\u00e7in sol men\u00fc \u00fcst\u00fcnde ayar ikonu var. Onu t\u0131klad\u0131\u011f\u0131n\u0131zda Proje ayarlar\u0131 se\u00e7ene\u011fini se\u00e7in. Veri anahtar\u0131n\u0131 g\u00f6ster deyip kopyalay\u0131n.<br \/>\n<a href=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/gizlianahtar.jpg\" rel=\"lightbox[1719]\"><img decoding=\"async\" class=\"lightbox aligncenter wp-image-1727 size-medium lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/gizlianahtar-300x155.jpg\" alt=\"\" width=\"300\" height=\"155\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/gizlianahtar-300x155.jpg 300w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/gizlianahtar-1024x529.jpg 1024w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/gizlianahtar-768x397.jpg 768w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/04\/gizlianahtar.jpg 1235w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/155;\" \/><\/a><\/p>\n<p><span style=\"color: #ff6600;\">ESP program\u0131 a\u015fa\u011f\u0131dad\u0131r.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-title=\"Firebase ESP program\" data-enlighter-group=\"yes\">#include &lt;ESP8266WiFi.h&gt;\r\n\r\n#include &lt;FirebaseArduino.h&gt;\r\n\r\n#define WIFI_SSID \"ESP_REPEATER\"\r\n#define WIFI_PASSWORD \"12345678\"\r\n#define FIREBASE_HOST \"esp8266-4140a.firebaseio.com\"\r\n#define FIREBASE_AUTH \"2NaRXXwRefCCxTx9KBarrDm957KKDJsN4nJj1Dqq\"\r\nString strgel=\"\";\r\nString dataname=\"\";\r\nString datadeger=\"\";\r\nint saydatdeg=0;\r\n\/\/int LED1 = 4;\r\nint serbak=0;\r\nint virbak=0;\r\nint virbak1=0;\r\nString komut=\"\";\r\nint  temp=0;\r\nvoid setup()\r\n{\r\nSerial.begin(115200);\r\n\r\n\/\/pinMode(LED1, OUTPUT);\r\n\r\n  delay(2000);\r\n  Serial.println('\\n');\r\n  \/\/ **********************  seri porttan g\u00f6nderilen bilginin arkas\u0131na CRLF eklenecek. \\r\\n gibi. ESP b\u00f6yle \u00e7al\u0131\u015f\u0131r. *******************\r\n  \r\n  wifiConnect();    \/\/ wifi ba\u011flant\u0131 alt program\u0131na gider. \r\n\r\n  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);    \r\n\r\n  delay(10);\r\n}\r\n\r\nvoid loop()  \/\/ ***********  INT ve STRING de\u011ferler \u00f6nemli SET ederken de \u00f6nemli. yoksa database yanl\u0131\u015f olacak ve de\u011ferleri bo\u015fluk olarak okursunuz. ***\r\n{ \r\n\r\n while (Serial.available() &gt; 0) {   \/\/ kullan\u0131c\u0131 giri\u015fi bekler. arduinodan ,picten stmden ya da PC den. \r\n  strgel=Serial.readStringUntil('\\n');    \/\/ kullan\u0131c\u0131dan gelen dizilimi al\u0131r. yazstr,led1,25 gibi. \",\" \u00f6nemlidir.data ismi ve datay\u0131 ay\u0131r\u0131r unutulursa uyar\u0131r.  \r\n    serbak=1;  \r\n\r\n  }\r\n\/\/ string ay\u0131rma *******  data ismi ve dataty\u0131 birbirinden ay\u0131r\u0131r.yazint,led1,25 olsun  led1=data ismi   25= datad\u0131r. ve data integer ya da string ay\u0131r\u0131m\u0131 vard\u0131r. dikkat\r\n\r\nif (serbak==1){    \/\/ sadece seri portttan bilgi geldiyse kontrol edilir. mesela otomatik almak i\u00e7in gitmek yerine seri komutu g\u00f6nderen istedi\u011fi anda git oku desin. \r\n                    \/\/ *******************  bu database trafi\u011fini rahatlat\u0131r. *******************\r\n\r\nvirbak=-1;    \/\/ virbak=virg\u00fcl bak demek. indexof ile \",\" i\u015faretinin ka\u00e7\u0131nc\u0131 s\u0131rada oldu\u011funa bak\u0131larak substring ile data ismi ve data birbirinden ayr\u0131l\u0131r.\r\n\r\nvirbak=strgel.indexOf(\",\");\r\nvirbak1=strgel.indexOf(\",\",virbak+1);\r\nif (virbak==-1 || virbak1==-1){   \/\/ \",\" yoksa burada seri porttan bilgiyi kim g\u00f6nderdiyse uyar\u0131r. \u00e7\u00fcnk\u00fc database bunu uyarm\u0131yor ve hatal\u0131 kay\u0131t yapar. \r\n                                  \/\/ || i\u015fareti lojik OR i\u015flemidir. virbak ya da virbak1=-1 ise hata ver gibi okunur. \r\n  serbak=0;    \/\/ serbak=0 yap\u0131ld\u0131\u011f\u0131nda hi\u00e7 bir i\u015flem olmaz. serbak=2 yazma komutu serbak=3 okuma komutudur.\r\n  Serial.print(\"kayip STRGEL : \");Serial.println(strgel);\r\n  Serial.print(\"kayip serbak \");Serial.println(serbak);\r\n  Serial.println(\" Yazdiginiz bilgide virg\u00fcl hatas\u0131\");\r\n  \r\n}\r\n\/\/ ********************* seri porttan gelen dizinin ayr\u0131lmas\u0131  ****************************\r\nkomut=strgel.substring(0,virbak);  \/\/ yazstr, yazint, oku komutlar\u0131d\u0131r.\r\nSerial.print(\"KOMUT: \");Serial.println(komut);\r\nSerial.println(\"virbaklar : \");Serial.println(virbak);Serial.println(virbak1);\r\nif (virbak&gt;-1 &amp;&amp; virbak1&gt;-1){   \/\/ bilgi do\u011fru gelmi\u015ftir art\u0131k ayr\u0131labilir komut ve data olarak. YAZSTR,LAMBA1,\"oda1\" gibi yaz\u0131labilir.\r\n  \r\n  dataname=strgel.substring(virbak+1,virbak1);\r\n  Serial.print(\"dataname: \");Serial.println(dataname);\r\n  datadeger=strgel.substring(virbak1+1);\r\n  temp=datadeger.length();  \/\/ burada g\u00f6nderi\u011fimiz dizilimdeki \\r karakterini string i\u00e7inden \u00e7\u0131kar\u0131yoruz.\r\n  datadeger=datadeger.substring(0,temp-1);\r\n  Serial.print(\"datadeger: \");Serial.println(datadeger);\r\n  saydatdeg=datadeger.toInt();    \/\/ gelen STRING de\u011fi\u015fken INT de\u011fi\u015fkenine \u00e7evriliyor. database de int olarak sakland\u0131\u011f\u0131 i\u00e7in. \r\n                                  \/\/ \u015fayet STRING olarak kals\u0131n derseniz YAZ komutunu yazint ve yazstr yap\u0131p bu ayr\u0131m\u0131 yapabilirsiniz. \r\n  Serial.print(\"saydatdeg: \");Serial.println(saydatdeg);\r\n  Serial.print(\"uzunluk: \");Serial.println(datadeger.length());\r\n   if (datadeger.length() &lt; 1) { serbak=0; Serial.print(\" yazdiginiz komut hatali \");Serial.println(strgel); } } } \/\/************************** KOMUT AYRIMI YAPILIR ************************************* if (serbak==1){ \/\/ seri porttan gelen bilgiyi yazd\u0131r\u0131r istenirse silinir. Serial.print(\"STRGEL : \");Serial.println(strgel); Serial.print(\"serbak \");Serial.println(serbak); if (komut==\"yazstr\" || komut==\"yazint\" ) { serbak=2; } if (komut==\"oku\"){ serbak=3; } if (serbak==1){ serbak=0; Serial.print(\" yazdiginiz komut hatali:==&gt;  \");Serial.println(strgel);\r\n   }\r\n}\r\n\r\n\/\/ ********************* DATA OKUMA ****************************\r\nif (serbak==3){ \/\/*********** okuma modundad\u0131r. *******************\r\n  dataname=\"diz0\/LED3\";  \/\/ bu silinecek. yanl\u0131\u015fl\u0131k olursa diye\r\n\/\/ *****  burada a\u015fa\u011f\u0131daki okuma ve yazma sat\u0131rlar\u0131n\u0131 strbak=1 ve strbak=2 olmas\u0131 durumuna g\u00f6re if c\u00fcmlesinin i\u00e7erisine al. \r\n Serial.println(Firebase.getInt(dataname));  \/\/ OKUMAK i\u00e7in kullan \r\n delay(1000);\r\n Serial.println(Firebase.getString(\"lamba_isim\"));  \/\/ 2. data okuma string olarak okuma \u00f6zelli\u011fini g\u00f6sterir. ***** silinecek***\r\n delay(1000);\r\n}\r\nif(Firebase.failed())    \/\/   firebase herhangi bir sebeple hata d\u00f6nd\u00fcrd\u00fcyse mesela internet kesildiyse hata verir. \r\n{\r\nSerial.println(\"Internet lost\");\r\ndelay(5000);\r\n\r\n}\r\n \r\n \r\n\r\n\/\/ ********************* DATA YAZDIRMA ****************************\r\n \r\n if (serbak==2){   \/\/ data y\u0131 de\u011fi\u015ftirmek i\u00e7in SET edilir. \u015fayet data ismi database i\u00e7erisinde yoksa database'e ekleme yapar. \r\n                   \/\/ \u00f6rnek : LED1,15 varken siz LED2,16 dedi\u011finizde database'e LED2,16 dataismini ekler ve de\u011ferini yazar. \r\n                   \/\/ nas\u0131l bir \u015feyde kullanaca\u011f\u0131z derseniz. Yeni sens\u00f6r ekledi\u011finizde sens\u00f6r i\u00e7in firebase sitesine gidip \r\n                   \/\/ isim yeri a\u00e7man\u0131za gerek yok. Seri port \u00fczerinden ESP ye s\u00f6ylersiniz o sizin i\u00e7in a\u00e7ar. \r\n\r\n\r\nif (komut==\"yazstr\") {\r\n  Serial.print(\"gelen yazstr\"); Serial.print(dataname);Serial.println(datadeger); \r\n     Firebase.setString(dataname,datadeger);   \/\/ SET etmek i\u00e7in kullan LED1 database de\u011fi\u015fkeni\r\n                            \/\/ ****  D\u0130KKAT **** bu de\u011fi\u015fkenleri anlams\u0131z yaparsan\u0131z bir anda database i\u00e7eri\u011fi silinebiliyor. t\u00fcm de\u011ferler s\u0131f\u0131rlan\u0131yor.\r\n                            \/\/ saydatdeg olan bilgi int bilgidir. String ay\u0131rmadaki gibi buraya int ve string yazmak i\u00e7in if c\u00fcmlesiyle str ve int i\u00e7in ayr\u0131lmal\u0131. \r\n}\r\nif (komut==\"yazint\"){\r\nSerial.print(\"gelen yazint\"); Serial.print(dataname);Serial.println(saydatdeg);                 \r\n  Firebase.setInt(dataname,saydatdeg);   \/\/ SET etmek i\u00e7in kullan LED1 database de\u011fi\u015fkeni\r\n                            \/\/ ****  D\u0130KKAT **** bu de\u011fi\u015fkenleri anlams\u0131z yaparsan\u0131z bir anda database i\u00e7eri\u011fi silinebiliyor. t\u00fcm de\u011ferler s\u0131f\u0131rlan\u0131yor.\r\n                            \/\/ saydatdeg olan bilgi int bilgidir. String ay\u0131rmadaki gibi buraya int ve string yazmak i\u00e7in if c\u00fcmlesiyle str ve int i\u00e7in ayr\u0131lmal\u0131. \r\n}\r\n\r\ndelay(1000);\r\n }\r\n\/\/******************************* DATA YAZDIRMA SONU *************************************************\r\n\r\nif(WiFi.status() != WL_CONNECTED)   \/\/ zaman zaman internet kopabilir koparsa bunu kontrol eder ve yeniden ba\u011flanmaya gider. \r\n{\r\n  wifiConnect();  \/\/ wifi tekrar ba\u011flanacak.\r\n}\r\ndelay(10);\r\natlason:\r\nserbak=0;\r\n}\r\n\r\nvoid wifiConnect()    \/\/ ****************    internet ba\u011flanma alt program\u0131. ******************************\r\n{\r\n  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);             \/\/ Connect to the network\r\n  Serial.print(\"Connecting to \");\r\n  Serial.print(WIFI_SSID); Serial.println(\" ...\");\r\n\r\n  int teller = 0;\r\n  while (WiFi.status() != WL_CONNECTED)\r\n  {                                       \/\/ Wait for the Wi-Fi to connect\r\n    delay(1000);\r\n    Serial.print(++teller); Serial.print(' ');\r\n  }\r\n\r\n  Serial.println('\\n');\r\n  Serial.println(\"Connection established!\");  \r\n  Serial.print(\"IP address:\\t\");\r\n  Serial.println(WiFi.localIP());         \/\/ Send the IP address of the ESP8266 to the computer\r\n}\r\n\r\n<\/pre>\n<p><span style=\"color: #ff6600;\"><strong>Konu ile ilgili faydal\u0131 linkler :<\/strong><\/span><\/p>\n<p>1-)<a href=\"https:\/\/gelecegiyazanlar.turkcell.com.tr\/konu\/android\/egitim\/android-401\/firebase-realtime-database\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Firebase Realtime Database<\/strong><\/a><\/p>\n<p>2-) <strong><a href=\"https:\/\/www.projehocam.com\/appinventor-firebase-realtime-db\/\" target=\"_blank\" rel=\"noopener noreferrer\">App inventor ile firebase database \u00e7al\u0131\u015fmas\u0131.<\/a><\/strong><\/p>\n<p>3-)<a href=\"https:\/\/gelecegiyazanlar.turkcell.com.tr\/konu\/android\/egitim\/android-401\/firebase-realtime-database\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>MIT App Inventor Firebase Authentication Kullan\u0131m\u0131<\/strong><\/a><\/p>\n<p><strong>App inventor program\u0131 ile ilgili a\u00e7\u0131klama yapm\u0131yorum <span style=\"color: #ff6600;\">Proje hocam<\/span><\/strong> sitesine ba\u011fl\u0131 olan 2. linkte gerekli a\u00e7\u0131klamalar\u0131 bulabilirsiniz. 2. video ise bunu pratik olarak anlat\u0131yor.<\/p>\n<p><iframe data-src=\"https:\/\/www.youtube.com\/embed\/iLcoNzCxwmY\" width=\"640\" height=\"360\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe><\/p>\n<p><iframe data-src=\"https:\/\/www.youtube.com\/embed\/C5fnaT4O0-U\" width=\"640\" height=\"360\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe><br \/>\n&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Daha \u00f6nce d\u00fcnyadan evinizi kontrol edebilirsiniz konulu bir yaz\u0131 yazm\u0131\u015ft\u0131m. O yaz\u0131da, web sitemde mysql database ve php kullan\u0131yordum. PHP bilmeyenler veya database a\u00e7may\u0131 bilmeyenler i\u00e7in biraz karma\u015f\u0131k gibi g\u00f6r\u00fcnse&#8230; <\/p>\n","protected":false},"author":1,"featured_media":1734,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,12,7,24,3,5],"tags":[],"class_list":["post-1719","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-pcprog","category-esp","category-mit-app-inventor-2","category-pic","category-raspi"],"_links":{"self":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts\/1719","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/comments?post=1719"}],"version-history":[{"count":7,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts\/1719\/revisions"}],"predecessor-version":[{"id":1735,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts\/1719\/revisions\/1735"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/media\/1734"}],"wp:attachment":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/media?parent=1719"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/categories?post=1719"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/tags?post=1719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}