• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
esp8266 synchronizacja zmiennej bool
#1
Witam.
Mój problem:Chciałbym wysłać zmienną bool stan do klienta i odwrotnie.Aby zmienna bool stan  pomiędzy klientem a serwerem się synchronizowała. W monitorze portu szeregowego dostaje cos takiego:
Client:    
Server:    

Poniżej zamieszczam kod do serwera i klienta.


Kod:
//server/
#include <ESP8266WiFi.h>
bool stan = 0;
int switchonoff = 3;
WiFiServer server(80);
IPAddress IP(192,168,4,15);
IPAddress mask = (255, 255, 255, 0);

byte ledPin = 2;

void setup() {
 
  Serial.begin(9600);
  WiFi.mode(WIFI_AP);
  WiFi.softAP("Wemos_AP", "Wemos_comm");
  WiFi.softAPConfig(IP, IP, mask);
  server.begin();
  pinMode(ledPin, OUTPUT);
  pinMode(switchonoff, 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() {
  WiFiClient client = server.available();
  if (!client) {return;}
     if (digitalRead(switchonoff)== HIGH){
  stan=!stan;
  while(digitalRead(switchonoff) == HIGH);
  }
    
  digitalWrite(ledPin, LOW);
  Serial.println("********************************");
  Serial.print("Zmienna wysyłana do klienta: ");
  Serial.println(client.println(stan));
  stan = client.read();
  Serial.println("Aktualna zmienna stan serwera: " + stan);
  client.flush();
  digitalWrite(ledPin, HIGH);
}

Kod:
//client
#include <ESP8266WiFi.h>
bool stan = 0;
int relay = 4;
int switchonoff = 3;
byte ledPin = 2;
char ssid[] = "Wemos_AP";           // SSID of your AP
char pass[] = "Wemos_comm";         // password of your AP

IPAddress server(192,168,4,15);     // IP address of the AP
WiFiClient client;

void setup() {
  Serial.begin(9600);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);           // connects to the WiFi AP
  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());
  pinMode(ledPin, OUTPUT);

}

void loop() {
  if (stan==1){
    digitalWrite(HIGH,switchonoff);
  }else{
    digitalWrite(LOW,switchonoff);
  }
  if (digitalRead(switchonoff)== HIGH){
  stan=!stan;
  while(digitalRead(switchonoff) == HIGH);
  }
  client.connect(server, 80);
  digitalWrite(ledPin, LOW);
  Serial.println("********************************");
  Serial.print("Zmienna wysyłana do serwera AP: ");
  Serial.println(client.print(stan));
  stan = client.read();
  Serial.println("Aktualna zmienna stan klienta: " + stan);
  client.flush();
  digitalWrite(ledPin, HIGH);
  client.stop();
  delay(2000);
}
Proszę o pomoc. 
 
Odpowiedź
#2
A nie prościej po UDP?
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#3
a jak to zrobić ?
Masz jakiś szblon ?
 
Odpowiedź
#4
Przykłady komunikacji między ESP:
https://circuits4you.com/2018/01/01/esp-...unication/
 
Odpowiedź
#5
Otóż to, UDP traktuj praktycznie tak samo jak byś podłączy dwa ESP po Serial..
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości