Petit circuit à base de ESP8266 et quelques questions

a marqué ce sujet comme résolu.

Bonjour/soir,

voilà je reviens vers vous dans un nouveau sujet parce que j'ai fini mon circuit, qui, même s'il est simple, me fait dire que j'ai peut-être oublié des choses ou que des améliorations pourraient être faites

Ce circuit sera donc alimenté par 4 piles AA (6V au mieux, 4V en fin de vie), ces 6V seront abaissés jusqu'à une tension de 3.3V, qui est la tension acceptée par l'ESP8266. Un connecteur mini-USB sera aussi accessible afin de pouvoir utiliser le circuit sans les piles.

Celui-ci alimentera toutes les X millisecondes 3 leds (D1, D2, D3) en PWM (via GPIO 12, 14, 15) avant de retourner en deep-sleep mode (seul le module RTC sera encore activé). Pour sortir de cet état le GPIO16 connecté à la pin RST (reset) doit passer en LOW.

Trois boutons sont accessibles, lorsque activés ils passeront le RST ainsi que le GPIO16 en LOW en les connectant au GND, de plus ils passeront les GPIOs auxquels ils sont reliés en LOW.

J'aurais quelques petites questions sur tout ça,

  • Est-ce que la façon dont j'ai mis mes diodes au niveau de l'usb et des piles est correcte? Si j'en comprends bien le fonctionnement, ces diodes vont faire chuter mes tensions de -0.7V de leur valeur initiale?

  • Au niveau du GPIO16, celui-ci est en HIGH de manière générale, afin d'éviter de passer le RST en LOW et donc de reset la carte, or je veux qu'il puisse encore passer en LOW et passer en LOW RST mais je veux pouvoir aussi le faire manuellement via les switchs. Est-ce que la façon dont je le fais est correcte? Si le switch est ouvert, seuls GPIO16 et RST sont connectés, tous deux en LOW. Puis si le switch se ferme, GPIO16 va faire circuler un courant au travers de la résistance (3.3V / 12mA = 275ohm) d'où la résistance de 330ohm, est-ce que ça parait correct? [12mA = Imax pour chaque GPIO]

  • De manière générale j'ai encore pas mal de difficultés à savoir quand mettre des condos, des self, etc. Est-ce que dans ce cas-ci il y a des endroits où ça pourrait être utile? (condo en parallèle des switchs pour éviter les effets de rebond? Au niveau des alimentations?)

  • Dernière petite question, je voudrais que lorsque j'appuie sur le switch, le RST passe en LOW, la carte reset, mais je veux que dès les premiers instants elle enregistre le fait que mes GPIOs 5, 4 ou 0 sont aussi passés en LOW, est-ce qu'elle aura le temps de le détecter selon vous? (Si pas, il y aurait un moyen de lui permettre d'y arriver? Une self?)

Merci d'avance, ça fait un paquet de questions, désolée

Bonne journée/soirée :)

+0 -0

Salut!

Je me permets un petit up, je vais acheter les composants dans les quelques jours à venir.

J'ai effectué une petite modif, j'ai remplacé les diodes 1N4001 par des diodes Schottky 1N5817 qui ont un drop_voltage plus faible (~0.45V au lieu de 1.1V pour les anciennes) et qui ont un reverse_voltage correct (20V). De plus j'ai ajouté un speaker modulé via PWM.

Les questions qui risquent de poser le plus de soucis seraient :

  • Concernant les diodes Schottky, sont-elles correctement placées?

  • Est-ce qu'il y aurait des condos/selfs à placer quelque part?

  • Et probablement le plus important, est-ce qu'au moment de l'appui sur les boutons (ma carte redémarre à cet instant), arrivera-t-elle à prendre en compte que ses broches GPIO 5, 4 et 0 sont aussi passées en low?

Si vous avez des conseils, je prends avec plaisir! Merci :)

Bonjour. Tes diodes Schottky me semblent bien placées et pour ce qui est des condos, ils sont pas obligatoires mais néanmoins conseillés (un condo voit sa résistance augmenter en cas de fluctuations de la tension qui le traverse, ce qui le rend utile pour tout un tas de trucs genre le découplage des alimentation dans ton cas; pour les selfs, c'est l'inverse et on les utilise dans les alims de PC et les oscillateurs FM … ). Je te conseille de mettre un condensateur de 10µF en entrée et un de 100n en sortie (perso, je fais toujours comme ça … ).

Pour ta troisième question, je pense pas que ce soit possible dans ta configuration de faire en même temps le RESET de ta carte ET l'enregistrement de l'état des boutons. Donc oui, une self ça marche (ou du moins ça peut marcher, jamais essayé) si tu la branche en série avec le switch branché au RESET.

Tu utilise quoi comme type de haut-parleur ?

En espérant avoir aidé.

+1 -0

Bonsoir,

Merci pour ta réponse! Je vais donc mettre des condos juste avant le voltage_regulator ainsi que juste avant la masse. Est-ce qu'il en faudrait pas aussi un en parallèle des boutons poussoirs? (Enfin, sauf si j'arrive à repérer l'appui sur le bouton, je pourrais gérer les rebonds de manière logicielle)

Pour le dernier problème ça m'embête beaucoup, parce que je veux faire un circuit le plus simple et minimaliste possible, déjà ainsi ça rentre à peine dans 5,2 cm x 6,5 cm et c'est déjà un poil trop grand comme circuit. J'avais vu que tu proposais un NE555 en monostable avant d'éditer ton message, malheureusement comme je pilote mes GPIOs en état LOW j'ai du mal à voir comment câbler ça :/ En tous cas, la self me plairait nettement plus, c'est simple, minimaliste, pas cher.

Dis-moi si j'en comprends bien le principe : j'appuie sur le bouton, la self s'oppose à ce fait donc va envoyer un courant vers le reset (le reset reste en HIGH un peu plus longtemps après l'appui du bouton et du passage des GPIOs en LOW) puis je le relâche, la self s'oppose à ce fait, elle fait passer un courant en direction du switch (le reset reste en LOW un peu plus longtemps après le relâchement du bouton) ? Du coup ça a l'effet inverse non? Faudrait pas plutôt mettre des selfs sur chaque fils reliant les GPIOs à la masse?

Edit : le speaker est un simple beeper (pour que j'entende un petit bruit lorsque les LEDs s'allument, même si je n'ai pas les yeux rivés dessus), ils sont en 3.3V, en 8 ohm. Je vais le placer en série avec un GPIO PWM et une petite résistance (100 ohm) ou un condensateur, faut encore que je fasse des tests…

Edit 2 : Je viens de penser à une chose qui pourrait avoir l'effet désiré, si je mets un condo en parallèle des switchs (du coté des GPIOs, pas du reset) les pattes de ce dernier seront au même potentiel lorsque le switch est fermé donc il ne se charge pas, mais lorsque j'ouvre le switch les pattes sont à des potentiels différents, le condo se charge, il y a donc encore un courant circulant en direction de la masse mais emmagasinant des charges dans le condo, mon GPIO reste donc en LOW un peu plus longtemps. Seul soucis, trouver le condo qui va bien avec le temps d'allumage de l'ESP, mais avec une résistance je devrais pouvoir augmenter la durée de charge. Est-ce que je suis dans le bon? (Désolée pour le pâté, j'ai tendance à écrire un peu trop… :° )

Merci beaucoup pour ton aide, ça m'aide à m'améliorer :)

+0 -0

Bonjour. Effectivement, une self n'était pas une si bonne idée que ça (ni le ne555, je suis bizarre dans ma tête des fois :-)). Ta solution avec les condensateurs a l'air intéressante seulement il y a un léger problème : étant donné que tu utilise des interrupteurs DPST, les broches RESET et GPIO16 sont toujours au potentiel de la masse, à savoir 0v !
Mieux vaut utiliser des boutons poussoirs avec un condensateur en parallèle (comme dans ton deuxième EDIT). Je pense que tu peux utiliser une capa d'une dizaine d'µF (on prends en compte la résistance pull-up).

En espérant avoir aidé.

Voilà ce que ça donne donc :

PCB

Pour les condensateurs à découplage j'ai fait un peu différemment de toi, j'ai suivi les conseils donnés sur Sonelec, qui est souvent de très bon conseil il me semble (lien)

J'espère que le reste sera comme il convient, kicad me signifie une erreur sur les broches de U1 (le regulateur de tension), mais j'en vois pas donc on verra bien… "Conflict problem between pins, severity : error | @pin 4(power output) of component U1 is connected to @pin 2 (power output) of component U1"

Edit : Vu les conseils mentionnés dans la datasheet, je vais changer mes condensateurs de découplage pour un de 10uF électrolytique en entrée, et un de 10uF électrolytique en sortie (datasheet, page 5)

Merci pour toute ton aide!

+0 -0

Bonjour.

Je pense qu'il y a en fait un problème avec tes switchs : Quand tu va appuyer sur un bouton, le GPIO n'aura pas le temps de lire le bouton car le RESET va se déclencher en même temps.

Une solution possible est de relier un GPIO libre au RESET et de faire cela dans le logiciel.

Exemple en C-Arduino :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
int RESET_pin = 6;
int bouton_pin = 7;

void setup(){
pinMode(RESET_pin, OUTPUT);
pinMode(bouton_pin, INPUT);
}

void loop(){
// bon après il faut prévoir l'anti-rebond ...
if(digitalRead(bouton_pin))digitalWrite(RESET_pin, HIGH);
else digitalWrite(RESET_pin, LOW);

L'autre solution est de connecter les switchs à l'entrée ADC et de faire pareil qu'avant dans le logiciel. Dans les deux cas c'est de toute façon très simple :) .

En espérant avoir aidé.

Je pense qu'il y a en fait un problème avec tes switchs : Quand tu va appuyer sur un bouton, le GPIO n'aura pas le temps de lire le bouton car le RESET va se déclencher en même temps.

personne30003

Oui c'est l'un des problèmes que j'évoquais plus haut, d'où ma solution qui consistait à mettre un condo en parallèle avec le switch, du coté où il est relié au GPIO. (Lorsque le switch se ferme le condo se décharge, le GPIO passe un peu moins vite en LOW; lorsque le switch s'ouvre le condo se charge, le GPIO passe un peu moins vite en HIGH), j'espère qu'ainsi j'arriverai à lire le changement d'état du GPIO après le relâchement du switch et donc la fin du reset.

Malheureusement ta solution ne peut pas fonctionner car il s'agit d'un ESP8266, qui va se mettre en deep-sleep, dans ce mode seule l'horloge RTC fonctionne encore (aucun programme ne peut fonctionner), celle-ci va envoyer un signal à l'état LOW toutes les X ms via le GPIO 16, ainsi comme le RST et le GPIO 16 sont reliés, toutes les X ms la carte reset. Or, je souhaite que la carte puisse prendre en compte que les switchs ont été activés, donc pour pouvoir faire fonctionner un programme je dois reset la carte, d'où le fait que ceux-ci soient doubles et vont faire en sorte de reset la carte + activer le GPIO

Par contre je ne comprends pas ta deuxième solution, mais je pense qu'on se retrouve dans le même soucis qui est que la carte doit avoir reset pour pouvoir prendre en compte le signal sur le GPIO

Merci tout de même pour ta proposition :)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte