Domotizacion de finca.

Buenos días,
Me gustaría hacer un proyecto de comunicación para una finca agrícola en Arduino.
Os voy a describir mis necesidades, para que me aconsejéis sobre el hardware que tengo que elegir. La elección de los elementos es fundamental para que el proyecto funcione bien y no tenga problemas, por lo que os pido consejo en ese aspecto.
Estoy empezando con el lenguaje Arduino y he estudiado lenguaje C++ en la universidad.

1.- Descripción del entorno.
Es una finca en una zona montañosa en granada, clima templado y precipitaciones típicas de la zona mediterránea.
Distancia de Arduino central a estación meteorológica 350 m, visibilidad entre antenas mas o menos buenas pocos obstáculos
Distancia entre Arduino central a depósitos unos 350 m, visibilidad ente antenas más o menos, pero puede haber obstáculos
Distancia ente Arduino central y pozo, unos 10 m , Visibilidad entre antenas más o menos buena.

2.- Descripción de las necesidades.

A. Un Arduino central, que recibirá los datos de diversos sensores o Arduinos que recibirán señales. ES
A.- Toma de datos meteorológicos y archivo de los mismo. (Anemómetro, barómetro, radiación, dirección del viento, termómetro.). Dichos sensores irán conectados a un Arduino que se situara encima de una estructura de paneles solares, que esta situada en el punto mas favorable para tomar esos valores climáticos. Eso Arduino se montará en una caja estanca. Todo se alimentará de un panel solar de 50 W o menos y una batería. Ese Arduino que, recibida esas señales, las transmitirá a un Arduino central que mencionare más adelante. Necesito un transreceptor de Arduino para distancia de 1 km o menos, pero que sea robusta la señal y no se afecte por posibles obstáculos. Mejores bandas por debajo de 1 Ghz. Si los sensores pueden funcionar sin Arduino mejor, pero lo dudo, creo que por cada grupo de sensores necesitare un Arduino para enviar o recibir.

B.- Toma de niveles de depósitos. Necesito tomar los niveles de 2 depósitos mediante un sensor ultrasónico Watherproof JSN-SR04T un Arduino y un módulo de transmisión de datos a menos que lo pueda hacer sin Arduino.

C.- Toma de niveles de pozo. Para tomar el pozo, necesito arrancar un compresor de aire de unos 1500W, ósea 10 A, para ello he pensado un relé estado sólido, pero no se marca ni modelo compatible con Arduino. Una vez que arranque, el sistema, al poco tiempo 1 minuto, que es cuando se cargara el calderín, parara el compresor y medirá la presión en el circuito de aire comprimido. Ese valor se transmitirá al Arduino central. Necesito consejo sobre el transductor a emplear. Mejor whatherproof ya que el aire comprimido genera humedad y rango de presión de 0 a 4 ó 5 bar. También necesita tomar el valor de un variador de frecuencia, que hay en el pozo. El variador es autónomo y lleva unas sondas de nivel que dan ordenes de arranque o paro, pero no quiero leer el valor de las sondas, porque es posible que las sondas “ pidan agua” pero no tiene porque haber funcionado (Averías, paradas intencionada del variador etc) tendría que ver si ver si en las bornas de salida del variador hay tensión por ej, o bien ver si el variador puede darme una señal de salida de marcha para recoger el valor de esa señal

D. Un Arduino maestro, recogerá los valores de todos esos sensores y Arduinos repartidos por la finca, y los guardara. No se si se podrán enviar dichos valores por internet y consultarlos en alguna página web. Hay router 3g, por lo que la conexión seria por conector RJ45.
Es fundamental guardar dichos valores en una tarjeta SD.
También me gustaría saber algún tipo de pantalla, que se situara junto al Arduino maestro y nos mostrara niveles, condiciones meteorológicas, estado de señales, etc.
El sistema debe ser ampliable, es decir pienso poder actuar sobre el ordenador de riego o sobre el variador (el variador tiene entradas configurables que permite arrancar o cambiar velocidad de funcionamiento etc.)

Necesito mucho tiempo para implementar esto y sobre todo consejo sobre el modo de realizarlo todo.

Muchas gracias.

Tienes basicamente dos opciones : nRF24L01 con antena usando una Red MESH para hacer retransmisiiones y evitar obstáculos o LoRA.

Ambos dispositivos te garantizarán un buen funcionamiento, solo que debes lograr visión optica entre ellos siempre por eso hablo de una red MALLA o MESH que USA los dispositivos intermedios para que el master logre comunicarse con aquel nodo que no tiene alcance directo con el.

No importa entonces la topologia, puedes colocar nodos redundantes para mejorar la conectividad.

Este es el punto mas importante, el resto se va logrando con tiempo y trabajo, mucho trabajo.

Yo hice algo parecido para un Catalan pero no pudimos terminarlo porque el subestimó los tiempos y sus habilidades. Te pido que comiences por lo mas importante que es justamente esto.
1100 Meter Long Distance NRF24L01+PA+LNA Wireless Module With Antenna

Este sería un posible caballito de batalla. Mi recomendación es que compres 3. No mas para una prueba.
Ojo es importante que mantengas el proveedor porque hay variaciones en las placas.
Lee siempre bien los comentarios de la gente y si tiene Muchas Ventas, lo que te asegura que es un producto confiable, luego si falla no hay forma de reclamar salvo excepciones.

Ese es un ejemplo, yo no lo he comprado ni lo recomiendo, es el primero que apareció en la búsqueda.

Estas radios deben ser alimentadas con 3.3V y proveerles al menos 250mA, con un buen capacitor electrolitico entre sus bornes GND y Vcc evitas problemas en los momentos de transmisión. No olvides eso!!
Puedes usar el Arduino para alimentarlo pero considera que no debes superar 350mA en total con el Arduino. Si sumas reles y otros sensores, y llegas a este máximo, entonces mejor usar fuente externa que provea los 3.3V necesarios.
Recuerda que son 3.3V y no puedes usar los 3.3V del Arduino. Siempre hablo de que uses un regulador LDO conectado a los 5V del Arduino.

Todo esto mismo puede hacer con LoRA que tiene mas alcance

3Pcs Smart Electronics SX1278 LoRa Ra-02 Spread Spectrum Wireless Module / Ultra Far 10KM / 433M

Ambos estan muy bien soportados. LoRA es mas actual y el nivel de opciones en software es excelente.

Las librerias para nRF24 que recomiendo son las de Tmrh20. Busca Tmrh20 Mesh (en este mismo foro gepd en su momento generó un tutorial).

Muchas gracias por la respuesta.
Todo consejo sera util. Estoy empezando con esto y tengo que cacharear.
El "C" de hace 20 años lo tengo olvidado, y tengo que empezar de nuevo.

Yo estaba buscando un transreceptor que no necesitara una vision optima.
He visto estaciones meteorologicas y medidores de consumo domestico para hacer auditorias energeticas cuyos sensores se comunican por debajo de 1Ghz. Es mas robusta la señal pero tiene menos ancho de banda.
Creo que parar lo que necesito, no me hace falta un ancho de banda grande. Son pocos datos.
Tengo ademas diversas camaras wifi por la finca y no me gustaria interferencias en la banda de 2.4 Ghz y encima modulos chinos.
Por eso creo que es mejor probar con el Lora.

No se si hay mas alternativa al Lora.

Un saludo,

No hay ancho de banda rápido en lo que te comento.
El nRF24 puede comunciarse a 2MBpbs, 1MBps pero a distancias largas soloa a 250Kbps al igual que el LoRA. si encuentras otra opcion, avisa, no la hay que yo sepa.

Buenas tardes.
Me asalta una duda
es la calidad del hardware de arduino existente en el mercado.
Si los componentes no son suficientemente precisos, en su medicion y son un poco cachondeo (me refiero a sondas sensores de humedad, temperatura, medidores ultrasonicos etc. ) no va a poder hacerse un montaje fiable y seguro.

Me gustaria sabe que opinais de la calidad de los componentes auxiliares para arduino.

Un saludo.

He tenido una idea, para mejorar la fiabilidad y estabilidad de la medida.
El ultrasonico me observado que fluctua mucho, pero he pensado en tomar 10 medidas y sobre esas 10 medidas calcular el valor medio, de este modo el posible error de medida queda amortiguado en cierta medida.
Que pensais?

Si los componentes no son suficientemente precisos, en su medicion

Si compras cosas baratas obtienes resultados mediocres.
Si quieres cosas precisas entonces hay que gastar mas dinero.

La pregunta es, que quieres medir con precisión y para qué?
Saber si la tierra esta o no húmeda no requiere de gran precisión, es solo determinar si hay que regar o no. Asi que se tolera una falta de precisión aunque no algo que sea horriblemente malo. El sensor que se suele vender para el uso de medición de humedad de suelo no mide mal, su problema (y ha sido muchas veces debatido en el foro asi que busca al respecto) es que se oxida si lo chequeas permanentemente, asi que como conclusión de dichos debates a los que refiero, lo que se sugiere es que no este alimentado sino cuando se requiere medir la humedad de suelo y eso será cada X minutos... 30 min o 1 hora, quieres medir mas seguido... asi será la vida util del sensor. Es barato de modo que lo reemplazas y ya.

Que otro sensor?
temperatura los que yo he usado funcionan muy bien. Si los consultas seguido como dije antes... y bueno, te darán todo tipo de fluctuaciones. Debes comprender que las magnitudes físicias no cambian a cada instante asi que hay que bajar los decibeles de la paranoia de medir cada 1 seg y pasar a hacer lecturas mas espaciadas.

Medidores ultrasonico
No se donde lo usarás. La lectura de un tanque por ejemplo. Sera bastante buena si no entra agua. Si entra agua habra olas y el sensor dará las lecturas que tu mismo darias si estuviaras con algo que permita leer el nivel. Asi que una vez mas lo dicho antes.

En conclusión, los sensores disponibles antes razonablemente bien.

La establildad la logras muestreando y promediando. El promedio simple a mi no me gusta, me gusta el promedio móvil (esta debatido tmb en el foro).
Busca Luis Llamas promedio móvil en Google, puedes tener hasta 200 muestras promediadas sin perder velocidad de respuesta.

Por favor, no uses delay() en nada de lo que encares, porque ese si que será un gran problema cuando tu código crezca.

Ve a Documentación => Indice de temas tutoriales => millis()

Buenas tardes.
Quizás me equivoque o no lo estoy haciendo bien.

Voy poco a poco con este asunto, que después se complicara cada vez más. Mi problema por ahora es el sensor ultrasónico.
Veo que me hace lecturas muy dispares. Puede ser ruido o puede ser un mal sensor.
No se diferenciar los buenos de los malos. Todos se parecen todos son copias unos de otros. Soy consciente de la importancia de buenos componentes para tener buenos resultados. No podemos obtener buenos resultados con componentes malos.
Por ejemplo, pongo el sensor en la mesa apuntando al suelo y me da lecturas de 45/50 cm aunque hay veces que sin variar nada me da 60 cm y otras sin motivo me da menos. La lectura real son 67 cm medidos con metro.
El sensor tiene un conversor analógico digital, por lo que el IDE lo alimenta con +5 v y GND y 2 señales digitales son las entradas y salidas con las que se comunica.

sobre el modo de medir por una parte he creado una función que he llamado ultrasonico() que ese encarga mediante una condición if de hacer una medida cada 5 segundos, incluso estoy pensando en poner las tiempo No necesito hacer tantas medidas. Se trata de un deposito que tarda mucho en llenarse y vaciarse de 5 o 6 m de altura.
El valor obtenido es cierto que la mayor parte de las veces es estable y solo unas pocas veces da medidas raras.
He empleado la fórmula de valor móvil pero no me funciona, me da un valor 4 veces más bajo.
También he empleado la librería de Luis Llamas promedio móvil para estabilizar el valor, pero creo que solo se puede emplear para entradas analógicas no digitales.
Solo amortiguo el resultado si sumo unos cuantos valores y lo divido por el numero de muestras, es decir un valor medio puro y duro pero el ruido afecta al valor medio.
El caso es que no me funciona o no quizás no lo hago bien la formula del valor movil.
Tampoco hay delay. Estoy empleando millis () y condición if para tomar menos lecturas.
por eso quería preguntar por una parte si sabéis si se puede calibrar el Angulo de apertura del sensor o tendría que hacer algún tipo de pieza cónica impresa en 3d para ajustar el angulo de apertura.
Respecto a la sensibilidad, el sensor tiene una resistencia variable en la parte trasera que no se si se debería trastear o menor dejarla asi.
Respecto al algoritmo de medición, respecto al software se supone que emitimos un ultrasonido durante un periodo de 10 microsegundos y después escuchamos el tiempo que tarda en regresar y en función del tiempo se calcula la distancia.
La cosa es que en el software hay 2 parámetros de tiempo de escritura y lectura que al menos yo lo tengo en 10 Microsegundos y no se si hay que tocar.

Pero el primer paso es saber si saber si estoy empleado un buen sensor y o no y no como se puede saber eso.

Este es el sensor que he empleado.

ARCELI DC 5V Módulo de Sensor transductor de medición de Distancia por ultrasonidos Impermeable

Por último decir que tendré que alargar el cable, creo que no debe suponer problemas el alargarlo 5 o 6 metros ya que se trata de señales digitales y bajo consumo.

Un saludo.

Por ejemplo, pongo el sensor en la mesa apuntando al suelo y me da lecturas de 45/50 cm aunque hay veces que sin variar nada me da 60 cm y otras sin motivo me da menos. La lectura real son 67 cm medidos con metro.

Qué sensor?

Si es un sensor ultrasonico no hay nada pero nada que use un ADC. Se envia un pulso y se espera el eco. Se mide el tiempo y como es función de la velocidad del sonido entonces se calcula la distancia como la mitad del tiempo transcurrido teniendo en cuenta la velocidad del sonido por supuesto.

El sensor no es la maravilla pero funciona bien. Si lo tienes algo inclinado rebota por cualquier lado. Si le pones un objeto delante como una placa y la vas desplazando verás que mide correctamente. Ahora si la placa la pones en un angulo que no sea ortogonal a la dirección del sensor ultrasónico (no es 90grados) entonces comenzara a medir mal.

Se trata de un deposito que tarda mucho en llenarse y vaciarse de 5 o 6 m de altura.

Depende que sensor ultrasónico uses 5 o 6 metros no son medibles por cualquier sensor. Asi que ahi tienes ya un problema.

ambién he empleado la librería de Luis Llamas promedio móvil para estabilizar el valor, pero creo que solo se puede emplear para entradas analógicas no digitales.
Solo amortiguo el resultado si sumo unos cuantos valores y lo divido por el numero de muestras, es decir un valor medio puro y duro pero el ruido afecta al valor medio.
El caso es que no me funciona o no quizás no lo hago bien la formula del valor movil.

Esta claro que el promedio funciona cuando tienes valores que tienden a converger en un punto pero si tienes valores dispares, dará cualquier cosa, como lo que obtienes. Simple, no se pueden hacer milagros. Es como si tu vieras a cualquier lado y me dijeras.. hay 30 40 100 mts .. y dime como se que estas mirando? imposible.
Primero tienes que lograr estabilidad en tu lectura. Cómo es el tema.

Respecto a la sensibilidad, el sensor tiene una resistencia variable en la parte trasera que no se si se debería trastear o menor dejarla asi.

De nuevo, de qué sensor hablas?

Al fin apareció de qué sensor hablas.. No era mas fácil ponerlo al comienzo de la charla, descriptiva.

A ver.. olvida lo anterior porque empecé a suponer un sensor y veo que es otro.

NOTA: los enlaces van con etiquetas. ya te pedí que leas las normas, ahora edita ese enlace por favor
En la descripción que tu mismo pones dice

Distancia más lejana: 4,5 m.
Tiene un código que no es el habitual si mal recuerdo.. había que cambiar algo en un punto del código para que funcione bien.

veré si lo encuentro.

Buenas noches.

Para mejorar la comunicación e ir haciendo pruebas he comprado un Shield ethernet que le conecto al arduino uno que es el receptor y el emisor es un mega.
cada arduino tiene un transreceptor nlf24.
Se comunican perfectamente, pero he querido añadir un shield ethernet al receptor para cablear la salida de datos hacia un swich.
La cosa es que después de muchas pruebas y ver que el Nlf24 con va con el Shield w5100 he investigado y veo que no es compatible el shield y el nlf24 porque el shield emplea el bus SPI, el mismo que el ethernet.

Al fin y al cabo el módulo nlf24 me da igual porque es un medio de hacer pruebas inalámbricas, pero tengo pendiente recibir un LoRA SX1278 y veo que se comunica con el bus SPI , por lo tanto me veo restringido por culpa del Shiel ethernet.
alguna idea de como usar el Shield ethernet y el bus spi para otros dispositivos a la vez?

Un saludo

Bueno, me contesto a mi mismo, por si alguien que llega hasta aqui leyendo se encuentra con el mismo problema.

Segun parece, es posible cambiar el uso de los pines asignados al bus SPI mediante software aunque parece que relentiza el flujo de datos.

Aqui adjunto la fuente.

Tambien he visto dispositivos Lora que utilizan el bus I2C por lo tanto usando esta opcion, no existe conflicto ni relentizacion.

Un saludo.

un saludo,

Lo mismo que se hace con el I2C se puede hacer con el SPI. Solo hay una pega, es que se necesita un pin CS (chip select) o SS para cada esclavo del bus.

El arduino ofrece un control hardware sobre el pin que actua de CS, que generalmente usan las librerias que de varios dispositivos.

En el shield ethernet no tengo ni idea, pero la libreria del NRF24 si la he usado y te digo que trae la opción de elegir tu propio pin CS. Así que en teoria si podrías usar ambos modulos en el mismo bus.

No se ralentiza en tanto y en cuanto en tu código no uses delay().
No hay razón para que algo demore salvo los tiempos de algunos sensores pero hoy encuentras librerias llamadas non-blocking que ni eso resulta una limitante.

Para dar un ejemplo concreto: el DHT22 es un sensor de temperatura y humedad muy usado pero su consulta demora 2 segundos en la gran mayoría de las librerías salvo 1 o 2 que son NON-BLOCKING o sea no frenan el flujo del programa.

Respecto al tema de la adquisicion de datos, estoy a punto de descartar el medidor ultrasonico por las siguientes razones:

1-Es un sistema que tiene que ser un ultrasonico fiable y con un angulo de apertura correcto y proporcional al diametro del deposito y altura para que la onda ultrasonica solo rebote por el fondo y no por las paredes.

2.- Las olas del flujo de entrada salida pueden afectar a la lectura.

Por todo ello he pensado que voy a usar un trasductor de presion. Aportan un señal fiable y sin oscilaciones. Dan una señal en voltaje proporcional a la altura.

1m.c.a (1 metro de columna de agua ) aprox igual 1 Kg/cm2; 10.2 mca= 1 bar..

Ojo con el diamerto de salida, porque si se acelera mucho la velocidad baja la presion y falsifica la medida. y habria que medir cuando no hay demanda de agua, o corregir la medida o tomar la señal en un punto del fondo del deposito que no se afecte por el flujo de salida.

Por lo tanto en la salida de un deposito se pone un collarin y un transductor de presion, del rango de presion correcto y listo y sin tantas correcciones.
Para un deposito de 6 m de altura se debe emplear un trasductor de 10 PSI aproximandamente.
Lo que desconozco es el comportamiento a largo plazo del transducto con las calcificaciones. Supongo que si esta relleno de silicona o gliceria ayudaran. Tambien ayudara la calidad de los materiales, pero he visto sensores economicos y mas fiables que a traves de ultrasonico.

Cuando tenga decidido uno y lo pruebe pongo el enlace y os cuento.

Saludos.

Tienes que usar un sensor de presión diferencial.
Una boca mira la atmósfera y la otra conectada donde has dicho. Asi es como muchos medimos el nivel de tanque. El Ultrasónico funciona cuando es de buena calidad. Mi hermano tiene un sensor Massa M-300 que anda muy bien. Yo tmb lo tengo y lo he hecho funcionar aprovechando su salida analógica pero no le he puesto tiempo para medir su salida RS485 que mejora notablemente las lecturas.
Puedes corregir muchas cosas pero como dije es un sensor semi-industrial. Gama media digamos.

Buenas.
Aquí vuelvo para pedir ayuda y comentar algunos avances. Para saber la altura del deposito en vez un ultrasonido, voy a usar un transductor de presión que da una señal 0-5 v en función de la altura del agua. Se conecta a la parte baja del deposito. La presión oscila entre 0 bar y 0.5 bar y el sensor llega a 0.6 bar asi que perfecto. Aqui articulo

Respecto a el sensor barométrico voy a usar este:
BME280 Aqui articulo que mide humedad , presion y temperatura. He probado y son bastante estables en la lectura.

Respecto a pluviómetro es este articulo : Aqui
Tiene un pequeño cubeto de 0.27 ml. cuando se llena genera un pulso. Contando y sumando los pulsos,podemos saber cuanto ha llovido.

Para comunicar 1 de los Arduinos que estará alejado, he probado a usar un modulo LoRa Sx1278. y
aqui entro en mi problema. Aqui articulo por si interesa a alguien.

Resulta que hace muchos años que estudie C++ y he perdido practica y conceptos. No quiero usar punteros. Resulta que con las pruebas iniciales que hice con el modulo nRF24L01, las funciones ya escritas de las librerías permiten enviar de un módulo a otro un Array del tipo que sea por ejemplo Float.
En este proyecto va a haber varios Arduinos, calculo que 3 enviado datos y uno recibiendo los datos y subiéndolos a Internet

La idea es que cada Arduino envíe un Array de números. El primer numero del Array sera el identificador del emisor, así el receptor sabrá quien envía y donde almacenar esos datos.
El caso es que los números a enviar son números flotantes con coma y las librerías que he visto en Internet y he buscado eh......, solo admiten como mucho Arrays de Bytes, por lo que pierdo mucha información.
Una opción es olvidar la parte de la coma y redondear lo que me parece una chapuza.

Para mandar caracteres no hay problema. se puede enviar un Char sin problema, pero no puedo enviar un Array de Float.
He mirado en la librería <RadioLib.h> en <RadioHead.h> y en <LoRa.h>

En ninguna librería he visto alguna función para transmitir un Array Float.

También he visto vídeos en Internet y he leído algunos artículos pero me pierdo en alguno que por ejemplo usa un puntero para convertir Float con varios Bytes.
Quizás el tema este aquí, en usar varios Bytes para enviar un Float, pero no sabría como sin que la operación sea muy compleja.

¿Me podéis echar una mano?

Un saludo.

Dejame verlo y te digo como resolverlo.

Buenas,
Ya lo tengo mas o menos encarrilado.
La librería Radiolib.h, permite enviar un array de bytes.
El truco que estoy utilizando en esta librería es enviar el numero en distintos bytes. Parte entera en un byte, parte decimal en otro byte y signo en otro byte. Al final se recompone el numero en el receptor.

Esta libreria no la estoy utilizando porque al final la mas empleada es lora.h. Casi todos los ejemplos de internet la utilizan.

La librería lora.h, permite enviar un Char. El Char es un array. En esta librería el modo que empleo es redondear a 2 decimales primero , después multiplicar por 100 el numero, así lo tengo entero y le sumo una parte decimal que corresponde a la identificación de la estación. Ejemplo:
Quiero transmitir el número 1120.45 ,que es un dato de presión atmosférica y corresponde a la estación 02, que es como por ejemplo lo identifico. Multiplicamos por 100 el número y tenemos 112045 y le sumamos el 0.02, tenemos entonces 112045.02. Como tal lo trasmitimos como char.
En el receptor recibimos el número, convertimos el char en float, y hacemos la operación inversa. Es cuestión de cacharrear con números.

Ya tengo un emisor y un receptor funcionando y subiendo datos a thingspeak.

Ahora mi problema es depurar el programa, optimizarlo.
La verdad que aquí no se por dónde empezar. A ver si me podéis aconsejar.
También he empleado unos módulos basados en Esp32 que traen Oled integrado wifi y lora.
tipo TTGO ESP 32 Lora.

Funcionan, pero se cuelgan al tiempo. No se la causa segura de este cuelgue, mientras que los módulos Arduino aunque menos vistosos y potentes no se han colgado.

Estoy empleando como emisor un Arduino uno, y como receptor uno similar a uno con Ethernet integrado.
Este receptor al cargar el programa dice que la memoria está por encima del 65 %, sin embargo no se cuelga .
Usando un Mega va mucho más sobrado de memoria se queda en un 15 %.
En ambos casos no se cuelga el sistema como pasa con los módulos ESP32 chinos.
No sé si es el código o cual es el motivo.

He estado moviéndome con coche por el entorno del emisor con receptores ESP a una cierta distancia 1000 m o más y he observado que el cuelgue tiene relación con la falta de calidad de señal o bien una interferencia.

Aquí estoy algo perdido, no sé qué podría hacer para evitar que una interferencia cuelgue el receptor, aunque en Arduino aún no he visto cuelgues y en el modulo Esp aunque pegado al emisor he visto cuelgues aleatorios al tiempo.
Para visualizar lo que se recibe utilizo el serial.print. Muy de vez en cuando recibo una interferencia se llena toda la pantalla de caracteres ASCII. Es decir, en ese momento, el chart que recibe el dato, se llena y pienso que se desborda. Creo que esa puede ser una causa de cuelgue.
El modo de funcionar es que el receptor recibe todos los paquetes, se identifica la estación receptora y en función de esa identificación se ejecuta una acción determinada con el numero recibido.

He pensado en que cuando se recibe el char, si el dato no corresponde a ninguna estación conocida es un ruido y por tanto limpiarlo, haciendo : char="";
No sé si esto servirá.
Darme consejos por favor.

Un saludo,

Sigo aumentando el número de preguntas.
Una vez probado el prototipo, me han surgido una serie de inconvenientes. como no podía ser de otra manera, me refiero a la señal. Sé que con la señal Lora en cambio abierto no voy a tener problemas, pero para evitar perdida de paquetes, tengo intentar que exista visión directa más o menos. Eso implica poner la antena en un lugar elevado. He pensado poner el modulo Lora Sx1278 Ra-2 en una caja estanca en un mástil y el Arduino en el interior en un lugar donde no esté al exterior. sería un cable de unos 9 hilos, y apantallado para evitar interferencias. Es un dispositivo SPI, que es como se comunica. Os quería preguntar por vuestra experiencia. Sé que con la alimentación no va a ser un problema porque es un consumo muy bajo. el problema es la interferencia entre los cables de datos.
La distancia máxima serán unos 15 metros.

También os quería preguntar otra cosa. El recepto que subirá los datos a la nube, será un Arduino Mega con un Shield ethernet que me da menos problemas que una wifi y un esp32.
La pregunta es que para que quede bien montado voy a usar un Terminal Block Shield. El Terminal se monta sobre el Arduino y sobre el terminal ira un Shield Ethernet. Las placas terminal no suelen traer el conector ICSP, pero el Shield RJ45 si lo trae.
Me refiero al conector central que va en medio del Arduino y es de 6 pines macho. El modulo Lora ira conectado encima de todo.
El Terminal no tiene ese conector, y el Shield si se conecta.
La pregunta es. Si suprimimos ese conector pasa algo?
Dejara de funcionar el Shield ethetnet o el bus SPI?

Un saludo

Bueno ahora ya no tengo preguntas de hardware, sino de la programación.
Necesito ayuda con una parte concreta.

Resulta que recibo un paquete de datos en un string, "LoRaData"

Por lo tanto, si el valor recibido en strin vale por ejemplo "41902", corresponde a 4.19 es el valor del numero y la estacion es la 2.

Pues bien, en este caso la operación de conversión se hace mal, y me dice que es la estacion 1, cuando es la 2. Se que es un problema con el tipo de variables y redondeos.
A continuación os enseño el tipo de variables que uso y el metodo para convertir y separar las partes.

String LoRaData;  // datos que recibe de módem. 

int estacion;        //  numero de estación que me manda un dato.


LoRaData = LoRa.readString();   //hacemos igual el string a la cadena recibida. Recibimos el string.

float dato = LoRaData.toInt();  // esta funcion  redondea el string en un int y después convierte en un float el valor recibido 

int round (estacion= ((dato/100) - int(dato/100))*100);// esta parte resta la parte entera del numero a el numero entero con decimal. en el ejemplo se supone que debe restar a 419 el 419.02 para quedarnos con el 0.02 y despues multiplicarlo por 100 para llegar a 2.


if (dato>=0){estacion=estacion*1;}  // para que siempre sea positivo en numero de estación.
if (dato<0){estacion=-estacion;}      //  para que siempre sea positivo en numero de estación.

float valor=dato/10000;    //Aqui tenemos el valor recibido. En esta parte no hay problema.  El problema esta en la parte de la estacion, y es por el redondeo de los decimales, pero no consigo resolverlo.

Pido disculpas si no es el modo correcto de enviar el codigo, pero he querido explicar las cosas para que me podais indicar.

Por cierto, respecto a la pregunta del bus ICSP, que hice, os digo que si la shield no la lleva, mal asunto. No va a funcionar la Shield. Debe tenerlo.

Un saludo,