Hallo Leute,
ich bin son doofer Fachinformatiker(nebenberufliches Studium Medieninformatik am Laufen), der sich ein bisschen an Mikrocontrollern ausprobiert und nur gegooglete Ahnung von Elektronik hat.
Testaufbau ist folgender (eigentlich nicht so relevant)
Arduino Nano steuert über 595 Shiftregister ne 16 Kanal Relaisplatine mit je 24V LED Ketten - das funktioniert auch - hab im Arduino selber einfach hochzählen können, Platine reagiert
#include <SoftwareSerial.h>
SoftwareSerial ArduinoNano(6, 11); //RX, TX
const int anzeigePin1 = 2;
const int clockPin1 = 3;
const int datenPin1 = 9;
const int anzeigePin2 = 4;
const int clockPin2 = 5;
const int datenPin2 = 10;
const String cache = "0";
void setup() {
// put your setup code here, to run once:
ArduinoNano.begin(9600);
Serial.begin(9600);
pinMode(anzeigePin1, OUTPUT);
pinMode(clockPin1, OUTPUT);
pinMode(datenPin1, OUTPUT);
pinMode(anzeigePin2, OUTPUT);
pinMode(clockPin2, OUTPUT);
pinMode(datenPin2, OUTPUT);
pinMode(6, INPUT);
pinMode(11, OUTPUT);
}
void loop() {
delay(1000);
Serial.println("Loopstart");
// put your main code here, to run repeatedly:
int Schaltzustand = 0;
int s1 = 0;
int s2 = 0;
int n = 0;
String Lesen = lesen();
if (Lesen != "NA") {
cache = Lesen;
}
Serial.println("Cache: "+cache);
Schaltzustand = cache.toInt();
Serial.println("Variable Schaltzustand: "+Schaltzustand);
for (n = 0; n == 8; n++) {
Serial.println(n);
bitWrite(s1, n, ((Schaltzustand >> n) & 1));
}
for (n = 8; n == 16; n++) {
Serial.println(n);
bitWrite(s2, n - 8, ((Schaltzustand >> n) & 1));
}
digitalWrite(anzeigePin1, LOW);
digitalWrite(anzeigePin2, LOW);
shiftOut(datenPin1, clockPin1, MSBFIRST, s1);
shiftOut(datenPin2, clockPin2, MSBFIRST, s2);
digitalWrite(anzeigePin1, HIGH);
digitalWrite(anzeigePin2, HIGH);
delay(100);
Serial.println(" Loopende");
}
//Seriell vom ESP8266 lesen
String lesen() {
String nachricht = "";
char zeichen;
//Seriell vom Arduino lesen
while (ArduinoNano.available()>0) {
Serial.print("DA!");
zeichen = ArduinoNano.read();
nachricht.concat(zeichen);
}
if (nachricht!=""){
Serial.print("Gelesen: "+nachricht);
}else
nachricht="NA";
return nachricht;
}
ESP8266 stellt einen Webserver mit Eingabefeld und "Senden" Knopf bereit weil hochzählen langweilig ist.
// Bibliotheken
#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
#include <ESP8266WebServer.h>
#include <WiFiClient.h>
//WLAN Kennung
const char* ssid = "Einhornhort";
const char* passwort = "geheim";
// Webserver auf Port 80
ESP8266WebServer server(80);
//Kommunikation mit Arduino
SoftwareSerial NodeMCU(D2, D1); //RX, TX
//#######################################################################
void handleRoot() {
String s = "<!DOCTYPE html><html><head><body><h1>Die Lampe</h1>
<form action=\"/action_page\">
<input type=\"text\" id=\"wert\" name=\"wert\" value=\"\">
<input type=\"submit\" value=\"Mach!\"></form></body></html>";;
server.send(200, "text/html", s); //Send web page
Serial.println("Hauptseite aufgerufen");
}
//#######################################################################
void handleForm() {
String wert = server.arg("wert");
NodeMCU.print(wert);
Serial.println("Werte gesendet: "+wert);
String s = "<a href='/'> Go Back </a>";
server.send(200, "text/html", s); //Send web page
}
//#######################################################################
void setup() {
delay(500);
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(D1, OUTPUT); //Seriell senden
pinMode(D2, INPUT); //Seriell empfangen
NodeMCU.begin(9600);
Serial.print("Verbindet mit ");
Serial.println(ssid);
WiFi.begin(ssid, passwort);
int count = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
count++;
if (count = 100) {
break;
}
}
server.on("/", handleRoot);
server.on("/action_page", handleForm);
server.begin();
Serial.println("");
Serial.println("WLAN verbunden");
delay(10000);
Serial.print("IP Addresse: ");
Serial.println(WiFi.localIP());
}
//#######################################################################
void loop() {
server.handleClient();
}
Nun das Problem... ESP soll via Seriell an Arduino die eingegebene Zahl übermitteln... tut er aber nicht - laut serieller Konsole kommt nix an
D1 vom ESP geht über son 8 Kanal "Logic Shifter" an D6 vom Nano - der Logic Shifter hängt mit der 3V Seite am 3V Ausgang des ESP und mit der 5V Seite am 5V Ausgang vom Nano - Ground haben beide gemeinsam...
Kann mir jemand einen Tipp geben ob ich ein Code - oder ein elektrisches Problem habe?
Wenn es hilft, male ich die Schaltung auch auf - da ich mit dem CAD Tool als Anfänger eher am Rad gedreht habe mit Bleistift und Kuli auf Papier
Viel freundlichen Dank!