Code:
// Autor und © oberallgeier@Roboternetz.de, auf Anregung von inka
// https://www.roboternetz.de/community/threads/78304-ESP8266-arduinoIDE-etliche-Probleme?p=669306&viewfull=1#post669306
// board nodeMCU
/* ...
aktuell bearbeitet 29 08 2023 10h40 Rückstellung FLAG und gnLED per Taster, aktual. Textausgaben auf UART/USB
*/
// - - - - - - - - - - - - - - - - - - - -
#include <ESP8266WiFi.h>
#define LEB D1 // D1 = gnLED, LEB = LEDBingo für Anzeige "WLAN war mal an"
#define SRV D2 // D2 Servosignal kommt von D2
#define LED LED_BUILTIN // D4 = LED_BUILTIN = GPIO2 (TxD1), komplementär dazu rtLED mit 10k an 5V
#define TST D6 // D6 = Taster "Quittung" => zurücksetzen Servo+gnLED aus "WLAN war mal an"
// LED D4 = LED_BUILTIN, D4 schaltet invers die eingebaute LED!! Es funktionieren D0/1/2/3/4/5/6/7/8, nicht GPIO0/4/16..!!
// #define LED GPIO4 // rtLED wird mit "low" eingeschaltet, "high" => aus GPIO0/4/16.. funktionieren nicht !!
// D6: - 10K resistor attached to pin D6 from ground
int n = 99; // - - - // Zahl der angemeldeten Stationen
int anzl = 0; // // Anzahl der Gesamtloops (pro Zeile) = Σl
int amax = 30; // // Maximale Loops pro Zeile = Σanzl-max
int anz0 = 0; // - - - // Anzahl der Gesamtfälle = Σ0
int anz1 = 0; // // Anzahl der Gesamtfälle = Σ1
int ages = 0; // // Anzahl der Gesamtfälle = Σges
int aeve = 0; // - - - // Event/-s in der lfdn Zeile => Marke ans Zeilenende
int Lcrnt = 0; // // Laufanzeige (current) LED intern/ - im Rhythmus der WLAN-Abfrage/n
int bSt = 0; // // bSt = buttonState = variable for reading the pushbutton status
// - - - //
IPAddress ip (192, 168, 4, 1); // Geändert 08Aug23 11h48 ..4.2 || geänd. 21082023-16h38: ..4.1
IPAddress gateway (192, 168, 178, 250);
IPAddress subnet (255, 255, 255, 0);
// ----------------------------------------------
void SRV1P20 ( ) // Fahre Servo mit Periodenlänge ca 20 ms und Pulslänge ca 1 ms
{ // = 1-mal mit 1+19 ms
digitalWrite( SRV, HIGH ); // EINschalten für Puls
delay ( 1 );
digitalWrite( SRV, LOW ); // AUSschalten bis Ende Periode
delay ( 19 );
} // Servo fahren Ende
// ----------------------------------------------
void SRV2P20 ( ) // Fahre Servo mit Periodenlänge ca 20 ms und Pulslänge ca 2 ms
{ // = 1-mal mit 2+18 ms
digitalWrite( SRV, HIGH ); // EINschalten für Puls
delay ( 2 );
digitalWrite( SRV, LOW ); // AUSschalten bis Ende Periode
delay ( 18 );
} // Servo fahren Ende
// ----------------------------------------------
void setup()
{
Serial.begin(115200);
delay( 2000);
Serial.println(""); Serial.println(""); Serial.println("- - - -");
Serial.println("FLAGAP n02, 1-0, .4.1, 270823 23h30"); // 27 08 2023 23h30
Serial.println("AP: DEINSSID, 1-0");
boolean result = WiFi.softAP("DEINSSID", "1234567890");
delay( 100);
if (result = true)
{
Serial.println("ready! Ein Step: ca 2sec");
}
else
{
Serial.println("failed!");
}
pinMode ( LED, OUTPUT ); // Port als Ausgang schalten
digitalWrite( LED, LOW ); // LEDbuiltin EINschalten ()
pinMode ( LEB, OUTPUT ); // Port als Ausgang schalten
pinMode ( SRV, OUTPUT ); // Port für Servo als Ausgang schalten
pinMode ( TST, INPUT ); // #define TST D6 -- -- D6 = Taster "Quittung"
for ( int n = 0; n < 25; n++ ) { SRV1P20 ( ); } // Fahre Servo 25 Perioden = ca 1/2 sec mit Puls 1 ms
delay ( 50 ); // Servo fährt in Grundstellung; kurze Pause zum Nachlaufen
}
void loop()
{
// read the state of the pushbutton value:
bSt = digitalRead( TST );
// WLAN wird abgeprüft. Pro Prüfzyklus ohne WLAN Anzeige "0", mit WLAN Anzeige "1"
n = WiFi.softAPgetStationNum(); // Wert.
// Serial.println(" und jetzt kommt die Auswertung : ");
if ( n == 0 ) anz0 ++; // Kein WLAN-Station entdeckt, daher summiere Anzahl Fälle "0"
if ( n ) // Es wurde eine WLAN-Station, oder mehrere, entdeckt
{
anz1 = anz1 + n; // Anzahl Fälle "1"
aeve = 1; // Markiere dass in der laufenden Zeile ein Event (1) stattgefunden hat
for ( int n = 0; n < 25; n++ ) { SRV2P20 ( ); } // Fahre Servo 25 Perioden = ca 1/2 sec mit Puls 2 ms
// delay ( 100 ); // Servo fährt in Meldestellung; kurze Pause zum Nachlaufen
}
ages ++; // Gesamtzahl aller Fälle - max 36000 - ca. 10 Std
anzl ++; // Anzahl Fälle pro dargestelltem Loop
Serial.print( n ); Serial.print(" ");
// Betriebsanzeige : LED schaltet Ein/Aus, LEB an, wenn WLAN erkannt worden war
if ( Lcrnt ) Lcrnt = 0;
else Lcrnt = 1;
if ( Lcrnt ) digitalWrite( LED, LOW ); // LEDbuiltin EINschalten ()
else digitalWrite( LED, HIGH );
if ( n ) digitalWrite( LEB, HIGH ); // LEDBINGO EINschalten
if ( !bSt ) // Wenn Rücktaste gedrückt => Servo => Grundstellung, gnLED off
{ //
digitalWrite( LEB, LOW ); // LEDBINGO AUSschalten, weil Rücksetzter gedrückt ist
for ( int n = 0; n < 25; n++ ) { SRV1P20 ( ); } // Fahre Servo in Grundstellung, siehe oben
delay ( 100 ); // Servo fährt in Grundstellung; kurze Pause zum Nachlaufen
}
if ( anzl == amax )
{
Serial.print("\r\nFLAGAP"); Serial.print(" ");
Serial.print("ages ="); Serial.print( ages ); Serial.print(" ");
Serial.print("anz0 ="); Serial.print( anz0 ); Serial.print(" ");
Serial.print("anz1 ="); Serial.print( anz1 );
if ( aeve ) Serial.print("\t\t\t<<<<\t<<<<"); aeve = 0;
Serial.println("");
anzl = 0;
}
delay( 2000);
}
// E N D E Code ------------------------------------------------------------------------x
Eine zusätzliche/andere Einsatzmöglichkeit, statt Briefkasten, fände ich nützlich, überlege ich: Überwachung der "Waschmaschine=fertig" - wenn die Maschine zB im Keller steht und man (frau) nicht dauernd runtergehen möchte. Dazu muss ich noch ne geeignete Sensorik finden und werde demnächst nen LDR probieren.
Lesezeichen