
Amon Link
TilenTinta/Amon_Link
An open-source electronic designed for RF communication between a PC-based Ground Control system and the Amon drone

An open-source monitoring system designed for use in greenhouses, orchards or other agricultural environments
LoRa Node is an open-source printed circuit board by TilenTinta, from the TilenTinta/Greenhouse_LoRa_Node repository on GitHub, published under the MIT licence. It is a 2-layer board of 90 × 34 mm with 78 parts on 65 nets, routed with 571 tracks and 217 vias.
It is built around the STM32L151C8T6, BME280 and SX1308, with the RFM95W-868S2, SPX5205M5-L/TR and AO3401A among its other parts. Its parts include 29 capacitors, 24 resistors, 6 ICs, 6 connectors and 2 crystals. It belongs with the radio and wireless boards and the STM32 boards of this library.
Greenhouse LoRa Node is an open-source monitoring system designed for use in greenhouses, orchards or other agricultural environments. This project includes all the necessary components to build the system, including:

The PCB is a two-layer board that integrates essential hardware components. It is versatile and supports different communication modules. Users can choose between a LoRa module or a SIM card module (both cannot be used simultaneously).
The firmware is written entirely in C using STM CubeIDE. It is designed to be easily updated or modified. The MCU supports multiple sleep modes for power optimization, which can be configured directly in the code.
The project does not include the keys.h file, as it contains user-specific information. The structure of the keys.h file is as follows:
#ifndef KEYS_H_
#define KEYS_H_
#define DEVICE_ID 1 // ID number of the node
#define DEVICE_ADDRESS {0x01, 0x23, 0x45, 0x56}
#define APPSKEY {0x01, 0x23, 0x45, 0x67, 0x89, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20}
#define NWKSKEY {0x01, 0x23, 0x45, 0x67, 0x89, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20}
#endifThe library for the RFM95W LoRa module is based on the repository linked below, with slight modifications made for this project: https://github.com/henriheimann/stm32-hal-rfm95
[!CAUTION] When using the RFM95W LoRa module and the graphical peripheral editor in CubeIDE, additional code modifications are required. After saving changes in the IDE, the auto-generated code will be overwritten, re-enabling all IRQs by default. The RFM95W module generates a 1 MHz digital signal on one of its IRQ pins at boot. If interrupts are not properly initialized, this can trigger errors in the MCU. To prevent this issue, all interrupts must be disabled until the module is fully initialized.
This project includes two firmware versions for two different microcontrollers. The firmware in the Firmware_F103 folder was written for the STM32F103xx microcontroller and represents the initial version of the firmware. Due to issues with power consumption, the microcontroller was replaced with an STM32L151xx. The firmware in the Firmware_L151 folder is the latest version, incorporating all modifications made to the PCB.
The current firmware is optimized for the LoRa module and uses Standby sleep mode. In this configuration, the PCB draws ~60 µA while asleep. This isn’t ideal yet, but it’s sufficient for initial tests. Bench measurements suggest the remaining overhead lies between the MCU and the RFM95W. At 60 µA, a 3500 mAh 18650 cell yields a theoretical battery life of ~6 years, not accounting for self-discharge, temperature...
The PCB case is 3D printed using PETG filament on a standard FDM 3D printer. When deploying the node outdoors, ensure the filament can withstand UV exposure. Materials like ASA or ABS might be more suitable for such environments.
The server application is entirely written in Python and is terminal-based. Every operation performed by the application is logged into a log file for future inspection in case of issues.
ttn_config.json for easy integration.InfluxDB_config.json for easy integration.Upon boot, the application requires two JSON files to load all the configurations for the database and MQTT connection to the TTN broker:
InfluxDB_config.json
Configuration file for connecting to the InfluxDB database:
{
"_comment": "JSON config file for database connection",
"url": "http://localhost:8086",
"org": "tinta",
"token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"bucket": "bucket_name",
"timezone": "Europe/Ljubljana"
}ttn_config.json
{
"_comment": "JSON config file for mqttTTN connection",
"app_id": "lora-home-node",
"username": "lora-home-node@ttn",
"access_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXX",
"mqtt_broker": "eu1.cloud.thethings.network",
"mqtt_port": 1883,
"topic": "v3/lora-home-node@ttn/devices/+/up"
}Before running the application, ensure you have the required dependencies installed. The following packages are necessary:
pip install json paho-mqtt psycopg2 influxdb-client pytz logging socket base64This project utilizes InfluxDB as its primary database solution. InfluxDB was selected due to its high efficiency in handling time-series data and its seamless integration with Grafana, which simplifies data visualization and analysis. By leveraging InfluxDB's ability to store data in a time-series format, this project ensures scalability for managing and analyzing temporal data.
This repository contains pre-configured Grafana UI files designed to read and present data from sensors in an intuitive and visually appealing way. These files provide a basic setup to help you quickly get started with monitoring and analyzing your sensor data using Grafana's powerful dashboard capabilities.
This repository includes Docker support for easier and faster deployment on the server-side. The Docker setup contains:
server_app)[!CAUTION] Before running the Docker setup, the
docker-compose.ymlfile must be modified to suit your specific preferences, such as:
To build the Docker containers, first navigate to the Docker folder in your terminal:
cd /path/to/Dockerthen run:
docker-compose buildOnce the container is build start it and set it up as you want.
docker-compose up -dAfter running the containers, you can access:
Make sure your Grafana instance is properly configured to read from InfluxDB.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | 10k | Resistor_SMD:R_0603_1608Metric | R1, R13, R16, R17, R18, R19, R20, R24 |
| 6 | 1uF | Capacitor_SMD:C_0603_1608Metric | C17, C19, C23, C25, C27, C28 |
| 5 | 100 | Resistor_SMD:R_0603_1608Metric | R2, R4, R5, R8, R9 |
| 5 | 10nF | Capacitor_SMD:C_0603_1608Metric | C18, C20, C24, C26, C29 |
| 4 | 100nF | Capacitor_SMD:C_0402_1005Metric | C7, C8, C9, C10 |
| 4 | 100nF | Capacitor_SMD:C_0603_1608Metric | C1, C2, C15, C22 |
| 4 | 22pF | Capacitor_SMD:C_0402_1005Metric | C4, C5, C13, C14 |
| 4 | 4k7 | Resistor_SMD:R_0603_1608Metric | R3, R12, R21, R22 |
| 2 | 0R | Resistor_SMD:R_0603_1608Metric | R10, R11 |
| 2 | 20k | Resistor_SMD:R_0603_1608Metric | R6, R14 |
| 2 | 4.7uF | Capacitor_SMD:C_1206_3216Metric | C16, C21 |
| 2 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H1, H2 |
| 1 | 0.1uF | Capacitor_SMD:C_0603_1608Metric | C3 |
| 1 | 10nF | Capacitor_SMD:C_0402_1005Metric | C12 |
| 1 | 12MHz | Crystal:Resonator_SMD_Murata_CSTxExxV-3Pin_3.0x1.1mm | Y1 |
| 1 | 12k | Resistor_SMD:R_0603_1608Metric | R7 |
| 1 | 18650 Battery holder | 18650:18650 Battery holder | BT1 |
| 1 | 1k | Resistor_SMD:R_0603_1608Metric | R23 |
| 1 | 1uF | Capacitor_SMD:C_0402_1005Metric | C11 |
| 1 | 2x5_2.00mm | Connector_PinHeader_2.00mm:PinHeader_2x05_P2.00mm_Vertical_SMD | J4 |
| 1 | 32.768kHz | Crystal:Crystal_SMD_3215-2Pin_3.2x1.5mm | Y2 |
| 1 | 3k2 | Resistor_SMD:R_0603_1608Metric | R15 |
| 1 | 4.7uF | Capacitor_SMD:C_0402_1005Metric | C6 |
| 1 | 4.7uH | Inductor_SMD:L_Cenker_CKCS4020 | L1 |
| 1 | AO3401A | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | BME280 | Package_LGA:Bosch_LGA-8_2x2.5mm_P0.65mm_ClockwisePinNumbering | U1 |
| 1 | Conn_01x02_Pin | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J2 |
| 1 | Conn_01x03_Socket | Connector_Hirose:Hirose_DF13-03P-1.25DSA_1x03_P1.25mm_Vertical | J7 |
| 1 | Conn_01x04_Socket | Connector_Hirose:Hirose_DF13-04P-1.25DSA_1x04_P1.25mm_Vertical | J1 |
| 1 | Conn_01x06_Socket | Connector_Hirose:Hirose_DF13-06P-1.25DSA_1x06_P1.25mm_Vertical | J6 |
| 1 | I2C address | Jumper:SolderJumper-3_P1.3mm_Open_RoundedPad1.0x1.5mm_NumberLabels | JP1 |
| 1 | RFM95W-868S2 | RF_Module:HOPERF_RFM9XW_SMD | U2 |
| 1 | SIM800L-CORE | SIM800L-Core-Module-KiCad-Footprint-main:SIM800L-CORE | U4 |
| 1 | SPX5205M5-L/TR | SPX5205M5-L-3-3_TR:SOT95P280X145-5N | IC1 |
| 1 | SS24 | Diode_SMD:D_SMA | D1 |
| 1 | STM32L151C8T6 | Package_QFP:LQFP-48_7x7mm_P0.5mm | U3 |
| 1 | SW_SPST | Button_Switch_SMD:SW_Push_1P1T_NO_CK_KMR2 | SW1 |
| 1 | SX1308 | SX1308:SOT-23-6 | U5 |
| 1 | SolderJumper_2_Open | Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm | JP2 |
| 1 | UF.L | Connector_Coaxial:U.FL_Molex_MCRF_73412-0110_Vertical | J3 |
The 76 most common of 78 parts.
It measures 90 × 34 mm and has 2 copper layers, 1.6 mm thick.
78 parts, built around the STM32L151C8T6, BME280, SX1308 and RFM95W-868S2. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the TilenTinta/Greenhouse_LoRa_Node repository on GitHub, at the commit this page was made from: the board is PCB/LoRa_Node/LoRa_Node.kicad_pcb and its schematic PCB/LoRa_Node/LoRa_Node.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

TilenTinta/Amon_Link
An open-source electronic designed for RF communication between a PC-based Ground Control system and the Amon drone






Uspizig/WifiWallSwitch
A WallSwitch with a clever EINK Display that measures your Air Quality, measures Temperature, detects movement, measures Light Conditions... and many more.
