.. Viel Erfolg wenn es jetzt an das geht worum es eigentlich gehen sollte ..
Mal sehen.
Der Code für Postbox und "Flag"-Station läuft.
Mit einigen oben beschriebenen Experimenten (Rumstochereien) hatte ich für mich festgestellte, dass die Postbox mit ner Platine "D1 Mini ESP9266MOD 12-F" läuft, dass aber die Flagstation nur auf ner "NodemMCU ESP9266MOD 12-F" vom gleichen Hersteller einwandfrei und störungsfrei läuft. Bei anderen, eigenen, Erfahrungen bitte um Rückmeldung.
Die Verdrahtung geht aus dem Codetext hervor - Servo und LEDs und /RES-Taster. LEDs sind nicht notwendig. Die Onboard-LED blinkt auf der Flagstation - laut Code - im Betriebszustand. Auf der Postbox-Station bleiben diese Dinge aus Energiespargründen aus. Der "TASTER" der Postbox ist eine Bastelei nach eigenem Gutdünken - je nach Konstruktion des Briefkastens. Hinweise dazu sind im oben genannten Buch enthalten.
Zu Testzwecken (nötig/sinnvoll eigentlich nur während der Entwicklungsphase) werden Texte am USB-Anschluss ausgegeben. Dies wurde in beiden Fällen beibehalten - der Energiebedarf ist vermutlich unwesentlich höher, die Funktion leidet nicht . . .
Dumm, dass ich die Einstellung des Servos auf die beiden Signalstellungs-Endpunkte in den Code verlegt hatte. Da wäre eine integrierte on-board-Einstellung pfiffig gewesen. Aber das hätte den Code doch noch etwas aufgebläht bzw. unübersichtlich(er) gemacht. Dafür füge ich für die NodeMCU das Progrämmchen zum Einstellen der Servos mit.
Die Geschichte läuft aktuell im Labormodus - also noch NICHT miit dem Postbox-kästchen im Briefkasten. Der Strombedarf der Postbox-Platine wurde im deepSleep gemessen - etwa 45 µA; beim Aufwachen werden für etwa sechs bis acht Sekunden rund 70-80 mA benötigt. Der FlaggenServo fährt beim Start der Anzeige-/FLAGstation in eine Position, nach Empfang eines Postbox-Signals fährt er in die "andere" Position - etwa 90°++.
Code für die Postbox
Code:
// Autor und © oberallgeier@Roboternetz.de mit Grundlagen aus
// Programm Postbox-ESP aus "ESP8266 Das Projektbuch", Seiten 35ff ... korr 08072023
. . . . P box12
bearbeitet 27 07 2023 11:04 Code für Pbox aus "..Projektbuch.." übernommen/kontrolliert
. . . . . . . . . . . . . .
aktuell bearbeitet 15 08 2023 14h40
/ / / / */
#include <ESP8266WiFi.h>
const char* ssid = "DEINESSID"; // Dies hier ist Postbox Empfänger ist FLAG
const char* pass = "PASS24680"; //
IPAddress ip (192, 168, 1, 1); // aktiviert 08Aug23 1127 >> egal was da steht =>
IPAddress serverIp (192, 168, 1, 3); // geändert 15Aug23 1436 "connect fail"
IPAddress local_ip (192, 168, 1, 2); // geändert 15Aug23 1436
IPAddress gateway (192, 168, 178, 250); // aktiviert 08Aug23 1127
IPAddress subnet (255, 255, 255, 0); // aktiviert 08Aug23 1127
// -------------------------- ------------------------
int serverPort = 80;
WiFiClient client;
// --------------------------
void setup()
{
Serial.begin(115200);
delay( 2000);
Serial.println(""); //
Serial.println("Pbox12 #03 DEINESSID PASS .1.1 15082023 14h40"); // Kennung, Anmeldetext
WiFi.begin (ssid, pass); //
while (WiFi.status() != WL_CONNECTED)
{
delay( 500);
Serial.print(".");
}
delay( 1000);
Serial.print("verbunden mit : ");
Serial.print(ssid);
Serial.print("\r\nIP address/WiFi.localIP() : ");
Serial.println(WiFi.localIP());
Serial.print("serverIp ist :"); Serial.print(serverIp);
Serial.println("");
if ( !client.connect(serverIp, serverPort) )
{
Serial.println("connect fail");
}
client.print("GET /flag/");
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(serverIp);
client.println("Connection: close");
client.println();
client.stop();
Serial.println("Exit to deepSleep(0)"); // zugefügt 15Aug23 1436
delay(1500); //
ESP.deepSleep(0);
}
void loop() { }
// E N D E Code ------------------------------------------------------------------------x
Code für Anzeige/Flag
Code:
// Autor und © oberallgeier@Roboternetz.de, auf Anregung von inka
// https://www.roboternetz.de/community/threads/78304-ESP8266-arduinoIDE-etliche-Probleme/page3?p=669220#post669220
// Speicherort xxxxxxxxxxxxxxxxxxxxxxxxx\FLAGAP.ino (wird vorm compilieren+flashen evtl umbenannt)
// board nodeMCU
/* bearbeitet 11 08 2023 11h36 . . . . .
bearbeitet 15 08 2023 09h20 Directory umbenannt, ino-File umbenannt, ID fuer UART geändert
aktuell bearbeitet 15 08 2023 17h24 Servo eingebunden
*/
// - - - - - - - - - - - - - - - - - - - -
#include <ESP8266WiFi.h>
#define LEB D1 // D1 = gnLED, LEDBINGO für Anzeige "WLAN war mal an"
#define SRV D2 // D2 Servosignal kommt von D2
#define LED LED_BUILTIN // D4 = LED_BUILTIN
#define TST D6 // D6 = Taster "Quittung"
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
// - - - //
IPAddress ip (192, 168, 4, 2); // Geändert 08Aug23 11h48
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; Rev. TXT+LED+Servo-Ausgabe, n02, 1++0, .1.1, 15082023 09h20");
Serial.println("AP: DEINESSID, PASS24680");
boolean result = WiFi.softAP("DEINESSID", "PASS24680");
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
for ( int n = 0; n < 25; n++ ) { SRV1P20 ( ); } // Fahre Servo 25 Perioden = ca 1/2 sec mit Puls 1 ms
delay ( 100 ); // Servo fährt in Grundstellung; kurze Pause zum Nachlaufen
}
void loop()
{
// WLAN wird abgeprüft. Pro Prüfzyklus ohne WLAN Anzeige "0", mit WLAN Anzeige "1"
n = WiFi.softAPgetStationNum(); // Wert.
if ( n == 0 ) anz0 ++; // Anzahl Fälle "0"
if ( n )
{
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 ( 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
Code zum Servoeinstellen
Code:
// Autor : oberallgeier @ Roboternetz.de
// Programm Zum Testen der Servosteuerung für "FLAG"; Anschlag-eine-Seite <=> Anschlag-andere-Seite
// >>> hier nur Ansteuerung von Servomotor über Anschluss/Pin D2 eines NodeMCU
// A C H T U N G > > > Der NodeMCU kann nur ca. 12 mA je Pin ausgeben < < < A C H T U N G
/* bearbeitet 12 08 2023 23h27 Code für FLAG - hier Servotests, -steuerung "zu Fuss", per for() . . .
zuletzt bearbeitet 14 08 2023 17h57 Code für FLAG - Servosteuerung "zu Fuss", Modul-Version
>> Anmerkung: ! ! Der Schwenkwinkel des Servos wird mit den Variablen "n" in "void loop()" festgelegt */
// ------------------------------------------------------------------------------------------------
#define SRV D2 // Servosignal kommt von D2
// ----------------------------------------------
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()
{
pinMode( SRV, OUTPUT ); // Port für Servo als Ausgang schalten
} // Sequenz setup Ende
// ----------------------------------------------
// ----------------------------------------------
void loop(void) // Testfahrt Servo, i-mal hin-und-her, Schwenk typisch ca 30° und ca 120° (je nach Baumuster)
{
for ( int i = 0; i < 50; i++ ) // Hin/her fahren. Schwenkwinkel/-zeit kann für den Eigenbedarf angepasst werden.
{ // Schwenkwinkel/-zeit wird in der for-Schleife "n" festgelegt, aktuell nmax = 25
// ----------------------------------------------
for ( int n = 0; n < 25; n++ ) { SRV1P20 ( ); } // Fahre Servo 25 Perioden = ca 1/2 sec mit Puls 1 ms
delay ( 1000 ); // Pause zum Nachlaufen des Servo und kurze Pause
for ( int n = 0; n < 25; n++ ) { SRV2P20 ( ); } // Fahre Servo 25 Perioden = ca 1/2 sec mit Puls 2 ms
delay ( 1000 ); // Pause zum Nachlaufen des Servo
// ----------------------------------------------
} // Ende for ( int i = 0; i < 50; i++ ) ....
}
// E N D E Code ------------------------------------------------------------------------x
Wers nachbaut - viel Vergnügen.
Lesezeichen