Single arduino board with a processor and an Ethernet controller?

Does anyone know of any Arduino form-factor boards that have both a processor and an Ethernet port?

I need something simple that is not a stack of shields, instead just an Arduino processor and ethernet port all on same board.

It needs to be same shape and headers as a standard Arduino UNO so I can connect it inside another device, and needs a Ethernet port instead of the USB type B connector.

I just need a simple web-enabled Arduino without wifi so I can send simple TCP requests to it and enable IO.

I tried using Yun and it fits correctly, but it runs Linux and has wifi, both are not allowed for devices in this ecosystem.

Seeed Studio seems to have their version in stock: https://www.seeedstudio.com/Seeeduino-Ethernet-p-1231.html
Freetronics has their EtherTen Board, but it's usually been "out of stock" when I've checked, and I don't know for sure whether it's still an active product.
Arduino used to have "Arduino Ethernet" and "Arduino Leonardo Ethernet", but they're both "retired." You could conceivably make your own versions of those, based on the still-available OSHW designs.

Oh man, that Arduino Leonardo Ethernet looks so ideal, and Arduino Ethernet w/ PoE = drool, what were they thinking by retiring them?

Oh well, maybe the Seeed board will work, but I have not had good experience with Seeed reliability.

I wish I could find the Arduino Ethernet w/ PoE, that is exactly what I need.

And as for making a board, it is possible, we are trying to avoid that path because then we will have to certify it which costs a lot and takes too much time.

Robotdyn also has a Leonardo with ethernet board right here.
You can connect a POE module but you have to buy it separately.

warning: Ethernet + SD library on Leonardo

Sketch uses 26170 bytes (91%) of program storage space. Maximum is 28672 bytes.
Global variables use 1379 bytes (53%) of dynamic memory, leaving 1181 bytes for local variables. Maximum is 2560 bytes.

warning: Ethernet + SD library on Leonardo

Is that the WizNet Ethernet library, or the en28j60 Ethernet library?
Although in any case, one of the 32K AVRs isn't really quite up to internet stuff, memory-wise. Even if tcp/ip is offloaded into another chip.

westfw:
Is that the WizNet Ethernet library, or the en28j60 Ethernet library?
Although in any case, one of the 32K AVRs isn't really quite up to internet stuff, memory-wise. Even if tcp/ip is offloaded into another chip.

Arduino Ethernet has WizNet.

this SD Web Server sketch

#include <Ethernet.h>
#include <SD.h>
#include <StreamLib.h> // install in Library Manager. Used to generate HTML of directory listing

const int SDCARD_CS = 4;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

EthernetServer server(80);

void setup() {

  Serial.begin(115200);
  while (!Serial);

  if (!SD.begin(SDCARD_CS)) {
    Serial.println(F("SD card initialization failed!"));
    // don't continue
    while (true);
  }

  Ethernet.begin(mac);
  Serial.println();

  server.begin();

  IPAddress ip = Ethernet.localIP();
  Serial.println();
  Serial.println(F("Connected to WiFi network."));
  Serial.print(F("To access the server, enter \"http://"));
  Serial.print(ip);
  Serial.println(F("/\" in web browser."));
}

void loop() {

  EthernetClient client = server.available();

  if (client && client.connected()) {
    if (client.find(' ')) { // GET /fn HTTP/1.1
      char fn[32];
      int l = client.readBytesUntil(' ', fn, sizeof(fn) - 1); // read the filename from URL
      fn[l] = 0;
      while (client.read() != -1); // discard the rest of the request
      File file = SD.open(fn);
      if (!file) { // file was not found
          client.println(F("HTTP/1.1 404 Not Found"));
          client.println(F("Connection: close"));
          client.print(F("Content-Length: "));
          client.println(strlen(" not found") + strlen(fn));
          client.println();
          client.print(fn);
          client.print(F(" not found"));
      } else if (file.isDirectory()) {
          client.println(F("HTTP/1.1 200 OK"));
          client.println(F("Connection: close"));
          client.println(F("Content-Type: text/html"));
          client.println(F("Transfer-Encoding: chunked"));
          client.println();
          char buff[64]; // buffer for chunks
          ChunkedPrint chunked(client, buff, sizeof(buff));
          chunked.begin();
          chunked.printf(F("<!DOCTYPE html>\r\n<html>\r\n<body>\r\n<h3>Folder '%s'</h3>\r\n"), fn);
          while (true) {
            File entry = file.openNextFile();
            if (!entry)
              break;
            if (strcmp(fn, "/") == 0) {
              chunked.printf(F("<a href='%s'>"), entry.name());
            } else {
              chunked.printf(F("<a href='%s/%s'>"), fn, entry.name());
            }
            chunked.print(entry.name());
            if (entry.isDirectory()) {
              chunked.println(F("/</a>
"));
            } else  {
              chunked.printf(F("</a> (%ld b)
\r\n"), entry.size());
            }
            entry.close();
          }
          chunked.println(F("</body>\r\n</html>"));
          chunked.end();
      } else {
          client.println(F("HTTP/1.1 200 OK"));
          client.println(F("Connection: close"));
          client.print(F("Content-Length: "));
          client.println(file.size());
          client.print(F("Content-Type: "));
          const char* ext = strchr(file.name(), '.');
          client.println(getContentType(ext));
          client.println();
        client.write(file); // send the file as body of the response
        file.close();
      }
    }
    client.stop();
  }
}

const char* getContentType(const char* ext){
  if (!strcmp(ext, ".HTM"))
    return "text/html";
  if (!strcmp(ext, ".CSS"))
    return "text/css";
  if (!strcmp(ext, ".JS"))
    return "application/javascript";
  if (!strcmp(ext, ".PNG"))
    return "image/png";
  if (!strcmp(ext, ".GIF"))
    return "image/gif";
  if (!strcmp(ext, ".JPG"))
    return "image/jpeg";
  if (!strcmp(ext, ".XML"))
    return "text/xml";
  return "text/plain";
}

Sketch uses 28590 bytes (99%) of program storage space. Maximum is 28672 bytes.
Global variables use 1315 bytes (51%) of dynamic memory, leaving 1245 bytes for local variables. Maximum is 2560 bytes.

and crashes at runtime on full SRAM

Juraj:
warning: Ethernet + SD library on Leonardo

Sketch uses 26170 bytes (91%) of program storage space. Maximum is 28672 bytes.
Global variables use 1379 bytes (53%) of dynamic memory, leaving 1181 bytes for local variables. Maximum is 2560 bytes.

Thanks for the warning, Ouch, yea I should have mentioned my sketch a little:

Build Output:
Sketch uses 757282 bytes (57%) of program storage space. Maximum is 1310720 bytes.
Global variables use 41432 bytes (12%) of dynamic memory, leaving 286248 bytes for local variables. Maximum is 327680 bytes.

#include "esp_system.h" //for watchdog timer
#include <ETH.h>
#include <aREST.h>
#include <ArduinoJson.h>
#include "FS.h"
#include "SD_MMC.h"
...
200 lines

We just ordered the Leonardo from Robotdyn to test, but now I see it will fail the compilation because the program memory usage exceeds 28672 bytes.

Maybe I can make it work if I hack it, but probably not.

My guess is I'm back to looking for another board similar to the Leonardo but with a heftier processor that I could translate all of my sketch over to.

I was using an ESP32 module running Arduino code as my µC and Ethernet controller for RD. But I have been challenged to migrate the design to an entirely new industrial Arduino PLC. I am desperate to find an Arduino form-factor programmable Ethernet board...even an ESP32 slapped on an Arduino shield might do the job, but I just can't one with an Ethernet port.

There's at least one guy out there selling an ethernet board based on ESP32.
Not Uno Format, though...

The DUE Core is an arduino DUE 100% compatible board but with all pins broken out (including EMAC pins) plus an EEPROM. The footprint is smaller than the original DUE board:

This is the Arduino PLC we are looking to use:


It has been certified for resale and use in commercial applications.

But we only utilize a few IO and two mechanical relays per each PLC.

I wanted to stick to something I was familiar with so an industrial Arduino was what I picked because they offer CE FCC or euro certification.

Are there any industrial products that offer Arduino programmable, Ethernet, SD and mechanical relays in a single package?

It needs to be able to respond to REST requests and run operations remotely inside of an electronics security enclosure. Noting complex but must be very reliable and respond/reboot quickly.

If all fails I will just have to resort to the Yun, but that would involve major re-design of a currently good working interface :o

And I really do not like the idea of running linux for something that is expected to be up 99.999% of the time.

Any industrial solutions I could try? Alternatives?

megaBlocks:
Thanks for the warning, Ouch, yea I should have mentioned my sketch a little:

Build Output:
Sketch uses 757282 bytes (57%) of program storage space. Maximum is 1310720 bytes.
Global variables use 41432 bytes (12%) of dynamic memory, leaving 286248 bytes for local variables. Maximum is 327680 bytes.

what MCU is it?
I guess this would not fit in Mega even if compiled for 8 bit CPU

Juraj:
what MCU is it?
I guess this would not fit in Mega even if compiled for 8 bit CPU

Currently I am using the ESP32-EVB from Olimex and running Arduino code. It works great! But it's not certified for commercial application.

megaBlocks:
Currently I am using the ESP32-EVB from Olimex and running Arduino code. It works great! But it's not certified for commercial application.

did you check this https://industruino.com/ ?

Juraj:
did you check this https://industruino.com/ ?

I truly appreciate you all chipping in and helping me out with this, thank you all very much for your generosity.

And yes I have glanced at Industruino in the past. But looking at them again I do see they are CE and FCC certified. :slight_smile:

Looks like it could be a good candidate, but I do not see any mention of mechanical relay modules, am I completely missing them or do they not support that?

I am very interested in the Industruino IND.I/O D21G and the ethernet module but I do not see any spec listed for which processor they are using in the PLC. Will it be capable of handling the libraries I have listed above?

megaBlocks:
I truly appreciate you all chipping in and helping me out with this, thank you all very much for your generosity.

And yes I have glanced at Industruino in the past. But looking at them again I do see they are CE and FCC certified. :slight_smile:

Looks like it could be a good candidate, but I do not see any mention of mechanical relay modules, am I completely missing them or do they not support that?

I am very interested in the Industruino IND.I/O D21G and the ethernet module but I do not see any spec listed for which processor they are using in the PLC. Will it be capable of handling the libraries I have listed above?

you can use DIN mounted relays. there are models with two relays a small one SSR controls the big one. or SSR only

Industrino has SAMD MCU like Arduino Zero/M0 and MKR.

I just looked at the SAMD MCU on that Industrino, I even installed the board files to Arduio IDE and tried to compile but the Maximum size is 262144 bytes.

My Sketch uses 757282 bytes of program storage space.

That means my sketch is 288% of a SAMD MCU maximum.!!!!!!!

I may be mistaken, but I am very sure it won't work either.


Why is the ESP32 such a superior module (price, performance, memory, features) compared to all Arduino solutions?

This is driving me crazy, I have a working prototype that costs $40, but I can't find even a single simple industrial Arduino based solutions no matter how much money they cost.

Will I be forced to use this Yun??? It is so slow..

Please help me, my team thinks I'm a total idiot because I can't find even a single alternative to the ESP32. Nor can I find a ESP32 solution that is certified.

My deadline is nearly up too AHH!

My Sketch uses 757282 bytes of program storage space.

ESP32 sketch sizes aren't directly comparable to SAMD or AVR sketches, because the ESP32 code includes an operating system, and a full TCP/IP/Wireless stack. Even one of the trivial examples compiles to 636470 bytes...

your SAMD sketch will not contain the Espressif RTOS SDK.
compare size of the Blink sketch for esp32 and samd