STM32F103C8 ile mini web server (full proje)

Başlatan z, 11 Ekim 2016, 17:15:18

z



Keil proje dosyaları

(Paket kaybı ile ilgilenmez. İnternet ortamında test edilmedi)

/****************************************************************************
  WebInit   fonksiyonu STM32F103C8 ve ENC28J60 cipinin init islemlerini yapar
  WebStart  fonksiyonu Server yazilimini baslatir
  AddString fonksiyonu verilen stringi hedef rama yazar ve son adresi dondurur
  PageLoad  fonksiyonu hazirladiginiz web sayfasinini yayinlar ve ziyaretci sayisini okur
  WebPage   fonksiyonu icine kendi kodlarimizi yaziyoruz
  Dikkat: Yayinladiginiz MyWeb alani (array'i) ustunde yapacaginiz her degisiklik aninda
  yayinlanan sayfada da degisime neden olur. Sayfayi bir kez hazirlayip bir daha 
  degistirmeyecekseniz tek MyWeb gibi bir array ile calisabilirsiniz.
  Dinamik sayfa uygulamasi yapacaksaniz iki ayri MyWeb arayi ile calismalisiniz
  Dikkat: Sayfa hazirlamadan ziyaret sayacini okumamalisiniz
  
  Devre semasi ve aciklamalar icin : w w w .cncdesigner.com/wordpress/?p=6424
****************************************************************************/

#include "stdio.h"
#include "Web.h"

char MyWeb1[1460];                                  // MYyWeb1 degistiriken MyWeb2'i yayinla
char MyWeb2[1460];                                  // MYyWeb2 degistiriken MyWeb1'i yayinla

char MyMAC [6]={0x77,0x77,0x77,0x77,0x77,0x77};
char MyIP  [4]={95,0,177,1};                    // ipconfig ile ogreneceksiniz ya da modemden ayirdiginiz IP

void SystemInit()
{ 
        WebInit(MyMAC, MyIP);		        // Donanimi ayarla
}

int main() 
{ 
        WebStart();                                      // Serveri calistir
}

void WebPage() 
{
char* index;
char dinamik[50];
int ziyaret=1;
int TextSize=1;

        while(1) 
         {
           index= AddString(MyWeb1,&StartHtml);      
           index= AddString(index, (char*) "<H1>STM32F103C8 - ENC28J60</H1>");
           sprintf(dinamik,"<H%d>Text Size=%d</H%d>",TextSize,TextSize,TextSize);
           index=AddString(index, dinamik);            
           if (++TextSize>6) TextSize=1;
           sprintf(dinamik,"<H4>Ziyaretci: %d </H4>",ziyaret);
           index=AddString(index, dinamik);
           index=AddString(index,&Ver);
           *index=0;                                           // Sayfanin sonuna null karakteri ekler
           ziyaret=PageLoad(MyWeb1);                 // MyWeb1 alani gosterilecek

//         Su anda MyWeb1 yayinda. MyWeb1 uzerindeki html kodlari bozarsak sayfa da bozulur

//         Radikal degisiklikleri MyWeb2 uzerinde yapalim

           index= AddString(MyWeb2,&StartHtml);      
           index= AddString(index, (char*) "<H1>Merhaba, Picproje uyeleri</H1>");
           index=AddString(index,&Ver);
           sprintf(dinamik,"<H2>Ziyaretci: %d </H2>",ziyaret);
           index=AddString(index, dinamik);
           sprintf(dinamik,"<H%d>Text Size=%d</H%d>",TextSize,TextSize,TextSize);
           index=AddString(index, dinamik);            
           if (++TextSize>6) TextSize=1;
           *index=0;                                            // Sayfanin sonuna null karakteri ekler

           ziyaret=PageLoad(MyWeb2);                 // MyWeb2 alani yayinda

//         Su anda MyWeb2 gosterimde. Artik MyWeb1 uzerinde oynayabilirsiniz.  

         }
}


@gerbay hocam bak bende C ile kodlamaya başladım. Bu ne rahatlıkmış yahu.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

Pinler, SPI kanalı bile değiştirilemiyor hocam


gelen buruk dönmesin,
buyrun komple açık kaynak demo program,
keilin eski versiyonuna göredir mdk legacy yüklemeniz gerekmektedir.

http://www.mediafire.com/file/33fcxfm16qfldzu/STM32_ENC28J60_DEMO.rar

Mucit23

Z peki bundan sonra kodu gelistirecekmisin. Aynı anda birden fazla cihaz bağlanı kurarsa ne olacak. Beni en çok meraklandıran yer burası.

z

Evet geliştirmek istiyorum fakat önümde 2 engel var.

1) Birden fazla client ile yazılımı zorlayacak ortamım yok.
2) TCP de gönderdiğim pakete ACK almazsam yada karşı taraf paketi yanlış aldığını bildirse
ne yapacağımı bilmiyorum.

Bu projenin asıl zevki zaten bundan sonraki kodlamada. Şuana kadar yapılan işler işin hikaye kısmıydı.

Önce bu sorunları çözmem gerekiyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

engerex

Stress Test uygulamaları var. Ama saniyede binlerce bağlantı yapıyorlar. Bağlantı hızını iyice kısman lazım. Çıktısı biraz çorba gibi olur.

Peki kodlamayı şöyle yapsan. Birinci istemciden ilk bağlantı geldi. Buna geç cevap ver ve beklet. Hemen 2. client ile bağlantıyı kur ve ardından ilk bağlantıya devam et bakalım olacak mı? Böyle bir yapay durum oluşturursan olabilir gibi.

z

El insaf. ARM CM3 çiplerde bahsediyorum.  ST'nin Stellaris serisi içinde öyleydi. Bayağı bir hazır CMSIS fonksiyon vardı.

Aşağıdaki kodlar demo kodlar.  Örnek olması için yazıldı.

Sana da bir şey beğendiremiyoruz.

Neyse onu bunu bırak da şimdi ne yapacağız?

Belli bir süre içinde ACK gelmedi ise son gönderdiğim paketi sorgusuz sualsiz tekrar yollayayım mı?


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

En başında UDP ile işim yok demiştik. Sırf TCP öncesi pratik kazanmak adına UDP'ye bulamıştık.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Hocam sen en iyisi kafamda oluşan bu tip sorulara cevap bulabileceğim kitap önerisinde bulun.

Yanlış olan, sorunu tam anlamadan kod yazmaya başlamam oldu. Kervan yolda düzeliyor fakat çok zaman kaybediyorum.



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

aradığınız kitap bu hocam buyurun https://www.redbooks.ibm.com/redbooks/pdfs/gg243376.pdf

TCP/IP konusundaki sorularınız sayfa 153 te detaylıca basit bir dille anlatılıyor.

z

Anasını sattığımın Client'i, sana yolladığım dataları almadıysan yada bana yolladığın ACK bana ulaşmadı ise bana ne, bunun derdine ben mi düşeceğim.

!!! Hey sen !!!! O makinenin başında oturan arkadaş !!!!

Explorer da hani refresh butonu var ya ona bir daha bası ver. Diyerek bu projeyi kapatacağım.

Bu pojede web sayfasının max data boyu tek bir IP pakete sığacak boyutta olmak zorunda. IP parçalama işine girmedim. (Bu da demektir ki 1460 Byte dan oluşan bir HTML sayfa olusturabilirsiniz, yani html komutlar dahil yanyana 80 karakter 18 satır)

Türkcell kullandığım modemde  port yönlendirmesi yapmadığı için serverimi dış dünyaya açamıyorum. Dolayısı ile projemi gerçek anlamda deneyemiyorum.

Mevcut projede sorun olursa bunları gidereceğim. Eğer allı güllü sayfalar yapmayacaksanız
projenin işinizi göreceğini düşünüyorum.

Evet projeyi (kütüphaneyi) ASM ile geliştirdim. Ancak C konforunu devam ettirdim.

Verdiğim örnek proje tamamen C ile yazılmıştır. C ile kendi eklentilerinizi yapabilirsiniz.

Bu arada GitHub daki dosya yenilendi.

Port yönlendirme imkanına, STM32F103C8 ve ENC28J60 kitine sahip bir arkadaş projeyi deneyip webe açılırsa sayfasını ziyaret etmeyi çok isterim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

MrDarK

#10
Konu içindeki kişisel tartışmalar ve atışmalar konu seyri açısından kaldırıldı. Ortaya çıkan iyi kötü vs her emeğe saygı duymak gerektiğini düşünüyorum.

Bu başlık hakkında üyelerimiz teknik eleştiriler yapılabilir, konuyu gereksiz görülebilir veyahut çağ dışı sayılabilir. Fakat eleştirilerinde ve önerilerinde kibar uslüpları olmalı. Bu her iki üstadım içinde geçerli.

Bu konudaki atışma şeklindeki tartışmayı Genel Sohbette devam ettirebilirsiniz. Forumun esenliği adına bize yardımcı olacağınıza eminim.

Teşekkürler;
Picproje Eğitim Gönüllüleri ~ MrDarK

LukeSkywalker

#11
@z keil kullanmıyorum. Hex kodunu da yüklersen deneyebilirim.
Bu arada şahsım adına konuyu kirlettiğim için özür dilerim.

mesaj birleştirme:: 12 Ekim 2016, 13:31:57

IP numarasını da 192.168.1.xxx
alt ağ geçidini de 192.168.1.1 olarak ayarlamalısın.

z

Tamam hex dosya hazırlayıp göndereceğim.

Ancak acelesi yok,

Şu anda biraz allı güllü sayfa hazırlamaya çalışıyorum. 1460 byte ile neler yapılabiliyor onu görmek istiyorum. Bu yüzden hemen yollayamayacağım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

LukeSkywalker

Tamam hocam ben de müsait olduğum en kısa sürede denerim.

z

#14
Hex dosya linki.

https://github.com/Bunalmis/ENC28J60---STM32F103C8/blob/master/MiniServer.hex

Server IP: 192.168.1.7

1460 byte ile bu kadar sayfa yapılabiliyor. Tablolar kaldırılırsa bir kaç satır daha fazla sayfa olur.

Text dekorasyonlarından vazgeçilirse mektup bile yazılır.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com