Pages: [1] 2   Go Down
Author Topic: Arduino Nano V3.0 + ENC28j60 + Webserver + RC-Switch....  (Read 2188 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi ihr µler smiley-wink

Ich bin seit ca. 3 Wochen auch dabei und bin begeistert!
Allerdings war mir "damals" nicht bewusst das es verschiedene Netzwerk Chipsätze gibt und bin daher auf den ENC28j60 gekommen.
Jetzt habe ich schon viel Zeit mit der Suche nach einer brauchbaren Lib vertan.....

Habe dann ja auch eine gefunden die mir brauchbar erschien, damit habe ich auch ein kleinen Webserver zum laufen gebracht.
Nun habe ich aber das Problem sobald ich über rc-switch ein Steuersignal ausgebe das sich der Server weghängt da die Variable rec voll gespämmt wird und ich kann es nicht nachzuvollziehen wie das zustande kommt.

Ich hoffe das mir hier Jemand mit mehr Erfahrung  helfen kann.

Soo hier der Code:
Code:
#include <etherShield.h>
#include <ETHER_28J60.h>
#include <RCSwitch.h>

//Netzwek Conf
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};
static uint8_t ip[4] = {192, 168, 0, 88};
static uint16_t port = 80;

// RCSwitch Conf
RCSwitch mySwitch = RCSwitch();
int RCTransmissionPin = 12;

ETHER_28J60 e;

void setup()
{
  Serial.begin(9600);
  e.setup(mac, ip, port);
  mySwitch.enableTransmit( RCTransmissionPin );
}

void loop()
{
  char* rec;
  int recint;
  if (rec = e.serviceRequest()){
//-----------------------------------------Webseite--------------------------------------//       
        e.print("<html><head><title>Arduino HomeContol</title></head><body>");
        e.print("<center><hr>");
        e.print("<H1><h1>Willkommen bei den Arduino HomeContol</h1></H1>");
        e.print("</center><hr>");
        e.print("</body></html>");
        e.respond();
   
   
   
    recint = atoi(rec);
    if (recint > 0 ){
      Serial.print("Eingehendes Request = " );
      Serial.println (recint);
      Serial.print("Ausgeloeste Funktion: ");
      switch (recint) {
//-------------------------------------Housecode 10000------------------------------------//
case 110:
          mySwitch.switchOff("10000", 1);
          Serial.println("Dose 1 OFF");
          //ReplyBuffer = "Dose 1 OFF";
        break;
       
case 111:
          mySwitch.switchOn("10000", 1);
          Serial.println("Dose 1 ON");
          //ReplyBuffer = "Dose 1 ON";
        break;     
//-----------------------------------------------//
        case 120:
          mySwitch.switchOff("10000", 2);
          Serial.println("Dose 2 OFF");
          //ReplyBuffer = "Dose 2 OFF";
        break;
       
        case 121:
          mySwitch.switchOn("10000", 2);
          Serial.println("Dose 2 ON");
          //ReplyBuffer = "Dose 2 ON";
        break;
//-----------------------------------------------//             
        case 130:
          mySwitch.switchOff("10000", 3);
          Serial.println("Dose 3 OFF");
          //ReplyBuffer = "Dose 3 OFF";
        break;
       
        case 131:
          mySwitch.switchOn("10000", 3);
          Serial.println("Dose 3 ON");
          //ReplyBuffer = "Dose 3 ON";
        break;
//-----------------------------------------------//       
        case 140:
          mySwitch.switchOff("10000", 4);
          Serial.println("Dose 4 OFF");
          //ReplyBuffer = "Dose 4 OFF";
        break;
       
        case 141:
          mySwitch.switchOn("10000", 4);
          Serial.println("Dose 4 ON");
          //ReplyBuffer = "Dose 4 ON";
        break;
//-----------------------------------------------//       
        case 150:
          mySwitch.switchOff("10000", 5);
          Serial.println("Dose 5 OFF");
          //ReplyBuffer = "Dose 5 OFF";
        break;
       
        case 151:
          mySwitch.switchOn("10000", 5);
          Serial.println("Dose 5 ON");
          //ReplyBuffer = "Dose 5 ON";
        break;
       
 //-------------------------------------Housecode 11000------------------------------------//
        case 210:
          mySwitch.switchOff("11000", 1);
          Serial.println("Dose 6 OFF");
          //ReplyBuffer = "Dose 6 OFF";
        break;
       
        case 211:
          mySwitch.switchOn("11000", 1);
          Serial.println("Dose 6 ON");
          //ReplyBuffer = "Dose 6 ON";
        break;       
//-----------------------------------------------//       
        case 220:
          mySwitch.switchOff("11000", 2);
          Serial.println("Dose 7 OFF");
          //ReplyBuffer = "Dose 7 OFF";
        break;
       
        case 221:
          mySwitch.switchOn("11000", 2);
          Serial.println("Dose 7 ON");
          //ReplyBuffer = "Dose 7 ON";
        break;
//-----------------------------------------------//       
        case 230:
          mySwitch.switchOff("11000", 3);
          Serial.println("Dose 8 OFF");
          //ReplyBuffer = "Dose 8 OFF";
        break;
       
        case 231:
          mySwitch.switchOn("11000", 3);
          Serial.println("Dose 8 ON");
          //ReplyBuffer = "Dose 8 ON";
        break;       
//-----------------------------------------------//       
        case 240:
          mySwitch.switchOff("11000", 4);
          Serial.println("Dose 9 OFF");
          //ReplyBuffer = "Dose 9 OFF";
        break;
     
        case 241:
          mySwitch.switchOn("11000", 4);
          Serial.println("Dose 9 ON");
          //ReplyBuffer = "Dose 9 ON";
        break;     
//-----------------------------------------------//       
        case 250:
          mySwitch.switchOff("11000", 5);
          Serial.println("Dose 10 OFF");
          //ReplyBuffer = "Dose 10 OFF";
        break;
       
        case 251:
          mySwitch.switchOn("11000", 5);
          Serial.println("Dose 10 ON");
          //ReplyBuffer = "Dose 10 ON";
        break;
       
//-----------------------------------------Stellung A------------------------------------//
case 810:
          mySwitch.sendTriState("1FFF1FF00001");
          Serial.println("Dose 11 OFF");
          //ReplyBuffer = "Dose 11 OFF";
        break;
       
case 811:
          mySwitch.sendTriState("1FFF1FF00010");
          Serial.println("Dose 11 ON");
          //ReplyBuffer = "Dose 11 ON";
        break;       
//-----------------------------------------------//
        case 820:
          mySwitch.sendTriState("1FFFF1F00001");
          Serial.println("Dose 12 OFF");
          //ReplyBuffer = "Dose 12 OFF";
        break;
       
case 821:
          mySwitch.sendTriState("1FFFF1F00010");
          Serial.println("Dose 12 ON");
          //ReplyBuffer = "Dose 12 ON";
        break;       
//-----------------------------------------------//
        case 830:
          mySwitch.sendTriState("1FFFFF100001");
          Serial.println("Dose 13 OFF");
          //ReplyBuffer = "Dose 13 OFF";
        break;
       
case 831:
          mySwitch.sendTriState("1FFFFF100010");
          Serial.println("Dose 13 ON");
          //ReplyBuffer = "Dose 13 ON";
        break;
       
//-----------------------------------------Stellung B------------------------------------//
case 910:
          mySwitch.sendTriState("F1FF1FF00001");
          Serial.println("Dose 14 OFF");
          //ReplyBuffer = "Dose 14 OFF";
        break;
       
case 911:
          mySwitch.sendTriState("F1FF1FF00010");
          Serial.println("Dose 14 ON");
          //ReplyBuffer = "Dose 14 ON";
        break;       
//-----------------------------------------------//
        case 920:
          mySwitch.sendTriState("F1FFF1F00001");
          Serial.println("Dose 15 OFF");
          //ReplyBuffer = "Dose 15 OFF";
        break;
       
case 921:
          mySwitch.sendTriState("F1FFF1F00010");
          Serial.println("Dose 15 ON");
          //ReplyBuffer = "Dose 15 ON";
        break;       
//-----------------------------------------------//
        case 930:
          mySwitch.sendTriState("F1FFFF100001");
          Serial.println("Dose 16 OFF");
          //ReplyBuffer = "Dose 16 OFF";
        break;
       
case 931:
          mySwitch.sendTriState("F1FFFF100010");
          Serial.println("Dose 16 ON");
          //ReplyBuffer = "Dose 16 ON";
        break;
       
    } 
    Serial.println("//=============================================//");
//    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
//    Udp.write(ReplyBuffer);
//    Udp.endPacket();
  }
 }

//----------------------------------------------------------



   
 
  delay(10);       
}   



///----------------------------------------------------------



Hier noch Paar Bilder zu den Ding smiley-wink




Gruß
Shojo
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Könnte Dein Problem ectl. sein, das Du den Pin12 für die RC-Switch Lib verwendest? Den Pin12 gehört zum SPI Bus (D11 - D13 (MOSI , MISO und SCK))
Zusätzlich verwendet Dein Shield noch D10 als Chipselect soweit ich weiss.
Verwende mal einen anderen Pin für die RC-Switch Lib.

Mario.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für dein Tipp!

Aber das hatte ich auch schon probiert er liegt normalerweise auf Pin 5 hatte den jetzt nur mal testweise da liegen.

//Edit:
   So habe es trotzdem noch mal auf Pin3 gesetzt, hat leider auch nicht gebracht smiley-sad
  
Code:
  SI RVA
   SI RVA
   SI RVA
   SI RVA
   SI RVA




Gruß
« Last Edit: December 18, 2012, 05:04:10 am by Shojo » Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Funktioniert denn der Sketch wenn Du nicht über die RC-Lib schaltest, sondern nur die Ausgaben auf die serielle Konsole ausgibst?
Poste mal bitte einen Link zu der Ethernet-Lib.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja der Fehler kommt nur wenn die RC-Lib zu tragen kommt.....

Hier die Libs http://www.the-intruder.net/filebase/libraries
« Last Edit: December 18, 2012, 05:24:23 am by Shojo » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Niemand mehr eine Idee?

Ich probiere schon die ganzen Tage rum und komme nicht weiter smiley-sad


Gruß
Dennis
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Nun habe ich aber das Problem sobald ich über rc-switch ein Steuersignal ausgebe das sich der Server weghängt da die Variable rec voll gespämmt wird und ich kann es nicht nachzuvollziehen wie das zustande kommt.
Kannst Du das etwas genauer erklären. Was meinst Du mit "rec" volgespammt? Stehen denn ohne RC-Lib in *rec die per URL übergebenen Parameter drin? Wie sieht denn die URL aus, die Du übermittelst? Und was steht am Ende in *rec? Soweit ich die ENC28J60 Lib verstehe, werden in einem 32-Byte Puffer die an die URL per "?key=value" Paramerter durch die Funktion e.serviceRequest() zurückgeliefert.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Kannst Du das etwas genauer erklären. Was meinst Du mit "rec" volgespammt? Stehen denn ohne RC-Lib in *rec die per URL übergebenen Parameter drin? Wie sieht denn die URL aus, die Du übermittelst? Und was steht am Ende in *rec? Soweit ich die ENC28J60 Lib verstehe, werden in einem 32-Byte Puffer die an die URL per "?key=value" Paramerter durch die Funktion e.serviceRequest() zurückgeliefert.

Wenn ich die URL 192.168.0.88/110 anfordere wir in rec auch 110 ausgegeben mit Glück läuft das auch einmal sauber aber dann kommt immer nonstop der wert SI RVA rein bis das ding dann abstützt , aber wie gesagt nur wenn die RC-Lib ins spiel kommt .
Ohne die RC-Lib wird der wert auch immer sauber übergeben ohne jeglichen Fehler egal wie oft ich das mache...

Ich bin kurz davor das alles mit meinen Uno + W5100 Ethernet Shield zu machen und das ding in der Grütze zu hauen.....
« Last Edit: December 18, 2012, 04:34:08 pm by Shojo » Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

An welcher Stelle wird denn das "SI RVA" ausgegeben? Durch den folgenden Code:

Code:
    if (recint > 0 ){
      Serial.print("Eingehendes Request = " );
      Serial.println (recint);
      Serial.print("Ausgeloeste Funktion: ");

Oder an einer anderen Stelle. Hast Du mal versucht den Code auf nur einen übergebenen Wert zu kürzen? Also sowas wie:

Code:
#include <etherShield.h>
#include <ETHER_28J60.h>
#include <RCSwitch.h>

//Netzwek Conf
static uint8_t mac[6] = {
  0x54, 0x55, 0x58, 0x10, 0x00, 0x24};
static uint8_t ip[4] = {
  192, 168, 0, 88};
static uint16_t port = 80;

// RCSwitch Conf
RCSwitch mySwitch = RCSwitch();
int RCTransmissionPin = 12;

ETHER_28J60 e;

void setup()
{
  Serial.begin(9600);
  e.setup(mac, ip, port);
  mySwitch.enableTransmit( RCTransmissionPin );
}

void loop()
{
  Serial.println("loop start");
  Serial.flush();
  char* rec;
  int recint;
  if (rec = e.serviceRequest()){
    Serial.println("Request recieved");
    Serial.flush();
    //-----------------------------------------Webseite--------------------------------------//       
    e.print("<html><head><title>Arduino HomeContol</title></head><body>");
    e.print("<center><hr>");
    e.print("<H1><h1>Willkommen bei den Arduino HomeContol</h1></H1>");
    e.print("</center><hr>");
    e.print("</body></html>");
    e.respond();

    Serial.println("Respond sent");
    Serial.flush();


    recint = atoi(rec);
    Serial.println("recint parsed");
    Serial.flush();   

    if (recint > 0 ){
      Serial.print("Eingehendes Request = " );
      Serial.println (recint);
      Serial.print("Ausgeloeste Funktion: ");
      Serial.flush();   
      switch (recint) {
        //-------------------------------------Housecode 10000------------------------------------//
      case 110:
        mySwitch.switchOff("10000", 1);
        Serial.println("Dose 1 OFF");
        Serial.flush();   
        //ReplyBuffer = "Dose 1 OFF";
        break;



      } 
      Serial.println("//=============================================//");
    }
  }

  //----------------------------------------------------------


  Serial.println("loop ende");
  Serial.flush();



  delay(10);       
}   



///----------------------------------------------------------



Zusätzlich habe ich mal noch debug-Ausgaben eingebaut. Wenn der Fehler da auftritt, sollte man sehen an welcher Stelle im Code die Ausgabe passiert.
Funktioniert denn die RC-Switch Lib ohne der Webserver? Kannst Du also die Dosen schalten?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Habe zum auslesen des Fehlers noch ein Serial.println gesetzt

Code:
void loop()
{
  char* rec;
  int recint;
  if (rec = e.serviceRequest()){
//-----------------------------------------Webseite--------------------------------------//        
        e.print("<html><head><title>Arduino HomeContol</title></head><body>");
        e.print("<center><hr>");
        e.print("<H1><h1>Willkommen bei den Arduino HomeContol</h1></H1>");
        e.print("</center><hr>");
        e.print("</body></html>");
        e.respond();
    
  
    Serial.println (rec); // <-----------[b] an dieser stelle lese ich den Fehler aus hattet das in oberen Post nicht mit drinnen.  [/b]
    recint = atoi(rec);

Der Fehler besteht auch im gekürzten Code ....

Code:
loop start
loop ende
loop start
loop ende
loop start
loop ende
loop start
Request recieved
Respond sent
recint parsed
Eingehendes Request = 110
Ausgeloeste Funktion: Dose 1 OFF
//=============================================//
loop ende
loop start
loop ende
loop start
loop ende
loop start
loop ende
loop start
Request recieved
Respond sent
recint parsed
loop ende
loop start
loop ende
loop start
Request recieved
Respond sent
recint parsed
loop ende
loop start
loop ende
loop start
loop ende
loop start
Request recieved
Respond sent
recint parsed
loop ende
loop start
loop ende
loop start
loop ende
loop start
Request recieved
Respond sent
recint parsed
loop ende
loop start
Request recieved
Respond sent
recint parsed
loop ende
loop start
Request recieved
Respond sent
recint parsed
loop ende
loop start
Request recieved
Respond sent
recint parsed
loop ende
loop start
Request recieved
Respond sent
recint parsed
loop ende
loop start
Request recieved
Respond sent
recint parsed
loop ende

Funktioniert denn die RC-Switch Lib ohne der Webserver? Kannst Du also die Dosen schalten?

Oh hatte ich glatt  überlesen smiley-wink
Jein ich muss ja irgend wie den Steuerbefehl geben, hatte das ja auf den W5100 Chipse mit udp am laufen das geht ohne Probleme.
Allerdings hatte ich es auch mal via udp mit den enc28j60 probiert gleicher Fehler....

Danke noch mal für deine Untersützung!
« Last Edit: December 19, 2012, 03:31:06 am by Shojo » Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bau doch einefach einen Sketch, der alle 10 Sekunden eine Dose ein und nach 10 Sekunden wieder ausschaltet, oder der die Befehle über die serielle Konsole entgegennimmt.
Hauptsache die ENC28J60 Lib ist nicht im Sketch.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Achso so meiste das ja das läuft
Logged

Hamburg, Germany
Offline Offline
Full Member
***
Karma: 2
Posts: 191
Hello world!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich tippe auf überlaufenden RAM. Der ENC28j60 hat keinen TCP-Stack und die Libs fressen entsprechend mehr Speicher. Versuch mal das Script erstmal etwas zu reduzieren, also Serial raus und zunächst nur eine Dose ansteuern.

Code:
void setup() {
  e.setup(mac, ip, port);
  mySwitch.enableTransmit( RCTransmissionPin );
}

void loop() {
char* rec;
if (rec = e.serviceRequest()){
        e.print("Willkommen...");
        e.respond();

if (strcmp(rec, "110") == 0) {
mySwitch.switchOff("10000", 1);
} else if (strcmp(rec, "111") == 0) {
mySwitch.switchOn("10000", 1);
}
}
}   

PS: Der ENC28j60 ist auch sonst echt schwierig, besorg Dir 'n wiznet smiley-wink
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

PS: Der ENC28j60 ist auch sonst echt schwierig, besorg Dir 'n wiznet smiley-wink

Habe ich ja alles da liegen blos was mache ich dann  mit den ollen enc28j60 smiley-wink
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich tippe auf überlaufenden RAM. Der ENC28j60 hat keinen TCP-Stack und die Libs fressen entsprechend mehr Speicher. Versuch mal das Script erstmal etwas zu reduzieren, also Serial raus und zunächst nur eine Dose ansteuern.

Code:
void setup() {
  e.setup(mac, ip, port);
  mySwitch.enableTransmit( RCTransmissionPin );
}

void loop() {
char* rec;
if (rec = e.serviceRequest()){
        e.print("Willkommen...");
        e.respond();

if (strcmp(rec, "110") == 0) {
mySwitch.switchOff("10000", 1);
} else if (strcmp(rec, "111") == 0) {
mySwitch.switchOn("10000", 1);
}
}
}   

Das war leider auch nichts smiley-sad das Blöde Ding will immer noch net  ........
Ich glaube ich werde doch das W5100 Shield nehmen
Logged

Pages: [1] 2   Go Up
Jump to: