ESP8266 2 receivery

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

ryty
Stály člen
Stály člen
Príspevky: 123
Dátum registrácie: 24 Mar 2008, 00:00
Bydlisko: Nitriansky
Vek: 34

ESP8266 2 receivery

Príspevok od používateľa ryty » 28 Nov 2023, 12:56

Ahojte,

uz dlhsie sa trapim s komunikaciou medzi ESP8266 v AP mode. Konkretne pouzivam modul ESP01s a navrhol som si kod, kde je 1 receiver a 3 transmittery. V tejto konfiguracii (1+3) vsetko funguje. pustil som sa do upgradu a nijako sa mi nedari napisat kody pre 2 receivery (chcel by som dosiahnut 2 receivery + 1 transmitter). Vacsinou som mal problem, ze ked boli oba receivery online, tak reagoval iba jeden, no ked boli online separatne (jeden za druhym) tak reagoval kazdy z nich. Skusal som kazdemu zariadeniu nastavovat fixnu IP, davat kazde zariadenie na iny port ale bez uspechu. Naozaj som sa zasekol na jednom mieste a neviem sa pohnut. Preto by som vas poprosil, ci by ste mi s tym pomohli. Vopred dakujem

Transmitter:

Kód: Vybrať všetko

//::::::::::::::::::TRANSMITTER::::::::::::::::::
#include <ESP8266WiFi.h>

const char* receiverIP = "192.168.4.1";  // IP address of the receiver
const int pirSensorPin = 2;              // PIR sensor pin connected to GPIO2

WiFiClient client;         // Initialize WiFi client
bool messageSent = false;  // Flag to track message sent status

void setup() {
  Serial.begin(115200);

  // Connect to the Receiver's Access Point
  WiFi.begin("ESP-alarm", "123456789");

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to Receiver's AP...");
  }

  Serial.println("Connected to Receiver's AP");

  pinMode(pirSensorPin, INPUT);
}

void loop() {
  int motionDetected = digitalRead(pirSensorPin);

  if (motionDetected == HIGH && !messageSent) {
    Serial.println("Motion detected from Transmitter 1!");

    // Send a message to the receiver
    if (client.connect(receiverIP, 80)) {
      Serial.println("Connected to Receiver");
      client.println("MotionDetected1");
      client.stop();
      messageSent = true;  // Set the flag to indicate message sent
    }
  } else if (motionDetected == LOW && messageSent) {
    // Reset the flag when the PIR sensor is not detecting motion
    messageSent = false;
  }

  delay(100);
}
Receiver 1

Kód: Vybrať všetko

//:::::::::::::::::::RECEIVER 1:::::::::::::::::::::::
#include <ESP8266WiFi.h>

const char* receiverSSID = "ESP-alarm";      // Receiver's SSID
const char* receiverPassword = "123456789";  // Receiver's Wi-Fi Password
const int ledPin1 = 0;                       // GPIO0 pin for LED
const int ledPin2 = 2;                       // GPIO2 pin for LED

WiFiServer server(80);  // Create a server on port 80

bool isTriggered1 = false;
bool isTriggered2 = false;
bool isTriggered3 = false;

void setup() {
  Serial.begin(115200);

  // Set up the receiver as an Access Point
  WiFi.softAP(receiverSSID, receiverPassword);

  Serial.println("Receiver Access Point started");
  Serial.print("IP Address: ");
  Serial.println(WiFi.softAPIP());

  server.begin();           // Start the server
  server.setNoDelay(true);  // Set no delay for faster response
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
}

void loop() {
  WiFiClient client = server.available();  // Check for client connection

  if (client) {
    String request = client.readStringUntil('\r\n');  // Read client data
    Serial.println(request);

    if (request.indexOf("MotionDetected1") != -1) {
      if (!isTriggered1) {
        Serial.println("PIR 1 Trigger received - Motion detected!");
        digitalWrite(ledPin1, HIGH);
        isTriggered1 = true;
        delay(2000);
        digitalWrite(ledPin1, LOW);
        isTriggered1 = false;
      }
    }
    delay(10);

    client.stop();  // Close the connection
  }
}


snazil som sa komentovat najviac kodu, ako to len slo, tak snad je to zrozumitelne. Mojim zamerom je, aby ked transmitter je triggernuty, tak odosle spravu do oboch receiverov a tie potom rozsvietia ledku. Kazde zariadenie ma svoju esp01s dosku a vyuzivaju svoju vlastnu wifi siet. nie je k dospozicii externa wifi.

Naozaj vopred dakujem za pomoc.
0
Naposledy upravil/-a ryty v 29 Nov 2023, 22:23, upravené celkom 1 krát.
nemam vyjadrovanie ako elektrotechnik, do elektrotechniky sa velmi nevyznam no chcem sa nieco nove naucit - som samouk

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2574
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: ESP8266 2 receivery

Príspevok od používateľa maskrtnik01 » 28 Nov 2023, 13:17

Ak tomu rozumiem, každý receiver vysiela vlastnú wifi sieť, a transmitter sa snažíte pripojiť naraz na obe. To sa vám ani nepodarí.

Celkove nerozumiem, prečo na viacej zariadeniach súčasne aktivujete AP režim. Či to bude wifi router, malina, alebo nejaké ESPčko, stačí vám jedno zariadenie s AP, a na jeho sieť pripojiť všetko ostatné.

Alebo máte nejaký dôvod na to, aby boli oddelené siete? Potom by som im ale dával aj iné SSID.
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6205
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: ESP8266 2 receivery

Príspevok od používateľa pocitujlasku » 28 Nov 2023, 15:33

esp nevie byt sucasne na 2 AP, to standardne tusim ani nevie pocitac, ci mobil.
Bezne sa to riesi tak, ze sa vsetky zariadenia pripoja na jeden AP a v ramci siete potom komunikuju zariadenia medzi sebou. Cize vsetky su pripojene na wifi a prostrednictvom ci uz udp, alebo nejakej sluzby (mqtt) sa posielaju/prijimaju spravy.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

ryty
Stály člen
Stály člen
Príspevky: 123
Dátum registrácie: 24 Mar 2008, 00:00
Bydlisko: Nitriansky
Vek: 34

Re: ESP8266 2 receivery

Príspevok od používateľa ryty » 28 Nov 2023, 21:32

takze v praxi nie je mozne mat 2 zariadenia, ktore prijimaju spravy od transmitteru? alebo by bolo lepsie cestou, ze jeden z transmitterov nastavit ako dvojsmerny?
0
nemam vyjadrovanie ako elektrotechnik, do elektrotechniky sa velmi nevyznam no chcem sa nieco nove naucit - som samouk

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2574
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: ESP8266 2 receivery

Príspevok od používateľa maskrtnik01 » 28 Nov 2023, 21:48

To nikto nepovedal. V rámci jednej wifi siete s jedným AP môže komunikovať koľko zariadení chcete (ak sa každému ujde IP adresa a čas na vysielanie). Problém si spôsobujete tým, že sa snažíte na každom receiveri vysielať samostatnú sieť, a transmitter pripojiť na všetky naraz.
0

ryty
Stály člen
Stály člen
Príspevky: 123
Dátum registrácie: 24 Mar 2008, 00:00
Bydlisko: Nitriansky
Vek: 34

Re: ESP8266 2 receivery

Príspevok od používateľa ryty » 28 Nov 2023, 22:22

trochu som kod ocesal, aby neboli zbytocne 2 AP. s tymito modulmi pracujem prvykrat, tak je to take kostrbate

Transmitter

Kód: Vybrať všetko

//::::::::::::::::TRANSMITTER:::::::::::::::
#include <ESP8266WiFi.h>

const char* receiverIP = "192.168.1.100";  // IP address of your receiver
const int pirSensorPin = 2;  // PIR sensor pin connected to GPIO2

WiFiClient client;

void setup() {
  Serial.begin(115200);
  pinMode(pirSensorPin, INPUT);

  WiFi.begin("Receiver_AP", "123456789");  // Connect to Receiver 1's access point
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
}

void loop() {
  int motionDetected = digitalRead(pirSensorPin);

  if (motionDetected == HIGH) {

    Serial.println("Motion detected!");
    client.println("MotionDetected1");
    client.stop();
  }
  delay(100);  // Adjust delay as needed to prevent rapid sending of messages
}

Receiver 1

Kód: Vybrať všetko

//::::::::::::::::::::RECEIVER 1:::::::::::::::::
#include <ESP8266WiFi.h>

const char* apSSID = "Receiver_AP";    // Access Point SSID
const char* apPassword = "123456789";  // Access Point Password
const int ledPin = 2;                 // GPIO0 pin for LED (modify pin as needed)

WiFiServer server(80);  // Create a server on port 80

bool isTrigger = false;

void setup() {
  Serial.begin(115200);

  // Set up the device as an Access Point
  WiFi.softAP(apSSID, apPassword);

  Serial.println("Access Point started");
  Serial.print("IP Address: ");
  Serial.println(WiFi.softAPIP());

  server.begin();           // Start the server
  server.setNoDelay(true);  // Set no delay for faster response
  pinMode(ledPin, OUTPUT);
}

void loop() {
  WiFiClient client = server.available();  // Check for client connection

  if (client) {
    String request = client.readStringUntil('\r\n');  // Read client data
    Serial.println(request);

    if (request.indexOf("MotionDetected1") != -1) {
      if (!isTrigger) {
        Serial.println("Trigger received - Motion detected!");
        digitalWrite(ledPin, HIGH);
        isTrigger = true;
        delay(2000);
        digitalWrite(ledPin, LOW);
        isTrigger = false;
      }
    }
    delay(10);

    client.stop();  // Close the connection
  }
}

0
Naposledy upravil/-a ryty v 29 Nov 2023, 22:24, upravené celkom 1 krát.
nemam vyjadrovanie ako elektrotechnik, do elektrotechniky sa velmi nevyznam no chcem sa nieco nove naucit - som samouk

Používateľov profilový obrázok
lucky62
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1151
Dátum registrácie: 14 Feb 2012, 20:16
Bydlisko: Liptovský Mikuláš, SK

Re: ESP8266 2 receivery

Príspevok od používateľa lucky62 » 28 Nov 2023, 22:23

neviem, či si je ryty vedomý toho, že WIFI umožňuje obojsmernú komunikáciu, teda pojmy ako transmitter a receiver sú mierne zavádzajúce.

WiFi AP - Access Point je zariadenie, ktoré čaká na pripojenie WiFi klientov.
WiFi klient je za riadenie, ktoré sa na AP pripojí (obvykle potrebuje názov WiFi = SSID a heslo, pokiaľ je WiFi chránená).

Po nadviazaní spojenia už je jedno, kto vysiela a kto prijíma pakety.

AP môže (ale aj nemusí) pracovať ako router - pakety prijaté od jedného zariadenia, preposiela inému zariadeniu (podľa IP adries).
0
....môj bazar....

...Nikdy sa nehádaj s blbcom...

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6205
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: ESP8266 2 receivery

Príspevok od používateľa pocitujlasku » 28 Nov 2023, 22:25

Problem je, ze ty sa na to pozeras pravdepodobne z pohladu klasickej bus komunikacie, resp. obycajnej rf, kde posles do eteru signal, a ten si zachyti xx dalsich zariadeni - nieco ako tv, alebo radio.
Ale esp su wifi moduly, tam musis rozlisovat wifi spojenie a potom samotnu komunikaciu modulov.
Takze ako prve musis urobit fyzicku cestu pre data. To urobis najjednoduchsie tak, ze tie esp das ako klient a niekde si das AP (nemusi byt nikde pripojene, podstatne je, aby sa nan pripojili vsetky ESP, aj tie "vysielacie" aj "prijimacie". schvalne davam uvodzovky, lebo to nie je presne oznacenie.
tie ESP budu vsetky ako klient, kde im das ssid/heslo toho AP.
Takto mas vybudovane spojenia.
A teraz, uz mozes komunikovat s modulmi, ako chces. V tvojom pripade by bolo idealne bud pouzit nejaky hotovy protokol, napr. mqtt (ktory ma dobru podporu aj v arduine), alebo ist vlastnou cestou a posielat napr. udp broadcast, ktory si vie odchytit kazdy.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok