Wie ihr im Titel lest geht es um den W5500 Ethernetcontroller von
Wiznet. Dieser wird von mir mit einem Arduino Leonardo Board betrieben.
Bisher habe ich den W5100 (standard vom Arduino Ethernetshield)
Problemlos verwendet für mein Projekt. Nun wollte ich meine eigene
Platine entwickeln und das mit dem W5500 da dieser weniger Pins hat und
günstiger ist. Dieser wird auch mit der von Wiznet modifizierten Library
wohl Problemlos unterstützt, auf der von mir entwickelten Platine jedoch
nicht.
Mein Programm spuckt mir normalerweise am Anfang die Daten aus die vom
DHCP zugewiesen wurde und wartet danach auf das Signal "hello" per Funk
(VirtualWire) um über Ethernet eine Meldung an einen Push Server zu
schicken. Dieser Aufbau funktioniert absolut Problemlos, wenn ich ein
W5100 Breakout Board verwende.
Hier das Feedback was ich über den Serial Monitor erhalte beim W5500.
--------------------
Initialisiere...
Attempting to obtain a DHCP lease...
My IP address: 255.255.255.255
Gateway IP address is 255.255.255.255
DNS IP address is 0.0.0.0
MSG lautet: hello
Nachricht erfolgreich angekommen
Sending push notification...Error. Server returned: -16891
--------------------
Wichtige Anmerkung
Das Arduino Leonardo Board arbeitet mit 5V daher hab ich vom Arduino
ausgehen an MOSI und SCK einen Spannungsteiler angeschlossen da der
W5500 mit 3,3V arbeitet. In den nächsten Tagen sollte bei mir ein
Arduino Pro Micro Board ankommen (Atmega32u4 wie beim Leonardo) welches
mit 3,3V betrieben wird. Außerdem erhalte ich noch ein WIZ550io Modul
welches den W5500 enthält um einen Fehler in der Programmierung
ausschließen zu können.
Ich weiß vielen Bluten die Augen, wenn Sie Arduino anstatt C sehen, ich
hoffe aber ihr könnt mir trotzdem helfen.
1 | #include <VirtualWire.h>
|
2 | #include <SPI.h>
|
3 | #include <Ethernet.h>
|
4 | #include <HTTPClient.h>
|
5 | #include <Ethernet.h>
|
6 | #include <Avviso.h>
|
7 | #define DEBUG 1
|
8 |
|
9 | byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
|
10 | int counterValue;
|
11 | char msg[9] = ""; //Speicher für die eingehende Nachricht
|
12 |
|
13 | void setup()
|
14 | {
|
15 | pinMode(8, OUTPUT);
|
16 | digitalWrite(8, LOW);
|
17 | Serial.begin(9600);
|
18 | while (!Serial);
|
19 | Serial.println("Initialisiere...");
|
20 | vw_set_rx_pin(7);
|
21 | vw_set_ptt_inverted(true);
|
22 | vw_setup(4000);
|
23 | vw_rx_start();
|
24 | if (DEBUG) Serial.println("Attempting to obtain a DHCP lease...");
|
25 | digitalWrite(8, HIGH);
|
26 | delay(5000);
|
27 | Ethernet.begin(mac);
|
28 | if (DEBUG) {
|
29 | Serial.print("My IP address: ");
|
30 | Ethernet.localIP().printTo(Serial);
|
31 | Serial.println();
|
32 |
|
33 | Serial.print("Gateway IP address is ");
|
34 | Ethernet.gatewayIP().printTo(Serial);
|
35 | Serial.println();
|
36 |
|
37 | Serial.print("DNS IP address is ");
|
38 | Ethernet.dnsServerIP().printTo(Serial);
|
39 | Serial.println();
|
40 | }
|
41 |
|
42 | Avviso.begin(NOTIFY_MY_ANDROID);
|
43 | Avviso.setApiKey("4f8560d3eab3b2e3732b362bf4b31e4e50109dc4005531b0");
|
44 | Avviso.setApplicationName("mydbell System");
|
45 | }
|
46 |
|
47 |
|
48 | void loop()
|
49 | {
|
50 | uint8_t buf[VW_MAX_MESSAGE_LEN];
|
51 | uint8_t buflen = VW_MAX_MESSAGE_LEN;
|
52 | if (vw_get_message(buf, &buflen)) // Non-blocking
|
53 | {
|
54 | digitalWrite(13, HIGH); // Empfange Nachricht [LED AN]
|
55 |
|
56 | for (int i = 0; i < buflen; i++)
|
57 | {
|
58 | msg[i] = buf[i];
|
59 | }
|
60 | Serial.print(" MSG lautet: ");
|
61 | Serial.println(msg);
|
62 | }
|
63 | else if (strcmp(msg, "hello") == 0)
|
64 | {
|
65 | Serial.println("Nachricht erfolgreich angekommen");
|
66 | msg[1] = '0';
|
67 | delay(8000);
|
68 | if (DEBUG) Serial.print("Sending push notification...");
|
69 | int returnCode = Avviso.push("Es hat geklinget an der", "Vordertuer", 0);
|
70 | if (returnCode == 200) {
|
71 | if (DEBUG) Serial.println("OK.");
|
72 | } else
|
73 | {
|
74 | if (DEBUG) Serial.print("Error. Server returned: ");
|
75 | if (DEBUG) Serial.print(returnCode);
|
76 | }
|
77 | }
|
78 | }
|
Vielen Dank im Voraus