Aquí, a menudo hablaban sobre el sensor mh-z19 y sobre esp8266, y tampoco olvidaron mencionar el protocolo mqtt.
Leí todo esto y decidí combinar la lectura en un solo dispositivo. En realidad en la imagen, esto es todo.
Introducción (saltar)
He estado registrado durante mucho tiempo en Habré y lo leí aún más, pero no soy particularmente activo, pero debo decir que aprendí muchas cosas nuevas y útiles aquí. Y de vez en cuando el pensamiento me corroe que es necesario no solo usar, sino también dar algo y compartir. No puedo ofrecer nada nuevo, pero completé mi proyecto y me pareció lo suficientemente interesante para su publicación.
Funciones / Firmware
Todo el proyecto se basa en esp8266 y, en consecuencia, puede comunicarse bien con Internet. El protocolo
mqtt se usa para la
transferencia de datos. Para ser honesto, realmente no profundicé en el dispositivo de protocolo, pero resultó ser muy conveniente, utilicé el agente de
mosca para la prueba en casa, y ahora uso
cloudmqtt , tienen opciones gratuitas, por un poco, es solo eso.
Ahora puedes ir a las funciones mismas.
Cuando enciendo la lámpara, se ve si ya hay configuraciones guardadas, si no, enciende wifi con el nombre "CO2.box", en la dirección "192.168.4.1" muestra la página de configuración:
En realidad, la lámpara puede funcionar en dos modos:
1. Se conecta al agente mqtt, envía datos y muestra el contenido de CO2 a través del LED.
2. Muestra solo el contenido LED de CO2 en la habitación.
El LED puede cambiar su color de verde a rojo, en teoría es RGB, pero no lo conecté con azul, por lo tanto, solo LED RG. Si el contenido de CO2 es de 400 ppm (PPM Min en webgui), la lámpara brilla en verde claro y cuando la concentración aumenta, el color se vuelve rojo cuando alcanza su máximo (PPM Max en webgui) comienza a parpadear en rojo.
El restablecimiento se muestra en un botón separado, también hizo otro botón, si lo mantiene presionado durante más de un segundo, la configuración se restablece.
Código de botónInicialización de botón (GPIO0)
Compruebe cuánto se ha presionado el botón y reinicie
Para
mqtt , se
admite la autenticación de usuario mediante inicio de sesión / pase. Puede asegurarse de que los datos se envíen a través de https, pero para esto debe incrustar un certificado en el firmware, lo cual era contrario al concepto: quería que todas las configuraciones se realizaran a través de webgui.
El problema
Quería ejecutar el servidor DNS en esp8266, para que siempre devolviera su dirección y no tuviera que ingresar una dirección IP. Desafortunadamente, en mi versión de esp8266 sdk, encontré un error que no crea correctamente un paquete Ethernet y que la suma de verificación no converge allí y se ignora la respuesta del cliente. Vi el error a través de wireshark, y también se describió un error similar en el foro espressif. Entonces dejé la idea.

El firmware resultó en general no está mal, pero por ejemplo, todavía no encontré / descubrí cómo cerrar la conexión tcp correctamente, por lo que cuando envío datos desde el navegador, (el navegador) espera algo y no cierra la conexión.
En general, la calidad del código, en mi opinión, no fue muy alta (o más bien horrible), esto se debe a que este es mi segundo proyecto con (el primer proyecto fue un
reloj ), así como el hecho de que el SDK de alguna manera no está muy claro y a menudo la documentación no ayudó mucho y tuvo que buscar ejemplos.
Por ejemplo, quería poner la grabación flash en un archivo separado, pero después de eso, la configuración dejó de escribir en el flash. Nunca encontré por qué.
Lado de hierro
Luego traté de salir con un conjunto mínimo de componentes, parecía funcionar bastante bien. Al principio, quería usar la primera versión de esp8266, encontré en Internet una
forma de administrar el registro de desplazamiento con un solo pin. Todo funcionaba en el proteus, pero no en vivo. Creo que mi problema fue que no encontré condensadores adecuados.
Usé el ESP8266 12e, ya que tiene 4 MB de memoria y siete pines que se pueden usar. Al principio y casi hasta el final del proyecto, quería usar cuatro pantallas adicionales de siete segmentos, que estaban conectadas a través de cuatro registros de desplazamiento
74hc595 , pero más tarde, cuando comencé a colocar el tablero, todo me pareció un poco engorroso y redundante. En general, los eliminé, pero en los commits todavía hay el código donde estaba la pantalla. Por lo tanto, si alguien lo necesita, allí puede tomar la parte correcta.
También quería que todo esto funcionara desde un usb, directamente desde una computadora o mediante una fuente de alimentación (como un teléfono). Tomé la fuente de alimentación del viejo nokia (n900), da 1A, por lo que fue suficiente para los ojos, pero fue necesario bajar el voltaje para esp8266 a 3.3v.
Para esto, usé asm1117 y el primer problema me estaba esperando, por alguna razón solo dio 3c, esp8266 funcionó, pero no era estable y aparecieron errores muy extraños al trabajar.
Por ejemplo, él esp8266 no podía escribir datos en flash, simplemente reinició, me tomó bastante tiempo, hasta que me di cuenta de dónde venían los errores, casi salté con una pandereta.
El propio Asm1117 produjo el 3.3-3.5v requerido, pero en esp8266 fue solo 2.8-3.1v. En principio, realmente no resolví el problema, sospecho que (el voltaje) estaba cayendo en los cables. Luego rehice como en la imagen de abajo y todo comenzó a funcionar de manera estable.
5v también era necesario solo para el sensor de co2, por cierto pude obtenerlo en 3.3v. Pero había problemas de que aumentara sus valores en algún lugar en una hora, hasta 2000ppm, pero si solo lo apagaba y volvía a encenderlo, los valores cayeron inmediatamente.
La salida del registro está conectada a GPIO2 si algo de repente no funciona. La comunicación con el sensor de CO2 se produce de forma estándar, a través de uart.
Pues bien, parecía que no había nada particularmente complicado. Desde el circuito que estaba en la imagen de arriba, extendí el tablero. Ya tenía experiencia, antes de eso entrené en el reloj y allí todo fue un poco más complicado. En general, resultó así:
Desafortunadamente, tengo un error aquí (marcado en rojo), que noté solo al final. La tierra del sensor de CO2 está conectada a este pin, pero esta tierra no está conectada al resto y de esta forma el sensor no funcionó, tuve que conectar un puente en ese lugar.
Lutim, giro, taladro, sierra
En la imagen de arriba puedes ver que todo se hizo mediante botín. Utilicé el método con ácido cítrico, lo leí en un
gato de radio . Escriben que se obtiene la mejor reacción.
Mi conjunto de herramientas para botín, de hecho, todo sucede en el cuadro verde a la derecha.
Todo lo que necesitas para la hierba. Después de diluir la solución, coloco el recipiente en un fregadero con agua tibia, el agua no debe estar a más de 40-45 grados.
Resultó bastante bien en principio, desafortunadamente solo tengo fotos de la primera versión, pero hubo errores.
Hubo algún problema con el usb, decidí usar micro usb para reducirlo, tenía algunas piezas, pero no sabía cómo montarlas. Se ve así:
Como puede ver, no hay nada que lo fije a la placa, solo puede soldar dos protuberancias laterales, lo que hice. La montura resultó ser muy débil e incluso al probar todo salió.
Luego pedí pequeñas placas donde ya estaba conectado el micro usb. Algo como esto:
Me atornillé todo esto: fue una buena solución, todavía funciona.
Al final se veía así
Vivienda
En las manualidades domésticas, esto es a menudo un gran problema, hacer todo de manera ordenada y hermosa. Cuando comencé el proyecto, todavía no tenía una impresora 3D, pero desde el principio quería imprimir el caso. Pensé que podría pedirse en alguna parte. Al buscar dónde imprimir el estuche, decidí que era mejor comprar una impresora 3D para mí. En principio, no había requisitos especiales, lo principal es que imprime normalmente y no cuesta mucho. Se detuvo en el Anet A8. Se imprime sorprendentemente bien, aunque durante mucho tiempo.
Luego creé un modelo 3D del caso, reconocí solo la tercera opción como exitosa.

Estos son los modelos 3D que hice para el caso. Dentro del cuerpo yace un material de peso, como un contrapeso a la esfera desde arriba, por lo que el cuerpo resultó ser algo alto.
Juntos, se ve así:

Foto de portada. Ella tuvo que ser prácticamente metida en el caso. Se necesitan dos pequeños agujeros en la parte superior para que pueda presionar los botones. La solución no es muy exitosa, necesita algo delgado y largo, y también necesita encontrar los botones en el interior al tocarlos. En principio, lo encuentro sin problemas, pero para alguien sin entrenamiento será difícil.
Así que mantengo el LED RGB en la bola en la parte superior:
Conclusión
Al principio ni siquiera sabía qué escribir tan inteligente. Pensé que tal vez podría enumerar algunos problemas, había muchos de ellos.
De hecho, el proyecto resultó más para capacitación. Cuando comencé a hacerlo, en algún momento del año pasado en el verano, me pareció un dispositivo útil y con algunas pretensiones para el diseño y, en general, debería haber sido hermoso. Pero ahora, cuando lo hice, resultó de alguna manera y no muy necesario, aunque no parece nada (a mi esposa le gusta), ahora está parado en la esquina (apagado).
Terminé el firmware en algún lugar a principios de diciembre y ya olvidé mucho de todo lo escrito, por lo que también hubo un punto controvertido en términos de capacitación.
Ahora no haría eso, en lugar de una pelota, adjuntaría algo pequeño, como un faro marino.
Todo el proyecto se encuentra en el
github . Hay una placa y un código divorciados, así como modelos 3D (si alguien quiere imprimirlo todo). Por cierto, los tubos tienen un tamaño de M10x20mm.
PD: algunos puntos sobre mí personalmente:
1. Este es mi primer artículo, quizás vuelva a leer mucho aquí, pero aún así, sea comprensivo.
2. El firmware no está muy bien escrito, quizás alguien quiera rehacerlo.
3. Pido disculpas de antemano por la abundancia de palabras en inglés, desde la edad de 16 años no he vivido en un país de habla rusa y, por lo tanto, a menudo no sé cómo se llaman algunas cosas en ruso.