Uno + ESP8266-01 + Thingspeak + Nervenschlacht

Servus,

möchte ein paar Sensorwerte zu Thingspeak übertragen. Der Rest vom Kurzarbeitprojekt ist längst fertig. Seit 2 Wochen hänge ich aber an dem Thema ESP8266-01S und Thingspeak fest. Hab zig Sachen probiert, gelesen, zu wenig geschlafen :slight_smile: und bekomme trotzdem keine Werte an TS übertragen. Jetzt gebe ich W.O. und möchte Euch Profis um Rat fragen…

Das Thema ist 1000mal im Internet beschrieben, aber nichts zielführendes. Leider habe ich irgendeinen Fehler im System, den ich nicht diagnostizieren kann.

Am Foto ist das Setup zu sehen. ESP8266-TX ist über Softserial auf 2 verbunden. ESP8266-RX ist auf 3 verbunden.

Konfiguration:
ESP-8266-01S:
Der ESP hat die 1.6.0, da die NonOS nur bis 1.6.0 bis 1 MB Flash unterstützt. Über FTDI und AT-Kommandos habe ich schon nett mit dem ESP geplaudert. Das ESP ist auf 9600 konfiguriert, nimmt beim Startup Verbindung zum WLAN auf. Das funktioniert soweit.

Fehlerbeschreibung:
Die TX-LED am Uno blinkt, die LED am ESP8266-01S hat geblinkt, jedoch nichts in TS.
Serialmonitor gibt ein Timeout bei der Verbindung aus.

Ich vermute den Logic-Level - Converter bzw. dessen externe Stromversorgung. Die externe Versorgung liefert 3,3 bzw. 5 V gem. Messgerät.

Ist die WiFiEsp Bibliothek die richtige für diese Verdrahtung?
Habt Ihr einen Tipp für den Code bzw. ist ein Fehler in der Verdrahtung?

Grüße, vielen Dank im Voraus für jede Hilfe,
Pucki

Code:
https://create.arduino.cc/editor/pucki/7a940a39-260b-4291-94c4-f717086ad552/preview

#include <WiFiEsp.h>
#include <WiFiEspClient.h>
#include <WiFiEspServer.h>
#include <WiFiEspUdp.h>

#include <ThingSpeak.h>
#include <SoftwareSerial.h>

SoftwareSerial serialwifi(2,3); //RX,TX

int vcc = 1;
unsigned long Channel = 12345678;
const char * WriteAPIKey = "123";
char ssid[] = "abc";
char pass[] = "xyz";
int status = WL_IDLE_STATUS;     // the Wifi radio's status für attempt to connect to WiFi network

WiFiEspClient client; //für Thingspeak zuordnung

void setup()

{
Serial.begin(115200);
serialwifi.begin(9600);
  Serial.print("Searching for ESP8266..."); 
  // initialize ESP module
  WiFi.init(&serialwifi);
  delay(5000);
  WiFi.begin(ssid, pass);
  delay(5000);
/*
  // check for the presence of the shield
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue
    while (true);
  }

  // attempt to connect to WiFi network
  while (status != WL_CONNECTED) 
  {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network
    status = WiFi.begin(ssid, pass);
  }
  // you're connected now, so print out the data
  Serial.println("You're connected to the network");


 // print your WiFi shield's IP address
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

    // print the SSID of the network you're attached to
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

 // print the received signal strength
  long rssi = WiFi.RSSI();
  Serial.print("Signal strength (RSSI): ");
  Serial.println(rssi);
*/
  ThingSpeak.begin(client);  // Initialize ThingSpeak

  Serial.print("Void Setup erledigt");

  delay(5000);

}

void loop()
{
vcc = random(100);

ThingSpeak.writeField(Channel, 1, vcc, WriteAPIKey);
Serial.print("Daten an Thingspeak gesendet..."); 
delay(20000); // Wait 20 seconds to update the channel again

 }

Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Hallo pucki,

schon mal mit diesem Tutorial probiert?

Im übrigen braucht man den Arduino gar nicht mehr wenn man schon einen ESP8266 hat.
Ah ! Ich sehe gerade das Minimodul ESP8266-01. Also Arduino macht sensor auslesen und die Daten werden
über die serielle Schnittstelle an den ESP8266 gesendet.
Aha...... öhm ......... einfach eine nodeMCU für ca 10 Euro kaufen und das obige Projekt anpassen?

Ebenso.
Statt dem nackten ESP01 einen Wemos D1/NodeMCU und diesen direkt programmieren.
Alles andere ist imho schad' um die Zeit.
Wenn die Pins am ESP01 auch ausreichen, kannst den natürlich auch verwenden, ein NodeMCU ist aber wesentlich praktischer.

Servus,

Danke vorweg für die Tipps! Im Pflichtenheft :slight_smile: des Kurzarbeitprojekts steht: Waage1, Waage2, SD-Card, Luftwerte, Temperaturfühler Wasserdicht, RTC, ESP8266-01S und ein bisschen I2C Display darfs auch noch sein. Bis auf ESP läuft alles. Könnte die NodeMCU das im Vergleich zum Uno, z.B. Speicher etc....?

Hab eine NodeMCU bestellt. Jetzt möchte ich doch versuchen die ursprüngliche Konfiguration zum Laufen zu bringen.

@Stefan: habe gelesen, dass die ESP8266WiFi.h nur für "OnBoard" Wifi gedacht ist (D1, Node, etc.). Daher habe ich die WiFiEsp inkludiert. Stimmt das?

Grüße,
Pucki

Also die ESP8266 haben mehr Speicher als Arduino-Uno. Da es ein anderer Prozessor ist braucht das compilierte Programm aber auch mehr Speicher. Ich vermute dass auf einem ESP8266 trotzdem größere Programme als auf dem Arduino untergebracht werden können. Arduino 2kB RAM ESP8266 64kB ESP32 512 kB!

weitere Details im Vergleich hier

ESP8266Wifi benutzt man wenn man das ganze Programm auf dem ESP8266 erstellt.
Die WiFiESP kenne ich nicht. Das könnte sein. Wenn auf dem ESP8266 die AT-firmware drauf ist
das man dann per WiFiESP über serielle Schnittstelle kommuniziert.
Hast du denn irgendein lauffähiges Demo-Programm das das Zusammenspiel Arduino-serielle-Schnittstelle-ESP8266 vorführt?

Diese AT-firmware von Hand ansteuern zu wollen ist ganz grauselig. Wenn es die WiFiESP gut hinkriegt OK.

Servus,

das ESP sendet über AT und FTDI Adapter an TS. Die WifiESP ist wahrscheinlich nicht brauchbar.

Der AT Code lautet:

AT
AT+GMR   
AT+UART_DEF=9600,8,1,0,0  
AT+CIPMUX=0 
AT+CWMODE_CUR=1 station mode
AT+CWJAP="*Pucki*","*Pucki*"  
AT+CIPMODE=0
AT+CIPSTART="TCP","184.106.153.149",80 

AT+CIPSEND=51 
GET /update?api_key=*Pucki*&field1=100
AT+CIPCLOSE

Jetzt sollte es kein schweres mehr sein, den AT Code in die IDE zu übersetzen (Pucki=secret):

#include <SoftwareSerial.h>       //Software Serial library
SoftwareSerial esp(2, 3);   //Pin 2 and 3 act as RX and TX. Connect them to TX and RX of ESP8266      

void setup()
{
  esp.begin(9600);
    
}

  void loop()
  {
    
esp.print("AT+RST\r\n");  
  delay(1500);
esp.print("AT+CIPMUX=0\r\n");  
  delay(1500);
esp.print("AT+CWMODE_CUR=1\r\n");  
  delay(1500);
esp.print("AT+CWJAP=\"Pucki\",\"Pucki\"\r\n");  
  delay(5000);
esp.print("AT+CIPMODE=0\r\n");  
  delay(1500);
esp.print("AT+CIPSTART=\"TCP\",\"184.106.153.149\",80\r\n");  
  delay(1500);
esp.print("AT+CIPSEND=51\r\n");  
  delay(1500);
esp.print("GET /update?api_key=Pucki&field1=101\r\n");  
  delay(1500);
esp.print("AT+CIPCLOSE\r\n"); 

  delay(10000);
    
}

…ist es aber anscheinend…nichts geht…

bis die Node da ist, möchte ich der Konfiguration noch die Chance einer Möglichkeit geben :).
Könntet Ihr Euch den IDE Code ansehen, das Ergebnis soll nur im TS sichtbar sein, kein Serial erforderlich…

Grüße, Danke im Voraus für Eure Zeit,
Pucki

Servus Maker :),
heute ist die NodeMCU gekommen. Sketch hochgeladen über die die IDE. Daten an TS gesendet. Geht. Kein gemurkse wie mit dem ESP8266-01S Modul. Die NodeMCU ist die deutlich bessere Basis für das Projekt.

Danke nochmals für die Hints zum Setting!

Grüße,
Pucki

Besten Dank für die Rückmeldung. Schön dass es läuft.

Wenn du ausreichend Erfahrung mit dem NodeMCU gesammelt hast, kommt auch der Tag, an dem du dann den verbliebenen ESP01 auch mit einem Sketch versehen wirst. Also irgendwann wirst den schon noch auch verbauen.