STM32F103 İLE WEB SUNUCUSU

ESP8266 ile ev otomasyon sistemleri geliştirmek çok kolaylaştı. Ücretsiz olarak sunulan bol miktarda görsel malzeme ile çok alımlı WEB sayfaları hazırlanabiliyor. STM32 serisinin de WiFi yetenekleri olan tipleri, bunlarla kullanılabilecek zengin kütüphaneleri var.

Ben elimdeki basit malzemeleri kullanarak, STM32F103 ile ESP8266-01 i birlikte çalıştırarak ev otomasyonunda kullanılabilecek bir WEB sunucusu yapmaya karar verdim. Öyle olağanüstü bir şey değil, ESP zaten işin büyük kısmını yapıyor. Bana sadece bunu STM32 ile UART üzerinden konuşturmak ve WEB sayfalarını hazırlamak kalıyor.

AYNI İŞ STM32 OLMAKSIZIN SADECE ESP YONGALARI İLE YAPILAMAZ MI ?

Elbette ESP ailesinden kontrolcüler kullanılarak dört başı mamur WEB sunucuları ve bunlara bağlı çalışan ev otomasyon sistemleri kurulabilir. Özellikle ESP32 serisi, bunların çift çekirdekli olan son derece güçlü tipleri ile her şeyi yapmak mümkün.

ESP mikrodenetleyicilerinin geliştirme platformu Arduino IDE. Arduino’nun hazır kütüphanelere dayalı geliştirme ortamını öteden beri sevmemişimdir. Bu ayrı bir tartışma konusu olabilir. Ama önde gelen neden bu değil.

STM32/ESP8266 ikilisi ile çalışmayı seçtim çünkü, her iki markanın da en küçük, en kolay erişilebilen ve en ucuz mikro denetleyicilerinden oluşan zengin bir envanterim var. Ayrıca STM32 mikrodenetleyicilere göre geliştirilmiş adaptör kartlarım var, geliştirme platformlarına hakimim, bir yazılım kütüphanesi birikimim var.

Sonuç olarak; yeni başlıyor olsaydım farklı bir yaklaşımım olabillirdi, fakat sevdiğim ve hakim olduğum STM32 ekosistemine ESP ile WiFi ve TCP IP yeteneklerini katarak devam etmek daha cazip geliyor. ESP olmasaydı, STM32 nin kablosuz bağlantı yetenekleri olan yeni mikro kontrolcülerine el atabilirdim. Ama dediğim gibi elimdeki malzemeleri değerlendirmek istiyorum.

STM32 ile ESP arasındaki görev paylaşımı şöyle olacak : ESP sadece WiFi üzerinden internete bağlanacak, WEB sunucusu fonksiyonlarını html sayfalarını, css kodlarını barındıracak. İstemcilerden gelen komutları UART üzerinden STM32 ye iletecek. STM32 de lokal olarak yürütülecek tüm işleri yapacak. Röleleri açıp kapayacak, ekranında kullanıcı arayüzünü sunacak, lokal komutları alıp gereğini yapacak.

SİSTEM KURULUMU

Başlangıç projemiz basit. Amaç ESP2866_01 ile WiFi üzerinden çalışan bir WEB sunucuyu test edeceğiz. STM32-ESP8266_01 arasında kesinti (interrupt) tabanlı bir ring buffer ile UART haberleşmesi kuracağız. ESP bu bağlantı üzerinden STM32 ye kullanıcılardan gelen komutları, bunun yanısıra ESP’den olabildiğince çok katkı sağlamak üzere kendisine bir görev daha verdim. Bir DHT22 sensör ile ölçtüğü sıcaklık ve nem bilgilerini STM32 ye aktaracak.

Kullandığım mikrodenetleyici STM32F103RB, bir Minikit S geliştirme plaketi üzerinde çalışıyor. SPI arayüzlü TFT takılmasına uygun. Bu kiti seçmemin nedeni, PCB yi tasarlarken bunun bir kenarında ESP8266 takılması için koymuş olduğum soket. Buraya takılan ESP8266, STM32 nin UART1 (PA9 ve PA10) portuna bağlanmış oluyor. Fotoda görülen mavi renkli DHT22 sensör, beslemesini STM32 kitinden alıyor, sinyal ucu ESP8266 nın GPIO2 pinine bağlı.

ESP8266 BESLEME VE TOPRAKLAMA KONULARINA DİKKAT

ESP8266 nın öyle minik göründüğüne aldanmamak gerek. Özellikle WiFi veri transferleri sırasında 3V3 beslemeden yüzlerce miliamper akım çekiyor. Bu akımlar darbe yığınları (burst) halinde, multimetre ile görülmesi mümkün değil. STM32 ile aynı gerilim regülatöründen besleniyorsa, sorun çıkma ihtimali çok yüksek oluyor. Görünüşte gayet güzel çalışıyor gibi görünse de istemciler (client) WEB sayfasını açamayabiliyor, yanıt süreleri uzayabiliyor sistem kararlı çalışmayabiliyor.

ESP’nin STM32 ile paylaştığı toprak dönüş yolları dahi sorun yaratabiliyor, ESP nin kendine ait, doğrudan besleme kaynağına giden kalın (2 mm den geniş) besleme hatları olması gerekiyor. Besleme kaynağının dinamik yük regülasyon karakteristiği de iyi olmalı.

Plaketimin alt tarafında ESP besleme girişinde 220µF lık ilave bir kondansatör lehimli. Plaket üzerinden giden toprak-besleme dönüşüne eklenmiş bir de 0.75mm2 tel bağlantı var.

YAZILIM

Bu projede STM32 ve ESP8266 ya ilişkin yazılımlar söz konusu.

STM32 TARAFI

STM32 şu an için sadece ESP8266 dan gelen mesajları UART1 üzerinden dinliyor. Sadece dinliyor, gelen komutu TFT ekranda görüntülüyor, başka da bir şey yapmıyor.

Gelen mesajlarda anlık sıcaklık, nem, basınç bilgileri ile, WEB sayfasına erişen kullanıcıların 7 adet röle çıkışına ilişkin aç/kapa komutları var. Nasıl bir alet yapacağıma karar verince bu röleleri bağlayıp STM32 yazılımını ona göre tamamlayacağım. Muhtemelen ev içi sıcaklığı ölçerek kombiye kumanda eden bir alet olacak, yeni kombimiz için eskisinden daha akıllı bir cihaz olsa iyi olur.

STM32 bu projede UART1 i Kesinti (Interrupt) modunda, bir ring buffer ile kullanıyor. Yazılım çalışmasını yine STM32 cubeIDE ortamında yapıyorum.

ESP8266 TARAFI

Sistemin WEB sayfalarına ulaşan istemcilerin (client) karşısına ESP8266 ile çıkıyoruz. ESP8266 da WiFi, TCP IP ve WEB sunucusuna ait kodlar bulunuyor. Bilindiği üzere ESP8266 kodlarını Arduino IDE üzerinde hazırlıyoruz. Bunun için kullandığım çeşitli kütüphaneler var.

ESP8266 yı yerel WiFi ağın erişim noktasına statik olarak belirlediğim bir IP ile bağlıyorum. Böylece sisteme erişmek istediğimizde her zaman aynı IP yi kullanabiliyoruz.

ESP8266 bu projede asenkron WEB Sunucu modunda çalışıyor, kullanıcı bunun bir fark yarattığının farkına varmayabilir, ancak tarayıcısında açık duran sayfanın, tazele tuşuna basmaya gerek olmadan kısa aralıklarla güncellendiğini farkedebilir. Yani ziyaretçimiz sayfada kaldığı sürece sıcaklık, nem, basınç, bağlı cihazların durumları vb parametrelerdeki değişikliklerin sürekli olarak güncellendiğini görecektir.

Sunucuya ilişkin WEB sayfalarının html kodlarını ve css kodlarını ESP8266 nın dosya sisteminde tutuyorum. Böylece program kodunu yeniden yüklemek zorunda kalmadan WEB sayfalarında değişiklik yapmak kolaylaşıyor.

ESP ile ilgili daha önceki yayınlarım :

ESP Flash Belleğe dosya kaydetmek : ESP de HTML sayfaları ve CSS dosyalarını program kodundan ayrı olarak ESP nin flash belleğinde ayrılan bir yere kaydederek kullanıyoruz. Böylece Arduino program koduna dokunmadan, herhangi bir kod editörü ile hazırladığımız bu sayfalar üzerinde ana koddan bağımsız olarak çalışabiliyoruz.

ESP8266 Uzaktan yazılım güncelleme : Aşağıdaki paragrafta bu konuda biraz daha bilgi bulabilirsiniz.

ESP8266 WEB Server : ESP ile ilk projem. Epeyi eski yıllara ait bu yayında kodlar yok, sadece donanım hakkında bilgi var.

ESP8266 NIN UZAKTAN YAZILIM GÜNCELLEMESİ

OTA – uzaktan yazılım güncelleme özelliğini ilk defa bu projede devreye soktum, çok da memnun kaldım. Bunun yapılışı için ESP8266-UZAKTAN YAZILIM GÜNCELLEME başlıklı yayınıma bakabilirsiniz.

Hem program kodu, hem de dosya sisteminde kayıtlı html, css veri dosyaları adeta sistem yanı başınızda bilgisayarınıza bağlı imiş gibi güncellenebiliyor.

YAZILIM KODLARI

Kodları fazladan açıklama yapmadan veriyorum. Aslında ESP8266 kodlarını böylece vermenin yeterli olduğunu sanmıyorum. Çünkü, kullanılan kütüphanelerin indirilip yüklenmesini de anlatmak gerekir. HTML ve CSS dosyalarının flash bellek üzerindeki SPIFSS dosya sistemine kaydedilmesi için Flash Belleğe dosya kaydetmek adlı yayınıma bakmalısınız.

STM32 KODLARI

Proje yapılandırması ve Pin ayarları aşağıdaki gibi. TFT_Basic ve Uart_Ringbuffer kütüphanelerine linkler var. Başka yayınlarda bu kütüphaneler hakkında bilgi vermiştim. (İlgili yayına ulaşmak için buraya bakabilirsiniz : UartRingBuffer kullanımı)

Kodların STM32cubeIDE de “User Code” bölgelerinde olanlarını aşağıda veriyorum, yani cubeIDE nin oluşturduğu kodlara benim eklediğim kısımları. Bunların hepsi de main.c içinde.

TEST FONKSİYONU

ESP İÇİN ARDUINO KODLARI

ESP kodlarını yeni bir uygulamayı denemek üzere Google Docs üzerinden veriyorum. Aşağıdaki linklere tıklayarak program dosyalarına erişebilir, kopyalayabilir ya da indirebilirsiniz.

İlk dosya, .ino uzantılı olan Arduino program dosyası. Diğerleri bu .ino dosyası ile aynı klasöre “data” isimli bir alt klasörde yerleştirilerek ESP nin flash belleğine kaydedilecek. Yani dosyalarınız aşağıdaki gibi yerleştirilmiş olacak. Data klasöründeki dosyaları Flash Belleğe dosya kaydetmek başlıklı yayınımda anlattığım gibi ESP nin flash belleğine kaydedeceksiniz.

STM32_ESP8266_Web_Server_LittleFS.ino DOSYASI
HTML SAYFA Kodu : Index.html (FLASH BELLEK DOSYA SİSTEMİNDE – SPIFSS)
HTML SAYFA KODU : PAGE2.html (FLASH BELLEK DOSYA SİSTEMİNDE – SPIFSS)
HTML SAYFA KODU : page3.html (FLASH BELLEK DOSYA SİSTEMİNDE – SPIFSS)
sTyle.CSS DOSYASI (FLASH BELLEK DOSYA SİSTEMİNDE – SPIFSS)

SONUÇLAR

Karşılama sayfası bu. Basınç sensörüm olmadığından orada yazan rakam uyduruk.







İkinci sayfada 3 röle daha var. Üç röle de üçüncü sayfada var. Şimdilik “Röle1, Röle2 vb. isimler var, ama nihai sistemde kontrol edilen cihazların isimleri olacak.






Bu da mobil telefon ekranındaki görünüm.

Bu yayının sonu – Selçuk Özbayraktar Eylül 2020

5 Replies to “STM32F103 İLE WEB SUNUCUSU”

  1. İyi günler ben de böyle bir uygulama yapmaya çalışıyorum fakat stabil bir çalışma elde edemedim. Keil kullanarak kodlama yapıyorum bir kaç hazır kod buldum fakat onlar bile stabil çalışmadığı için kendi kodlarıma geçemedim. Stm32f401re kartını kullanıyorum yardımcı olursanız sevinirim

    1. Mehmet Bey, elimden gelen bir şey olursa yardımcı olmak isterim. Ancak sorununuz hakkında pek bilgi vermemişsiniz.

      Bu çalışmanın STM32 ve ESP olarak iki ayağı var. Bunlar birbirinden arada bir bilgi alıp verme dışında bağımsız çalışıyorlar. Yani öncelikle tek başına ESP yi ve tek başına STM32 yi çalıştırabilmiş olmanız gerekiyor. Bunlar birbirine bağlı olmadan da çalışabiliyor olmalılar.

      Hangisi stabil çalışmıyor ? WEB sayfaları mı açılmıyor? Yoksa STM32 tarafında mı bir sorun var?

      Selamlarımla,

      1. Şöyleki esp8266 yı arduino vasıtasıyla güncelledim ve internete bağladım ve orada bir web server kurup onu gördüm aynı işlemleri stm32 de yapmak istedim internetten hazır bir kod buldum ringbuffer ve esp8266 için yazılmış kütüphaneleri olan bir kod bunu stm32 ime yüklediğimde ilk başta terminalden bilgiyi alamama rağmen bağlandı vesayre webserver ı görüyor ve ledi açıp kapatabiliyordum fakat bunu da 1-2 defa yapıyor daha sonrası bağlantı kopuyor ve tekrar restlemem gerekiyordu kartı. Şimdi ise terminalden bağlandı yazısını anlıyorum fakat bu seferde webserver hiç bir şekilde açılmıyor sayfa yükleniyor ve bu şekilde kalıyor.

        1. Yani önce tek başına ESP yi sorunsuz çalıştırdınız. Ama sonra aynı işi sadece STM32 ile, ama ESP kütüphanelerini kullanarak yapmaya çalıştığınızda kısmen başarısız oldunuz. Kısmen diyorum, çünkü internete bağlanmayı başarmışsınız ama kesintili olmuş. Doğru mu anlıyorum ?
          Eğer durum anladığım gibi ise sizi kutluyorum. ESP kütüphaneleri ile STM32 yi bu kadar da olsa çalıştırabildi iseniz benden epeyi ileridesiniz Mehmet Bey, benim sizden öğreneceklerim var demektir. Örneğin, STM32 nin internet erişimini sağlamak için fiziksel seviyede ve protokol seviyelerinde ne kullandınız? Kablosuz bağlantı ise bunu ne ile sağladınız? Yoksa ethernet bağlantısı mı kullandınız?
          STM32 yi tek başına Ethernet üzerinden internete bağlayarak WEB sunucusu yaptığım bir projem oldu vaktiyle. WEB sayfa html kodları hem STM32 hem de ESP için aynı olabiliyor, ama bunun ötesinde aynı kütüphaneleri kullanmak hiç aklıma gelmemişti.

  2. estağfurullah ben sadece internetten bulduğum bir kaç hazır kodu denedim evet kısmen çalıştı ama aynı kod şu an çalışmıyor ya da daha basit bir yapımı var mıdır? benim amacım sadece internet üzerinden bir led kontrol etmek bunu basit bir şekilde sadece hal kütüphaneleri ile yapabilir miyim?

Leave a Reply

Your email address will not be published. Required fields are marked *