TCP/IP Arduino és Delphi 7 közt

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: Bazs87 » 2014. november 18. kedd, 15:08

Sziasztok!

Delphi 7-tel szeretném etherneten kommunikációra bírni az arduinomat.
A delphi-s kódhoz ez volt a mintám: http://delphi.about.com/od/networking/l/aa112602a.htm
A delphis socket megjelenítését ezzel a linkkel oldottam meg: http://www.entwickler-ecke.de/topic_TCl ... 438,0.html

A kód működik két pc közt, igaz túl sok hibakezelés nincs benne.

A nagy sikerélménytől felbuzdulva nekiestem, hogy valami hasonlót összeeszkábáljak arduinoval is:
(minta: http://vellamy.blogspot.de/p/sockettcpiparduino.html)

Kód: Egész kijelölése

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };     // ez lenne az arduino ethernetshield mac-je
IPAddress server(192,168,1,176);                                  //ez lenne a gep amivel kommunikalok
byte port = 502;                                                            // ezen a porton fogadná az adatokat a pc

EthernetClient client;

void setup() {
  Serial.begin(9600);
 
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, port)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("Connecting with Arduino Ethernet");
    client.println();
  }
  else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

 void loop() {
   // if you get a connection, report back via serial:
  if (client.connect(server, port)) {
     client.print("Uno1_");
     client.println("info");
  }
  else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
  delay(1000);

   // if there are incoming bytes available from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
  delay(1000);
 
  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    for(;;)
      ;
  }
  delay(1000);
}


milyen hibát követtem el, amiért nem akar működni?
itt akad le(még a setupban): if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet"); ...

Ha a kód második felét jól értem akkor fogadnék is adatot, ahhoz viszont kellene talán a saját shieldre is egy ip-t megadni, az viszont nincs a kódban. (a cél pc ip-je meg a küldés miatt hasznos, de az fentebb található, ha jól értem)

Köszi előre is!

Üdv!
Bazs87

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9961
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: Robert » 2014. november 18. kedd, 15:28

Az Arduino DHCP módban van?
Ha jól értem ő lenne a kliens.

A PC-d a szerver?
A PC-n szerveralkalmazás fut adott porton?


Közvetlen PC-Arduino kapcsolat vagy hálózat, Router, kábel, stb?
A csomag figyelésre a PC-n ott van az Etherreal program?
Az Arduino előtt egy HUB, egy PC és úgy a Routerbe, és a itt futó PC-n fut az Etherreal csomagfigyelő-ellenőrző szoftver?

Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: Bazs87 » 2014. november 18. kedd, 15:37

az arduino egy ethernet kábelen lóg, ami direktbe van dugva a PC-re. A PC-n a delphi-s program server verziója fut, várja a beérkező adatokat. A gép ip-je 176-tal, az arduinoé 178-cal végződik(volt olyan próbálkozásom amiben deklaráltam is, az se akarta a jót)
Etherreal program nincs, wiresharkkal próbálkoztam, de nem mutatott semmit, mivel a program már a setup első sorai közt elakad.
A DHCP-s kérdés megválaszolásához, illetve először is a megértéséhez a segítséged szeretném kérni, hol van ez meghatározva a kódban?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9961
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: Robert » 2014. november 18. kedd, 19:59

DHCP - sehol.
PC nem ad címet, deklarálni kell.


Wireshark _nélkül_ ne is hálózatozz....
Mintha elektronikával foglalkoznál multiméter nélkül...

Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: Bazs87 » 2014. november 19. szerda, 7:37

és első pillantásra nem tűnik fel neked valami szarvas hiba a programban? bízom benne, hogy valami hasonló turpisság lesz.
Esetleg nincs valami jó kis linked működő példakóddal?
a kétirányú kommunikációt amúgy hogyan lehetne megoldani? amennyire most értem kb cserélgetni kellene dinamikusan, hogy ki a server és ki a kliens, de gondolom erre már van rég megoldás.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9961
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: Robert » 2014. november 19. szerda, 12:41

Szervert/klienst nem cserélgetünk.

Ami neked kell az nem az UDP véletlenül?
Kell a visszaigazolás (TCP)?

Arduino minták közt ott a chatserver/chatkliens (pl.)

Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: Bazs87 » 2014. november 19. szerda, 23:46

lépésről lépésre szeretném, előbb az egyirányú kommunikációt valahogy működésre bírni, ha az megvan jöhet a 2irányú.
A tippet köszönöm, a mintaprogramot felboncolom!:)

Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: Bazs87 » 2015. június 22. hétfő, 6:48

sziasztok,

a kommunikációt sikerült összehozni a telnet client és a chatserver minták alapján.
Egy nehézkes rész maradt még: amint használom a client.print(*) parancsot és egy összefűzött betűsort használok egyben átadja egy sorba a karaktersort, amint változót adok meg neki elmúlik a szép világ és akármit csinálok csak random mértékben feldarabolva küldi el a változóm. Nincs valami ötletetek?
Ez csak a tesztkód eleje, későbbiekben DS18B20 hőm értékeket szeretnék másodpercenként küldeni, de amíg nem stabil a küldés addig nem tudok továbbmenni.
Próbálkoztam client.printtel, .println-nel, illetve .write-tal is, de nem lett jobb az eredmény.
(A write-nél bejött a char* char** -os probléma, amit nem igazán látok tisztán és nem tudok egyikből másikba konvertálni, egyáltalán van olyan fv ami integerből char-rá formáz valamit? nekem a char() nem működött)

az is lehetséges, hogy a teszthez használt ethernet serverben van a hiba, az is saját kreálmány, de eddig a pc-s párjával gond nélkül működött.

Köszi előre is!

Kód: Egész kijelölése


#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
IPAddress server(192,168,1,171);
EthernetClient client;

boolean connct = false;


void setup() {
  tcp_init();
}


void loop() {
  //if (client.available()) {
  //  char c = client.read();
  //  Serial.print(c);
  //}
  if ( client.connected() ) {
    float temp = 24.1235;
    client.print( "1_" + String(int(temp*10)) );
  }
 
  delay(1000);
 
  if (!client.connected()) {
    client.stop();
    connct=false;
  }
 
  if (!connct){
    tcp_init();
  }
}

void tcp_init(){
  Ethernet.begin(mac, ip);
  delay(1000);
  if (client.connect(server, 502)) {
    connct=true;
  }
}


Avatar
rostasc3
Biztosítékgyilkos
Hozzászólások: 52
Csatlakozott: 2009. október 20. kedd, 6:00

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: rostasc3 » 2015. június 22. hétfő, 19:55

------------------

Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: Bazs87 » 2015. június 23. kedd, 21:24

rostasc3 írta:------------------

ez mit akar jelenteni? Ha valami alapvető hibát vétettem kérlek nevezd meg, a sorminta nem egyértelmű számomra.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9961
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: Robert » 2015. június 23. kedd, 21:30

Valami válasz volt, 10 percen belül meggondolta a válasz magát:)

Avatar
rostasc3
Biztosítékgyilkos
Hozzászólások: 52
Csatlakozott: 2009. október 20. kedd, 6:00

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: rostasc3 » 2015. június 23. kedd, 21:59

Hirtelen felindulásból azt akartam mondani, hogy ez a fajta string összekapcsolás nekem sem sikerült, de aztán rájöttem, hogy tévedek.
Ugyanígy akartam összekapcsolni két stringet, és a program hibázott. Azt hittem, hogy én nem tudok valamit, így megkerültem a problémát, és az első stringnek foglalt megfelelő méretű memóriaterületre a másik stringet byteonként hozzámásoltam, a végére meg egy \0-t.

A fórumban viszont nem találtam hozzászólás törlést, így csak egy sorminta lett belőle. Ilyen egyszerű, csíkos sorminta.
:-)

Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: TCP/IP Arduino és Delphi 7 közt

HozzászólásSzerző: Bazs87 » 2015. június 27. szombat, 20:03

az arduino kód működik, a delphi lekérdezési ciklusidejét kellett lelassítani, úgy problémamentesen működik.


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: Bing [Bot] valamint 1 vendég