1

I construit un système qui peut parler à ma demande Firebase à l'aide ESP8266 avec firebase bibliothèque Arduino,talk ESP8266 à Arduino via une communication série

Tout fonctionne parfaitement mais j'ai maintenant un problème faire parler de ESP8266 et d'écouter les Microcontroller qui est StandAlone Atmega328P (celui utilisé dans Arduino Uno).

Voici les points 1- ne peut pas utiliser softwareSerial car toutes les broches numériques sont occupées. 2- Essayé différents Bauds avec le même problème. 3- une seule fois travaillé, où l'Arduino était capable d'écouter la série correctement. mais ne pouvait pas lire à partir de série par ESP.

Je suis certainement capable d'écrire des chaînes à la série de l'ESP et lu par Arduino, mais en essayant d'utiliser l'instruction IF, ne reconnaît pas la chaîne,

donc j'ai essayé de println la chaîne 4 fois, et cela c'est ce que j'ai.

Serrure

Serrure

Serrure

Serrure

si quelqu'un peut résoudre le problème, j'ai posté le code pour Arduino et ESP

code ESP

void getData(){ 

FirebaseObject object = Firebase.get(EspMac); 
String Door = object.getString("Door"); 
String Connection = object.getString("Connect"); 
if(Door == "Open Door"){ 
    Serial.println(Door); 
    delay(100); 
    Firebase.set(path3,""); 
    Door = ""; 
}else if(Door == "Lock Door"){ 
    Serial.println(Door); 
    delay(100); 
    Firebase.set(path3,""); 
    Door = ""; 
}else if (Connection == "Connect"){ 
    Firebase.set(path5,"Received"); 
    Connection = ""; 
    } 

} 

ARDUINO code

do { 
    if(digitalRead(wipeB) == LOW) 
     servoDoorOpen(); 
    while (Serial.available() > 0){ 
    String Door = Serial.readString(); 
    delay(100); 
    Serial.println(Door); 
    Serial.println(Door); 
    Serial.println(Door); 
    Serial.println(Door); 


    if (Door.equals("Open Door")){ 
     //Serial.println("We open Doors"); 
     servoDoorOpen(); 
     Door = ""; 
    } 
    else if (Door.equals("Lock Door")){ 
     //Serial.println("We Lock Doors"); 
     servoDoorLock(); 
     Door = ""; 
    } 
    } 

Merci.

+0

Quel est votre câblage? Vous avez besoin d'un convertisseur de niveau logique entre l'ESP8266 et l'Arduino, car il s'agit de périphériques de 3,3 V et 5 V respectivement. La connexion matérielle série (RX, TX) fonctionne bien avec le changement de niveau, je l'ai fait plusieurs fois moi-même à un débit de 250 000 bauds, sans faille. –

+0

J'utilise un diviseur de tension, qui est 2 résistances 1k et le second 2,2k entre Arduino TX et ESP8266 RX. ai-je besoin de changer les résistances pour autre chose? @MaximilianGerhardt – RamiRihawi

Répondre

0

Enfin j'ai résolu mon problème, encore pas tout à fait encore comment je résolu le problème, mais j'ai ajouté quelques retards dans le code et tout ne fonctionne pas grand

void getData(){ 
    FirebaseObject object = Firebase.get(EspMac); 
    String Door = object.getString("Door"); 
    String Connection = object.getString("Connect"); 
    if(Door == "Open Door"){ 
     Serial.println(Door); 
     Firebase.set(path3,""); 
     Door = ""; 
    }else if(Door == "Lock Door"){ 
     Serial.println(Door); 
     Firebase.set(path3,""); 
     Door = ""; 
    }else if (Connection == "Connect"){ 
     Firebase.set(path5,"Received"); 
     Connection = ""; 
    } 
} 

void loop() { 
    getData(); 
    while (Serial.available() > 0){ 
    delay (100); 
    String h = Serial.readString(); 
    String DoorStat = h.substring(0,11); 
    if (DoorStat.equals("Door Opened")){ 
     Firebase.set(path2, DoorStat.c_str()); 
     DoorStat=""; 
     delay(100); 
    }else if (DoorStat.equals("Door Locked")) 
     Firebase.set(path2, DoorStat.c_str()); 
    } 
} 

code Android

do { 
    if(digitalRead(wipeB) == LOW) 
     servoDoorOpen(); 
    while (Serial.available() > 0){ 
    delay (100); 
    String h = Serial.readString(); 
    String Door = h.substring(0,9); 

    if (Door.equals("Open Door")){ 
     //Serial.println("We open Doors"); 
     servoDoorOpen(); 
     Door = ""; 
    } 
    else if (Door.equals("Lock Door")){ 
     //Serial.println("We Lock Doors"); 
     servoDoorLock(); 
     Door = ""; 
    } 
    }