COM-Server
eigentlich "RS-232 over Ethernet"
mit Arduino Nano


Die chaotische Entwicklungsumgebung:


Schaltung (Prinzipschaltbild):


Das Ethernet-Modul darf nicht direkt am 3V3-Ausgang des Arduino Nano angeschlossen werden (entgegen anderen Angaben im Internet).
Dieser Ausgang liefert max. 50mA! Das Modul braucht bis zu 180mA!
Deswegen habe ich einen eigenen 3V3-LDO-Regler spendiert.
Da der China-Nachbau anstelle einer Schottky-Diode eine billige Siliziumdiode eingebaut hat, bricht die Spannung
bei Belastung auf unter 4V zusammen. Daher die Lösung mit dem separaten USB-Anschluss.

Die Software für den Arduino Nano benötigt die UIP_Ethernet Library. Download unter: https://github.com/ntruchsess/arduino_uip
Diese Bibliothek ersetzt die Originale (fast) 1:1, ist aber für das Ethernet-IC ENC28J60 geschrieben.
Als Client kommt z.B. die Software com2tcp in Frage, Teil von com2com Null-Modem Emulator, Download unter: http://com0com.sourceforge.net/
Oder noch einfacher, HW Virtual Serial Port bei http://www.hw-group.com/products/hw_vsp/hw_vsp2_de.html. Hier bitte "NVT Enable" ausschalten, sonst werden beim generieren des virtuellen COM-Ports unnötige Steuerzeichen übertragen.

Quelltext:

/* * ENC28J60 based TCP server * at 192.168.1.99 on port 23 (Telnet).
*/
#include <SPI.h>
#include <UIPEthernet.h>
// network configuration. gateway and subnet are optional.
// the media access control (ethernet hardware) address for the shield:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//the IP address for the shield:
byte ip[] = { 192, 168, 1, 99 };
// the router's gateway address:
byte gateway[] = { 10, 0, 0, 1 }; // the subnet:
byte subnet[] = { 255, 255, 255, 0 }; // telnet defaults to port 23
EthernetServer server = EthernetServer(23); void setup() { Serial.begin(2400, SERIAL_8N2); Serial.setTimeout(100); // initialize the ethernet device
Ethernet.begin(mac,ip); // start listening for clients
server.begin(); } void loop() { // if an incoming client connects, there will be bytes available to read:
EthernetClient client = server.available(); if (client == true) { // liest Daten aus der seriellen Schnittstelle falls vorhanden
// und schicke sie an den Client
if (Serial.available() > 0) { client.print(Serial.readString()); } // schicke vom Client empfangene Daten auf die serielle Schnittstelle
// das funktioniert super
Serial.write(client.read()); } }
Besucherzähler Versteckt