Arduino with esp8266 inbuilt

j'ai une faible connaissance sur l'embarqué.
j'utilise l'arduino mega avec un esp intégré.
j'essaye d'envoyer une commande de l'ESP vers Arduino pour commander un relai.
j'ai fait un code , l'arduino mega reçoit les donnés "11" et "22" mais en temps aléatoire non pas chaque 1 senconde

le code dans l arduino

int u = 22;
char c = '22'; 
char d ='11';
void setup() {
pinMode(u, OUTPUT);
 digitalWrite (u, HIGH); 
  Serial.begin(115200);
  Serial3.begin(115200);
  delay(2000);

}

void loop() {
  if (Serial3.available())  Serial.write(Serial3.read());
  //if (Serial.available()) Serial.write(Serial.read());
 
  if (Serial3.read()== (c))  { digitalWrite (u, LOW);}
  if (Serial3.read()== (d))  { digitalWrite (u, HIGH);}
  //if (Serial3.read()=="m")  Serial.print(Serial3.read()+1);
}

coté ESP :

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

}
  
void loop() {
 Serial.write("11");
 delay(1000);
 Serial.write("22");
 delay(1000);
}

Si quelqu'un peut me corriger ça, et merci

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

1 Like

Pourquoi envoyer deux octets ? Un seul suffit et ne poserait pas ces problèmes.
Un char ne contient qu'un seul caractère :

devient

char c = '2'; 
char d ='1';

Ici :

Tu lis le caractère qui est reçu : tu l'enlèves donc du buffer. Lorsque tu fais ensuite
if (Serial3.read()== (c)) { digitalWrite (u, LOW);}
Il n'est plus dans le buffer et tu compares avec... on ne sait trop quoi.

Essaye plutôt :

void loop() {
  char com;
  if (Serial3.available())  com = Serial3.read();
 
  if (com== c)  { digitalWrite (u, LOW);}
  if (com== d)  { digitalWrite (u, HIGH);}
}

A tester ...

1 Like

Et bien sûr changer 11 en 1, et 22 en 2

merci ! ça marche!

dans l'étape suivante j'ai essayé d'envoyer de esp à firebase : (millis()/1000) avec un delay(100), le problème c'est que le ESP redémarre à 0 après un certain temps parfois après 5 minutes , parfois après une heure

void loop() {

  
  Firebase.setFloat("abc", (millis()/1000));
 
    Firebase.setFloat("te1", ((millis()/1000)*5));
    Firebase.setFloat("te2", ((millis()/1000)*3));
    Firebase.setFloat("te3", ((millis()/1000)*6));
   
  delay(100);

j'ai cherché sue le net ce problème, il dit c'est un problème du buffer, mais je n'ai pas trouvé une solution pour résoudre ce buffer.
j'ai essayé aussi d'envoyer le millis() vers l arduino et ça reste le meme problème.
je sais que je n'ai pas les bases de programmer mais j'essaye d'apprendre :face_exhaling:

Tu veux dire qu'il plante ? Tu dois avoir un message d'erreur dans la console : même s'il est incompréhensible, peux-tu le copier dans ta réponse (pas une image, du texte STP) ?

PS : je ne connais pas Firebase...

E
x
c
e
p
t
i
o
n

(
9
)
:

e
p
c
1

0
x
4
0
2
0
a
d
1
c

e
p
c
2

0
x
0
0
0
0
0
0
0
0

e
p
c
3

0
x
0
0
0
0
0
0
0
0

e
x
c
v
a
d
d
r

0
x
0
0
0
0
0
0
3
7

d
e
p
c

0
x
0
0
0
0
0
0
0
0

s
t
a
c
k

c
t
x
:

c
o
n
t

s
p
:

3
f
8
e
:
f
f
c
o
s
:
1

3
f
e
:
0
0
0
3
e
f
3
f
2

2
7

3
f
f
3

f
8
0
0
0
b
f
0
8
0
6
0

3
f
e
:
3
e
8

0
0

f
2

2
a

3
f
f
0

0
0
b
f
e
8
0
0
e
0
3
8

3
f
e
:
3
f
a
0
0
3

f
e

2
3

3
f
f
7

f
e
f
3
f
9
3
e
2
3
f
1

3
f
f
8

f
e
4
f
f
4
f
0
4
0
4
b

3

e
0

f
4

3
0

f
e

f
3

3
f
f
a

0
0
f
0
0
4
3
f
6
0
8
2

3
f
f
0

0
2

f
a

f
5

f
f
0

3
f
e
:
3
e
f
3
f
8

f
0

2
b

3
f
f
d

f
d
0
f
2
0
0
0
0
f
f
5

3
f
f
0

f
5

f
f
0
f
0
4
0
3
c

3
f
e
:
3
f
2
3
f
3
0
0
0
3
f
0

3
f
f
0

f
0
4
f
f
1
3
e
f
4
0
0

3
f
f
0

f
0

0
0

f
5

f
0
6

f
f
0

0
0

0
0
0
b
a
0
0
0
0

3
f
3

0
0
2
3
f
6
3
f
8
0
0
a

3
f
f
:
0
0
0
0
0
0

f
a

f
b

3
f
f
5

f
d
0
0
0
0
f
e
0
0
0
5

3
f
f
0

0
0

d
0

f
7

f
b

3
f
f
7

f
d
0
0
0
0
3
e
8
4
0
f

3
f
f
:
0
6
2

0
0

0
0

1
1

3
f
f
9

f
d
0
0
0
0
3
e
8
4
0
6

3
f
f
0

e
f

0
0

f
b

2
2
0

3
f
f
:
f
f
f
f
e
f

f
5

1
d

<
s
c
<

e
t
s

J
a
n

8

2
0
1
3
,
r
s
t

c
a
u
s
e
:
2
,

b
o
o
t

m
o
d
e
:
(
3
,
6
)

l
o
a
d

0
x
4
0
1
0
f
0
0
0
,

l
e
n

1
3
,
o

t
a
i
l

8

k
m
x

s

2

f
f
f
~
l
d


b
l
`

r

n

l
p
h

il était organisé dans un tableau , je ne sais pas comment il a changé comme ça : chaque lettre en une ligne

le code dans le ESP:

#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>


#define FIREBASE_HOST "*****"
#define FIREBASE_AUTH "****"
#define WIFI_SSID "****"
#define WIFI_PASSWORD "****"
int ff =0;

int fireStatus;
void setup() {

  Serial.begin(115200);

  // connect to wifi.
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  //Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    //Serial.print(".");
    delay(5000);
  }
 
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}

int n = 0;

void loop() {
  
  Firebase.setFloat("abc", (millis()/1000));

   Firebase.setFloat("te1", ((millis()/1000)*5));
    
    Firebase.setFloat("te2", ((millis()/1000)*3));
    
   
    Firebase.setFloat("te3", ((millis()/1000)*6));
  // Firebase.setString("te4", byt); 
  //delay(50);
  fireStatus = Firebase.getString("bt1").toInt();                                      
  if (fireStatus == 1) {  Serial.write ('a');Serial.println(fireStatus);}                                                        
  if (fireStatus == 2) {  Serial.write ('b');Serial.println(fireStatus);}                           
                                                        
}

Désolé c'est illisible...

Il faut utiliser le bouton "recopier les messages d'erreur" du moniteur série. Et ensuite coller dans le post.

1 Like

j'ai résolu le problème de plantage :
j'ai utilisé la librairie esp8266 version 2.5.2
et j'ai choisit la carte wemos D1 R1
j'ai essayé un sketch d'envois ( millis() ) envoyé chaque seconde à firebase. et ça marche très bien sans interruption il y'a 37 heures.
aussi j'ai fait une bonne astuce trouvé sur github pour s'échapper de la mise à jour FingerPrints de Firebase.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.