Tabla de contenido:

Buzón conectado con energía solar: 12 pasos (con imágenes)
Buzón conectado con energía solar: 12 pasos (con imágenes)

Video: Buzón conectado con energía solar: 12 pasos (con imágenes)

Video: Buzón conectado con energía solar: 12 pasos (con imágenes)
Video: Установите систему SOLAR ENERGY в доме (идеально подходит для отключения электроэнергии) 2024, Mes de julio
Anonim
Buzón conectado alimentado por energía solar
Buzón conectado alimentado por energía solar
Buzón conectado alimentado por energía solar
Buzón conectado alimentado por energía solar

Para mi segundo Ible, te describiré mis trabajos sobre mi buzón conectado.

Después de leer este Instructable (+ muchos otros), y como mi buzón no está cerca de mi casa, quería inspirarme sobre los trabajos de Open Green Energy para conectar mi buzón a mi servidor Domoticz.

Metas

  • Ser avisado por Telegram cuando lleguen cartas;
  • Ser avisado por Telegram cuando llegue un paquete;
  • Compruebe si se han recogido las cartas / paquetes.

Mi principal limitación

El buzón está relativamente lejos de la casa y era imposible tirar de un cable eléctrico para alimentar nada.

Tenía que encontrar otra solución: ¡la energía solar era una buena solución!

La lista de materiales

  • Raspberry Pi (para alojar piezas de MQTT y Domoticz, no descritas aquí)
  • Una cuenta de Telegram Bot
  • Lolin D1 mini (o Wemos…)
  • Conector de bloque de terminales de tornillo enchufable
  • Tablero de carga de batería de litio TP4056
  • Panel solar fotovoltaico de 6V 2W
  • Batería Li-Ion 18650
  • Soporte de batería de iones de litio
  • PCB DIY Placa de circuito impreso prototipo de cobre para soldadura
  • Servo analógico SG90
  • 3 interruptores de lengüeta (uno para cartas, uno para paquete y otro para pago)
  • Imanes
  • Algunos cables
  • Caja de madera: Como no conseguí ninguna impresora 3D, me di cuenta de mi propia casita con madera para recibir piezas de electrónica …
  • Cable Ethernet de repuesto
  • Placa de conexión del conector Ethernet RJ45

  • Soldadura J-B
  • Algunos rodamientos de bolas
  • Tornillos, tuercas, arandelas

Paso 1: Esquema global

Esquema global
Esquema global
Esquema global
Esquema global

Los dibujos hermosos siempre son mejores que los discursos largos;-)

¡Pero siempre son bienvenidas algunas explicaciones sobre MQTT, Domoticz y Telegram!

MQTT (Message Queue Server Telemetry Transport), es un protocolo de mensajería, utilizado para enviar datos entre dispositivos y otros sistemas en el mundo del IoT (Internet de las cosas).

Sin entrar en demasiados detalles, su funcionamiento se basa en el principio de que los clientes se conecten a un servidor. En MQTT, los clientes se denominan suscriptor o publicador y el servidor se denomina intermediario.

En este Instructable, utilizo solo un editor, el Lolin conectado a mi buzón: cuando se detectan cartas o paquetes a través de los contactos reed instalados en el buzón (paso 1 en shematic), envía un mensaje MQTT por WIFI al corredor (paso 2).

La parte del Broker la realiza Mosquitto, que se instala en la Raspberry Pi (Paso 3).

Acerca de Domoticz:

Como se describe en la página de origen, Domoticz es un "sistema de automatización del hogar", que le permite controlar varios dispositivos y recibir información de varios protocolos: MQTT es uno de los protocolos compatibles …

Tan pronto como le llegue la información (Paso 4), puede definir eventos: En el caso del buzón, elegí enviar una notificación de Telegram (Paso 5).

Finalmente, el cliente de Telegram está configurado en mi teléfono (¡y en el de mi esposa también! - Paso 6): se alcanza el objetivo final …

Paso 2: Shematic / cableado

Shematic / cableado
Shematic / cableado
Shematic / cableado
Shematic / cableado
Shematic / cableado
Shematic / cableado
Shematic / cableado
Shematic / cableado

Una palabra sobre la lectura analógica:

En primer lugar, noté después de algunas investigaciones que Lolin mini D1 (como el antiguo Wemos), tiene un divisor de voltaje incorporado para el pin A0 (considerando 220KΩ para R1 y 100KΩ para R2 - vea a la derecha de la hoja de datos vinculada), lo que permite 3.2 voltios como voltaje máximo de entrada analógica.

Teniendo en cuenta que el voltaje de salida máximo de la batería es 4, 2v (limitado por la placa de carga) y, teóricamente, solo necesita agregar un resistor externo (en serie con R1) para aumentar el rango de voltaje de entrada máximo. Luego, si agrega 100K en serie con R1, obtendrá este resultado:

Vin * R1 / (R1 + R2) = Vout

4, 2 * 320 K / (320 K + 100 K) = 3, 2

En mi circuito, elegí poder ajustar su valor, por eso he preferido usar una resistencia ajustable en mi circuito: tal vez sea inútil para ti, pero en mi situación, configuré su valor en unos 10KΩ para tener un valor coherente en Domoticz …

Tenga en cuenta que el pin A0 tiene una resolución de 10 bits: esto significa que en su boceto, su lectura analógica devolverá un valor entre 0 y 1024.

Como quiero enviar un valor porcentual a Domoticz, tengo que dividir el resultado de lectura analógica entre 10, 24.

Paso 3: Gestión de energía

Gestión de poder
Gestión de poder
Gestión de poder
Gestión de poder

Por supuesto, quiero que el buzón sea autónomo. Para alcanzar mi objetivo, utilizo estos elementos:

  • una batería Li-Ion 18650 de 4000mAh;
  • un panel solar que puede entregar 6V / 2W;
  • una placa de carga de batería de litio TP4056.

Para elegir el panel solar más adecuado, eché un vistazo a algunos ejemplos, incluido este: en este ejemplo, se usa un panel solar de 5.5V / 0.66W, y probablemente sea suficiente para este propósito. En mi caso, y como el ESP8266 debe permanecer ENCENDIDO durante el día y debe poder hacer funcionar un servomotor para mantener la casa de cara al sol, elegí un modelo de panel solar más potente (6V / 2W) - También me permite para anticiparnos a periodos invernales oscuros y días nublados;-)

Además, y con el fin de reducir al máximo el gasto energético, he seleccionado los siguientes escenarios:

  • sabiendo que el cartero pasa solo entre las 7 am y las 8 pm, ESP se coloca en DeepSleep el resto de la noche;
  • El factor no pasa entre el mediodía del sábado y el lunes por la mañana: el ESP también se coloca en modo DeepSleep durante este período.
  • Para el período comprendido entre las 7 am y las 8 pm, y para reducir el consumo de energía, simplemente deshabilito la interfaz de red del ESP: la red se reinicia solo cuando llega un paquete o una carta, el tiempo justo para enviar la información a Domoticz. No es necesario que me avisen de inmediato y los pocos segundos adicionales necesarios para reiniciar la interfaz de red no son perjudiciales.

Algunos valores sobre el consumo en los diferentes modos que utilizo para el Lolin - mire la hoja de datos, p18:

  • En modo normal (con RF funcionando), el consumo de energía puede aumentar a 170 mA. Como mi buzón está a unos 50 metros de mi casa (y al límite de la señal WIFI …) supongo que la potencia utilizada para mantener la conexión es máxima …
  • En Modem-sleep, el consumo de energía cae a 15mA. Pero como puede ver en la hoja de datos, no detuvo completamente el módem, ya que el ESP está "manteniendo una conexión Wi-Fi sin transmisión de datos".
  • En sueño profundo, la potencia cae a 20uA.

Para estar seguro de que el wifi no permanece activo innecesariamente, preferí desactivarlo con los siguientes comandos. Tenga en cuenta las muchas llamadas a delay () … Sin ellas, el ESP se bloquea:

WiFi.disconnect ();

retraso (1000); Modo WiFi (WIFI_OFF); retraso (1000); WiFi.forceSleepBegin (); retraso (1);

En general, después de varios días de funcionamiento, parece funcionar y sobre todo cargar correctamente:

  • esto me permite hacer funcionar el servomotor cada hora para posicionar la casa hacia el sol;
  • También puedo permitirme reactivar la interfaz de red cada hora para enviar a Domoticz el nivel de carga de la batería.

Paso 4: instalación de imanes y contactos de lengüeta

Instalación de imanes y contactos de lengüeta
Instalación de imanes y contactos de lengüeta
Instalación de imanes y contactos de lengüeta
Instalación de imanes y contactos de lengüeta
Instalación de imanes y contactos de lengüeta
Instalación de imanes y contactos de lengüeta

Como de costumbre, usé mi Proxxon para darle forma al lugar del Reed en un trozo de madera.

Para fijar el contacto de lengüeta en su agujero, utilicé un poco de soldadura J-B.

Para el paquete y la salida, un pedacito de cinta, un poco de sierra para metales, ¡y se alcanza la meta!

La ventaja de mi buzón es que es de metal, lo que facilita el posicionamiento de los imanes para que interactúe correctamente con los contactos de las cañas.

Paso 5: Conéctese a My Little House

Conéctate a My Little House
Conéctate a My Little House
Conéctese a My Little House
Conéctese a My Little House

Para poder conectar y desconectar fácilmente el cable que va a los contactos reed del buzón a la casa, opté por utilizar un conector Ethernet.

Puedes usar este modelo o, como yo, usar un viejo escudo Arduino Ethernet que cuelga en mis cajones: no sufrió, fue valiente frente a la sierra, su muerte fue rápida ^^

Solo una palabra sobre este escudo Arduino Ethernet: no espere tener 8 controladores separados … Los cables están emparejados por 2 dentro del escudo … ¡Me volvió loco durante demasiado tiempo!

Paso 6: En la casa …

En la casa …
En la casa …
En la casa …
En la casa …

Lugar suficiente para fijar el portapilas, configurar el servo y el conector hembra RJ45.

Paso 7: Déjelo girar …

Let It Turntable …
Let It Turntable …
Let It Turntable …
Let It Turntable …
Let It Turntable …
Let It Turntable …
Let It Turntable …
Let It Turntable …

El objetivo es mantenerlo de cara al sol …

Para dejar la capacidad de ser giratoria, usé un tornillo largo como eje, con algunas tuercas y dos rodamientos de bolas …

Hasta ahora, usé el servo SG90 (torque: 1.8 kg / cm a 4.8v).

Dar la vuelta a la casa (y sus pocos gramos) es suficiente. Por otro lado, no estoy seguro de que sus engranajes de plástico resistan durante mucho tiempo las frecuentes ráfagas de viento que hay en mi región.

Pedí otro (torque MG995: 9,4 kg / cm a 4,8 v), tampoco muy caro, pero con engranajes metálicos.

Será lo siguiente que haré cuando lo reciba: ¡confío en mi buzón conectado para notificarme de su llegada!

Paso 8: algunas pruebas

Image
Image

Algunas notas:

Este boceto es solo para emular cambios de horas durante el día para permitirme controlar la posición del servo.

  • Con SG90: sin necesidades adicionales, puede funcionar con el voltaje de SALIDA proveniente del controlador de batería.
  • Pero, con MG 995:

    • El ángulo total de rotación no es el mismo (más ancho): tuve que usar una función extra para reducirlo (Servo_Delta ()).
    • Necesita un aumento de CC / CC para proporcionar suficiente voltaje al servo … continuará …

/*

- PRUEBA con SG90: sin necesidades adicionales, puede funcionar con el voltaje de SALIDA proveniente del controlador de batería - PARA MG 995: - use la función Servo_Delta ()… - Necesita un DC / DC Step up para proporcionar suficiente voltaje al servo … para continuará: * / #include bool Logs = true; Servo myservo; #define PIN_SERVO D2 // posición del servo para: 7h, 8h, 9h, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h, 19h, 20h, 21h // int Arr_Servo_Pos = {177, 173, 163, 148, 133, 118, 100, 80, 61, 41, 28, 15, 2, 2, 2}; int Arr_Servo_Pos = {180, 175, 165, 150, 135, 120, 102, 82, 63, 43, 30, 15, 0, 0, 0}; int old; int pos; int i; configuración vacía () {Serial.begin (115200); } bucle vacío () {para (i = 7; i <= 22; i ++) {antiguo = i; if (i == 7) {if (Logs) Serial.println ("Posicionar el servo para 7 Heure"); myservo.attach (PIN_SERVO); for (int index = Arr_Servo_Pos [(sizeof (Arr_Servo_Pos) / sizeof (Arr_Servo_Pos [0])) -1]; index 7 && i = Arr_Servo_Pos [i-7]; index -) {if (Registros) Serial.println (índice); if (Registros) Serial.print ("Valor ajustado:"); if (Registros) Serial.println (Servo_Delta (índice)); retraso (200); //myservo.write(Servo_Delta(index)); myservo.write (índice); } retraso (15); myservo.write (Arr_Servo_Pos [i-7]); // escribe de nuevo el último valor para evitar movimientos bruscos cuando datach myservo.detach (); }}} retraso (2000); }} int Servo_Delta (valor int) {int Temp_val; Temp_val = (valor * 0,80) +9; return Temp_val; }

Paso 9: La casita

La casita
La casita
La casita
La casita
La casita
La casita

Como dije antes, no obtuve ninguna impresora 3D. Así que decido usar una vieja caja de verduras …

Tal vez no dure mucho tiempo, pero para entonces, tendría tiempo de considerar otra solución (o un amigo que tenga una impresora 3D): para proteger la madera, agregué mucho barniz por todas partes …

Puedes ver las "bonitas cortinas" … Eso es lo que pasa cuando le pides a tu esposa que haga el trabajo ^^

Paso 10: el boceto

En progreso … ¡Pero parece estar estable

Todavía estoy trabajando en el código: como esta no es una versión definitiva, sus comentarios / consejos son bienvenidos;-)

Algunas observaciones:

  • Hay muchos retrasos () en el código: esto es para evitar muchos accidentes del Lolin, especialmente al detener una red de inicio …
  • No encontré una manera fácil y confiable de obtener el azimut del sol: por eso fijé el valor del servo en función de lo que observé… ¡Tienes una manera buena (y simple) de obtenerlo, me interesa! una pista para estudiar aquí, incluso si prefiero una API en línea, me da el acimut directamente según la fecha, la hora y la posición geográfica …
  • Acerca de la técnica del sueño: dado que Lolin es un procesador Tensilica de 32 bits, su valor máximo para un entero sin signo de 32 bits es 4294967295… entonces, da aproximadamente 71 minutos como máximo para el intervalo de sueño profundo. Es por eso que hago dormir l'ESP muchas veces durante unos 60 minutos …

EDITAR - 2018-08-10:

Descubrí que el servo tiene muchos movimientos espasmódicos, especialmente antes de la conexión (), la separación () y cada vez que Lolin se despierta de deepSleep ().

Mientras estudiaba un poco más de hojas de datos, me di cuenta de dos cosas:

  • En la hoja de datos de Lolin, la salida D4 ya está conectada con el BUILTIN_LED …
  • En la hoja de datos ESP8266ex, aprendemos que la salida D4 se usa como UART 1 / U 1 TXD (Transmisor de receptor asíncrono universal). También se especifica que este UART1 se utiliza para imprimir el registro.

Al leer esta información, me di cuenta de que la salida D4 no era una buena idea, ¡especialmente para administrar un servomotor!

Entonces, ahora la salida utilizada para controlar el servomotor es D2, el código a continuación se ha actualizado en consecuencia.

//****************************************

Fecha de creación: 08 / Fecha de puesta en marcha: 08 / Versión: 0.9.4 Versión IDE Arduino: 1.8.6 Velocidad de carga: 921600 Tipo de carte dans l'IDE: "LOLIN (WEMOS) D1 R2 & mini" Carte physique Employée: LOLIN (WEMOS) D1 R2 y mini (https://www.amazon.fr/gp/product/B01ELFAF1S/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) Pin Función ESP-8266 Configuración regional de utilización de pin ------- -------------------------------------------------- ------------------------------------ TX TXD TXD RX RXD RXD A0 Entrada analógica, entrada máxima de 3,3 V A0 Tension d'alimentaion D0 IO GPIO16 Connecté à RST (pour le deep.sleep) D1 IO, SCL GPIO5 D2 IO, SDA GPIO4 Servo motor D3 IO, 10k Pull-up GPIO0 D4 IO, 10k pull-up, BUILTIN_LED GPIO2 D5 IO, SCK GPIO14 Reed relève D6 IO, MISO GPIO12 Reed lettre D7 IO, MOSI GPIO13 Reed colis D8 IO, 10k pull-down, SS GPIO15 G Ground GND 5V 5V - 3V3 3.3V 3.3V RST Reset RST Connecté à D0 (pour le deep.sleep) *************************************** / #include bool Logs = true; // wifi const char * ssid = "LOL"; const char * contraseña = "LOL"; Dirección IP ip (192, 168, 000, 000); IPAddress dns (192, 168, 000, 000); Puerta de enlace IPAddress (192, 168, 000, 000); Subred de dirección IP (255, 255, 000, 000); Cliente WiFiClient; // Servo #incluir #definir PIN_SERVO D2 Servo myservo; // Posición del servo para: 7h, 8h, 9h, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h, 19h, 20h, 21h int Arr_Servo_Pos = {179, 175, 165, 150, 135, 120, 102, 82, 63, 43, 30, 15, 1, 1, 1}; // Cañas #define PIN_SWITCH_OUT D5 byte Old_Switch_State_OUT; byte Switch_State_OUT; #define PIN_SWITCH_IN_PARCEL D6 byte Old_Switch_State_IN_PARCEL; byte Switch_State_IN_PARCEL; #define PIN_SWITCH_IN_LETTER D7 byte Old_Switch_State_IN_LETTER; byte Switch_State_IN_LETTER; switchPressTime largo sin firmar; const unsigned long DEBOUCE_TIME = 200; // Analógico #define PIN_ANALOG A0 // MQTT #include const char * MQTT_Server_IP = "Su dirección MQTT"; const int MQTT_Server_Port =; int IDX_Letter_Box =; int IDX_Parcel_Box =; int IDX_Letter_Box_Battery =; PubSubClient ClientMQTT (cliente); char MQTT_Message_Buff [70]; String MQTT_Pub_String; // Tension float vcc; // NTP #include time_t tnow; int Old_Time = 0; int Int_Heures = 0; int Int_Minutes = 0; int Int_Sleep_Duration = 63; configuración vacía () {Serial.begin (115200); red (verdadero); pinMode (PIN_SWITCH_OUT, INPUT_PULLUP); Old_Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); pinMode (PIN_SWITCH_IN_LETTER, INPUT_PULLUP); Old_Switch_State_IN_LETTER = digitalRead (PIN_SWITCH_IN_LETTER); pinMode (PIN_SWITCH_IN_PARCEL, INPUT_PULLUP); Old_Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); SendBatteryLevel (); red (falso); // NTP set tnow = time (nullptr); Int_Heures = String (ctime (& tnow)). Substring (11, 13).toInt (); Int_Minutes = String (ctime (& tnow)). Substring (14, 16).toInt (); // Duerme profundamente por la noche si (! ((Int_Heures> = 7) && (Int_Heures <= 20))) {Serial.print ("Duerme para la noche ("); Serial.print (Int_Sleep_Duration - Int_Minutes); Serial. println ("minutos)"); dormir (Int_Sleep_Duration - Int_Minutes); }} void loop () {// NTP set tnow = time (nullptr); Int_Heures = String (ctime (& tnow)). Substring (11, 13).toInt (); Int_Minutes = String (ctime (& tnow)). Substring (14, 16).toInt (); //Serial.println(String(ctime(&tnow))); //Serial.println ("Heure:" + String (ctime (& tnow)). Substring (11, 13)); //Serial.println (String (ctime (& tnow)). Substring (11, 13).toInt ()); // Gestión de servos if (Old_Time! = Int_Heures) {Old_Time = Int_Heures; if (Int_Heures == 7) {if (Logs) Serial.println ("Posicionar el servo para 7 Heure"); myservo.attach (PIN_SERVO); for (int index = Arr_Servo_Pos [(sizeof (Arr_Servo_Pos) / sizeof (Arr_Servo_Pos [0])) -1]; index 7 && Int_Heures = Arr_Servo_Pos [Int_Heures-7]; index -) {if (Registros) Serial.println (índice); retraso (200); myservo.write (índice); } retraso (15); myservo.write (Arr_Servo_Pos [Int_Heures-7]); // escribe de nuevo el último valor para evitar movimientos bruscos al separar myservo.detach (); } red (verdadero); SendBatteryLevel (); red (falso); }}} // Duerme si es sábado después de las 13h if ((String (ctime (& tnow)). Substring (0, 3) == "Sat") && (Int_Heures> = 13)) {if (Logs) Serial.print ("Sleep pour le samedi aprés midi ("); if (Registros) Serial.print (Int_Sleep_Duration - Int_Minutes); if (Registros) Serial.println ("minutos)"); dormir (Int_Sleep_Duration - Int_Minutes); } // Duerme profundamente si es domingo if (String (ctime (& tnow)). Substring (0, 3) == "Sun") {if (Registros) Serial.print ("Dormir pour le dimanche ("); if (Registros) Serial.print (Int_Sleep_Duration - Int_Minutes); if (Registros) Serial.println ("minutos)"); dormir (Int_Sleep_Duration - Int_Minutes); } // Gestión de cañas Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); if (Switch_State_OUT! = Old_Switch_State_OUT) {if (millis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); if (Switch_State_OUT == HIGH) {Serial.println ("courrier relevé!"); red (verdadero); retraso (5000); MQTT_Pubilsh (IDX_Letter_Box, 0, "0"); retraso (5000); MQTT_Pubilsh (IDX_Parcel_Box, 0, "0"); retraso (5000); red (falso); }} Old_Switch_State_OUT = Switch_State_OUT; } Switch_State_IN_LETTER = digitalRead (PIN_SWITCH_IN_LETTER); if (Switch_State_IN_LETTER! = Old_Switch_State_IN_LETTER) {if (millis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); if (Switch_State_IN_LETTER == HIGH) {Serial.println ("¡mensajero arrivé!"); red (verdadero); retraso (5000); MQTT_Pubilsh (IDX_Letter_Box, 1, "Courrier"); retraso (5000); red (falso); }} Old_Switch_State_IN_LETTER = Switch_State_IN_LETTER; } Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); if (Switch_State_IN_PARCEL! = Old_Switch_State_IN_PARCEL) {if (millis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); if (Switch_State_IN_PARCEL == HIGH) {Serial.println ("colis arrivé!"); red (verdadero); retraso (5000); MQTT_Pubilsh (IDX_Parcel_Box, 1, "Colis"); retraso (5000); red (falso); }} Old_Switch_State_IN_PARCEL = Switch_State_IN_PARCEL; }} void SendBatteryLevel () {retraso (5000); vcc = analogRead (PIN_ANALOG) /10.24; if (Registros) Serial.println ("\ tTension relevée:" + String (vcc, 0)); MQTT_Pubilsh (IDX_Letter_Box_Battery, 0, String (vcc, 0)); retraso (5000); } void sleep (int Min_Duration) {ESP.deepSleep (Min_Duration * 60e6); } void network (bool UpDown) {if (UpDown) {Serial.print ("Inicio de red"); WiFi.forceSleepWake (); retraso (1); // init WIFI WiFi.config (ip, dns, puerta de enlace, subred); WiFi.begin (ssid, contraseña); while (WiFi.status ()! = WL_CONNECTED) {retraso (500); Serial.print ("."); } retraso (5000); Serial.println ("."); Serial.print ("\ tConnectado - Dirección IP:"); Serial.println (WiFi.localIP ()); // init MQTT ClientMQTT.setServer (MQTT_Server_IP, MQTT_Server_Port); // Iniciar NTP Serial.print ("\ tTime Synch."); configTime (0, 0," fr.pool.ntp.org "); setenv (" TZ "," CET-1CEST, M3.5.0, M10.5.0 / 3 ", 0); while (tiempo (nullptr) <= 100000) {Serial.print ("."); Delay (100);} Serial.println (".");} Else {Serial.println ("Parada de red"); WiFi.disconnect (); delay (1000); WiFi.mode (WIFI_OFF); delay (1000); WiFi.forceSleepBegin (); delay (1);}} void recnect () {while (! ClientMQTT.connected ()) {Serial.print (" / tAttempting MQTT connection… "); // Intente conectarse si (ClientMQTT.connect (" ESP8266ClientBAL ")) {Serial.println (" conectado ");} else {Serial.print (" falló, rc = "); Serial.print (ClientMQTT.state ()); Serial.println ("inténtalo de nuevo en 5 segundos"); // Espera 5 segundos antes de reintentar el retraso (5000);}}} void MQTT_Pubilsh (int Int_IDX, int N_Value, String S_Value) {if (! ClientMQTT.connected ()) reconnect (); vcc = analogRead (PIN_ANALOG) /10.24; Serial.println ("\ tEnviar información a MQTT…"); MQTT_Pub_String = "{" idx / ":" + Cadena (Int_IDX) + ", \" Batería / ":" + Cadena (vcc, 0) + ", \" nvalor / ":" + N_Value + ", \" svalue / ": \" "+ S_Value +" / "}"; MQTT_Pub_String.toCharArray (MQTT_Message_Buff, MQTT_Pub_String.length () + 1); ClientMQTT.publish ("domoticz / in", MQTT_Message_Buff); ClientMQTT.disconnect (); }

Paso 11: Domoticz

Domoticz
Domoticz
Domoticz
Domoticz
Domoticz
Domoticz

En Domoticz:

Para uso general:

  • Cree dos "Dummy (no hace nada, utilícelos para conmutadores virtuales)":

    1. El primero de las letras …
    2. El segundo para paquete …
  • Para cada uno de ellos, personalice las notificaciones;
  • Por supuesto, necesita configurar su token de Tegegram.

Opcionalmente:

Puede agregar un "sensor de utilidad" para supervisar el nivel de carga de la batería.

Consejos: aquí puedes encontrar muchos iconos personalizados gratuitos …

Paso 12: Conclusión

Conclusión
Conclusión
Conclusión
Conclusión

Espero que este Instructable te ayude:

  • si desea hacer su propio buzón conectado;
  • ¡o simplemente para darte algunas ideas para tus proyectos!

Si tiene ideas para mejorar, ¡le escucho!

PD: lo siento por mi inglés, la traducción de Google me ayuda mucho pero probablemente no sea perfecta;-)

Recomendado: