If you want to add ethernet networking to your Arduino based project following are the conventional solutions:
- Buy an Arduino Ethernet that has ethernet already included on the board ~48€
- Arduino ethernet shield for ~33 €
One of the problems with these options is that they don’t support DHCP so you have to hardcode your IP address in the firmware. Besides they seem to cost too much – for this kind of money it would be cheaper to get wireless shields.
One alternative that I have come accros is to use self contained ethernet to serial bridges, while these might not be any cheaper from the previously mentioned options, they are more powerful.
These modules are not much larger than the RJ45 socket itself and are extremelly easy to interface to any controller. Support exists for TCP, UDP, DHCP, SNMP, AES encryption and you can actually configure it to send e-mail when IO pin is triggered so for some extremelly simple applications you might be able to avoid the controller alltogether. What I’m talking about is the XPort from Lantronix.
I happen to have one laying around since we used this in one of the projects many years ago. Nowadays I think you should be able to get one for ~30€ if you search long enough. There’s also a newer generation available called XPort PRO that has full linux running inside of it which allows you to do far more but costs far too much for me (~60€).
There’s also a cheaper and very powerful alternative from Digi called Digi Connect ME 9210 with full Linux running inside it (39€). It has more pins and you should be able to do things like bridging 1-wire sensor network to ethernet without any external controller. I have no experiences with that device though and haven’t found any useful discussions about it so far.
So anyway to get the XPort up and running you first have to give it an IP address. There are basically 2 ways of doing this – either with DHCP (the easy method) or over serial.
Since I wanted to learn a bit about using my Bus Pirate I used it to communicate with the serial port and verify that I can actually enter the serial setup if I wanted to.
Here’s how I connected the XPort and Bus Pirate:
Bus Pirate | XPort |
GND | 1 |
+3.3V | 2 |
MOSI | 4 |
MISO | 5 |
To enter the serial setup you would have to do something like this:
$ picocom -b 115200 -p n -d 8 /dev/ttyUSB0 picocom v1.4 port is : /dev/ttyUSB0 flowcontrol : none baudrate is : 115200 parity is : none databits are : 8 escape is : C-a noinit is : no noreset is : no nolock is : no send_cmd is : ascii_xfr -s -v -l10 receive_cmd is : rz -vv Terminal ready HiZ>b Set serial port speed: (bps) 1. 300 2. 1200 3. 2400 4. 4800 5. 9600 6. 19200 7. 38400 8. 57600 9. 115200 10. BRG raw value (9)>5 Adjust your terminal Space to continue Thanks for using picocom $ picocom -b 9600 -p n -d 8 /dev/ttyUSB0 picocom v1.4 port is : /dev/ttyUSB0 flowcontrol : none baudrate is : 9600 parity is : none databits are : 8 escape is : C-a noinit is : no noreset is : no nolock is : no send_cmd is : ascii_xfr -s -v -l10 receive_cmd is : rz -vv Terminal ready HiZ>m 1. HiZ 2. 1-WIRE 3. UART 4. I2C 5. SPI 6. 2WIRE 7. 3WIRE 8. LCD 9. DIO x. exit(without change) (1)>3 Set serial port speed: (bps) 1. 300 2. 1200 3. 2400 4. 4800 5. 9600 6. 19200 7. 38400 8. 57600 9. 115200 10. BRG raw value (1)>5 Data bits and parity: 1. 8, NONE *default 2. 8, EVEN 3. 8, ODD 4. 9, NONE (1)> Stop bits: 1. 1 *default 2. 2 (1)> Receive polarity: 1. Idle 1 *default 2. Idle 0 (1)> Select output type: 1. Open drain (H=Hi-Z, L=GND) 2. Normal (H=3.3V, L=GND) (1)>2 Ready UART>W%:1000 0x78:100 %:100 0x0D 0x0A (2) Power supplies ON DELAY 1000ms WRITE: 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 DELAY 100ms WRITE: 0x0D WRITE: 0x0A Raw UART input Any key to exit *** basic parameters Hardware: Ethernet TPI IP addr - 0.0.0.0/DHCP/BOOTP/AutoIP, no gateway set DHCP device name : not set *** Security SNMP is enabled SNMP Community Name: public Telnet Setup is enabled TFTP Download is enabled Port 77FEh is enabled Web Server is enabled Web Setup is enabled ECHO is disabled Encryption is disabled Enhanced Password is disabled Port 77F0h is enabled *** Channel 1 Baudrate 9600, I/F Mode 4C, Flow 00 Port 10001 Connect Mode : C0 Send '+++' in Modem Mode enabled Auto increment source port disabled Remote IP Adr: --- none ---, Port 00000 Disconn Mode : 00 Flush Mode : 00 *** Expert TCP Keepalive : 45s ARP cache timeout: 600s High CPU performance: disabled Monitor Mode @ bootup : enabled HTTP Port Number : 80 SMTP Port Number : 25 MTU Size: 1400 Alternate MAC: disabled Ethernet connection type: auto-negotiate *** E-mail Mail server: 0.0.0.0 Unit : Domain : Recipient 1: Recipient 2: - Trigger 1 Serial trigger input: disabled Channel: 1 Match: 00,00 Trigger input1: X Trigger input2: X Trigger input3: X Message : Priority: L Min. notification interval: 1 s Re-notification interval : 0 s - Trigger 2 Serial trigger input: disabled Channel: 1 Match: 00,00 Trigger input1: X Trigger input2: X Trigger input3: X Message : Priority: L Min. notification interval: 1 s Re-notification interval : 0 s - Trigger 3 Serial trigger input: disabled Channel: 1 Match: 00,00 Trigger input1: X Trigger input2: X Trigger input3: X Message : Priority: L Min. notification interval: 1 s Re-notification interval : 0 s Change Setup: 0 Server 1 Channel 1 3 E-mail 5 Expert 6 Security 7 Defaults 8 Exit without save 9 Save and exit Your choice ? |
At this point you could go on configuring the device over the serial connection but it’s a bit incovenient so I just gave it an IP with DHCP and used the web interface for configuring.
So with this configuration the XPort will connect to TCP port 12345 on 192.168.1.1 right after restart and we can use this channel to talk over serial port.
To test it let’s bind netcat on the 192.168.1.1:
$ nc -l 12345 |
And from the bus pirate shell we have to exit the monitor mode, reset the device and enter the serial bridge mode:
UART>w Power supplies OFF UART>W Power supplies ON UART>(1) UART bridge Reset to exit Are you sure? y test |
You should now see test on the netcat shell and anything that wou write into the netcat session should show up on the buspirate shell.