Go Down

Topic: Wifishield problemen (Read 1 time) previous topic - next topic

Wvt91

Beste,

Ik heb een arduino uno met een wifishield, deze wil ik als er een bepaalde sensor aangesproken wordt dat er een mail wordt gestuurd dit werkt allemaal goed alleen de wifishield gaat na een bepaalde tijd in storing (rode error led gaat aan) zodra ik de arduino dan reset doet hij het weer een tijd goed.

Specs:
Arduino Uno
Arduino wifishield
13v 2amp voeding aangesloten op de Vin pin van de arduino.
1x sensor aangesloten op digitalpin.


Iemand enig idee wat dat kan zijn?

robtillaart

Kan een bug in de firmware van wifishield zijn...

Of je code "vreet" langzaam geheugen op?


Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Wvt91

#2
Feb 27, 2018, 11:19 am Last Edit: Mar 08, 2018, 04:41 pm by Wvt91
Ik heb de firmware van de wifishield geupdatet.

Hier onder mijn code:

Code: [Select]

/*
   Email client sketch for WiFi shield
   Posted 29 May 2015 by SurferTim
*/
#include <SPI.h>
#include <WiFi.h>
int zeepRelaisPin = 8;
int mailSend = 0;
WiFiClient client;
char ssid[] = "WIFISSID";     // the name of your network
char pass[] = "WIFIPASSWD";  // your network password
int status = WL_IDLE_STATUS;     // the Wifi radio's status

// change server to your email server ip or domain
// IPAddress server( 1, 2, 3, 4 );
char server[] = "mail.smtp2go.com";
int port = 587;

void setup()
{
  delay(2000);
  Serial.begin(115200);
  pinMode(4, OUTPUT);
  pinMode(zeepRelaisPin, INPUT_PULLUP);
  digitalWrite(4, HIGH);

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println(F("WiFi shield not present"));
    // don't continue:
    while (true);
  }

  // check firmware version
  // Serial.print(F("Firmware version: "));
  // Serial.println(WiFi.firmwareVersion());

  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print(F("Attempting to connect to open SSID: "));
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }

  // you're connected now, so print out the data:
  Serial.print(F("You're connected to the network"));
  printCurrentNet();
  printWifiData();

  delay(2000);
}

void loop()
{
  int zeepRelais = digitalRead(zeepRelaisPin);
  delay(8000);
  if (zeepRelais == LOW && mailSend == 0) {
    Serial.println("Zeeprelais geschakeld en niet gemaild.");
    if (sendEmail()) {
      Serial.println(F("Email sent"));
      mailSend = 1;
    }
    else Serial.println(F("Email failed"));

  }

  if (zeepRelais == HIGH && mailSend == 1) {
    delay(10000);
    mailSend = 0;
  }

  byte inChar;

  inChar = Serial.read();

  if (inChar == 'e')
  {
    if (sendEmail()) Serial.println(F("Email sent"));
    else Serial.println(F("Email failed"));
  }
}

byte sendEmail()
{
  byte thisByte = 0;
  byte respCode;
  char tBuf[64];

  if (client.connect(server, port) == 1) {
    Serial.println(F("connected"));
  } else {
    client.stop();
    Serial.println(F("connection failed"));
    return 0;
  }

  if (!eRcv()) return 0;

  Serial.println(F("Sending hello"));
  // change to the IP of your Arduino
  strcpy_P(tBuf, PSTR("EHLO 10.224.243.170\r\n"));
  client.write(tBuf);
  if (!eRcv()) return 0;

  Serial.println(F("Sending auth login"));
  strcpy_P(tBuf, PSTR("auth login\r\n"));
  client.write(tBuf);
  if (!eRcv()) return 0;

  Serial.println(F("Sending User"));
  strcpy_P(tBuf, PSTR("Username\r\n"));

  client.write(tBuf);
  if (!eRcv()) return 0;

  Serial.println(F("Sending Password"));
  strcpy_P(tBuf, PSTR("Passwd\r\n"));
  client.write(tBuf);
  if (!eRcv()) return 0;

  // change to your email address (sender)
  Serial.println(F("Sending From"));
  strcpy_P(tBuf, PSTR("MAIL From: <....@hotmail.com>\r\n"));
  client.write(tBuf);
  if (!eRcv()) return 0;

  // change to recipient address
  Serial.println(F("Sending To"));
  strcpy_P(tBuf, PSTR("RCPT To: <....@hotmail.com>\r\n"));
  client.write(tBuf);
  if (!eRcv()) return 0;

  Serial.println(F("Sending DATA"));
  strcpy_P(tBuf, PSTR("DATA\r\n"));
  client.write(tBuf);
  if (!eRcv()) return 0;

  Serial.println(F("Sending email"));

  // change to recipient address
  strcpy_P(tBuf, PSTR("To: recipient <....@hotmail.com>\r\n"));
  client.write(tBuf);

  // change to your address
  strcpy_P(tBuf, PSTR("From: Addres <....@hotmail.com>\r\n"));
  client.write(tBuf);

  client.println("Subject: Subject\r\n");

  client.println("Line 1, ");
  client.println("Line 2");
  client.println("Line 3");
  client.println("Line 4");
  client.println("Line 5");
  client.println("Line 6");




  client.println(".");
  if (!eRcv()) return 0;

  Serial.println(F("Sending QUIT"));
  strcpy_P(tBuf, PSTR("QUIT\r\n"));
  client.write(tBuf);
  if (!eRcv()) return 0;

  client.stop();

  Serial.println(F("disconnected"));

  return 1;
}

byte eRcv()
{
  byte respCode;
  byte thisByte;
  int loopCount = 0;

  while (!client.available()) {
    delay(1);
    loopCount++;

    // if nothing received for 10 seconds, timeout
    if (loopCount > 10000) {
      client.stop();
      Serial.println(F("\r\nTimeout"));
      return 0;
    }
  }

  respCode = client.peek();

  while (client.available())
  {
    thisByte = client.read();
    Serial.write(thisByte);
  }

  if (respCode >= '4')
  {
    efail();
    return 0;
  }

  return 1;
}


void efail()
{
  byte thisByte = 0;
  int loopCount = 0;

  client.println("QUIT");

  while (!client.available()) {
    delay(1);
    loopCount++;

    // if nothing received for 10 seconds, timeout
    if (loopCount > 10000) {
      client.stop();
      Serial.println(F("\r\nTimeout"));
      return;
    }
  }

  while (client.available())
  {
    thisByte = client.read();
    Serial.write(thisByte);
  }

  client.stop();

  Serial.println(F("disconnected"));
}

void printCurrentNet() {
  // print the SSID of the network you're attached to:
  Serial.print(F("SSID: "));
  Serial.println(WiFi.SSID());

  // print the MAC address of the router you're attached to:
  byte bssid[6];
  WiFi.BSSID(bssid);
  Serial.print(F("BSSID: "));
  Serial.print(bssid[5], HEX);
  Serial.print(F(":"));
  Serial.print(bssid[4], HEX);
  Serial.print(F(":"));
  Serial.print(bssid[3], HEX);
  Serial.print(F(":"));
  Serial.print(bssid[2], HEX);
  Serial.print(F(":"));
  Serial.print(bssid[1], HEX);
  Serial.print(F(":"));
  Serial.println(bssid[0], HEX);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print(F("signal strength (RSSI):"));
  Serial.println(rssi);

  // print the encryption type:
  byte encryption = WiFi.encryptionType();
  Serial.print(F("Encryption Type:"));
  Serial.println(encryption, HEX);
}

void printWifiData() {
  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print(F("IP Address: "));
  Serial.println(ip);
  Serial.println(ip);

  // print your MAC address:
  byte mac[6];
  WiFi.macAddress(mac);
  Serial.print(F("MAC address: "));
  Serial.print(mac[5], HEX);
  Serial.print(F(":"));
  Serial.print(mac[4], HEX);
  Serial.print(F(":"));
  Serial.print(mac[3], HEX);
  Serial.print(F(":"));
  Serial.print(mac[2], HEX);
  Serial.print(F(":"));
  Serial.print(mac[1], HEX);
  Serial.print(F(":"));
  Serial.println(mac[0], HEX);

  // print your subnet mask:
  IPAddress subnet = WiFi.subnetMask();
  Serial.print(F("NetMask: "));
  Serial.println(subnet);

  // print your gateway address:
  IPAddress gateway = WiFi.gatewayIP();
  Serial.print(F("Gateway: "));
  Serial.println(gateway);
}

ArdLab_Gent

delay(8000);

delay(10000);

lijkt me geen goed idee in loop
ArdLab geeft Arduino workshops voor beginners.
ArdLab is lid van de STEM-Academie.
http://www.ardlab.gent - http://www.stem-academie.be/

robtillaart

#4
Feb 28, 2018, 09:14 am Last Edit: Feb 28, 2018, 09:14 am by robtillaart
[code]...[/code] tags lijkt me wel een goed idee.

Please modify your post.
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Wvt91

Zonder de (lange)delays werkt het ook niet. Dan nog heeft die dezelfde problemen.

elektriesjeng


Wvt91

Welk shield gebruik je?
De officiƫle Arduino wifishield R3

Wawa

alleen de wifishield gaat na een bepaalde tijd in storing (rode error led gaat aan) zodra ik de arduino dan reset doet hij het weer een tijd goed.

13v 2amp voeding aangesloten op de Vin pin van de arduino.
Een Uno kan minder dan 150mA stroom leveren voor sensors/shields met 13volt op de DC socket (of V-in).

Een WiFi shield gebruikt waarschijnlijk wat meer dan 150mA, en de 5volt regulator van de Uno gaat dan na enie tijd in "thermal protection".
Als de 5volt regulator van de Uno wat is afgekoeld, dan werkt the weer even.

Gebruik een voeding op de DC socket met een lagere spanning.
9volt gaat waarschinljk goed.
Leo..

Go Up