- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 91

Thema: abstandhalten mit 433MHz

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    die testergebnisse gibt's hier immer wieder mal, jetzt sind wir eher mit den e-bikes unterwegs als im winter

    was mich jetzt beschäftigt, ist die bisher nur einseitige benachrichtigung. Eigentlich ist es ja nur der client, der eine neue wie auch eine abgebrochne verbindung signalisiert:

    - beim server geht das RSSI ja nicht, weil es ja mehrere clients geben kann, die eine verbindung haben - das vermute ich als grund für das nicht funktionieren
    - auch mit dem zählen der verbindungen beim server (die funktion (WiFi.softAPgetStationNum() ), da wird eine neue verbindung recht schnell bemerkt und signalisiert, bei einer abgebrochnen verbindung dauert es elend lange, bis die meldung kommt, da ist man mit dem rad leicht 300/400 meter gefahren. Das übersteigt die (meine) toleranzgrenze beim weiten...

    Das sind die zwei möglichkeiten, die ich bisher ausprobiert habe, was gibt's noch? Geht da was nur mit dem webserver und einer "normalen" zeichenübertragung?
    gruß inka

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Du könntest versuchen, die Laufzeit eines Signals zu messen. Zum Server hinschicken, der schickt es direkt zurück und Du ermittelst, wie lange das gedauert hat. Vielleicht ist das brauchbarer. Das Signal/Zeichen kann auch vom Server kommen, der Client schickt es zurück und Du ermittelst die Laufzeit auf dem Server.

    MfG

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Moppi Beitrag anzeigen
    Du könntest versuchen, die Laufzeit eines Signals zu messen. Zum Server hinschicken, der schickt es direkt zurück und Du ermittelst, wie lange das gedauert hat. Vielleicht ist das brauchbarer. Das Signal/Zeichen kann auch vom Server kommen, der Client schickt es zurück und Du ermittelst die Laufzeit auf dem Server.

    MfG

    ok, dann kenne ich die laufzeit - was mache ich dann damit? Oder meinst du eine unendlich lange laufzeit ist ein zeichen für eine abgebrochene verbindung?
    Auf dem client habe ich ereignisse, die ich direkt in signale der RGB led umwandeln kann, die werden dann auf dem clientmodul ausgewertet und eben in die optischen signale umgewandelt...
    Eine solche möglichkeit auf dem server, die ebenfalls eine direkte umwandlung in optische signale der RGB led ermöglicht fehlt mir. Die Suche ich...
    Mit dem zeichen senden dachte ich eher daran, dass der client irgendein vereinbartes zeichen in vereinbarten intervallen an den server sendet. Bleibt diese sendung aus, heisst es verbindungsabbruch und RGB-led des servermoduls geht auf rot...
    gruß inka

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Moppi Beitrag anzeigen
    Du könntest versuchen, die Laufzeit eines Signals zu messen. Zum Server hinschicken, der schickt es direkt zurück und Du ermittelst, wie lange das gedauert hat. Vielleicht ist das brauchbarer. Das Signal/Zeichen kann auch vom Server kommen, der Client schickt es zurück und Du ermittelst die Laufzeit auf dem Server.

    MfG

    mit der korrespondenz in einer richtung mit UDP funktioniert es, die LED wird an- und ausgeschaltet. Für das versenden des echos zurück habe ich diesen
    Code:
    void echo_senden()
    {   
        if (Udp.parsePacket()) 
        {
            // Fetch received message
            int len=Udp.read(udp_buffer,sizeof(udp_buffer)-1);
            udp_buffer[len] = 0;
                    
            // Display the message
            Serial.print(F("Received from "));
            Serial.print(Udp.remoteIP());
            Serial.print(":");
            Serial.print(Udp.remotePort());
            Serial.print(": ");
            Serial.println(udp_buffer);
            
            // Send echo back
            Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
            Udp.print(F("Echo: "));
            Udp.print(udp_buffer); 
            Udp.endPacket();
        }    
    }
    da Du ja schon UDP-erfahrungen hast, kannst Du mir bitte ein wenig auf die sprünge helfen wie das mit der registration des echos auf der gegenseite funktioniert? Da komme ich nicht so recht weiter
    gruß inka

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Zitat Zitat von inka Beitrag anzeigen
    wie das mit der registration des echos auf der gegenseite funktioniert?
    Wenn das Paket angekommen ist schickst Du es zurück, was Du gemacht hast. Kommt es nicht wieder zurück oder was meinst Du?

    MfG

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Moppi Beitrag anzeigen
    Wenn das Paket angekommen ist schickst Du es zurück, was Du gemacht hast. Kommt es nicht wieder zurück oder was meinst Du?

    MfG
    ich nehme an, dass das echo verschickt wird, nur weiss ich nicht wie ich es auf der gegenseite feststellen soll ob es auch angekommen ist...
    gruß inka

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Ich würde denken, genau so, wie sonst auch. Mit .parsePacket()
    Lesen dann mit .read()

    Du hast doch auf dem Client alles dafür angelegt:

    Code:
    WiFiUDP Udp;
    unsigned int localUdpPort = 4210;  // local port to listen on 
    char befehl[10];  // buffer for incoming packets
    
    .read(befehl,sizeof(befehl)-1);


    ???

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    wäre es also so etwas:

    Code:
      int packetSize, len;
      // UDP
      packetSize = Udp.parsePacket();
      // Da ist was da
      if (packetSize) 
      {
        Serial.print("Empfangen "); Serial.print(packetSize);
        Serial.print(" von IP "); Serial.print(Udp.remoteIP());
        Serial.print(" Port "); Serial.println(Udp.remotePort());
        len = Udp.read(befehl, 10);
        ledStatus = befehl[0]; // erstes Byte 0 oder 1
        if (ledStatus) 
        {
          //digitalWrite(LED, HIGH);
          digitalWrite(ledPin_rt, HIGH);
          Serial.println("LED einschalten");
        }
        else {
          //digitalWrite(LED, LOW);
          digitalWrite(ledPin_rt, LOW);
          Serial.println("LED ausschalten");
        }
    ist demnach also der empfang eines UDP pakets auf beiden seiten (server und client) gleich?
    gruß inka

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    diese antennen habe ich getestet:
    Klicke auf die Grafik für eine größere Ansicht

Name:	2020_07_04_antennen.jpg
Hits:	3
Größe:	15,1 KB
ID:	35151

    die kleinste reicht bis ca 70m, die grosse gut 100m, die mittlere ist seltsammerweiase die schlechteste - ca.40m

    und das ist der letzter stand der software:

    AP mit UDP server:
    Code:
    #include <ESP8266WiFi.h>
    #include <WiFiUdp.h>
    
    const int ledPin_rt =  D5;
    const int ledPin_gn =  D6;
    const int ledPin_bl =  D7;
    
    int ledState_rt = LOW;
    int ledState_gn = LOW;
    int ledState_bl = LOW;
    
    long previousMillis_rt = 0;        
    long previousMillis_gn = 0;       
    long previousMillis_bl = 0;
    
    long interval_rt = 100;           
    long interval_gn = 250;
    long interval_bl = 50;
    
    WiFiServer server(80);
    IPAddress IP(192, 168, 4, 15);
    IPAddress mask = (255, 255, 255, 0);
    
    byte ledPin = 2;
    
    // hier die Adresse vom Slave eintragen
    IPAddress remoteIP(192, 168, 4, 114);
    unsigned int remotePort = 4210;  // remote port to listen on
    char befehl[10];
    
    WiFiUDP Udp;
    uint32_t aktMillis;
    uint32_t prevMillis;
    
    boolean ledStatus = false;
    
    void setup()
    {
    
      pinMode(ledPin_rt, OUTPUT);
      pinMode(ledPin_gn, OUTPUT);
      pinMode(ledPin_bl, OUTPUT);
    
      Serial.begin(115200);
    
      WiFi.mode(WIFI_AP);
      WiFi.softAP("Wemos_AP", "Wemos_comm");
      WiFi.softAPConfig(IP, IP, mask);
      server.begin();
      pinMode(ledPin, OUTPUT);
    
      Serial.println();
      Serial.println("accesspoint_bare_01.ino");
      Serial.println("Server started.");
      Serial.print("IP: ");     Serial.println(WiFi.softAPIP());
      Serial.print("MAC:");     Serial.println(WiFi.softAPmacAddress());
    }
    
    void loop()
    {
    
      aktMillis = millis();
      if (aktMillis - prevMillis >= 100)
      {
        prevMillis = aktMillis;
        Serial.print("LED schalten auf ");
        if (ledStatus)
        {
          Serial.println("An");
          befehl[0] = 1;
        }
        else
        {
          Serial.println("Aus");
          befehl[0] = 0;
        }
        Udp.beginPacket(remoteIP, remotePort);
        Udp.write(befehl, 1);
        Udp.endPacket();
        ledStatus = !ledStatus;
      }
    
      WiFiClient client = server.available();
      if (!client) {
        return;
      }
      byte request = client.read();
      Serial.println("********************************");
      Serial.print("From the station: ");
      Serial.println(request);
      client.flush();
    
    }
    
    void blinken (void)
    {
    
      unsigned long currentMillis_rt = millis();  // aktueller Wert rot
      if (currentMillis_rt - previousMillis_rt > interval_rt)
      {
        previousMillis_rt = currentMillis_rt;   // aktuellen Wert speichern
        ledState_rt = ((ledState_rt == LOW) ? HIGH : LOW); // toggeln
        digitalWrite(ledPin_rt, ledState_rt);   // LED ansteuern
      }
    }
    client mit UDP slave:

    Code:
    #include <ESP8266WiFi.h>
    #include <WiFiUdp.h>
    
    const int ledPin_rt =  D5;
    const int ledPin_gn =  D6;
    const int ledPin_bl =  D7;
    
    int ledState_rt = LOW;
    int ledState_gn = LOW;
    int ledState_bl = LOW;
    
    long previousMillis_rt = 0;        
    long previousMillis_gn = 0;       
    long previousMillis_bl = 0;
    
    long interval_rt = 100;           
    long interval_gn = 250;
    long interval_bl = 50;
    
    //Variablen deklarieren
    //######################################
    byte ledPin = 2;         //2           // Interne LED vom ESP 8266 Modul
    byte Taster = 4;                    // GPIO 4 wird mit einem Taster beschaltet
    byte temp, memo = 0;                // Merker für Tasterstatus & Hilfsmerker
    char ssid[] = "Wemos_AP";           // SSID of your AP
    char password[] = "Wemos_comm";         // password of your AP
    
    IPAddress server(192, 168, 4, 15);  // IP address of the AP
    WiFiClient client;
    
    WiFiUDP Udp;
    unsigned int localUdpPort = 4210;  // local port to listen on
    char befehl[10];  // buffer for incoming packets
    boolean ledStatus = false;
    
    
    //Setup
    //######################################
    void setup()
    {
      pinMode(ledPin_rt, OUTPUT);
      pinMode(ledPin_gn, OUTPUT);
      pinMode(ledPin_bl, OUTPUT);
    
    
      Serial.begin(115200);
      pinMode(ledPin, OUTPUT);
      pinMode(Taster, INPUT_PULLUP);
    
      //Inizialisiere WIFI
      //######################################
      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid, password);
    
      Serial.println();
      Serial.println("Connection to the AP");
    
      while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(500);
      }
      Serial.println();
      Serial.println("Connected");
      Serial.println("station_bare_01.ino");
      Serial.print("LocalIP:"); Serial.println(WiFi.localIP());
      Serial.println("MAC:" + WiFi.macAddress());
      Serial.print("Gateway:"); Serial.println(WiFi.gatewayIP());
      Serial.print("AP MAC:"); Serial.println(WiFi.BSSIDstr());
    
      Udp.begin(localUdpPort);
      Serial.print(" connected. UDP-Server bereit an IP: ");
      Serial.println(WiFi.localIP());
      Serial.println("UDP-Server bereit.");
    
    }
    
    
    //Daten an AP senden
    //######################################
    void data_to_AP (byte temp) {
      client.connect(server, 80);
      digitalWrite(ledPin, LOW);
      Serial.println("********************************");
      Serial.print("Byte sent to the AP: ");
      Serial.println(temp);
      Serial.println(client.write(temp));
      client.flush();
      digitalWrite(ledPin, HIGH);
      client.stop();
    }
    
    
    //HAUPTPROGRAMM
    //######################################
    void loop()
    {
    
      int packetSize, len;
      // UDP
      packetSize = Udp.parsePacket();
      // Da ist was da
      if (packetSize) 
      {
        Serial.print("Empfangen "); Serial.print(packetSize);
        Serial.print(" von IP "); Serial.print(Udp.remoteIP());
        Serial.print(" Port "); Serial.println(Udp.remotePort());
        len = Udp.read(befehl, 10);
        ledStatus = befehl[0]; // erstes Byte 0 oder 1
        if (ledStatus) 
        {
          //digitalWrite(LED, HIGH);
          digitalWrite(ledPin_rt, HIGH);
          Serial.println("LED einschalten");
        }
        else {
          //digitalWrite(LED, LOW);
          digitalWrite(ledPin_rt, LOW);
          Serial.println("LED ausschalten");
        }
      }
      
      /*
      temp = digitalRead(Taster);
    
    
      if (temp == LOW & memo == LOW)
      {
        Serial.print("TASTER: LOW   ");
        Serial.println(temp);
        memo = HIGH;
        data_to_AP(temp);
        Serial.println("********************************");
        Serial.println("********************************");
        Serial.println("");
    
    
      } else if (temp == HIGH & memo == HIGH)
      {
        Serial.print("TASTER: HIGH   ");
        Serial.println(temp);
        memo = LOW;
        data_to_AP(temp);
        Serial.println("********************************");
        Serial.println("********************************");
        Serial.println("");
    
      }
      delay(500);
      */
    }
    
    void blinken (void)
    {
    
      unsigned long currentMillis_rt = millis();  // aktueller Wert rot
      if (currentMillis_rt - previousMillis_rt > interval_rt)
      {
        previousMillis_rt = currentMillis_rt;   // aktuellen Wert speichern
        ledState_rt = ((ledState_rt == LOW) ? HIGH : LOW); // toggeln
        digitalWrite(ledPin_rt, ledState_rt);   // LED ansteuern
      }
    }
    gruß inka

Ähnliche Themen

  1. 433MHz Funkmodule bei Pollin
    Von toemchen im Forum Elektronik
    Antworten: 97
    Letzter Beitrag: 24.05.2009, 20:43
  2. antenne 433MHz Easyradio
    Von nobody1900 im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 30.01.2007, 12:46
  3. 433MHz Übertragung
    Von Muecke im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 28.12.2006, 20:01
  4. 433Mhz Verstärker
    Von BastelWastel im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 16.09.2006, 21:35
  5. Problem mit Abstandhalten zur Wand
    Von semicolon im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 12.07.2006, 21:08

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress