Cómo preparar té usando MQTT o una toma inteligente asequible con control de temperatura y corriente

Por qué


Incluso en este centro hay un aumento en el interés en IoT, en mi opinión subjetiva, esta es una tendencia global que va mucho más allá del alcance de este sitio. Por lo tanto, vale la pena insertar sus 5 kopecks en el desarrollo de la dirección, especialmente porque la idea ha estado girando para un hogar inteligente durante mucho tiempo, lo que podría controlar el consumo de cualquier dispositivo alimentado por una red de 220V y permitió programar la lógica de control dependiendo de los parámetros de consumo, temperatura, fase la luna etc. Hay soluciones listas para usar, pero a menudo algo no les conviene, y las listas no son nuestro método si puedes intentar construir tu propia bicicleta única.



Parámetros de la futura bicicleta:

- Dispositivo barato de componentes disponibles públicamente.
- Control de corriente en el circuito de consumo.
- Gestión de dispositivos a través del protocolo MQTT.
- Dispositivo de control de temperatura.
- Dos sensores remotos para controlar la temperatura del consumidor.
- Indicación de estado en la pantalla del dispositivo.
- Apagado de emergencia del consumidor si la temperatura o la corriente excede los valores establecidos.

Caso de aplicación:

  • Monitoreo del consumo de electricidad.
  • La capacidad de desconectar remotamente el dispositivo en caso de accidente o simplemente así.
  • Un dispositivo simple para monitorear la temperatura en despensas de servidores semi-profesionales donde a menudo ocurren situaciones de emergencia, ya que nada monitorea la temperatura en la habitación.
  • Regulación termostática (manteniendo la temperatura, en mi caso, necesito predecir el deshielo y encender el calentamiento del agua de tormenta con un "cable calefactor" de antemano).
  • El nodo del sistema de casa inteligente para implementar las funciones anteriores.
  • Y, por supuesto, la tetera Wifi! El resto es por cantidad.

Y me gustaría mostrar cuán simple y barato es implementar el paquete: [Dispositivo] <-> [Wifi] <-> [MQTT] <-> [Monitoreo centralizado del estado y administración del dispositivo final].

Selección de componentes.




¿Cómo medir la corriente?


A diferencia de las mediciones de voltaje, los sensores de corriente no son tan comunes en la electrónica de aficionados. Pero hay varios tipos de sensores de corriente disponibles: derivaciones de corriente, tipo de transformador y sensores de efecto Hall. Está claro que la clasificación es amateur, pero si miras la tienda en línea, los nombres serán algo así.

No quería usar la derivación debido a la necesidad de crear un aislamiento galvánico (esto es para que 220 V no se precipite con todos sus amplificadores a nuestro microcontrolador y no salga todo el humo mágico en el que se sabe que funcionan). Los sensores de transformador también tienen sus propias características. Pero el último tipo no solo era muy asequible, sino también conveniente de usar. Eso pensé cuando lo ordené.

Si tiene un circuito de bajo voltaje, es más razonable usar una resistencia de un valor pequeño conocido en lugar de una derivación. Para más detalles sobre cómo y cómo medir la corriente, lea el buen artículo de radiolok .

Los sensores ACS712 se venden con mayor frecuencia ya soldados a una placa pequeña con el cableado mínimo requerido. Puedo aconsejarle que proteja el chip con una pantalla de metal de la influencia de campos magnéticos extraños antes de usarlo. El sensor para ellos es muy sensible y en forma de stock es más adecuado para buscar cableado oculto que para medir la corriente. Con una protección improvisada, la inmunidad al ruido aumenta significativamente.



Pegamos en el conector verde grande dos cables obtenidos cortando uno de los dos cables del circuito de 220V (conexión en serie al circuito). Enviamos + 5V al conector en el otro lado del sensor, eliminamos la señal analógica del pin restante, que oscila en relación con el medio (2.5V) dependiendo de la fuerza y ​​la dirección de la corriente. Eso es tan simple ... en papel.



Alrededor de este lugar, comienza el aplastamiento óseo. Estos sensores están disponibles en versiones de 5.20.30 amperios. Si los dos últimos son menos o menos claros, entonces la versión de 5 amperios resultó ser especial, esta característica fue que la señal (de acuerdo con la documentación) cambia solo en + -1V desde el medio (2.5V). A quién le importan sus detalles aquí . Por referencia, el autor supone que estos son en realidad sensores de 10 amperios que no funcionaron. Si a esto le sumamos el fuerte ruido del sensor en sí y su tendencia a reaccionar a los campos magnéticos, la tarea de eliminar una señal más o menos inteligible deja de ser aburrida. Pero como los sensores ya estaban comprados, decidí intentar hacer uno de ellos.

Módulo principal del dispositivo


Este módulo es necesario para mantener la comunicación preferiblemente a través de Wifi y torcer el ciclo de trabajo principal con sensores de sondeo, verificar condiciones, responder botones, etc. ¿Qué elegir de una opción? Y de repente, elegimos el ESP8266. En mi caso es ESP-12F. Oh si! También hay un ESP-32.



Lo mejor de todo es llevarlo inmediatamente soldado a una placa con un arnés y un adaptador USB a UART. Pero también puede conectarlo usted mismo, ya que comprar productos confeccionados no está de acuerdo con los preceptos de la construcción de bicicletas. Material sobre este tema .

Perdí algo de tiempo tratando de flashear un ESP-shku auto conectado. Usó USBtoUART en el chip CH340. La placa tercamente no quería parpadear hasta que cambié la lógica CH340 a 5V con el riesgo de quemar las conclusiones de ESP. Pero hasta ahora sin pérdida.



Además, todo se conecta al Arduino IDE HWman y no es muy diferente en la programación del Arduino habitual. Pero es muy diferente en capacidades y recursos informáticos:

  • Procesador Tensilica de 80 MHz y 32 bits Xtensa L106. Es posible el overclocking no garantizado de hasta 160 MHz.
  • IEEE 802.11 b / g / n Wi-Fi. Soportado por WEP y WPA / WPA2.
  • 14 puertos de E / S (11 de los cuales se pueden usar), SPI, I²C, I²S, UART, ADC de 10 bits.
  • Fuente de alimentación 2.2 ... 3.6 V. Consumo de hasta 200 mA en modo de transmisión, 60 mA en modo de recepción, 40 mA en modo de espera. Modo de bajo consumo mientras se mantiene la conexión con el punto de acceso ~ 1 mA, modo de reposo profundo 0.1 μA.

en.wikipedia.org/wiki/ESP8266

¿Por qué Arduino IDE? Soy consciente de que hay al menos dos formas más de implementar lo mismo, es usar firmware con scripts en LUA y desarrollo nativo en C usando el SDK del fabricante. El primer método me pareció muy superficial, creo que no podría haberme dado cuenta de algunos de los matices yendo por este camino. El segundo método es el más prometedor, pero lleva mucho tiempo dominarlo, pero esta es la única opción si se supone que debe implementar un dispositivo más serio.

Usando Arduino IDE, la parte más importante fue la menos problemática en términos de inclusión en el proyecto. Sin embargo, la depuración normal es muy deficiente. Inicialmente, había dudas de que todas las funciones previstas juntas (1-Wire, i2c, ADC, MQTT, EEPROM, wifi) coexistirían en el ESP-12F en un boceto, pero lo hizo.

Stm8s103f3p6


Parecería, ¿por qué hay otro microcontrolador? Hoy mismo, un dispositivo de un solo núcleo ya no se toma en serio, solo es broma. La razón es diferente: el sensor de corriente es tan "especial" que es más fácil y económico colgar todo el procesamiento de sus lecturas en un microcontrolador separado y dejar que lo cuide. De hecho, tenemos un sensor de corriente digital que se conecta a través del bus i2c. Teóricamente, puede usar el microcontrolador más barato, pero como estas placas son muy asequibles y bastante decentes en términos de parámetros, lo apliqué. En el futuro, lo he vuelto a medir y los voy a usar, como reemplazo del PIC12, que solía agregar "cerebros" a manualidades completamente diferentes. Al principio, esta idea me parecía redundante, pero ahora veo que ni siquiera tuve que perder tiempo en otra opción.



Estos microcontroladores están programados en el entorno IAR Embedded Workbench, es gratis para código de hasta 8kb, nuestro microcontrolador tiene tanta memoria. Una gran ventaja es la posibilidad de depuración humana. Es cierto que debe dejar de usar las funciones habituales de C-standard como printf y trabajar con números de punto flotante, ya que esto borrará rápidamente toda la memoria. Te contaré más sobre el firmware a continuación.

Pantalla


Casi no hay opciones aquí: utilizamos OLED SSD1306, una hermosa pantalla con un brillo muy hermoso y una conexión simple. Las bibliotecas para él están incluso bajo el espectro. Hay pantallas de diferentes colores. También hay placas en las que se sueldan inmediatamente ESP y una pantalla similar. El color azul parece el más ventajoso. Hay dos tonos cuando la parte superior es de un color diferente.

La pantalla está conectada a través del bus i2c, estos son solo 4 cables teniendo en cuenta la fuente de alimentación. El sensor de corriente también se conectará a través del mismo bus. La pantalla no entregó ningún problema en absoluto. ¡Definitivamente imprescindible!



Vale la pena considerar que es probable que la pantalla brille las 24 horas, los 7 días de la semana, y la tecnología de la pantalla es tal que los píxeles LED individuales se desvanecen con el tiempo, por lo que debe intentar usarlos de manera uniforme. Se me ocurrió solo cambiar la imagen en diferentes direcciones a intervalos regulares. En general, creo que si de repente la imagen se vuelve completamente ilegible, reemplazar la pantalla no es un problema. Veamos cuánto tiempo vive.

Un video detallado sobre dicha pantalla y el canal de youtube.



Sensores de temperatura


Usé el conocido DS18B20. En el modo de potencia parásita, tres sensores funcionan silenciosamente en un par de cables trenzados a una distancia que excede lo que es razonable para dicho proyecto (suficiente con un margen para cualquier parte del apartamento).



La única diferencia con la figura es el uso de una resistencia de 1K, de lo contrario no hay suficiente potencia. Cuando esto sucede, el sensor da una temperatura igual a 85 grados. La solicitud de conversión y la posterior lectura del valor se produce secuencialmente para cada sensor para que no interfieran entre sí.

Conté las direcciones de los sensores por adelantado y las codifiqué en un boceto. Se intentó hacer una autodetección de sensores en el bus, pero no me gustó la estabilidad de este algoritmo, y dado que la temperatura es un parámetro importante, el juego no vale la pena.

Elementos estructurales y "encrespamiento"


Todo este hierro se colocó con una pequeña caja de bufanda que se puede recoger en cualquier mercado de radio al gusto. Por lo general, se usó un relé de contacto para 220V. Muchos kilómetros de cable del antiguo bucle FDD, medio kilo de resistencias por cada 10K, un par de botones, un par de salida debajo de los "tulipanes" para conectar la línea 1-Wire y ADC ESP-shki. Mucho pegamento caliente. Una unidad de fuente de alimentación de alta calidad a 5 voltios, que se colocó por completo en el dispositivo. Y, por desgracia, casi no hay cinta aislante azul.

Si está armando un prototipo, intente no colocar nada en una de las cubiertas, entonces será conveniente quitarlo y recogerlo en el dispositivo. Piense dónde entrarán los cables de conexión externos y qué conectores tienen para que no resulte que el enchufe debe estar atascado en ángulos salvajes, etc.

Costos de los componentes:


  1. Sensor de corriente - $ 2.1
  2. ESP-12F - 3.2 $
  3. Tablero Stm8 - $ 0.75
  4. Convertidor lógico - 0.5 $
  5. Sensor de temperatura - $ 0.6
  6. Pantalla - $ 4.2
  7. Relé - $ 0.75
  8. Caja y otras musgo ~ xs, que sea $ 3

Total: $ 15

Armado con el archivo correcto ...




Sensor de corriente


Como escribí anteriormente, el sensor de corriente estaba muy malhumorado. Además, medir el valor efectivo de la corriente alterna es algo más complicado que medir el valor de la corriente continua. Creo que es mejor que se lo explique una persona que conozca bien radiolok :

Video


Y también:

“En lugar de I (corriente) sustituto en la fórmula U (voltaje). La integral es el área de la figura debajo del sobre. La integral se puede calcular aproximadamente por el método de rectángulos intermedios, aproximando la figura con rectángulos con una altura igual a una muestra discreta del voltaje y un ancho igual al intervalo de tiempo entre muestras ".



Por lo tanto, resulta que necesitamos medir el área "debajo del gráfico" de la corriente alterna durante un período. Como la frecuencia de nuestro voltaje es de 50 Hz, obtenemos una duración de período de 20 ms . Cuando comenzar a medir no importa, lo principal es hacerlo por un tiempo múltiplo de 20 ms . Casi todo se reduce a sumar el módulo de las lecturas de ADC durante un período con el cálculo posterior del promedio. Esta será nuestra corriente. Para el período entre dos mediciones, se toma el tiempo de respuesta del ADC, es bastante estable.

Como beneficio adicional, este método le permite medir tanto la corriente alterna como la continua. Fuera de los corchetes, dejamos la probabilidad de caminar frecuencia y voltaje en la salida.

Puede intentar realizar mediciones en el ESP8266 ADC y lo intenté, pero la precisión resultó ser muy mediocre, así como el ESP, la mayoría de las veces tuve que tratar exclusivamente con el procesamiento de señales desde el ADC. Además, el ADC incorporado tiene un rango de voltaje de aproximadamente 1 voltio. Es necesario usar un divisor de voltaje. El ESP funciona con 3.3V, y el sensor de corriente es de 5V, lo que significa que los datos del ADC pueden distorsionarse si la fuente de alimentación no cambia su valor proporcionalmente. Todo esto no agrega precisión a las mediciones. El plan inicial fue el siguiente: si no puede usar el ESP de ADC correctamente, entonces usaremos un microcontrolador separado, y sucedió.

Usando Stm8s103f3p6 la situación ha mejorado mucho. En primer lugar, tanto el sensor como el microcontrolador funcionan con 5V, lo que evita que los resultados de la medición se "floten" durante las sobretensiones. En segundo lugar, el microcontrolador puede dedicar todos sus recursos informáticos al procesamiento, filtrado y refinamiento de señales. De hecho, por supuesto, no todo es sencillo, puedes colgar algo más en él.

Se determinó experimentalmente que en 20 ms, stm8 logra obtener unos 600 valores del ADC sin comprometer la precisión. Si es necesario, puede cronometrar el ADC más rápido, pero el gráfico se vuelve más obviamente falso. Supervisé las mediciones con el software de procesamiento , este es un producto para visualizar algo, en mi caso fue un montón de valores tomados del ADC. Se obtuvieron lecturas bastante estables después de la medición durante 100 ms, es decir, aproximadamente 3000 mediciones. Luego lo multiplicamos por un coeficiente seleccionado empíricamente (no tengo idea de cuál es este número y cómo calcularlo porque se obtuvieron otros números con todas las fórmulas apropiadas, simplemente lo ajusté y todo) A continuación, el valor se ejecuta a través del filtro . Todo lo que queda por hacer es poner el siguiente valor en el lugar donde ESP lo recogerá.

Como resultado, conseguimos tal estabilidad si enciende la bombilla de 100W.



Durante la depuración, resultó que el sensor puede colgarse cuando se dispara el relé, aparentemente desde fuertes campos magnéticos en el momento en que se abre el relé, con la formación de un arco. Tuve que agregar una cadena de "malabarismo" con el sensor para la nutrición. Aunque al principio pensé que se estaba congelando stm8 o algún bloque porque no había nada que colgar en el sensor, pero podía.

Debido al ruido del sensor, es prácticamente imposible medir una corriente de hasta 100 mA. En algún lugar de los foros vi una mención de que esto es normal. Traté de organizar la detección de ruido y la emisión, en este caso, de lecturas de corriente cero para que la corriente no salte incluso con un circuito abierto.

El algoritmo de este detector es que el ruido tiene una distribución igual de valores por encima y por debajo de "cero", mientras que la señal real en una sección particular del período todavía tiene un valor promedio distinto de cero, a menos que, por supuesto, comencemos a medir en el momento de transición cero por una sinusoide. Por lo tanto, escucho la señal en tres intervalos aleatorios del mismo período, que se ubican uno con respecto al otro de tal manera que se garantiza que al menos uno no caiga en el momento en que la sinusoide cruza cero y da un valor total distinto de cero. Quizás haya una manera más simple, pero la construcción de bicicletas, ya sabes, no tolera un largo estudio del problema.

Stm8 se congela, pero solo durante el intercambio en el bus i2c con ESP, posiblemente debido a mi poco conocimiento de programación de este microcontrolador, pero tal vez porque puede. Usar un perro de observación ayudó a resolver este problema.

Es más fácil obtener voltaje alterno seguro para la depuración desmontando una fuente de alimentación del transformador (naturalmente bajando, preferiblemente un voltio a 12) y desconectando el puente de diodos y el condensador de suavizado del transformador, generalmente no hay nada más.

Sucedió que no tenía un dispositivo que pueda medir el valor efectivo de la corriente alterna. En este caso, puede obtenerlo midiendo el voltaje efectivo en la resistencia de un valor conocido, y la corriente ya se puede calcular dividiendo el voltaje por el valor de la resistencia. El valor efectivo de la tensión alterna puede mostrar cualquier multímetro. Y la segunda forma es medir la caída de voltaje a través de la misma resistencia, pero conectándola después del puente de diodos y el condensador de suavizado. Naturalmente, en este caso, el valor actual será ligeramente menor porque el convertidor AC-DC tiene su propia eficiencia.

Naturalmente, quiero decir que las operaciones anteriores se llevan a cabo con voltaje alterno reducido, y no con la red.



Como parte de este artículo, no analizaré el proceso de programación para stm8. Pero no es difícil, hay bibliotecas estándar para periféricos y Google resuelve la mayor parte de los problemas. Los que no quieran entrar en detalles están invitados a completar el firmware ( CurrentMeter (IAR) \ STM8S103 \ Exe \ Project.hex ) en el microcontrolador y olvidarse de él. Si quieres profundizar, entonces para comenzar el artículo y el video:

Video


Hay intentos de adaptar Arduino a este microcontrolador, pero por el momento no he encontrado más o menos listo para un uso real.

Entonces tenemos un sensor de corriente con interfaz i2c. Dado que el ESP tiene una lógica de 3.3V y un stm8 de 5V, se necesita un convertidor de nivel lógico, y de dos vías, no hay forma de obtener un divisor de voltaje aquí.Todo tipo de trucos con la instalación de resistencias en serie le permiten establecer una conexión de alguna manera, pero la estabilidad de tal solución no es satisfactoria. Es mucho más fácil usar un convertidor bidireccional listo, que cuesta un centavo.

Su trabajo se basa en el uso de transistores de efecto de campo, aquí puede encontrar más información sobre la conversión de nivel .

[ Firmware y fuente para stm8 ]

Montaje y disposición del dispositivo.


El prototipo del dispositivo, se decidió recoger la instalación montada. Existe la posibilidad de que algunos puntos tengan que rehacerse durante la operación, y todavía no he dominado el diseño normal y simple de las placas de circuito impreso. Después de que el dispositivo haya funcionado durante varios meses sin modificaciones, probablemente tenga sentido desarrollar y solicitar placas de circuito impreso en China. Mientras tanto, tenemos un monstruo de pasta: un


diagrama intuitivo e intuitivo de los elementos de conmutación del dispositivo.

El principio general del ensamblaje del prototipo es simple: marcamos aproximadamente en una caja de plástico que donde se ubicará, fijamos los elementos principales allí y luego todo está conectado por un cable de ensamblaje. Vale la pena considerar la ubicación de los elementos para no crear inconvenientes innecesarios.

Usando el escaneo irremplazable chino, se hacen los agujeros necesarios (y no solo), la ventana de la pantalla se ajusta con un archivo.

Para alimentar la electrónica, se utiliza una unidad de fuente de alimentación de 5V de alta calidad que está conectada en paralelo a una red de 220V directamente dentro de la carcasa del dispositivo.

Es muy importante comprender que 220 V ya es un voltaje peligroso, asegúrese de aislar todas las conexiones y, si es posible, localizar dichas conexiones en una parte del dispositivo y la parte de bajo voltaje en otra. Durante las primeras conexiones de prueba, puede cambiar a través de una máquina normal, nadie es inmune a los errores.



Sobre los errores y la probabilidad de que se cometan.Nada inusual, solo un poco tomado por bombas termonucleares al tocar el suelo en caso de accidente accidental con el avión después de un reabastecimiento de combustible fallido sobre España en el año 66. Foto de este artículo de MagisterLudi

No te consideres el más inteligente y cauteloso. Bueno, o al menos toca los cables con alto voltaje en el exterior de la palma de tu mano, pero es mejor no hacerlo.

La foto muestra que el sensor de corriente está pegado a la fuente de alimentación, sorprendentemente no noté ninguna interferencia, pero noté que la interferencia penetra desde arriba, tuve que desmontar el sensor y protegerlo con papel de aluminio. Puede verificar la efectividad del blindaje con un imán de neodimio.Es importante no olvidar que se aplica un voltaje de 220 V en un lado del chip del sensor, por lo que debe protegerlo con aislamiento exclusivamente con una cinta aislante azul .

Si alguien no comprende el diagrama del circuito visual de los bloques de conmutación dados anteriormente, hay un diagrama de circuito torcido. La primera experiencia con fritzing parece haber sido irregular.



Lo único que no se refleja en el diagrama es la conclusión de los contactos necesarios, para el firmware, de ESP y STM8 a un conector separado en el costado del dispositivo. Por lo tanto, puede terminar con el ensamblaje para comenzar a flashear el dispositivo terminado, y no un cruce entre nodos y cables dispersos en la mesa.

Antes de aplicar energía varias veces, haga sonar el circuito de alimentación para un cortocircuito o la polaridad correcta. Parece que son cosas simples, pero una pequeña pila de chales muertos en el cajón de mi escritorio elocuentemente requiere no descuidar estas simples reglas.

Comunicación con el mundo exterior.


Comenzaremos a terminar lentamente el software. Para organizar la gestión y la interacción con nuestro punto de venta, utilizaremos el protocolo MQTT.

MQTT. Como funciona Todo está organizado de la siguiente manera: en la red local (o tal vez no en la local) hay un determinado host en el que se inicia un programa especial ( agente MQTT ) que recibe diversos datos de varios dispositivos y organiza su almacenamiento de forma similar a un sistema de archivos y directorios en su disco.

Por ejemplo: "SmartPowerSocket1 / Current" : así es como se ve el tema MQTT real .

La carpeta de este dispositivo es "SmartPowerSocket1" , las subcarpetas son algunos parámetros internos del dispositivo, por ejemplo, el valor actual es "Actual". La ruta completa al parámetro (tema) se usa para que los dispositivos se suscriban a los cambios en estos parámetros. Allí los parámetros son grabados por el propio dispositivo. Puede suscribirse a toda la "carpeta" (tema) y recibir todos los cambios de parámetros para un dispositivo específico (tema o subtema): SmartPowerSocket1 / # .



Un video más detallado sobre este tema.

Video


Y nuevamente recomiendo este canal, allí encontrarás mucha información útil.

El corredor de MQTT más famoso es Mosquitto . Y dado que decidí implementar inmediatamente el sistema de administración inteligente del hogar MajorDoMo , que ya figuraba en el video anterior, todo esto se generó en masa al implementar la imagen final para la PC Orange Pi . Todo ya está instalado allí.

El uso del protocolo MQTT permitirá utilizar diferentes sistemas de control inteligente para el hogar y no solo este protocolo está ganando popularidad.

Solo puede sobrevivir con el agente MQTT instalándolo en su PC, y hay muchos clientes MQTT interactuando con él, por ejemplo, desde el teléfono, para Android. Y no solo para Android. Están configurados de manera bastante simple.

Con MajorDoMo, puede organizar una hermosa visualización de información, dibujar gráficos y administrar a través de cualquier navegador.

Puede intentar adivinar qué tipo de dispositivo como experimental se muestra en los gráficos a continuación.




Este es un refrigerador, un sensor de temperatura en el congelador. Estoy un poco sorprendido de que si configura la perilla de control en el refrigerador a "2", se obtienen las lecturas de las capturas de pantalla anteriores. Si se establece en "3", el refrigerador ha estado martillando durante 40 minutos en lugar de 7 y mantiene la temperatura entre -16 / -18 grados. Ajuste no muy suave en cuanto a mí. La información no tiene un valor excesivo; fue interesante verla.

También es interesante que se muestren los momentos de la alta corriente inicial y que se vea la discreción del sensor de temperatura (paso), ya que el filtro promedio se usa para la corriente, no esperaba ver tales sobretensiones en el gráfico.

Boceto para ESP-12F


Para forzar a ESP a intercambiar datos a través de MQTT, solo necesita usar la biblioteca apropiada en Arduino. Vale la pena señalar que también hay bibliotecas similares.

Un ejemplo de trabajo con esta biblioteca en ESP8266
#include <ESP8266WiFi.h> #include <PubSubClient.h> // Update these with values suitable for your network. const char* ssid = "........"; const char* password = "........"; const char* mqtt_server = "broker.mqtt-dashboard.com"; WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; char msg[50]; int value = 0; void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); // Switch on the LED if an 1 was received as first character if ((char)payload[0] == '1') { digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level // but actually the LED is on; this is because // it is acive low on the ESP-01) } else { digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH } } void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Create a random client ID String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); // Attempt to connect if (client.connect(clientId.c_str())) { Serial.println("connected"); // Once connected, publish an announcement... client.publish("outTopic", "hello world"); // ... and resubscribe client.subscribe("inTopic"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void setup() { pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); long now = millis(); if (now - lastMsg > 2000) { lastMsg = now; ++value; snprintf (msg, 75, "hello world #%ld", value); Serial.print("Publish message: "); Serial.println(msg); client.publish("outTopic", msg); } } 


En resumen, cuando necesita transferir datos, son transmitidos por la función de publicación ("SmartPowerSocket1 / Current", "2"). Transmitimos el valor actual igual a 2 loros.

Para recibir datos de un intermediario, solo tiene que suscribirse al tema que nos interesa y verificar la función de la que provienen los datos clasificándolos en las variables correspondientes. Eso es todo

El bosquejo final resultó ser bastante voluminoso, pero utiliza enfoques absolutamente estándar para organizar el intercambio en i2c, 1-wire y trabajar con otras entidades. Creo que la persona que ya ha tratado con Arduino no tendrá muchas dificultades para descubrir y modificar la lógica de control para que se ajuste a sus necesidades, si es que lo hace.

EEPROM . El boceto organizó el almacenamiento de parámetros en la EEPROM, y además de esto, cuando el servidor MQTT está disponible, se retiran de allí cuando se inicia el dispositivo.

ArduinoOTA . Incluso en el boceto, se omite algo como ArduinoOTA (OTA - "por aire", que se puede traducir como "por aire"), es decir, el firmware se puede descargar a través de Wifi.

El enlace de arriba tiene una receta sobre cómo usarlo. Agregaré que cargar de esta manera es varias veces más rápido, pero esto requiere un procesamiento especial para integrarse en el boceto. El bucle principal no debe sobrecargarse, de lo contrario no habrá conexión entre el ESP y el ArduinoIDE. Es por eso que hay tantos tiempos de espera diferentes en el boceto y se mide el tiempo de una ejecución del ciclo principal. La mayoría de las veces, ESP comprueba "¿pero quieren mostrarme?" cuanto más estable funciona todo. Otra característica que aún no he superado, ArduinoOTA se niega a flashear en algunas redes wifi, aunque todo responde. Es más probable que tenga éxito si ArduinoIDE y ESP están conectados por un punto de acceso dedicado (solo IoT).

Botones Al principio quería hacer más de dos botones, pero resultó que el GPIO en el ESP-12F estaba llegando a su fin. A juzgar por el hecho de que nadie presionaría estos botones de todos modos (si hay control a través del webmord del hogar inteligente), se decidió limitarlo a dos. Los ató para regular la configuración actual, y si presiona ambos a la vez, el relé se apaga. Después de eso, puede encenderlo solo si reinicia el dispositivo a través de la alimentación o mediante un webmord. Por lo tanto, traté de agregar un poco de protección contra cambios bruscos si la corriente superaba el límite permitido, ya que esto podría significar una emergencia.

[ Publicaré el boceto a medida que actualice. ]

"¡Lo hice!"




La misteriosa caja negra comenzó a hacer clic en el relé y emitió, no menos misteriosos, silenciosos chirridos de alta frecuencia de diferentes tonos en diferentes modos de funcionamiento: una característica / error que apareció como resultado de la fuente de alimentación, aparentemente hay un choque de música suelto.

Es curioso que fue él quien indirectamente me ayudó a atrapar los momentos de la caída de los nodos individuales. Puedes verlo con tus ojos, pero es agotador, escuchar en el fondo es muy fácil captar el momento en que cambia el ritmo del sonido. Por lo tanto, no comencé a calmar este acelerador e incluso pensé en agregar esa función a otros dispositivos de depuración.

Durante algún tiempo pensé en cómo demostrar el dispositivo si es una caja negra aburrida y ni siquiera se mueve. Tratemos de hacer té usando una caldera y uno de los sensores de temperatura, para calcular la cantidad de energía que tomará.



Después de presionar el botón que desbloquea el relé varias veces, no pasó nada, luego resultó que la configuración actual era muy baja y funcionó las primeras veces.
Cuando la caldera se calentó un poco, la corriente cayó un poco y el relé se desbloqueó.

Cuando me puse cómodo, me preparé para esperar mucho tiempo para que el agua hirviera, pero la caldera china de shaitan hirvió el agua tan rápido que apenas logré apagarla en modo de control manual. Y resultó que el sensor de temperatura no era tan ágil, y aunque configuré el ajuste a 95 grados, me temo que cuando se active, todo estará en agua hirviendo, me temo que no quiero tanto té.

Al principio, estaba confundido por la inscripción en la caldera de 500W, pero la corriente muestra que esto es cierto. Al final, ya tenía miedo de que la parte plástica de la caldera se derritiera y se pudriera.
"Experimento", pero no pasó nada.

Por supuesto, sería posible grabar un video de acuerdo con el guión, pero me parece que el resultado real es más valioso en los experimentos, por lo que mostró lo que sucedió la primera vez sin ensayos. En general, aquí hay un bautizo cómico de fuego inteligente.



Es muy fácil calcular la energía gastada en base al hecho de que el agua hierve después de 2.5 minutos. y todo este tiempo la corriente fue de aproximadamente 2.5A: (2.5A * 220V) / 60min. * 2.5min. = 0.023 kWh.

Si su objetivo es mantener un medidor de electricidad, es bueno agregar otro sensor de voltaje que se pueda hacer con un transformador reductor, de esta manera puede obtener aislamiento galvánico y el voltaje no es peligroso para medir con un microcontrolador ADC. Y debe agregarlo porque el voltaje en nuestros enchufes casi nunca es de 220V, pero ± 10V lo hace en el mejor de los casos.

Y otra opción si no necesita lecturas de corriente y voltaje por su cuenta, y solo necesita tener en cuenta el consumo de electricidad: estos son medidores eléctricos chinos de un solo din , generalmente tienen una salida de baja tensión pulsada y son muy compactos. En este caso, su uso está justificado.



PD: Si realmente planea armar un hervidor Wifi real, le recomiendo calcular el grosor de los cables y la potencia del relé, ya que el hervidor eléctrico promedio es muy voraz.

UPD No. 1: En los comentarios, se propusieron varios dispositivos más, incluidos los terminados:

1. Módulo preparado para medir parámetros eléctricos PZEM-004T .


2. Módulos completos Sonoff Pow .

3. También módulo terminado en electrodragon esp8266.

Source: https://habr.com/ru/post/es407541/


All Articles