Notes![what is notes.io? What is notes.io?](/theme/images/whatisnotesio.png)
![]() ![]() Notes - notes.io |
#include <EEPROM.h>
//needed for library
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
//http client libraries
#include <Arduino.h>
#include <ESP8266HTTPClient.h>
#define USE_SERIAL Serial
int id=0,pass=0,val=0,sts=0,othrs=0,vals=0,usid=0,a,stid=0,stc=0;
int p1=1,p2=1,p3=1,p4=1;
String payload,cname;
int test=0;
WiFiManager wifiManager;
void EEPROMWriteInt(int p_address, int p_value)
{
EEPROM.begin(50);
byte lowByte = ((p_value >> 0) & 0xFF);
byte highByte = ((p_value >> 8) & 0xFF);
EEPROM.write(p_address, lowByte);
EEPROM.write(p_address + 1, highByte);
EEPROM.commit();
}
//This function will read a 2 byte integer from the eeprom at the specified address and address + 1
unsigned int EEPROMReadInt(int p_address)
{
EEPROM.begin(50);
byte lowByte = EEPROM.read(p_address);
byte highByte = EEPROM.read(p_address + 1);
EEPROM.commit();
return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xffFF);
}
void setup() {
pinMode(D0, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D3, OUTPUT);
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println();
//WiFiManager
//Local intialization. Once its business is done, there is no need to keep it around
//reset saved settings
// wifiManager.resetSettings();
// EEPROMWriteInt(10, 0);
//EEPROMWriteInt(20, 0);
//EEPROMWriteInt(30, 0);
//set custom ip for portal
//wifiManager.setAPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0));
//fetches ssid and pass from eeprom and tries to connect
//if it does not connect it starts an access point with the specified name
//here "AutoConnectAP"
//and goes into a blocking loop awaiting configuration
pass = EEPROMReadInt(10);
Serial.println("pass:");
Serial.println(pass);
id = EEPROMReadInt(20);
Serial.println("id");
Serial.println(id);
usid = EEPROMReadInt(30);
Serial.println("usid");
Serial.println(usid);
if(id==usid&&id==pass&&pass==usid)
{id=0;usid=0;pass=0;}
if(id==usid)
{id=0;usid=0;}
if(pass==0)
{ wifiManager.resetSettings();
wifiManager.autoConnect();
a = wifiManager.getusid();
Serial.println("Wrote Usid:");
Serial.println(a);
EEPROMWriteInt(10, a);
Serial.println("EEPROM");
Serial.println(EEPROMReadInt(10));
pass=a;
}
else
{
wifiManager.setTimeout(200);
if(!wifiManager.autoConnect()&&pass==0) {
Serial.println("failed to connect and hit timeout");
delay(3000);
//reset and try again, or maybe put it to deep sleep
ESP.reset();
delay(5000);
}
}
//if you get here you have connected to the WiFi
Serial.println("connected...yeey :)");
for(uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] WAIT %d...n", t);
USE_SERIAL.flush();
delay(1000);
}
cname = wifiManager.getcid();
}
void work()
{
if(p1==1)
{
digitalWrite(D0, HIGH);
}
else if(p1==0)
{
digitalWrite(D0, LOW);
}
if(p2==1)
{
digitalWrite(D1, HIGH);
}
else if(p2==0)
{
digitalWrite(D1, LOW);
}
if(p3==1)
{
digitalWrite(D2, HIGH);
}
else if(p3==0)
{
digitalWrite(D2, LOW);
}
if(p4==1)
{
digitalWrite(D3, HIGH);
}
else if(p4==0)
{
digitalWrite(D3, LOW);
}
}
void loop() {
HTTPClient http; //http bağlantı fonksiyonu
if(stc==0) //stc değişken kontrolü stc=0 ise server denetle 1 ise txt dosyasını kontrol et
{
String kresource = String("http://iotsistem.000webhostapp.com/iot.php?id=") + id + String("&pass=") + pass + String("&val=") + val + String("&sts=") + sts + String("&othrs=") + othrs + String("&vals=") + vals + String("&usid=") + usid+ String("&name=") + cname+ String("&p1=") + p1+ String("&p2=") + p2+ String("&p3=") + p3+ String("&p4=") + p4;
//server kontrol adresi
Serial.println(kresource);
http.begin(kresource);
int httpCode = http.GET();
if(httpCode == HTTP_CODE_OK) {
payload = http.getString();
//payload değişkenine sayfa kaydedilir
Serial.println(payload);
}
else {
USE_SERIAL.printf("[HTTP] GET... failed, error: %sn", http.errorToString(httpCode).c_str());
/* if(test>400)
if (!wifiManager.startConfigPortal()) {
test=0;
Serial.println("failed to connect and hit timeout");
delay(3000);
//reset and try again, or maybe put it to deep sleep
ESP.reset();
delay(5000);
}*/
}
http.end(); //bağlantı kapatılır
if(payload=="")
{work();} //ilk çalışma anında server dan veri almasa bile prizleri açması için
if(pass!=0&&id!=0) //parola ve id kontrol edilir eğer sıfırsa stc 1 yapılmaz çünkü cihaz hala kurulm aşamasında olup, serverdan veri alması gerekir
{stc=1;}
if(payload.charAt(0)=='!') // veri okunur ilk karakter ! ise veri bizim verimizdir okumaya devam edilir
{
bool s=false;
int j=0; //j değeri sayfadan alınmış verinin kaçıncı karakterini okuduğumuzu gösterir
int k=0; // k değişkeni ise alınmış karakterlerden anlamlı veri oluşturan kaçıcıncı anlamlı veriyi okuduğumuzu gösterir yani kaçıncı yıldızda olduğumuzu belirtir
int p=0 // buff dizisinin kaçıncı elemanın kullanımda olduğunu gösterir, buf un boş kısmına veriyi yazmamızı sağlar, çünkü sayfadaki veriyi karakter karakter aldığımız için
// her bir karakter aldıktan sonra p bir arttırılarak buff dizisinin bir sonraki boş kısmına karakter alımı sağlanır.
int mn=0; // kontrol değişkeni ilk yıldızdan önceki veridir bu veri de sonraki verilerin kurulum verisi mi yoksa priz verisi mi olduğunu anlmaamızı sağlar
// mn=1 için kurulum 2 için de priz verisi olarak yorumlanır.
char buf[30]; // buff değişkenimiz verileri geçici süre kaydettiğimiz karakter karakter atadığımız dizi.
while(payload.charAt(j)!='#') // while döngüsü ile verinin sonunu ifade eden # karakterine kadar döngü içerisinde tüm verilerin okunması sağlanır.
{
j++; // j değişkeni her defasında arttırılarak bir sonraki karakterin işlenmesine, gerekli ise buff a yazılması, eğer yıldız ise kontrol edilmesi gibi işlemlerin
// devamını sağlar
if(payload.charAt(j)!='*') // her defasında sayfanın tümünü içeren payload değişkenin şu an işlediğimiz karakterinin * olup olmadığı kontrol edilerek alınan verinin
// tamamnın alınıp alınmadığı kontrol edilir. != olduğu için eşit olmama durumuna ilişkin işlemler yapılır
{
buf[p]=payload.charAt(j); // buff dizisinin p'ninci elemanına payload dizisinin j ninci elemanı atılır.
p++;
Serial.println(buf);
Serial.println(payload.charAt(j));
}
else if(payload.charAt(j)=='*') //veri alımı sonu yani * elemanına ulaştığımız zaman, buf un içerisine atılan verinin tamamı alınmış yani yıldız karakterine ulaşılmıştır.
// bununla beraber buff un içindeki verinin işlenmesine başlanır.
{
k++; // aldığımız verinin gönderilen verilerden kaçıncı veri olduğu yani kaçıncı yıldıza eriştiğimizi anlamamız için k değişkeni arttırılarak verilerin sırası belirlenir.
// bunun sebebi ise verilerin server dan belli bir sıra ile gönderilmesi dolayısıyla bu sıra ile yorumlanması gerektiğindendir.
if(k==1) //k=1 için ilk veri her zaman sonraki verilerin hangi amaçlı veri olduğunu kurulum veya priz bilgisi verisi olduğunu anlamamızı sağlar.
{
if(buf[0]=='r') // ilk veri reset ise cihaz sıfırlanır.
{wifiManager.resetSettings(); // wifi kaydedilen şifre parola silinir
wifiManager.autoConnect(); // wifi yayına başlar
a = wifiManager.getusid(); // wifi ye girilen şifre alınır.
Serial.println("Wrote Usid:"); //yazılan şifre değeri konsola yazdırılır.
Serial.println(a);
EEPROMWriteInt(10, a); // daha sonra eeprom un 10. bloğuna bu veri kaydedilir.
Serial.println("EEPROM");
Serial.println(EEPROMReadInt(10));
pass=a; // pass değikenimiz wifi arayüzünden alınan değişken değerini aldı
usid=0; // bu değerler henüz serverdan alınmadı
id=0; // henüz serverdan alınmadı
}
if(pass!=0&&buf[0]=='1') // ilk karakterimiz burada okunur eğer birse işlem yapılıyor
{
mn=1; // mn değeri bir yapılarak kurulum modu aktifleşiyor
// kurulum modu örnek komut !1*126*2*# 1=mod 126=cihaz id si 2= kullanıcı id si
p=0; //p değeri yani buf dizisinin hangi karakterinde olduğumuzu belirten değişken sıfırlanarak buf dizisini tekrar yazılabilir hale gitiriyor
memset(buf, 0, sizeof(buf)); // buf dizisinin içerisindeki tüm verileri siliniyor tekrar yazılabilir hale geliyor
}
if(pass!=0&&buf[0]=='2') // ilk değer iki ise kod çalışır
{
mn=2; //mn 2 yapılarak priz kontrol moduna geçilir
// priz modu örnek komut !2*1*1*1*1# 2=mod bilgisi 1=priz 1 durumu, 1=priz2 durumu, 1=priz3 durumu ...
p=0;
memset(buf, 0, sizeof(buf));
}
}
if(k==1&&pass==0)
{
p=0;
Serial.println(buf);
id=atoi(buf);
Serial.println(id);
EEPROMWriteInt(20, id);
Serial.println("Wrote ID:");
Serial.println(id);
memset(buf, 0, sizeof(buf));
}
else if(k==2&&pass==0) // !HATALI KOD
{
p=0;
Serial.println(buf);
pass=atoi(buf);
EEPROMWriteInt(10, pass);
Serial.println("Wrote pass:");
Serial.println(pass);
Serial.println(pass);
memset(buf, 0, sizeof(buf));
}
else if(k==2&&mn==1)
{
p=0; // buff işaretçisi sıfırlanır
id=atoi(buf); // ikinci yıldızda verilmiş olan cihaz id bilgisi alınır
Serial.println(id);
EEPROMWriteInt(20, id); // cihaz id si eeprom un 20. bloğuna yazılır
Serial.println("Wrote ID:");
Serial.println(id);
Serial.println(EEPROMReadInt(20));
memset(buf, 0, sizeof(buf)); // buf temizlenir
}
else if(k==3&&mn==1)
{
p=0; // buff işaretçisi sıfırlanır
Serial.println(EEPROMReadInt(30) );
usid=atoi(buf); // üçüncü yıldızda verilen kullanıcı id si usid alınır
EEPROMWriteInt(30, usid); // eeprom un 30. hafıza bloğuna yazılır.
Serial.println("Wrote pass:");
Serial.println(usid);
Serial.println(usid);
memset(buf, 0, sizeof(buf)); // buff silinir
}
else if(k==2&&mn==2) // mn=2 ise cihaz priz kontrol modundadır alınan veriler p değişkenlerine yazılır
{
p=0;
p1=atoi(buf); // p1 e bufta ki değer yazılır,
if(p1==1) // değer 1 ise ilgili çıkış biti high yapılarak röle aktifleşir priz çalışır
{
digitalWrite(D0, HIGH);
}
else if(p1==0) // değer 0 ise ilgili çıkış biti low yapılarak röle pasifleştirilir priz çalışmaz
{
digitalWrite(D0, LOW);
}
memset(buf, 0, sizeof(buf)); // buff temizlenir
}
else if(k==3&&mn==2) // k değeri 3 olduğu için aynı işlem 2 numaralı priz için yapılır
{
p=0;
p2=atoi(buf);
if(p2==1)
{
digitalWrite(D1, HIGH);
}
else if(p2==0)
{
digitalWrite(D1, LOW);
}
memset(buf, 0, sizeof(buf));
}
else if(k==4&&mn==2)
{
p=0;
p3=atoi(buf);
if(p3==1)
{
digitalWrite(D2, HIGH);
}
else if(p3==0)
{
digitalWrite(D2, LOW);
}
memset(buf, 0, sizeof(buf));
}
else if(k==5&&mn==2)
{
p=0;
p4=atoi(buf);
if(p4==1)
{
digitalWrite(D3, HIGH);
}
else if(p4==0)
{
digitalWrite(D3, LOW);
}
memset(buf, 0, sizeof(buf));
}
else
{
}
}
else{}
}
Serial.println(id);
Serial.println(pass);
}
}
else{
// eğer stc değişkenimi 1 ise bu kısım çalışır. Bu kısmın varoluş sebebi server ı daha az yormaktır.
String kresource = String("http://iotsistem.000webhostapp.com/devices/")+id+String(".txt"); //kurulum sırasında cihazın id sini isim olarak alan bir txt oluşturulur.
Serial.println(kresource);
http.begin(kresource);
int httpCode = http.GET();
if(httpCode == HTTP_CODE_OK) {
payload = http.getString(); // txt dosyasındaki veri okunur
Serial.println(payload);
}
else {
USE_SERIAL.printf("[HTTP] GET... failed, error: %sn", http.errorToString(httpCode).c_str());
}
if(payload.charAt(0)=='!') // aynı şekilde ilk karakter ! ise işleme başlanır
{
bool s=false;
int j=0;
int k=0;
int p=0,mn=0;
char buf[30];
while(payload.charAt(j)!='#') //aynı şekilde #karaktere okuma işlemi devam eder.
{
j++;
if(payload.charAt(j)!='*') // aynı şekilde * karakteri anlamlı veri alımının tamamlanıp tamamlanmadığını ifade eder.
{
buf[p]=payload.charAt(j); // anlamlı veri alım süreci aynı şekilde buff değişkenine tek tek karakterlerin alınması ile devam eder.
p++; // p değişkeni arttıralarak buff dizisinin boş kısmına karakter atamasının sağlanması gerçeklenir
// Örnek komut !12345*#
Serial.println(buf);
Serial.println(payload.charAt(j));
}
else if(payload.charAt(j)=='*') // * yıldız işaretinin alınması ile okuma işlemi biter yorumlama işlemi başlar.
{
k++;
if(k==1)
{
if(stid!=atoi(buf)) // buff ile alınan veri stid değikeni ile karşılaştırılır. Eğer eşit değillerse stc değişleni 0 yapılarak server a sorgu gönderilmesi
// yani ilk kısmın çalışması sağlanır
{
stid=atoi(buf); // stid değişkeni alınan veriye eşitlenerek tekrar değişim olana kadar cihazın txt sayfasını okumasını ve server a sorgu göndermeMEsini sağlar.
// böylece server daha az yorulmuş olur.
stc=0; // stc sıfır yapılır server a sorgu gönderimi için ilk kod bloğunun çalışması sağlanır.
}
memset(buf, 0, sizeof(buf)); // buf temizlenir
}
}
}
}
}
delay(500);
}
![]() |
Notes is a web-based application for online taking notes. You can take your notes and share with others people. If you like taking long notes, notes.io is designed for you. To date, over 8,000,000,000+ notes created and continuing...
With notes.io;
- * You can take a note from anywhere and any device with internet connection.
- * You can share the notes in social platforms (YouTube, Facebook, Twitter, instagram etc.).
- * You can quickly share your contents without website, blog and e-mail.
- * You don't need to create any Account to share a note. As you wish you can use quick, easy and best shortened notes with sms, websites, e-mail, or messaging services (WhatsApp, iMessage, Telegram, Signal).
- * Notes.io has fabulous infrastructure design for a short link and allows you to share the note as an easy and understandable link.
Fast: Notes.io is built for speed and performance. You can take a notes quickly and browse your archive.
Easy: Notes.io doesn’t require installation. Just write and share note!
Short: Notes.io’s url just 8 character. You’ll get shorten link of your note when you want to share. (Ex: notes.io/q )
Free: Notes.io works for 14 years and has been free since the day it was started.
You immediately create your first note and start sharing with the ones you wish. If you want to contact us, you can use the following communication channels;
Email: [email protected]
Twitter: http://twitter.com/notesio
Instagram: http://instagram.com/notes.io
Facebook: http://facebook.com/notesio
Regards;
Notes.io Team