I apologize for the basic question, but I am getting mad :
I am trying to set up an Ethernet connection and it doesn't work.
I have tried with 4 different shields (W5100, 2 different W5500, CH9121)
3 different boards (Pico Pi, Arduino Uno, Teensy LC)
3 different languages (Arduino, Micropython, Circuitpyhon)
3 different computers (Macbook & Windows)
3 different Ethernet routers (USB to Ethernet type).
With none of these combinations do I get a valid ip address, or see my device somewhere on the network.
This is a random ip address. I expect the device to use DHCP to connect, and use this ip address in case DHCP fails.
Same with the mac address, it's random.
This is probably where I'm missing something obvious (although I tried to find answers...)
192.168 .1. 69 is my Wifi network.
The router on which my device's ethernet cable is connected to has ip 169.254.240.198
Say I have the following :
Computer <-> USB to Ethernet hub <-> Arduino device
I understand the computer is handling the DHCP process. Is it going to assign it an address that looks like 169.254.x.x ?
Am I supposed to do something to help the DHCP process ?
Yes I have a network box and my computer is connected via wifi to it (ip 192.168.1.69 as of now).
There are several devices connected via wifi to the box (printer, Alexa, light bulbs etc)
On the computer side I have a USB-C hub that has an Ethernet port on which I connect my Arduino board (the hub has the ip 169.254.240.198).
I just tried that (Arduino Une, Ethernet shield v1 with a W5100), and the Ethernet Webserver Example below
/*
Web Server
A simple web server that shows the value of the analog input pins.
using an Arduino WIZnet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
modified 02 Sept 2015
by Arturo Guadalupi
*/
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
void setup() {
// You can use Ethernet.init(pin) to configure the CS pin
Ethernet.init(10); // Most Arduino shields
//Ethernet.init(5); // MKR ETH Shield
//Ethernet.init(0); // Teensy 2.0
//Ethernet.init(20); // Teensy++ 2.0
//Ethernet.init(15); // ESP8266 with Adafruit FeatherWing Ethernet
//Ethernet.init(33); // ESP32 with Adafruit FeatherWing Ethernet
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Ethernet WebServer Example");
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1); // do nothing, no point running without Ethernet hardware
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
// start the server
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an HTTP request ends with a blank line
bool currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the HTTP request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard HTTP response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disconnected");
}
}
The serial looks like this :
Ethernet WebServer Example
server is at 192.168.1.177
But I don't want to use the Ethernet connection to connect my device to the Internet, just to have a local network between my computer and the arduino device.
Maybe that's what's confusing me...
Ok, maybe I need to explain what I'm trying to do :
I want to plug my self powered Arduino device to a computer with an Ethernet cable, and exchange UDP messages with it (it's for OSC messages in case you're interested).
It won't necessarily be connected to MY computer, and the computer may or may not be connected to another network.
So this has to be independent from any box or other hardware.
And by the way, thank you all for your messages, I feel a little bit stupid, but I haven't found a clear explanation on this routing anywhere.
Basically it’s not because you have an Ethernet cable between two computers that the network is operational
It might - if some IP services recognize the ad hoc network but is not a given (and I don’t know enough about PCs if this is what you have to provide more color on this)
If you want to connect your arduino to a computer, may be you’ll be better off to use the Serial connection ?