Forum: Mikrocontroller und Digitale Elektronik Nodemcu benötige mal bitte etwas Hilfestellung


von Anfänger (Gast)


Lesenswert?

Guten Abend,

könnte mal bitte die Hilfe von jemanden gebrauchen der sich mit Arduino 
und Nodemcu auskennt.Habe einen Arduino Uno V3 mit ARDUINO ETHERNET REV3 
und dazu einen passenden Sketch, damit ich mich über Lan damit verbinden 
kann.
Nun wollte ich diesen Sketch gerne auch auf dem Nodemcu das einen 
ESP8266 besitzt in angepasster Form zum laufen bringen.Allerdings 
bekomme ich das irgendwie nicht zum laufen.

Das der ESP8266 ( Nodemcu ) nicht mit der Ethernet.h arbeitet ist mir 
bewusst. Dafür wollte ich die ESP8266WiFi.h nutzen.

Hier bräuchte ich mal bitte etwas Hilfe.
1
//  ----------------------------------------------------------------------
2
3
#include <SPI.h>
4
#include <Ethernet.h>
5
#include <stdio.h>
6
#define MAX_PIN 13  //UNO
7
8
// IP AND MAC ADRESS 
9
#define PORT 7777 //-> Type this under "TCP-Port" in the App
10
byte mac[] = {0x90, 0xA2, 0xDA, 0x10, 0xC1, 0x9C}; //If you're using more than one Arduino, set different Mac adresses for each board!
11
IPAddress ip(192, 168,1, 168);
12
13
String inputstream = "";
14
String answer = "";
15
String text = "";
16
String command = "";
17
String serialInput = ""; 
18
19
int pin = 0;
20
unsigned long value = 0;
21
unsigned long ticks[MAX_PIN]; //TICKS FOR EACH OUTPUT. USED IF AN OFFTIMER FOR AN OUTPUT HAS BEEN SET. 1 TICK = 100ms
22
unsigned long ticks_at_command; //IF WE GET NO COMMAND FOR XX SECONDS, THEN STOP CLIENT. 
23
24
25
char charBuf[250];
26
27
EthernetServer server = (PORT);
28
boolean verbunden = false;
29
EthernetClient client;
30
    
31
boolean pwm[MAX_PIN]; 
32
33
//Variables for the PWM-Values. The PWM-Values are always between 0 and 255, no matter, what Min/Max-Values you have set in the App.
34
//NEVER CHANGE!!! The Position of the slider depends on that value.
35
//(You can't read pwm values directly from a pin.)
36
int pwm_value[MAX_PIN]; 
37
38
39
40
//________________________________________________________________________________________________________________________________________________
41
void setup() {
42
  
43
/*
44
Arduino communicates with the shield using the SPI bus.
45
This is on digital pins 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega.
46
On both boards, pin 10 is used as SS. 
47
On the Mega, the hardware SS pin, 53, is not used to select the W5500, but it must be kept as an output or the SPI interface won't work.
48
*/
49
50
51
//SET ALL DIGITAL PINS AS OUTPUT 
52
//ATTENTION: DO NOT USE 11,12,13 ON THE UNO WITH ETHERNET SHIELD!
53
54
 for (int i = 0;i<MAX_PIN;i++){
55
  if ((i < 10) || (i >13)) pinMode(i, OUTPUT); 
56
  ticks[i] = 0;
57
 }
58
 
59
  // start the Ethernet connection:
60
  Ethernet.begin(mac,ip);
61
  server.begin();
62
63
   //START SERIAL 0 (Debug Port)
64
   //Serial.begin(2400); //The Serial Port occupies Outputs 0 & 1
65
66
}
67
  
68
69
70
71
//________________________________________________________________________________________________________________________________________________
72
void loop() {
73
74
  client = server.available();
75
    
76
      
77
      if(client.available()) 
78
      {
79
       
80
        ticks_at_command = millis();
81
        
82
        char zeichen = client.read();
83
84
         inputstream += zeichen;
85
         
86
87
        while (inputstream.indexOf(';')>0){
88
          
89
          
90
          inputstream.trim();
91
92
          //ALL COMMANDS COMING FROM THE APP ARE CONSTRUCTED AS FOLLOWS:
93
          // 4  CHARS COMMAND (SETD = Set digital Pin ,GETD = Get digital Pin, OFFT = Set Offtimer,SETP = Set PWM, GETP = Get PWM) 
94
          // x  CHARS PIN (0,1,2,3...51,52,53)
95
          // 1  POINT .
96
          // x  CHARS VALUE (0 = Off, 1 = On, 0-255 = PWM Value)
97
          // 1  SEMICOLON ;
98
          
99
          //FOR EXAMPLE:
100
          
101
          //SETD1.1;    Set digital Pin 1 on
102
          //SETD3.0;    Set digital Pin 3 off
103
          //SETP15.255; Set PWM for Pin 15 to 255
104
          //OFFT17.200; Set offtimer for pin 17 to 200ticks (20 seconds)
105
          //GETA5;      Get value of analogue Pin 5
106
          
107
          command = inputstream.substring(0,4);
108
          value = 0;
109
          pin = -1;
110
        
111
           
112
          value = inputstream.substring(inputstream.lastIndexOf('.')+1).toInt();
113
          pin = inputstream.substring(4,inputstream.lastIndexOf('.')).toInt();
114
115
                   
116
          //UNKNOWN COMMAND?
117
          if ((command != "SETD" && command != "GETD" && command != "SETP" && command != "GETA" && command != "OFFT" && command != "GETP")  || pin == -1 ){
118
              inputstream = "";
119
              command = "";
120
              value = 0;
121
              pin = 0;
122
          }
123
          
124
       
125
          
126
           //GET STATE OF DIGITAL OUTPUT (GETDXX). ANSWER: "DXX.0;" OR "DXX.1;"
127
          if (command == "GETD"){
128
                answer += "D" + String(pin) + "." + digitalRead(pin) + ";"; 
129
          }
130
                    
131
           //GET STATE OF ANALOG INPUT (GETAXX). ANSWER: "AXX.YYY;" YYY = 0 to 1023
132
          else if (command == "GETA"){
133
                answer += "A" + String(pin) + "." + analogRead(pin) + ";"; 
134
          }
135
          //SET DIGITAL OUTPUT ON (SETDXX.1) OR OFF (SETDXX.0). ANSWER: "DXX.0;" OR "DXX.1;"
136
          else if (command == "SETD"){
137
                ticks[pin] = 0;
138
                 digitalWrite(pin,value);
139
                 answer += "D" + String(pin) + "." + digitalRead(pin)+";";
140
                 
141
          }
142
143
          //SET OFFTIMER FOR A DIGITAL OUTPUT (OFFTXX.SS) <- XX = PIN, SS = 1/10Sec (1 SECOND = 10), ANSWER: "DXX.1;"
144
          else if (command == "OFFT"){
145
                 digitalWrite(pin,1);
146
                 ticks[pin] = millis() + (value*100);
147
                 answer += "D" + String(pin) + ".1;";//digitalRead(pin);
148
           }
149
150
           //SET PWM VALUE (SETPXX.YYY)
151
          else if (command == "SETP"){
152
                analogWrite(pin,value);
153
                pwm_value[pin] = value;
154
                answer += "P" + String(pin) + "." +  String(pwm_value[pin], DEC) + ";"; 
155
                
156
               
157
          }
158
           //GET PWM VALUE (GETPXX). ANSWER: "PXX.YYY;"
159
          else if (command == "GETP"){
160
            
161
                answer += "P" + String(pin) + "." +  String(pwm_value[pin], DEC) + ";"; 
162
163
          }
164
165
          
166
         inputstream = inputstream.substring(inputstream.indexOf(';')+1);
167
        
168
         }loop;//<-(While inputstream Contains ';')
169
170
171
        //clear Input Buffer
172
        client.flush();
173
174
    
175
     }//<-End if(client.available())
176
177
178
     //NO COMMANDS FOR 5 SECONDS->RESTART ETHERNET SERVER. (just "client.stop()" may cause problems)
179
      if ((millis() > ticks_at_command + 5000) && ticks_at_command > 0) {
180
        ticks_at_command = 0;
181
        client.stop();
182
        Ethernet.begin(mac,ip);
183
       server.begin();
184
      }
185
      
186
      
187
      //CHECK FOR OFFTIMERS
188
      for (int i = 0; i< MAX_PIN; i++){
189
            if ((millis() >= ticks[i]) && (ticks[i] > 0)){
190
                        ticks[i] = 0;
191
                        digitalWrite(i,0);
192
                        text = String(i);
193
                        answer +="D" + text + ".0;";
194
                        }
195
       }
196
       
197
      
198
      //SEND ANSWER TO PHONE
199
      if (answer != ""){
200
             
201
              answer.toCharArray(charBuf, answer.length()+1);
202
              server.write(charBuf,answer.length()); //Writes to all Clients connected
203
              answer = "";
204
205
      }
206
   
207
}//<-MAIN LOOP
208
 
209
//________________________________________________________________________

: Verschoben durch User
von Thomas F. (thomas_82)


Lesenswert?

Möchtest du dich jetzt mit Wifi und/oder Kabel mit deinem Netzwerk 
verbinden?

von Anfänger (Gast)


Lesenswert?

Thomas F. schrieb:
> Möchtest du dich jetzt mit Wifi und/oder Kabel mit deinem Netzwerk
> verbinden?

Hallo,
es geht darum das ich mich mit Wifi verbinden kann und das Programm auf 
dem ESP8266 ( Nodemcu ) zum laufen bekomme.

Danke schon mal.

von Thomas F. (thomas_82)


Lesenswert?

> Ethernet.begin(mac,ip);



und warum startest du dann Ethernet und nicht WIFI

von Anfänger (Gast)


Lesenswert?

Thomas F. schrieb:
> und warum startest du dann Ethernet und nicht WIFI

Da ich den Sketch mit Wifi nicht zum laufen bekommen habe,hab ich oben 
erstmal den Original Sketch eingefügt.
Kannst Du mir erklären wie man den Sketch mit der Wifi Lib zum laufen 
bekommt und wie man diese hier richtig einbindet ?

von Anfänger (Gast)


Lesenswert?

1
#include <SPI.h>
2
#include <ESP8266WiFi.h>
3
// #include <Ethernet.h>
4
#include <stdio.h>
5
6
const char* ssid = "Test";
7
const char* password = "Test";
8
9
WiFiServer server(xxx);

von Stefan F. (Gast)


Lesenswert?


von Anfänger (Gast)


Lesenswert?

Hallo stefanus,

danke für den Link zu Deiner Seite.

Aber mein Problem ist das ich den Sketch nicht mit der Wifi Lib zum 
laufen bekomme.
Kannst Du mir erklären wie man den Sketch mit der Wifi Lib zum laufen
bekommt und wie man diese Wifi Lib hier richtig einbindet in diesen 
Sketch ?

von Stefan F. (Gast)


Lesenswert?

Anfänger schrieb:
> Aber mein Problem ist das ich den Sketch nicht mit der Wifi Lib zum
> laufen bekomme.

Das geht auch nicht. Der ESP8266 Core funktioniert eben in wesentlichen 
Teilen anders.

> Kannst Du mir erklären wie man den Sketch mit der Wifi Lib zum
> laufen bekommt und wie man diese Wifi Lib hier richtig einbindet
> in diesen Sketch ?

Ich kann Dir das umprogrammieren oder wir machen es zusammen, dann 
lernst auch du etwas dabei. Du kannst mich dazu an Wochenenden in 
Düsseldorf besuchen. Ich nehme 20€ pro Stunde.

Oder anders gesagt: Wenn du es nicht selbst programmieren willst, dann 
lass es bleiben und kaufe fertige Produkte. Ich werde nicht dein Hobby 
oder deinen Job kostenlos machen damit zu zuschauen kannst.

von Anfänger (Gast)


Lesenswert?

Stefanus F. schrieb:
> Ich kann Dir das umprogrammieren oder wir machen es zusammen, dann
> lernst auch du etwas dabei. Du kannst mich dazu an Wochenenden in
> Düsseldorf besuchen. Ich nehme 20€ pro Stunde.

Vielen Dank für Dein nettes Angebot. Wie viele Stunden würdest Du denn 
dafür benötigen.

von Anfänger (Gast)


Lesenswert?

Stefanus F. schrieb:
> Oder anders gesagt: Wenn du es nicht selbst programmieren willst, dann
> lass es bleiben und kaufe fertige Produkte. Ich werde nicht dein Hobby
> oder deinen Job kostenlos machen damit zu zuschauen kannst.

Sorry aber Du scheinst etwas verwirt zu sein habe Dich höflich etwas 
gefragt.

von Stefan F. (Gast)


Lesenswert?

Anfänger schrieb:
> Vielen Dank für Dein nettes Angebot. Wie viele Stunden würdest Du denn
> dafür benötigen.

So viele wie du benötigst.

Bzw, wenn ich es Dir "einfach" nur umschreiben soll, musst du mir deine 
Hardware schicken und ziemlich detailliert beschreiben, was das Programm 
tun soll und mit welchen Test der Erfolg der Aktion überprüft wird. Am 
Besten programmierst du einen automatischen Test. Sonst muss ich auch 
noch den Test entwickeln.

Wenn du es gut vorbereitest, kommen wir vielleicht mit 24 Arbeitstunden 
hin. Natürlich ohne Gewährleistung (Profi-Arbeit mit Garantie kostet 
sehr viel mehr).

> Sorry aber Du scheinst etwas verwirt zu sein habe Dich
> höflich etwas gefragt.

Ich wollte nur klarstellen, dass ich nicht kostenlos arbeite. Ich wurde 
seit ein paar Tagen von anderen mehrfach um kostenlose Hilfe gebeten. 
Aber das geht nicht.

von Anfänger (Gast)


Lesenswert?

Könnte bitte ein Moderator diesen Thread löschen.

von Tomas T. (Gast)


Lesenswert?

Anfänger schrieb:
> Könnte bitte ein Moderator diesen Thread löschen.

Im Prinzip ja, aber dass wäre blöd.

von Tomas T. (Gast)


Lesenswert?

Anfänger schrieb:
> Vielen Dank für Dein nettes Angebot. Wie viele Stunden würdest Du denn
> dafür benötigen.

Stefanus F. schrieb:
> So viele wie du benötigst.

Also wenn man genauso wenig Ahnung hat wie der von dem die Anfrage 
kommt.
Dann sollte man nicht noch öffentlich 20 Euro die Stunde verlangen.

von Stefan F. (Gast)


Lesenswert?

Anfänger schrieb:
> Hier bräuchte ich mal bitte etwas Hilfe.

Anfänger schrieb:
> Kannst Du mir erklären wie man den Sketch mit der Wifi Lib zum laufen
> bekommt und wie man diese hier richtig einbindet ?

Stefanus F. schrieb:
> http://stefanfrings.de/esp8266/index.html#arduinostart

Anfänger schrieb:
> Da ich den Sketch mit Wifi nicht zum laufen bekommen habe,...
> Kannst Du mir erklären wie man den Sketch mit der Wifi Lib zum laufen
> bekommt und wie man diese hier richtig einbindet ?

Stefanus F. schrieb:
> ... wir machen es zusammen, dann
> lernst auch du etwas dabei. Du kannst mich dazu an Wochenenden in
> Düsseldorf besuchen. Ich nehme 20€ pro Stunde.

Tomas T. schrieb:
> Also wenn man genauso wenig Ahnung hat wie der von dem die Anfrage
> kommt. Dann sollte man nicht noch öffentlich 20 Euro die Stunde
> verlangen.

Auf meiner oben verlinkten Homepage kannst du sehen, dass ich etwas sehr 
ähnliches bereits gemacht habe. Wobei meine realen Projekte natürlich 
wesentlich umfangreicher sind, als diese knappen Anfänger-Beispiele.

Stefanus F. schrieb:
> So viele wie du benötigst.

Das bezog sich auf den Know-How Transfer von mir zum TO. Ich weiss 
nicht, wie schnell er es lernen wird.

Bei kommerziellen Projekten, die ich beruflich mache, bezahlen die 
Kunden 100 bis 200€ pro Stunde.

Ich helfe gerne, aber wenn dabei weniger Geld heraus kommt, als ich in 
dieser Zeit verfresse, dann habe ich darauf keine Lust. Für weniger als 
20€ hebe ich mein Hinterteil nicht an. Ich habe nämlich auch noch anders 
zu tun, zum Beispiel die Familie versorgen und für die Arbeit lernen.

von Anfänger (Gast)


Lesenswert?

Hallo,

eigentlich war das Thema für mich nachdem ich angefragt hatte ob ein 
Moderator den Thread bitte löschen könnte erledigt.

Aber da Stefanus F. hier mit seiner etwas seltsamen Art dann auch noch 
versucht sich zu rechtfertigen.Kann ich so nicht stehen lassen.
War der Meinung wer auf diesem Thread Antwortet, dem ist klar das ich 
mich mit Programmieren noch nicht besonders Auskenne.Ist ja auch keine 
Schande das zuzugeben.

Stefanus F. schrieb:
> Ich helfe gerne, aber wenn dabei weniger Geld heraus kommt, als ich in
> dieser Zeit verfresse, dann habe ich darauf keine Lust.

Also hast Du erst nur Geantwortet um Werbung für Deine HP zu machen und 
danach um den Thread wie ein Troll kaputt zu machen.Da Du gesehen hast 
hier ist für Dich nichts zu verdienen.Danach dann noch die super 
Klarstellung von Dir echt ganz toll.

von Stefan F. (Gast)


Lesenswert?

Anfänger schrieb:
> Also hast Du erst nur Geantwortet um Werbung für Deine HP zu machen und
> danach um den Thread wie ein Troll kaputt zu machen

Nein. Ich habe geantwortet, um Dir zu helfen. Die ganze Homepage dient 
nur dem Zweck, anderen Hobbybastlern zu helfen. Ich verdiene damit kein 
Geld - stattdessen kostet mich die Homepage jedes Jahr ca. 70 Euro + 
Zeitaufwand. Ich mache dass, weil Geben Freude bereitet.

Ich würde Dir auch gerne kostenlos weiterhin helfen, wenn du 
entsprechende Fragen stellen würdest. Deine Letzte Frage/Bitte war 
allerdings:

> Kannst Du mir erklären wie man den Sketch mit der Wifi Lib zum
> laufen bekommt und wie man diese Wifi Lib hier richtig einbindet
> in diesen Sketch ?

Ich habe Dir kostenlos (m)eine Webseite empfohlen, die ich mit sehr viel 
Zeiteinsatz für Leute wie dich geschrieben habe und auf meine Kosten 
betreibe. Dort ist deine Frage beantwortet.

Doch da ich bereits ahnte, dass Dir das nicht genügen wird, habe ich 
zudem angeboten, Dir den Sketch gegen Bezahlung zu schreiben oder 
wahlweise Unterricht zu erteilen. Deine erste Reaktion darauf zeigt, 
dass ich damit gar nicht so falsch lag.

Ich denke, das ist das umfangreichste Angebot, dass man in diesem Fall 
geben kann. Da war für jeden Geschmack etwas dabei. Du musst es ja nicht 
annehmen. Ein einfach "nein, gefällt mir nicht", hätte genügt.

Lies das bestehende Material, dass Dir empfohlen wurde und probiere es 
in kleinen Schritten in echt (nicht nur im Kopf) aus. Wenn dabei 
konkrete Fragen aufkommen, kannst du sie hier gerne stellen und wirst 
sicher auch Antworten erhalten.

PS:
Bevor du das nächste mal einen Helfer beschimpfst, bedenke dass man sich 
immer zweimal im Leben sieht. Vielleicht fällt Dir auf, dass ich hier 
der einzige war, der Dir geholfen hat. Möglicherweise hast du die 
anderen potentiellen Helfer durch deine Undankbarkeit abgeschreckt.

von STK500-Besitzer (Gast)


Lesenswert?

Der Code ist ja offensichtlich nicht vom TO.
Dann sollte dieser einfach mal das Programmm in seinen Worten 
kommentieren (und nicht die englischen einfach übersetzen).

Vielleicht wird ihm dann klar, wo er ansetzen muss, und was so bleiben 
kann, wie es ist. Ansonsten ist er einfach nur überfordert, und sollte 
die LED des NodeMCU blinken lassen.

von Stefan F. (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Ansonsten ist er einfach nur überfordert, und sollte
> die LED des NodeMCU blinken lassen.

Sogar dafür habe ich ein Beispiel zum Kopieren geliefert.

von STK500-Besitzer (Gast)


Lesenswert?

Stefanus F. schrieb:
> Sogar dafür habe ich ein Beispiel zum Kopieren geliefert.

Muss ich übersehen haben. Ich habe mir aber auch den größeren Teil des 
Threads erspart.
Wenn nur einer was sagt, wie jemand etwas tun soll, ist es doch noch was 
anderes, als wenn alle dasselbe sagen, oder?
Manche brauchen halt eine kräftigeren Tritt in die richtige Richtung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.