{"id":20045791,"url":"https://github.com/peppson/radio-nodes","last_synced_at":"2026-05-10T08:56:19.242Z","repository":{"id":250498890,"uuid":"834445645","full_name":"Peppson/radio-nodes","owner":"Peppson","description":"Solar/Battery/USB powered wireless \"smarthome\" modules","archived":false,"fork":false,"pushed_at":"2024-07-27T21:39:15.000Z","size":6223,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-12T20:09:56.561Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Peppson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-27T09:41:09.000Z","updated_at":"2024-11-16T09:22:32.000Z","dependencies_parsed_at":"2024-07-27T22:44:05.209Z","dependency_job_id":"542c92cc-0c6f-4bc3-81fe-0cad1a41f829","html_url":"https://github.com/Peppson/radio-nodes","commit_stats":null,"previous_names":["peppson/radio-nodes"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Peppson%2Fradio-nodes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Peppson%2Fradio-nodes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Peppson%2Fradio-nodes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Peppson%2Fradio-nodes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Peppson","download_url":"https://codeload.github.com/Peppson/radio-nodes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241476437,"owners_count":19968916,"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":[],"created_at":"2024-11-13T11:19:11.679Z","updated_at":"2026-05-10T08:56:19.203Z","avatar_url":"https://github.com/Peppson.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n![flow_diagram](_images/header.png)\n\n# radio-nodes\n\nSolar/Battery/USB powered wireless \"smarthome\" modules, based on the Attiny824 microcontroller.  \nServes as the end-node of [MQTT-radio-gateway](https://github.com/Peppson/MQTT-radio-gateway).   \nWritten in C++ with PlatformIO.  \n\n\u0026nbsp;\n## Project Overview\n- Each node is easily configurable to perform various tasks, such as watering plants,  \nturn on the coffeemaker, opening blinds, relaying sensor data, etc. \n\n- Power consumption was the main concern when designing this.   \nNodes consumes ∼`2mA` @ 3.3V in active listening mode, and as low as ∼`3uA` @ 3.3V while deepsleeping!  \nMaking it possible to power some nodes indefinitely from a small solarpanel.  \nMeasured and optimized using [Power Profiler Kit II](https://www.nordicsemi.com/Products/Development-hardware/Power-Profiler-Kit-2).  \n\n- This project was primarily made for personal ***\"needs\"***. But it is open for use by anyone who finds it beneficial.  \nEvery ***node*** has it's own directory inside `src` with it's own enviroment, selected from `platformio.ini`.\n\n\u0026nbsp;\n## Hardware and PCB  \nMade a compact PCB integrating a [TP4056](https://www.amazon.com/TP4056/s?k=TP4056) Li-ion/LiPo battery charger, an [nRF24L01+](https://www.amazon.com/s?k=nRF24L01%2B\u0026crid=1VM0GXMUG7ISX\u0026sprefix=nrf24l01%2B%2Caps%2C145\u0026ref=nb_sb_noss_1) radio,   \nand the [Attiny824](https://www.mouser.se/ProductDetail/Microchip-Technology/ATTINY824-SSF?qs=pUKx8fyJudA6%2F%2FVSNIlI1w%3D%3D) AVR microcontroller.  \n\nMore images in: [📂 _images/](./_images/)  \nKiCad files: [📂 _KiCad/](./_KiCad/)  \n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n    Schematic\n\u003c/summary\u003e  \n\n![schematic](_images/schematic_v3.png)  \n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n    PCB layout \n\u003c/summary\u003e     \n    \n\u003e 2-layer PCB, dimensions 42mm x 31mm.  \n\u003e The PCB has 3 sections, configurable based on the node.\n\u003e - ***BAT or USB:*** Battery or USB/5V driven.  \n\u003e - ***LOAD:*** Components for the \"load driver circuit\".  \n\n![PCB_layout](_images/PCB_layout_v3.PNG)  \n\u003c/details\u003e  \n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n    Power consumption in active mode \n\u003c/summary\u003e  \n\n\u003e In active mode, the node toggles its radio `on` for 50ms and `off` for 950ms to minimize power usage,    \n\u003e halting the CPU between pulses.  \n\u003e\n\u003e Resulting in an average power draw of ∼2mA @ 3.3V.  \n\n![PCB_layout](_images/node_active_power_draw.PNG)  \n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n    Programming\n\u003c/summary\u003e  \n\nThe ATtiny 2-series MCUs have [UPDI](https://onlinedocs.microchip.com/pr/GUID-F626284A-58F0-4C25-A6F3-0EA5054F3E2B-en-US-6/index.html?GUID-D25E0E3F-4FC2-454B-8A2D-C52EAA4EBE81) interface. Which makes it possible to program with only 1 data pin!  \nYou can see the UPDI pins at the bottom of the PCB. \n\nI created a simple DIY programmer using an Arduino Nano, to help with uploading firmware.   \nMore details here [UPDI programmer](https://github.com/Peppson/simple-UPDI-programmer).\n\u003c/details\u003e\n  \n    \n### PCB\n  ![hardware](_images/PCB_rendered_v3.PNG)  \n\n### Hardware\n\u003e With and without the TP4056 and nRF24L01+ modules. Dimensions 42mm x 31mm.  \n\u003e The picture shows a battery/solar-powered node.\n\n![hardware.jpg](_images/hardware.jpg)  \n\n\n\n\u0026nbsp;\n## Nodes \n\u003cdetails open\u003e\n\u003csummary\u003e\n    Nodes 1-10: Self watering plants  \n\u003c/summary\u003e\n\n  \nUses a 3-5V waterpump and DIY capacative fluid-level sensor.  See link below.  \n[Liquid Level Sensing Using Capacitive-to-Digital Converters](https://www.analog.com/en/analog-dialogue/articles/liquid-level-sensing-using-cdcs.html)  \n\nThe solar-powered variant uses the TP4056 to charge a Li-ion/LiPo battery.  \nWhile the USB variant skips that step and plugs directly into 5V (with 3.3V LDO onboard).  \n\n#### Node 1 water sensor linearity:    \n\n\u003e Sensor (ADC) reading vs water level in %. \n\n![water sensor](_images/Node_1_water_sensor_example.PNG)\n\n#### Node 1 hardware:  \n\n\u003e Most of the self-watering plant nodes have the hardware inside a plastic enclosure,   \n\u003e which I just hide behind the pots.  \n\u003e However, for node 1, I placed all electronics underneath for a pretty decent look.   \n\n\n![node_1_hardware.jpg](_images/node_1_hardware.jpg)\n\u0026nbsp;  \n\n \n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n    \u003csummary\u003e\n        Node 11: Mocca Master controller\n    \u003c/summary\u003e\n\nUses a SG90 servo mounted internally to toggle the `On/Off` button,   \nand a hall-effect current sensor, to get the current state.\n  \n\u003e \"Looks pretty neat when the button toggles all by itself :)\"   \n\n\u003c/details\u003e\n\n\u0026nbsp;  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeppson%2Fradio-nodes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeppson%2Fradio-nodes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeppson%2Fradio-nodes/lists"}