Ici, assez souvent, ils ont parlé du capteur mh-z19 et de esp8266, sans oublier de mentionner le protocole mqtt.
J'ai lu tout cela et j'ai décidé de combiner la lecture dans un seul appareil. En fait dans l'image c'est ça.
Intro (sauter)
Je suis inscrit depuis longtemps déjà sur Habré et je le lis encore plus, mais je ne suis pas particulièrement actif, mais je dois dire que j'ai appris beaucoup de choses nouvelles et utiles ici. Et de temps en temps la pensée me ronge qu'il faut non seulement utiliser, mais aussi donner quelque chose et partager. Je ne peux rien proposer de nouveau, mais j'ai terminé mon projet et il m'a semblé suffisamment intéressant pour être publié.
Fonctions / Firmware
L'ensemble du projet est construit sur esp8266 et, par conséquent, peut bien communiquer avec Internet. Le protocole
mqtt est utilisé pour le
transfert de données. Pour être honnête, je ne suis pas vraiment allé dans le périphérique de protocole, mais la chose s'est avérée très pratique, j'ai utilisé le courtier
mosca pour le test à la maison, et maintenant j'utilise
cloudmqtt, ils ont des options gratuites, pour une telle bagatelle, c'est juste cela.
Vous pouvez maintenant accéder aux fonctions elles-mêmes.
Lorsque j'allume la lampe, il regarde s'il y a déjà des paramètres enregistrés, sinon, il allume le wifi avec le nom "CO2.box", à l'adresse "192.168.4.1" il affiche la page des paramètres:
En fait, la lampe peut fonctionner dans deux modes:
1. Se connecte au courtier mqtt, envoie des données et affiche le contenu de CO2 via la LED.
2. Affiche uniquement la teneur en LED du CO2 dans la pièce.
La LED peut changer sa couleur du vert au rouge, en théorie c'est RVB, mais je ne l'ai pas connectée avec du bleu, donc seulement LED RG. Si la teneur en CO2 est de 400 ppm (PPM Min dans webgui), la lampe brille en vert clair et lorsque la concentration augmente, la couleur devient rouge lorsqu'elle atteint son maximum (PPM Max dans webgui) elle commence à clignoter en rouge.
La réinitialisation est affichée sur un bouton séparé, il a également fait un autre bouton, si vous le maintenez pendant plus d'une seconde, les paramètres sont réinitialisés.
Code du boutonInitialisation des boutons (GPIO0)
Vérifiez combien le bouton a été enfoncé et réinitialisé
Pour
mqtt , l'authentification des utilisateurs via login / pass est prise en charge. Vous pouvez vous assurer que les données sont envoyées via https, mais pour cela, vous devez intégrer un certificat dans le firmware, ce qui était contraire au concept - je voulais que tous les paramètres soient effectués via webgui.
Le problème
Je voulais exécuter le serveur DNS sur esp8266, afin qu'il renvoie toujours son adresse et n'ait pas à saisir d'adresse IP. Malheureusement, dans ma version de esp8266 sdk, j'ai rencontré un bogue qui ne crée pas correctement un paquet Ethernet et que la somme de contrôle n'y converge pas et la réponse du client est ignorée. J'ai vu l'erreur via Wirehark, et une erreur similaire a également été décrite sur le forum espressif. J'ai donc laissé l'idée.

Le firmware s'est avéré généralement pas mal, mais par exemple, je n'ai toujours pas trouvé / compris comment fermer correctement la connexion TCP, donc lorsque j'envoie des données depuis le navigateur, il (le navigateur) attend quelque chose et ne ferme pas la connexion.
En général, la qualité du code, à mon avis, n'était pas très élevée (ou plutôt horrible), c'est parce que c'est mon deuxième projet avec (le premier projet était une
horloge ), ainsi que le fait que le SDK n'est pas très clair et souvent la documentation n'a pas beaucoup aidé et a dû chercher des exemples.
Par exemple, je voulais mettre l'enregistrement flash dans un fichier séparé, mais après cela, les paramètres ont cessé d'écrire sur le flash. Je n'ai jamais trouvé pourquoi.
Côté fer
Ensuite, j'ai essayé de m'en sortir avec un ensemble minimal de composants, cela semblait fonctionner assez bien. Au début, je voulais utiliser la première version de esp8266, j'ai trouvé sur Internet un
moyen de gérer le registre à décalage avec une seule broche. Tout fonctionnait dans le proteus, mais pas en direct. Je pense que mon problème était que je n'ai pas trouvé de condensateurs appropriés.
J'ai utilisé l'ESP8266 12e, car il a 4 Mo de mémoire et sept broches qui peuvent être utilisées. Au début et presque jusqu'à la fin du projet, je voulais utiliser quatre écrans supplémentaires à sept segments, qui étaient connectés via quatre registres à décalage
74hc595 , mais plus tard, quand j'ai commencé à poser la carte, tout cela me semblait un peu lourd et redondant. En général, je les ai supprimés, mais dans les commits, il y a toujours le code où se trouvait l'écran. Par conséquent, si quelqu'un en a besoin, alors vous pouvez prendre la bonne partie.
Je voulais aussi que tout cela fonctionne à partir de l'USB, directement à partir de l'ordinateur USB ou via une alimentation (comme un téléphone). J'ai pris l'alimentation de l'ancien nokia (n900), il donne 1A, donc c'était suffisant pour les yeux, mais il fallait baisser la tension pour esp8266 à 3,3v.
Pour cela, j'ai utilisé asm1117 et le premier problème m'attendait, pour une raison quelconque, il ne donnait que 3c, esp8266 fonctionnait, mais il n'était pas stable et des erreurs très étranges sont apparues lors du travail.
Par exemple, il esp8266 ne pouvait pas écrire de données sur flash, il a juste redémarré, il m'a fallu un certain temps, jusqu'à ce que je réalise d'où venaient les erreurs, j'ai presque sauté avec un tambourin.
Asm1117 lui-même a produit le 3,3-3,5v requis, mais sur esp8266, il n'était que de 2,8-3,1v. En principe, je n'ai vraiment pas résolu le problème, je soupçonne qu'il (la tension) tombait sur les fils. Puis j'ai refait comme dans l'image ci-dessous et tout a commencé à fonctionner de manière stable.
Le 5v n'était également nécessaire que pour le capteur de CO2, d'ailleurs j'ai pu l'obtenir en 3,3v. Mais il y avait des problèmes qu'il augmentait ses valeurs quelque part en une heure jusqu'à 2000 ppm, mais s'il venait juste de l'éteindre et de le rallumer, les valeurs chutaient immédiatement.
La sortie du journal est connectée à GPIO2 si quelque chose ne fonctionne pas soudainement. La communication avec le capteur de CO2 se produit en standard - via uart.
Eh bien, il semblait qu'il n'y avait rien de particulièrement compliqué. Du circuit qui était dans l'image ci-dessus, j'ai écarté la planche. J'avais déjà de l'expérience, avant cela je m'entraînais à la montre et là tout était un peu plus compliqué. En général, cela s'est avéré comme ceci:
Malheureusement, j'ai une erreur ici (marquée en rouge), que je n'ai remarquée qu'à la fin. La masse du capteur de CO2 est connectée à cette broche, mais cette masse n'est pas connectée au reste et sous cette forme le capteur ne fonctionnait pas, j'ai dû attacher un pont à cet endroit.
Lutim, twist, drill, saw
De l'image ci-dessus, vous pouvez voir que tout a été fait par le butin. J'ai utilisé la méthode avec de l'acide citrique, je l'ai lu sur un
chat radio . Ils écrivent que la meilleure réaction est obtenue.
Mon ensemble d'outils pour le butin, en fait, tout se passe dans la boîte verte à droite.
Tout ce dont vous avez besoin pour les mauvaises herbes Après avoir dilué la solution, je mets le récipient dans un évier avec de l'eau tiède, l'eau ne doit pas être plus chaude que 40-45 degrés.
Cela s'est plutôt bien passé en principe, malheureusement je n'ai que des photos de la première version, mais il y avait des erreurs.
Il y avait un problème avec l'USB, j'ai décidé d'utiliser un micro USB pour le réduire, j'avais quelques pièces, mais je ne savais pas comment les monter. Cela ressemble à ceci:
Comme vous pouvez le voir, il n'y a rien pour le fixer à la carte, vous ne pouvez souder que pour deux saillies latérales, ce que j'ai fait. La monture s'est avérée très faible et même lors des tests, tout s'est détaché.
Ensuite, j'ai commandé de petites planches où micro USB était déjà attaché. Quelque chose comme ça:
J'ai boulonné tout cela - c'était une bonne solution, cela fonctionne toujours.
Au final, ça ressemblait à ça
Logement
Dans l'artisanat à la maison, c'est souvent un gros problème, pour tout faire proprement et magnifiquement. Quand j'ai commencé le projet, je n'avais toujours pas d'imprimante 3D, mais dès le début, je voulais imprimer le boîtier. Je pensais que cela pourrait être commandé quelque part. En cherchant où imprimer le boîtier, j'ai décidé qu'il valait mieux acheter une imprimante 3D pour moi. En principe, il n'y avait pas d'exigences particulières, l'essentiel est qu'il imprime normalement et ne coûte pas cher. Il s'est arrêté à l'Anet A8. Il imprime étonnamment bien, bien que pendant longtemps.
Ensuite, j'ai créé un modèle 3D de l'affaire, je n'ai reconnu que la troisième option comme réussie.

Ce sont les modèles 3D que j'ai réalisés pour le boîtier. À l'intérieur du corps se trouve un matériau de pondération, comme contrepoids à la sphère par le haut, de sorte que le corps s'est avéré être quelque peu élevé.
Ensemble, cela ressemble à ceci:

Couverture photo. Elle a dû être pratiquement martelée dans l'affaire. Deux petits trous sur le dessus sont nécessaires pour que vous puissiez appuyer sur les boutons. La solution n'est pas très réussie, vous avez besoin de quelque chose de mince et de long, et vous devez également trouver les boutons à l'intérieur au toucher. En principe, je le trouve sans problème, mais pour quelqu'un sans formation ce sera difficile.
Je garde donc la LED RGB dans la boule en haut:
Conclusion
Je ne savais même pas au début quoi écrire si intelligent. J'ai pensé que je pourrais peut-être énumérer certains problèmes, il y en avait beaucoup.
En fait, le projet s'est avéré davantage pour la formation. Quand je viens de commencer à le faire, l'année dernière en été, cela m'a semblé être un appareil utile et avec quelques prétentions au design et en général il aurait dû être beau. Mais maintenant, quand je l'ai fait, cela s'est avéré en quelque sorte et pas très nécessaire, bien que cela ne ressemble à rien (ma femme aime ça), maintenant c'est dans le coin (éteint).
J'ai fini le firmware quelque part au début du mois de décembre et j'ai déjà beaucoup oublié de tout ce qui était écrit, il y avait donc aussi un point controversé en termes de formation.
Maintenant, je ne ferais pas ça, au lieu d'une balle, j'attacherais quelque chose de petit, comme un phare marin.
L'ensemble du projet repose sur le
github . Il y a une carte et un code divorcés, ainsi que des modèles 3D (si quelqu'un veut tout imprimer). À propos, les tubes ont une taille de M10x20mm.
PS: Quelques points sur moi personnellement:
1. Ceci est mon premier article, peut-être que j'ai relu beaucoup ici, mais quand même, soyez sympathique.
2. Le firmware n'est pas très bien écrit, peut-être que quelqu'un veut le refaire.
3. Je m'excuse à l'avance pour l'abondance de mots anglais, depuis l'âge de 16 ans, je n'ai pas vécu dans un pays russophone et je ne sais donc souvent pas comment certaines choses sont appelées en russe.