Esp8266 Notları

ESP8266 Nar gibi bir modül.
Kendisi çıtı pıtı, ufacık, tırnak kadar bir şey ama içinden Godzilla Sürüsü çıkıyor 🙂

Hal böyle olunca işler bazen fena karışabiliyor. Ki çoktan karışmış durumda.
İnternet çitneşip kör düğüm olmuş gibi. Sağlıklı bilgiye ulaşmak zor. Normalde çalışacak kodlar ya da bağlantılar, bilgi karmaşası yüzünden çalışmıyor.
En azından kod’dan mekatronik’e doğru yürüyen benim gibiler için.

Bu kısımdan sonrası, saatler ve saatler ve de saatlerce ESP8266 ile uğraşıp, kara deliğe düşmüş olanlar, Türkçe kaynak arayanlar ve dönüp bakmak üzere kendim için “less but more” tadında notlar.

—-

Ara sıra, bazı bazı, genellikle, sık sık, sıkılınca şu adrese uğranmalı:

https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html

—-

Öncelikle Arduinodan bağımsız olarak, ESP de kendi başına programlanabilir.
Yine öncelikle ESP deyip geçildiğine bakmamak gerekir kendi içinde ESP-01 , ESP-12, ESP32 vb.. çeşitleri mevcuttur.

ESP‘nin RST/Reset pini GND‘ye bağlamak; ESP’yi yeniden başlatır
(Fabrika ayarlarına dönüş değil, kapa-aç gibi)

AT+RST komutu da ESP’yi yeniden başlatır

—-

GPIO_0 >>> GND bağlı ise;
ESP’nin kendi içine yazılım atma modu”, aktif olur

—-

Arduino’un üzerindeki Reset pini, GND’ye bağlanınca,
Arduino kendini devreden çıkarır, sadece aracılık yapar.

Arduino aracı iken, kodları ESP’ye atabilmek için
bağlantı şekli:

ESP TX >>> TX Arduino
ESP RX >>> TX Arduino
ESP GND >>> GND Arduino
ESP VCC/3.3 >>> 3.3 volt Arduino
ESP EN/CH_PD >>> 5 volt Arduino
ESP GPIO_0 >>> GND Arduino

—-

ESP’ye kod atmak için;
Arduino donanım olarak sadece aracı iken,
Arduino kodlarını yazdığımız Arduino IDE 1.8+ arayüz programı kullanılabilir.

Bunun için şu adımlar izlenir:
– Arduino Seçenekler penceresini açın
Board yönetici URLs kısmına
http://arduino.esp8266.com/stable/package_esp8266com_index.json
girin.
Araçlar > Kart Yöneticisi > Yükle seçin
çıkan pencerede ESP aratın, bulunan son versiyonunu Kurun.

Daha sonra
Araçlar/Tools > Kart/Board menüsünden,
Arduino Uno yerine ESP8266 Generic seçin.

Böylece, kodları direk ESP’ye atmış olacağız.

====================================================
========== Arduino ve AT Komutları ile =============

Arduino’ya sadece şu kodları yükleyin:

void setup(){}
void loop(){}

Bu esnada RX ve TX pinleri bağlı ol-MA-sın.

Bağlantıları aşağıdaki şekilde yaparak;
Serial Porttan “manuel” olarak AT komutları girilebilir.

ESP VCC >>> 3.3 Volt Arduino
ESP EN/CH_PD >>> 3.3 Volt Arduino
ESP GND >>> GND Arduino
ESP RX >>> RX Arduino
ESP TX >>> TX Arduino

—-
Kontrol: AT

Ağa bağlanma modu için: AT+CWMODE=1 
Ağ kurmak Ac.Point modu için: AT+CWMODE=2
İkisi birden: AT+CWMODE=3  
3 seçilirse WPA2 vb. seçenekleri de girmek gerekebilir.

Ortamdaki ağları listelemek için: AT+CWLAP

Ağa bağlanmak için: AT+CWJAP=”wifi-adi”,”wifi-sifresi”
Tırnaklar önemli. Copy paste ile tırnaklarda sorun çıkabilir. Tırnakları yeniden klavyeden girmek daha sağlıklı olacaktır.


görsel

WiFi ile Tost Makinası Çalışmaya Başladı ;) #7

#İlk başlıkta CWLAP komutu ile WiFi ağlarını listelemeyi görmüştük.
#İkinci başıkta, Serial Screen’deki satır sonlanma seçeneklerini incelemiştik.
#Ardından 3. başlıkta, Listelediğimiz ağlar arasından kendi WiFi ağımıza dahil olmuş ESP’nin hangi IP adresini almış olduğuna bakmıştık.
#Sonra 4. başıkta, AT kodlarını Arduino’ya bırakmış ve ESP’yi 80’i port üzerinden sunucu olması için ayarlamıştık.
#Daha sonra 5. başıkta, Loop mantığını irdelemiş ve ESP’de gösterilecek yönetim-html kodlarını göndermiştik.
#Bir önceki 6. başlıkta, Pinlere elektrik göndermek üzere AÇ – KAPA butonlarına ve Void fonksiyonlara bakmıştık.


Mikro denetleyicide elektrik olduğu sürece çalışacak olan loop() fonksiyonumuzun içine yerleştirdiğimiz ac_kapa() fonksiyonumuza yakından bakalım.

Hatırlarsanız bu fonksiyonu, adres satırında ?pin=on ya da  ?pin=off geçiyor mu diye bakmak için -yani düğmeye basılmış mı diye kontrol etmek için- eklemiştik.

O halde gelecek olan yanıtları okumamız lazım. Serial’e gelecek olan her karaketi tek tek alıp, gelen değişkeni altında birleştirip içinde aradığımız kelime var mı bakacağız.
Bunun için önce serial aktif olduğu sürece (While) her karakteri gelen‘e ilave ediyoruz

Serial.println(gelen); ilave ederek, Neler gelmiş biz de görelim

Gelen karakterleri birleştirdiğimize göre, içinde :GET /?pin=on geçiyor mu diye bakabiliriz, düğmesine basıldığında adres satırında ?pin=on yazacağı için, gelen içinde bu varsa, düğme basılmış demektir.

IF: bütün kod dünyasının özeti olan iki harf. Şayet… şöyle ise.. şunları yap

Şayet (gelen içinde, GET: /?pin=on yazıyorsa) { şunları yap…  }

Bizim örneğimizde 13 nolu pine elektrik vereceğiz. (daha doğrusu voltajını arttıracağız)

Burada kodlarla hiç bir şey görünmüyor elbet ama fiziksel olarak 13 nolu pin, Rölemizin Data Pinine bağlı.

Rölenin diğer tarafında ise NC / NO pinlerinden birisi + ortadaki pin, seri olarak 220 Voltluk yönetmek istediğimiz cihazımızın kablosuna bağlı.

Kabaca şöye: 13 =[ Röle ]= __22oV__TostMakinası___[Röle]

Burada dikkat edilmesi gereken şeylerden birisi Rölenin çalışma mantığı.

Ortak bacak daima hatta (kırmızı olan) diğer tarafta ise Mavi ve Yeşil var. Görüldüğü üzre Mavi olan NC durumunda Normalde Kapalı devre konumunda. Yani takacağımız cihaz için kapalı manasında değil, devrenin kapalı olduğu manasında. Şu halde Mavi ve Kırmızı uçları Tost Makinamıza bağladığımızda, 13 pinden de HIGH geliyorsa, röle devreyi tamamlayacak ve Tost Makinasına elektrik gitmiş olacak.

Kapatmak içinse tersi.

Yey!

O halde Tost Makinası – Röle bağlantımız hazırsa, mantığımız şu:

  • AÇ butonuna basıyorum. Bu adres satırına ?pin=on yazıyor.
  • Tüm karakterleri Serialden okuyup, gelen değişkenine atıyorum.
  • Şayet gelen içinde ?pin=on varsa, 13 nolu pine elektrik veriyor.
  • 13 nolu pin açıksa Röle NC konuma gelip devreyi tamamlıyor.
  • Tata!
  • r 😉
  • Tost makinamız çalışmaya başladı 😉

 


Görsel 1, Görlsel 2, Görsel 3

WiFi ile Tost Makinası Çalıştırma #6

#1. yazıda, Bulunduğumuz mekandaki WiFi ağlarını taramıştık.
#2. yazıda, Serial haberleşme ekranındaki NL&CR yorumuna bakmıştık.
#3. yazıda, Şifremizi girerek kendi WiFi ağımıza bağlanmış ve ESP’nin IP adresini öğrenmiştik.
#4.yazıda, Elle yapılan işlemleri, Kodla yapmış ve ESP’yi sunucu olarak hazırlamıştık.
#5.yazıda, Loop fonksiyonuna değinmiş, ESP-sunucu’da gösterilecek olan Yönetim sayfamızı hazırlamıştık.


AT+CIPSEND komutu ile göndermiş olduğumuz dataya (html kodlarına) baktığımızda küçük bir nüans dikkatimizi çekmiş olmalı:

Klasik bir link kodu.
Ve butonuna tıkladığımızda, adres satırına  ?pin=on ilave etmekten başka da bir şey yapmıyor. Fakat biz, ilave edilen kelimeleri takip edersek, düğmesine basıldığını anlayabiliriz 😉

Hızlıca düşündüğümüz üzere bir tane de KAPAT butonu yaparsak ve bu buton adres satırına farklı bir şey yazdırırsa( örn: ?pin=off ), bu sefer KAPAT butonuna basılmış olduğunu anlayabiliriz.

Bi dakika.. 

Evet. ?pin=on yazdırmak yerine,
?pin=TostMakinasiON, ?pin=KlimaOn, ?pin=KombiON .. ..
yazdırırsak (ve elbetteki bağlantılarını ve kodlarını ayarlarsak) canımızın çektiği tüm cihazları WiFi‘dan kontrol edebiliriz.

Ok!
Madem öyle adres satırında ne yazıyor bunu takip etme işini yapalım. Basıldığında haberimiz olması için sürekli adres satırını kontrol etmemiz lazım. Ve önceki yazıdan bildiğimiz üzere biz istesek de istemesek de elektrik olduğu müddetçe devreler haliyle Arduino çalışıyordu. Yani loop() fonksiyonumuz tam da bu iş için biçilmiş kaftan 😉

Yapmamız gereken, Sunucu/Html kodlarını gönderdikten sonra, adres satırından (GET) gelecek değişikleri takip etmek.

Bunun için en uygun şey; CIPSEND’den sonra, ama loop() { ‘un içinde olacak bir yerde ac_kapa() fonksiyonu olabilir 😉  }

Loop’u kapatmadan önce bir iki küçük şey daha yapmamız lazım ama şimdilik yazılı akış sırasına değil, programın akış sırana bakalım.

Fonksiyon isminin başındaki void, bu fonksiyon bir şeyler yapacak ama bir yanıt döndürmeyecek demek. Dikkat edersek setup ve loop fonksiyonları da bu şekilde bir değer döndürmeyecek fonksiyonlar. Burada bazı arkadaşların kafasının karıştığını gözlemlediğim için bir benzetme yapayım.

Liseden hatırladığımız f(x) fonsiyonu bir fabrika olarak düşünelim. Plastik ham madde fabrikaya girsin, tabla kaysın, bıçaklar ayak tabını şeklinde kesim yapsın, yan kenarlar eklensin, dikip yapılsın.. sonrada taban ölçüsü alınıp “36” şeklinde bir rapor sunulsun.

Elimizdeki fonksiyon bir sürü şeyler yapıp sonrasında bize bir rapor sunuyorsa, Değer çıktısı/dönüşü olan fonksiyonlar diyoruz.

Yukarıdaki fonksiyonumuz bir değer döndürecek olsaydı, dönecek olan verinin tipini yazmalıydık. Örneğin:
int topla(x){ sonuc = x+3; return sonuc; }
byte sensor () { if(isik_degeri>100){ return 1; }  }
burada bi işlemler yapılacak sonuc ve ya 1 gibi bir dönüş yapılacak demek.

“Bir şeyler yapılacak” ama rapor/çıktı dönüşü olmayacaksa int/byte/bool vb. verip tipleri yerine void kullanıyoruz. Örn:

void biseyYap() { digitalWrite(8, HIGH); // 8. pinin voltajını arttır }

Esp8266 ile Tost Makinanızı Wifi’dan Nasıl Kontrol Edebilirsiniz? #5

Birinci yazıda, Bağlanılabilecek ağların listesini almıştık.
İkinci yazıda, Serial Ekran’da satır sonu yorumlarına bakmıştık.
Üçüncü yazıda, Kendi WiFi ağımıza katılmış ve ESP’ye ait IP adresini öğrenmiştik.
Dördüncü yazıda, Daha önce manuel yaptığımız işlemleri, Kodlara yaptırmış ve ESP’yi server moduna hazırlamıştık.


Serial.begin ve CWJAP gibi bir defa çalışması gerekli aynı zamanda yeterli olan kodlara setup() fonksiyonu içinde yer vermiştik.

Şimdi, herhangi bir basit elektrikli cihazdan gelişmiş bir elektronik cihaza, programların port dinleme mantığından dillerin _main_ fonksiyonlarına kadar pek şey etkileyen şeye sıra geldi: loop()

Günlük hayatta atıyorum tv kumandasının ses açma düğmesine basıp geçiyoruz. Oysa o anda arka planda çokça olay gerçekleşiyor. Bu işlerle uğraşmaya başladığımdan bu yana fark ediyorum ki, evdeki kumandada yazılımcının hatası var. Sebebinin loop() fonksiyonunu tam içselleştirememesi olması diye düşünüyorum.

Loop bilindiği üzere döngü demek. Arduino gibi cihazlarda loop şu demek:

While (cihazda elektrik varsa) {sonsuza kadar dönüp dur}

Burayı iyi kavramak gerekiyor. SÜREKLİ bir döngünün içindeyiz. “Şu olursa, şunu yap” dediğimizde iş BİTMİYOR. Başa dönüp, “Şu olursa, şunu yap” işlemini yeniden yapıyor. Kod yazarken buna dikkat etmek işlerin daha sağlıklı ilerlemesini sağlayacaktır.


Yukarıdaki mantıktan hareketle, yapılacak işlemleri belli bir koşula bağlayalım.

Serial’den iletişim yapabiliyor muyuz.

Güzel. Ama kartımızda arıza yoksa buradan hep Evet yanıtı gelecek. Bu yüzen hem koşulla sınırlandıralım hem de ESP’den gelen yanıt içinde Server’lığa hazır mı bakalım.

Buradan Evet gelmesi heyecanlı zira, Uzaktaki cihazın yönetim ekranını yapıp sunacağız demek.

HTML’e vakıf olanlar için şekerleme tadında olan, basit bir sayfa hazırlıyoruz.

Evet, hayli ilkel fakat işlevsel 😉

Kodlarımız şöyle:

<h3>TOST MAKİNASI KONTROL </h3>
<br><a href=\” ?pin=on\”><button type=’button’>AC</button></a>
<br>
<br><a href=\” ?pin=off\”><button type=’button’>KAPAT</button></a>

 

ESP’nin data Transferi olarak bunları sunabilmesi için bir değişkene atayıp, AT+CIPSEND ile gönderim yapmasını sağlıyoruz.

Dikkat edilirse aslında asıl komutumuz AT+CIPSEND
Burada diyoruz ki Sana şu kadar bilgi göndereceğim. //manuel olarak yazmak yerine length() ile ölçüyoruz.
Ardından da kast ettiğimiz bilgiyi gönderiyoruz.

Böylece, WiFi ağında, ESP’nin IP adresine girdiğimizde, hazırlamış olduğumuz Html Yönetim sayfasını göreceğiz.

 


forum.the-big-bang-theory.com

Esp8266 ile Tost Makinanızı Wifi’dan Nasıl Kontrol Edebilirsiniz? #4

İlk kısımda, AT kodları kullanarak ESP ile konuşmuş ve WiFi ağlarını listeleme işlemini yapmıştık.
İkinci kısımda, Serial ekranın baudrate hızı ve Both NL&CR opsiyonuna değişmiştik.
Üçüncü kısımda, Ağ listesinden kendi WiFi ağımıza bağlanmış ve ESP’nin IP adresini almıştık.


Bir başlama modu olarak, ESP8266’nın biraz(dan fazla) nazlı bir modül olduğunu söylemek gerek. Ayrıca piyasada klonun da klonu ürünler olduğu için naz oranı biraz daha artıyor.

Bununla birlikte, kendi ağırlığının kat kat fazlasını taşıyabilen canlılar gibi, cüssesine göre hayli afili işler yapabiliyor. Ki başlı başına arduino gibi bir kart aslında. Ama daha çok wi-fi, dolayısıyla iletişim üzerine yoğunlaşmış. Böyle olunca yazılım tarafı da zengin demek. Fakat bu zenginlik insanı boğabiliyor. Bu yüzden robotistan kaynaklı yayıldığını düşündüğüm kodlar üzerinden gideceğim.

Geçen sefer AT işlemlerini manuel olarak yapmıştık. Artık bunları kodlara yaptıracağız.

Öncelikle bağlanmak istediğimiz WiFi ağının adını ve şifresini tanımlıyoruz.

Cihaz açılırken 1 defa çalışmasını istediğimiz durumlar için kullandığımız setup() fonksiyonumuzu başlatalım

bunun içindeyken Serial haberleşmeyi başlatmanın yanında, ilgili pinlerin INPUT ya da OUTPUT mu olduğunu belirtelim.

Dikkat  ederseniz daha önce dikkat çektiğimiz 115200’ü burada kullanıyoruz. Buradaki değer ve seri ekran penceresindeki değer aynı olmazsa boşluk ya da anlamasız şeyler görüntülenecektir.

Haberleşme gerçekleşiyor mu diye kontrol ediyoruz, olduysa ESP’yi STA(staion)/İstasyon moduna alıyoruz.

=2 olursa Access Point, =3 olursa ikisi birden aktif olsun demek.

Ve yukarıda #define ile tanımladığımız bilgileri kullanarak WiFi ağına bağlanıyoruz. Daha metin olmak için 6 saniye bekliyoruz.

Ağ bağlantımız başarılı olduysa Modem ya da modem niyetine kullandığımız telefon, ESP de ağa dahil olduğu için ona da bir IP adresi verecek.

Hatırlasanız AT+CIFSR komutu ile bu IP’yi almış ve not etmiştik.

ESP’nin bu IP üzerinden bir web sayfası tadında ulaşabilir olması ve Server gibi hizmet verebilmesi için yapmamız gereken şu:

Mux: Multi/çoklu bağlantıya izin verecek şekilde 80. porttan tost siparişleri beklemeye başlanmıştır efenim 😉

Esp8266 ile Tost Makinanızı Wifi’dan Nasıl Kontrol Edebilirsiniz? #3

İlk kısımda, Arduino ile ESP haberleşmesini ve WiFi ağlarını listeleme işlemini yapmıştık.
İkinci kısımda ise Serial Port ekranında kullanılan Both NL&CR opsiyonundan bahsetmiştik.


Kaldığımız yerden devam edelim.

Serial Ekran üzerinden ESP’ye AT komutlarını sağlıklı göndermek için NL&CR‘ye ilaveten Baud değerimiz 115200 olmalı. (Şu an konumuz değil ama istenirse 9600 gibi farklı baud’lara ayarlanabilir)

Sonraki adıma geçmeden önce, AT+CWLAP komutuna karşılık olarak gelen yanıta bir göz atalım:

+CWLAP:(4,"MatrixLLC",-89,"c0:c5:20:20:f6:e9",6)
+CWLAP:(3,"EyeLin",-77,"e2:ca:94:56:bf:33",1)

Buradaki kalıp şöyle: +CWLAP: <ecn>,<ssid>,<rssi>,<mac>[,<mode>]

  • ecn: WiFi veri şifreleme türü.
    0 → Şifresiz, 1 → WEP, 2 →WPA_PSK, 3 → WPA2_PSK, 4 → WPA_WPA2_PSK
  • ssid: Ağın Adı (değişiklik yapmadıysanız AirTies_2648_46 gibi modem kimliği de olabilir)
  • rssi: Sinyal yoğunluğu
  • Modemin Mac Adresi (erişim noktası telefon ise, telefonun adresi)
  • mode: Erişim türü.
    0 → Manuel, 1 → Otomatik


WiFi ağımıza bağlanalım.

Hangi ağa bağlanacağımızı ve şifreyi girmemiz gerekiyor.  Yine serial ekrandan:

AT+CWJAP=”MatrixLLC”,”Welcome~To~RealWorld~6″

gönderdiğimizde, bağlanma gerçekleşirse OK mesajı dönecek. YEY!

(Fazla sayıda ağ ile çalışıyorsanız ve bir şekilde o anda hangi ağda olduğunuzu kontrol etmeniz gerekiyorsa AT+CWJAP? komutunu kullanabilirsiniz. Karşılık olarak MatrixLCC benzeri ağ adınız dönecektir: +CWJAP=”MatrixLLC”)

 


ESP Modülümüzün IP Adresi

Bir ağa bağlanmak demek aynı zamanda bir IP adresi almak demek. ESP modülümüz de buraya bağlandığına göre ona atanmış olan IP adresini görmek için AT+CIFSR komutunu göndermemiz yeterli.

192.168.1.80 adresini değiştirip, elle kendi istediğiniz bir Yerel IP girmek isterseniz  AT+CIPSTA=”192.168.1.108″ komutunu kullanabilirsiniz.

Böylece nasıl bi ofisteki bilgisayarlar birbirini görüyorsa, ESP de ofisteki cihazlardan birisi konumuna gelmiş oldu 😉

İşin çok daha güzeli, ofisteki programcı arkadaşın bilgisayarına bağlandığımızda, makinasını sunucu olarak ayarladığı için hazırlamış olduğu web sitesini onun bilgisayarından görebildiğimiz gibi, kelimenin tam anlamıyla parmak kadar ESP de sunucu görevi görebiliyor!


ESP’nin IP adresini bir yere not edelim ve Transmitter/Receiver : Verici/Alıcı manalarına gelen RX-TX pinlerindeki bağlantıların yerini değiştirelim.

Bağlantılar şöyle olmalı:
ESP RX → Arduino TX
ESP TX → Arduino RX

Hazır pin bağlantılarını yaparken, Led, Röle, Motor, Isı/Işık sensörü, Buzzer.. gibi kullanmak istediğiniz parçalar varsa onların kablolarını da takıverin. Çünkü WiFi’dan bunları (bağlı oldukları pinlerini) yöneteceğiz 😉

[devam edecek]


görsel 1, görsel 2 ve ileri okuma

Esp8266 ile Tost Makinanızı Wifi’dan Nasıl Kontrol Edebilirsiniz? #2

Önceki yazıda ESP8266 modülünü RX-RX ve TX-TX olacak şekilde, Arduino’ya bağlamıştık. Ardından Serial Port üzerinden AT Kodları göndererek, ortamdaki mevcut WiFi ağlarını bulmuştuk.

Buraya kadar her şey yolunda gitti ise, aşağıdaki klasik bir WiFi Ağları Listesinin

Bu kez Serial Ekran‘da gelmesi gelmesi gerekiyor

+CWLAP: (4,”Matrix_2.4Ghz”,-89,”c0:c5:20:20:f6:e9″,6)
+CWLAP: (4,”SUPERONLINE-WiFi_4668″, -89,”00:0c:43:87:62:38″,1)
+CWLAP: (2,”ZyXeL_HGW_X3UNN”,-34,”08:86:3b:8c:24:74″,6)
+CWLAP: (3,”Tilgin-eCcFXGvLZMY”,-32,”08:86:3b:8c:24:75″,6)
+CWLAP: (4,”Tilgin-hZYFzRMGiFgd”,-90,”64:70:02:8e:e8:88″,3)
+CWLAP: (3,”EyeLin”,-77,”e2:ca:94:56:bf:33″,1)


Burada küçük ama önemli bir detaydan bahsetmek lazım. Serial Ekran penceresinin Sağ Alt köşesinde malum BaudRate var bunun değerinin doğru olması lazım. Bizim örneğimizde bu değer 115200

Benzer şekilde hemen solunda Satır/Sonu yorumla kısmının Both NL&CR olması gerekiyor.

// Both NL&CR için referans verebileceğim Türkçe bir kaynak olmadığı için arada bi koşu Hede sözlükte açıklama başlığı yazıp geldim 😉
Atiyi Karanlık Görerek Azmi Bırakmak şirinde ne demiş M. Akif:

Karşında ziyâ yoksa, sağından, ya solundan
Tek bir ışık olsun buluver… Kalma yolundan.
Âlemde ziyâ kalmasa, halk etmelisin, halk!

NL&CR mantığına bir de örnek verelim isterseniz; “Merhaba Dünya” yazıp durduğumuz Dijital Dünya ile Reel Dünya arasındaki bağların nasıl kurulduğunu anlamaya da yardımcı olur.

Biliyoruz ki ne Harddisk‘te, ne RAM‘de ne de taşıdığımız USB Flaşh disklerin içinde, Harfler yok. Haliyle kelime arası boşluklar ve satır başları da yok.
Ama hazırlanan bir ödev ya da belgede bunlar mecburen var. Sadece “Elektrik var, elektrik yok”tan anlayan bir cihazda bunları nasıl yapacağız?

Mors – Lamba – ASCII

Görüş mesafesindeki bir evle haberleşecek olalım. Lambayı Aç-Kapa yaparak mors albesi tadında anlaşabiliriz.

AçKapaAçKapa = A olsun
AçAçKapaAç = B olsun
KapaAçKapaAç = C olsun

gibi.. Yani 1010 = A, 1101 = B, 0101 =C

Şöyle bir sorun var ben 1101’e A derken, başkaları buna F diyebilir. Ayrıca bu listede ilerledikçe fark edeceğiz ki 4 hane bize yetmeyecek. İşte bu yüzden uluslar arası bir standarda gidilmiş ve 8 hane/adet 0-1’e karşılık gelecek karakterler tablosu ortaya çıkmış: ASCII

8 adet 1 ya da 0  = 1 BYTE

Konuşurken hep MegaByte, GigaByte kelimelerinin geçmesi bu yüzünden 😉


Reel bir örnekle, ASCII tablosuna bakarak:

S harfi: 01010011
E harfi: **01000101**
L harfi: 01001100
A harfi: **01000001**
M harfi: 01001101
H harfi: **01001000**
E harfi: 01000101
D harfi: **01000100**
E harfi: 01000101

SELAMHEDE yazabilirim ve hafızada
01010011**01000101**01001100**01000001**01001101**01001000**01000101**01000100**01000101
şeklide saklanabilir.

Peki boşluklar ve satır atlamalar varsa?
SE LAM
HE DE
şeklinde bir yazım için Boşluk için ve de Satır atlama içinde birer 0-1 karşılığı olursa sorun çözülür sanki 😉

Boşluk = 00100000
Satırbaşı = 00001010
SE00100000LAM00001010HE00100000DE

Benzer şekilde Arduino Serial Port’taki 0 ve 1 yorumlamaları için
NL: Yeni satır
CR: Satır başı
demek.

So..

Elimizdeki ESP8266 ile haberleşirken AT kodlarının daha sağlıklı işleyebilmesi için NL&CR kullanıyoruz. Başka projelerde izlenecek olan yola göe sadece NL olan ya da ikisi de olmayan durumlar olabilir.

[devam edecek..]


Görsel