Pages: [1]   Go Down
Author Topic: Post Übermittlung auf Webserver  (Read 312 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo

Ich habe ein kleines Problem (bin immer noch Anfänger):
Ich habe ein Arduino Uno mit Ethernet-Shield und darüber den IO Shield.
Ich möchte jeweils ein HTML Post absetzen, wenn der Eingang 2 aktiviert wird. Das wird durch ein Senser impulsweise alle ca 3 Sekungen ausgelöst.

Mit meinem Code wird der Post nur das erste mal gesendet, danach nichts mehr.
Was habe ich falsch gemacht?

Hier mein Code:

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

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xC8, 0x0E };
byte ip[] = { 192,168,1,177};
byte gateway[] = { 192,168,1,2 };    

const int SensorPin = 2;
EthernetClient client;

String temp= "wert1=TestPost&Send=Eintragen";  

void setup()
{
Ethernet.begin(mac, ip, gateway);
pinMode(SensorPin, INPUT);  
}

void loop()  
{
 if (digitalRead(SensorPin) == HIGH) {    
   post();
  }
}

void post()                                          
{  
if (client.connect("192.168.1.11",82))
{  
client.println("POST /input_save.php HTTP/1.1");                
client.println("Host: 192.168.1.11");
client.println("Content-Type: application/x-www-form-urlencoded");
client.println("Connection: close");
client.println("User-Agent: Arduino/1.0");
client.print("Content-Length: ");
client.println(temp.length());
client.println();
client.print(temp);
client.println();
}

}

Danke für jede Hilfe

« Last Edit: May 04, 2014, 04:26:57 am by uwefed » Logged

Offline Offline
Jr. Member
**
Karma: 12
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du sagst dem Client zwar: "Connection: close",  aber davon bekommt dein Schild nix mit.
Vermutlich ist da noch ein  client.stop(); nötig.
« Last Edit: May 04, 2014, 08:09:43 am by combie » Logged

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

Genau das wars! Herzlichen Dank.
Komischerweise musste ich auch noch die Bedingung umkehren, so dass nur bei aktivem Sensor der Post abgeschickt wird:
if (digitalRead(SensorPin) == LOW)
Leucht mir zwar nicht ein wieso, aber es funktioniert.

Hier mein funktionierender Code:

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

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xC8, 0x0E };
byte ip[] = { 192,168,1,177};
byte gateway[] = { 192,168,1,2 };     

const int SensorPin = 2;
EthernetClient client;

String temp= "wert1=TestPost&Send=Eintragen"; 

void setup()
{
Ethernet.begin(mac, ip, gateway);
pinMode(SensorPin, INPUT); 

}

void loop() 
{
 if (digitalRead(SensorPin) == LOW) {     
   post();
   delay(500);
  }
}

void post()                                           

if (client.connect("192.168.1.11",82))
{   
client.println("POST /input_save.php HTTP/1.1");                 
client.println("Host: 192.168.1.11");
client.println("Content-Type: application/x-www-form-urlencoded");
client.println("Connection: close");
client.println("User-Agent: Arduino/1.0");
client.print("Content-Length: ");
client.println(temp.length());
client.println();
client.print(temp);
client.println();
client.stop();
}

}
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 583
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Welchen Sensor hast Du dran?
Logged

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

Das Signal kommt über einen Reedschalter (5V -> Reedschalter -> Input2).
Das Ganze über den IO Shield funktioniert nur wenn bei LOW. Ich habe testweise den Reedschalter direkt am Uno Board angeschlossen  (5V -> Reedschalter -> Input2).  Seltsam: Hier wird Input 2 pro Impuls gleich mehrmals aktiv.
Noch seltsamer: Stecke ich nur einen Steckdraht in Input 2 und das andere Ende ist in der Luft ist Input 2 aktiv und sendet HTML Posts. Muss ich hier evt einen Widerstand einbauen?

Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 583
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Klar, wenn Du nach Plus schaltest mach nen Pulldown Widerstand rein. 10k passt immer.
Sonst hängt der Eingan offen und macht komische Sachen ....
Oder Du schaltest nach GND und aktivierst die eingebauten Pullups. 1 Zeile mehr Code aber 1 Teil gespart.
Logged

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

ok, wieder was gelernt  smiley

Meinst du mit dem integrierten Pullup das Argument im pinmode: pinMode(2,INPUT_PULLUP);
Das wäre nur ein Argument mehr statt einer Zeile. Oder meinst du was anderes?

Gibt es ein Schema für die Schaltung nach GND mit internem Pullup? Bei meiner Suche habe ich nur widersprüchliche Infos gefunden.

Danke für deine Hilfe
Logged

Offline Offline
Jr. Member
**
Karma: 12
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Bei meiner Suche habe ich nur widersprüchliche Infos gefunden.
Hmm...
Kann ich glauben.
Es ist viel Mist unterwegs.

Ja, den internen Pullup kann man nutzen.
Und ja, nur 1 Parameter mehr.
Den Schalter könntest dann zwischen Pin2 und GND machen.

Aber:
Bei einem Programmierfehler + Schalterbetätigung kann dir der UNO abrauchen.
Darum zwischen Pin2 und Schalter noch einen 1K Widerstand stecken/löten.
Logged

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

Das ist natürlich ein starkes Argument für den zusätzlichen Widerstand.
Wenn ich also zwischen Pin2 und Schalter einen 1K Widerstand löte, dann könnte ich auf INPUT_PULLUP verzichten?
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 583
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn man halbwegs weiß was man tut braucht's das nicht.
Der Pin muss natürlich auf Input gesetzt sein, damit's tatsächlich keinen Kurzen geben kann.
Und mit dem internen Pullup dreht sich natürlich die Logik um: Taster gedrückt = LOW

Ansonsten so wie im Anhang


* Pulldown.jpg (40.88 KB, 837x647 - viewed 3 times.)
Logged

Offline Offline
Jr. Member
**
Karma: 12
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hmmm....
Warum einen externen Pulldown, wenn es doch einen internen Pullup gibt.
Dem INT0 ist das schnuppe, der kann auf beiden Flanken triggern.
Auch die Logik lässt sich im Programm leicht drehen.

Ich kann verstehen, wenn man den UNO in den Stromparmodus schicken will, dass ein externer Pullup/Pulldown Sinn macht.
Aber auf den (Pin2) Schutzwiderstand würde ich nicht verzichten. In einer endgültigen Schaltung evtl. ja, aber nicht in einer "Anfängerbastelstube".

Quote
Wenn ich also zwischen Pin2 und Schalter einen 1K Widerstand löte, dann könnte ich auf INPUT_PULLUP verzichten?
Pullupwiderstand und Schutzwiderstand sind 2 Paar Schuhe.
Da gibts wenig Beziehung zwischen den beiden Konzepten.

Ach ja, wer sich mit Schaltern und Tastern beschäftigt, sollte zwingend über "Entprellen" nachdenken.
Logged

Offline Offline
Faraday Member
**
Karma: 116
Posts: 3896
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die meisten Anfänger-Beispiele verwenden leider Pulldowns, aus dem einfach Grund dass dann die Logik "stimmt". Man hat gedrückt HIGH und nicht gedrückt LOW.

Die internen Pullups sind aber einfacher. Man muss sich bei der Schaltung weniger merken und braucht keine Zusätzlichen Bauteile. Man muss halt nur LOW und HIGH im Code vertauschen.
Logged

Pages: [1]   Go Up
Jump to: