{"id":21722732,"url":"https://github.com/mcorts/meteoestacionlora","last_synced_at":"2025-09-20T10:08:19.694Z","repository":{"id":128775247,"uuid":"594510361","full_name":"McOrts/MeteoEstacionLoRa","owner":"McOrts","description":"Estación metereológica DIY con comunicaciones LoRaWAN TTN","archived":false,"fork":false,"pushed_at":"2023-10-23T17:49:38.000Z","size":3428,"stargazers_count":20,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-26T16:01:37.494Z","etag":null,"topics":["arduino","cubecell","dht22","estacion-meteorologica","heltec","lorawan","meteorologia","weather-station"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/McOrts.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-01-28T19:15:45.000Z","updated_at":"2024-11-14T13:41:41.000Z","dependencies_parsed_at":"2023-03-19T01:03:02.462Z","dependency_job_id":"787c67fe-81f4-4a07-9b59-1476a42b2ffe","html_url":"https://github.com/McOrts/MeteoEstacionLoRa","commit_stats":{"total_commits":13,"total_committers":1,"mean_commits":13.0,"dds":0.0,"last_synced_commit":"6aac5d56d8fe2ca3c57aff2390224f1252464ee8"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/McOrts%2FMeteoEstacionLoRa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/McOrts%2FMeteoEstacionLoRa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/McOrts%2FMeteoEstacionLoRa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/McOrts%2FMeteoEstacionLoRa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/McOrts","download_url":"https://codeload.github.com/McOrts/MeteoEstacionLoRa/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248637832,"owners_count":21137538,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","cubecell","dht22","estacion-meteorologica","heltec","lorawan","meteorologia","weather-station"],"created_at":"2024-11-26T02:32:27.685Z","updated_at":"2025-09-20T10:08:14.628Z","avatar_url":"https://github.com/McOrts.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Estación meteorológica autónoma LoRaWAN\nEstación metereológica DIY con comunicaciones LoRaWAN utilizando la red TTN Community.\n\n## Montaje\n### Material utilizado\n- Hemos utilizado la [placa Heltec HTCC-AB01](https://es.aliexpress.com/item/1005001288501966.html) para la banda ISM europea de 868MHz que tiene las siguientes características:\n  - Compatible con Arduino, por tanto compatible en Windows, Mac OS y Linux\n  - Configurable a través de comandos AT\n  - Chip CP2102 de puerto serie a USB integrado\n  - Basada en ASR605x (ASR6501, ASR6502) , esos chips ya están integrados el PSoC ®  4000 serie MCU (ARM® cortex® M0 + Core) y SX1262;\n  - Soporte de la especificación LoRaWAN 1.0.2\n  - Diseño de energía ultra bajo, solo 3.5uA en Deep Sleep. Para este tipo de proyecto, el consumo son muy importantes y aquí tenemos es tabla que ayudará a dimensionar la batería y el panel solar:\n   ![Consumos](./img/cubecell_htcc-ab01_power.png)\n  - Sistema de gestión de energía solar incluido, se puede conectar directamente con un panel solar de 5-7 V\n  - Conector SH1.25-2 para baterías incluido, sistema de administración de batería integrado (administración de carga y descarga, protección de sobrecarga, detección de energía de la batería, conmutación automática de energía de batería / USB)\n  - Interfaz micro USB con protección ESD (Electrostatic Discharge), protección contra cortocircuitos, blindaje RF y otras medidas de protección\n  - Buena correspondencia de impedancia y larga distancia de comunicación\n  - Certificación CE y FCC\n\n\u003cimg src=\"./img/boardAB01.png\" width=\"500\" align=\"center\" /\u003e\n\nPodremos encontrar toda la documentación de esta placa en: [Documentos y ficheros](https://resource.heltec.cn/download/CubeCell), [FAQs](https://github.com/HelTecAutomation/HeltecDocs/blob/master/en/source/cubecell/frequently_asked_questions.md) \n\n- [Batería de polímero de litio de 3,7V y conector JST SH1.0 de 1,0mm y dos pines](https://es.aliexpress.com/item/4000288987647.html)\n\n\u003cimg src=\"./img/Battery_LiPo37Vph2.png\" width=\"350\" align=\"center\" /\u003e\n\n- [Panel solar de 6V](https://es.aliexpress.com/item/4001128543657.html)\n\n\u003cimg src=\"./img/SolarPanel.png\" width=\"350\" align=\"center\" /\u003e\n\n- [Anemómetro WH-SP-WS01](https://www.amazon.es/Acfthepiey-WH-SP-WS01-Instrumento-velocidad-Meteorol%C3%B3gico/dp/B0C9Z6P5NY/ref=sr_1_1?__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91\u0026crid=3NNWOSQLM3LY2\u0026keywords=WH-SP-WS01\u0026qid=1698012410\u0026s=tools\u0026sprefix=wh-sp-ws01%2Cdiy%2C113\u0026sr=1-1)\n\n\u003cimg src=\"./img/WH-SP-WS01.jpg\" width=\"300\" align=\"center\" /\u003e\n\n- Sensor de temperatura y humedad DHT22 (3-Pin).\n  - [via Aliexpress](https://www.aliexpress.com/wholesale?catId=0\u0026initiative_id=SB_20220806101441\u0026SearchText=dht22)\n \n\u003cimg src=\"./img/DHT22.png\" width=\"300\" align=\"center\" /\u003e\n\n- [Carcasa hermética IP66](https://es.aliexpress.com/item/33060319519.html)\n\n\u003cimg src=\"./img/IP66_case.png\" width=\"400\" align=\"center\" /\u003e\n\nPor otra parte también se necesitarán otros componentes no electrónicos como cables, mini-protoboard...\n\n## Conexionado\n\n\u003cimg src=\"img/MeteoEstacionLoRa_bb.png\" align=\"center\" /\u003e\n\n## Montaje paso a paso\n\u003cimg src=\"./img/IMG_5076.png\" width=\"400\" align=\"center\" /\u003e\n\u003cimg src=\"./img/IMG_5077.png\" width=\"400\" align=\"center\" /\u003e\n\u003cimg src=\"./img/IMG_5078.png\" width=\"400\" align=\"center\" /\u003e\n\u003cimg src=\"./img/IMG_5080.png\" width=\"400\" align=\"center\" /\u003e\n\u003cimg src=\"./img/IMG_5082.png\" width=\"400\" align=\"center\" /\u003e\n\n## Programación y configuración\n### Configuración IDE Arduino\nLo para poder programar adecuadamente el dispositivo tendremos que configurar el entorno de programación de Arduino con las configuraciones de hardware y librerías de esta placa.\n1. Añadir la URL https://github.com/HelTecAutomation/CubeCell-Arduino/releases/download/V1.5.0/package_CubeCell_index.json a Preferences-\u003eSettings-\u003eAdditional boards:\n2. Añadir la librería de CayenneLPP. **Importante: versión 1.1.0**:\n3. \u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/lib_cayenne.png\"  align=\"center\" /\u003e\n\n4. Si aparece un aviso de instalar otras librerias con dependencias. Seleccionar opción de instalar todas:\n\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/library_dependencies.png\"  align=\"center\" /\u003e\n\n4. Añadir la librería del sensor de temperatura y humedad: DHT sensor library de Adafruit.\n\u003cimg src=\"./img/DHT22_lib_arduino.png\"  align=\"center\" /\u003e\n\n6. Seleccionar la tarjeta CubeCell HTCC-AB01 y configurar todos sus parámetros así:\n\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/arduino_board_setup_cubecell.png\"  align=\"center\" /\u003e\n\n### Subir el sketch de Arduino\nCon el cable conectado seleccionamos el puerto USB que nuestro ordenador haya asignado. Una vez compilado y cargado en el dispositivo. Abrimos el monitor serie para comprobar que log de actividad del programa es correcto.\n\n### Configuración del sensor en la nube (TTN)\n\nVamos a utilizar los servicios de The Things Network que es un servicio en la nube al que están conectados los _gateway_ libres de la las Comunidades TTN. \nLa ruta de la información es la siguiente:\n1. El sensor (_nodo_) transmite por radio con modulación LoRa el trama de datos que recibe el _gateway_\n2. Este _gateway_ está conectado a internet para retransmitir la trama, hora como paquete de datos.\n3. Los servidores de TTN decodifican el mensaje y ofrecen diferentes integraciones y _endpoints_ para que nuestras aplicaciones utilicen la información leída por los sensores.\n\nHay muchas variantes para implementar este enrutamiento. Para este se ha elegido estas configuraciones:\n- Dispositivo es del tipo OTAA (Over-The-Air Activation) un dispositivo final realiza un procedimiento de identificación con una red LoRaWAN, durante el cual se asigna una _DevAddr_ dinámica a un dispositivo final y las claves raíz se utilizan para derivar claves de sesión. Por lo tanto, _DevAddr_ y las claves de sesión cambian a medida que se establece cada nueva sesión.\n- Publicación del paquete de-codificado en una cola MQTT a la que nuestra aplicación está subscrita.\n\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/TTN_p1.jpg\" width=\"200\" align=\"left\" /\u003e\n\nEstos son los pasos a seguir empezando por acceder a la aplicación _back-end_ de TTN en esta URL: https://console.cloud.thethings.network/ en la que seleccionaremos nuestra región y luego nos loguearemos con nuestro usuario registrado.\n\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\n### Registro de la aplicación\nEn TTN los dispositivos (_devices_) iguales, se agrupan en una aplicación desde la cual serán registrados. por lo tanto, primero hay que añadir una aplicación:\n\nEn el formulario de alta de aplicación rellenaremos estos campos: \n- Para el _Application ID_, elige un identificador único, en minúsculas, puedes usar caracteres alfanuméricos peor no guiones ´-´ consecutivos.\n- Para  _Description_, elige la descripción que prefieras.\n- No hace falta poner nada en _Application EUI_ \n- Presiona _Create application_ para finalizar\n\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/TTN_p2.jpg\" width=\"250\" align=\"left\" /\u003e\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/TTN_p3.jpg\" width=\"250\" align=\"left\" /\u003e\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/TTN_p4.jpg\" width=\"300\" align=\"right\" /\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\nAparecerá ahora la página con la nueva aplicación añadida donde encontrarás un botón de _+ Add end device_ necesario para crear los dispositivos asociados. \n\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/TTN_app_created.png\" align=\"center\" /\u003e\n\n### Registro del dispositivo\nEn TTN un dispositivo (devide) representa la configuración de lo que también llama nodo (node) que a fin de cuentas es nuestro sensor. \nAl acceder al formulario de registro nos quedamos en la pestaña de _From The LoRaWAN Device Repository_ ya que estamos usando un microcontrolador conocido.\nAhora tenemos que seleccionar el tipo, modelo y marca de nuestro sensor tal y como aparece en la captura inferior. \n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/TTN_device.png\"  align=\"center\" /\u003e\n\nEl la casilla inferior vemos que pide una clave de JoinEUI que normalmente nos la daría el fabricante. Pero en nuestro caso utilizaremos una sencilla aplicación web para generarla:  https://descartes.co.uk/CreateEUIKey.html\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/Create_random_EUI.png\"  align=\"center\" /\u003e\n\nLo siguiente será generar las _DevEUI_ y _AppKey_ pulsando los correspondientes iconos de la derecha para que se genere automáticamente.\nFinalmente queda rellenar el _Device ID_ que será el nombre único de este nodo.\n\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/TTN_device_keys.png\"  align=\"center\" /\u003e\n\nFinalmente pulsaremos _Register en device_ para que, seguidamente aparezca la pantalla con la configuración de nuestro nuevo nodo.Aquí podremos ver los datos de configuración y parámetros que necesitamos por ser un dispositivo de tipo ABP. Y que tendremos que pasar al fichero de configuración settings.h que se cargará en el _sketch_ del IDE de Arduino.\n\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/TTN_device_created.png\"  align=\"center\" /\u003e\n\nPara poder copiar las _keys_ en el formato \"array\" que se requiere en el fichero de configuración: \"settings.h\" \nNota: hay que pulsar el icono \u003c\u003e de \"_toggle array formating_\" para tener el formato adecuado para este fichero.\n\n```cpp\n// LoRaWAN Configuration\n\n/* OTAA para*/\nstatic uint8_t devEui[] = { 0x70, 0xB3, 0xD5, 0x8E, 0xD0, 0x05, 0x99, 0xDA };\nstatic uint8_t appEui[] = { 0x9A, 0xC4, 0x08, 0x90, 0xC8, 0x4F, 0xA4, 0x33 };\nstatic uint8_t appKey[] = { 0x42, 0x0A, 0x60, 0x65, 0x83, 0x98, 0x75, 0x18, 0xEC, 0x46, 0xC7, 0x0A, 0x19, 0xD8, 0x21, 0x28 };\n\nuint16_t userChannelsMask[6]={ 0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000 };\nstatic DeviceClass_t lorawanClass = LORAWAN_CLASS;\n\n// Sensors params\n#define AnemPort GPIO0  // Digital pin connected to the anemomether\nvolatile int TurnsPulses; // number of turns of the anemomether\n#define DHTPIN GPIO3     // Digital pin connected to the DHT22 sensor\n\n// Devise location\nconst float latitude = 39.573;\nconst float longitude = 2.732;\nconst int alt = 20;\n\n// Other params\nfloat SensorId= 10.01;// Sensor  identifcator number \nconst int DutyCycle = 300000; // Transmision and reading period\n```\n\n### Formato de la trama\n\nDesde el menú vertical izquierdo accederemos al _Payload Formatters_ y la opción Uplink para definir cómo decodificar la trama de datos de nuestro mensaje LoRa que hemos establecido en el firmware. En nuestro caso hemos usado la librería CayenneLPP y esto es lo que aquí tenemos de seleccionar como tipo:\n\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/TTN_app_uplink_format.png\" width=\"400\" align=\"center\" /\u003e\n\nDe esta manera el mensaje MQTT que vamos a utilizar para leer los valores del sensor; será generado por backend de TTN en una estructura JSON perfectamente formateada que podemos encontrar en el código fuente en el fichero MeteoEstacionLoRa.ino:\n\n```json\n // Cayenne\n  lpp.reset();\n\n  lpp.addTemperature(1, temperature);\n  lpp.addRelativeHumidity(1, humidity);\n  lpp.addDigitalInput(1,TurnsPulses); \n  lpp.addAnalogInput(1,getBatteryVoltage());\n  lpp.addAnalogInput(2,SensorId);\n  lpp.addAnalogInput(3,cycles);\n  lpp.addGPS(2, latitude, longitude, alt);\n\n```\nDonde, además de lo odvio: temperatura, humedad, voltaje de la bateria y localización:\n- TurnsPulses: son las vueltas que han dado las cazueletas del anemómetro en 300sg (DutyCycle de la configuración)\n- SensorId: el código del identificador del sensor descrito en la configuración. (10.01 en el ejemplo).\n- Cycles: es un contador de ciclos de conexión, sube hasta 50 y luego desciende hasta 1. De manera que si se representa en una gráfica, mostrará una sierra que tendrá escalones si hay pérdidas de paquetes.\n  \n### Integración MQTT\nPor último necesitaremos las credenciales de acceso al broker MQTT que TTN nos ofrece como una opción de integración para poder suscribirnos a topic desde nuestra aplicación:\n\n\u003cimg src=\"https://github.com/McOrts/Anemometro_IoT_MQTT_KNX/blob/main/img/TTN_app_mqtt.png\" width=\"400\" align=\"center\" /\u003e\n\n**IMPORTANTE**: copia el password ahora porque una vez cerrada esta ventana. No tendrás opción a consultarlo.\n\nResultado final\n\u003cimg src=\"./img/EEMM_Micro_Sensor.jpg\" width=\"400\" align=\"center\" /\u003e\n\u003cimg src=\"./img/EEMM_Sobre_Invernadero.jpg\" width=\"400\" align=\"center\" /\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcorts%2Fmeteoestacionlora","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmcorts%2Fmeteoestacionlora","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcorts%2Fmeteoestacionlora/lists"}