{"id":24055635,"url":"https://github.com/tenkyuchimata/weatherstation","last_synced_at":"2026-04-13T18:02:21.291Z","repository":{"id":258247069,"uuid":"873511495","full_name":"TenkyuChimata/WeatherStation","owner":"TenkyuChimata","description":"A weather station project that using STM32.","archived":false,"fork":false,"pushed_at":"2026-01-17T16:49:16.000Z","size":208,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-27T19:44:24.826Z","etag":null,"topics":["adafruit","bme280","bmp390","cpp","esp8266","geiger","geiger-counter","platformio","pyecharts","python","sht85","sps30","stm32","weather","weather-station"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TenkyuChimata.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,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-10-16T09:41:07.000Z","updated_at":"2026-01-17T16:49:19.000Z","dependencies_parsed_at":"2025-04-30T10:46:26.029Z","dependency_job_id":"7bc4e7f7-d78f-4f89-9801-adb7bd7214ba","html_url":"https://github.com/TenkyuChimata/WeatherStation","commit_stats":null,"previous_names":["tenkyuchimata/weatherstation"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TenkyuChimata/WeatherStation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TenkyuChimata%2FWeatherStation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TenkyuChimata%2FWeatherStation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TenkyuChimata%2FWeatherStation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TenkyuChimata%2FWeatherStation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TenkyuChimata","download_url":"https://codeload.github.com/TenkyuChimata/WeatherStation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TenkyuChimata%2FWeatherStation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31764317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T15:25:13.801Z","status":"ssl_error","status_checked_at":"2026-04-13T15:25:09.162Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["adafruit","bme280","bmp390","cpp","esp8266","geiger","geiger-counter","platformio","pyecharts","python","sht85","sps30","stm32","weather","weather-station"],"created_at":"2025-01-09T04:09:14.382Z","updated_at":"2026-04-13T18:02:21.285Z","avatar_url":"https://github.com/TenkyuChimata.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# STM32 High-Precision Environmental Monitoring Station\n\nA high-precision environmental monitoring station based on **STM32 + PlatformIO + Arduino framework**, integrating:\n\n- 🌡 **SHT85** – temperature \u0026 humidity\n- 🌬 **BMP390L** – high-resolution barometric pressure\n- 🌫 **Sensirion SPS30** – particulate matter (PM1.0 / PM2.5 / PM4.0 / PM10)\n- ☢ **Geiger counter** – real-time radiation monitoring\n- 🔗 **Binary serial protocol** with checksum \u0026 sync word\n\nDesigned for **long-term unattended operation**, high stability, and easy integration with SBCs / servers.\n\n---\n\n## ✨ Features\n\n- High-accuracy environmental sensing (industrial-grade sensors)\n- UART-based SPS30 with **automatic fault detection \u0026 recovery**\n- Interrupt-driven Geiger counter pulse counting\n- Fixed-period logging with **CPM → µSv/h conversion**\n- Compact binary output (low bandwidth, low latency)\n- PlatformIO-based, reproducible build environment\n- Suitable for meteorological, radiation, and environmental monitoring projects\n\n---\n\n## 🧰 Hardware Requirements\n\n### Core MCU\n\n- STM32 (tested on STM32F1 series, e.g. **Blue Pill / STM32F103**)\n\n### Sensors\n\n| Sensor      | Interface         | Notes                       |\n| ----------- | ----------------- | --------------------------- |\n| SHT85       | I²C               | High accuracy temp \u0026 RH     |\n| BMP390L     | I²C               | Pressure oversampling ×32   |\n| SPS30       | UART (115200 8N1) | PM sensor (UART mode)       |\n| Geiger Tube | GPIO interrupt    | Falling-edge pulse counting |\n\n---\n\n## 🔌 Pin Mapping (Default)\n\n### I²C\n\n| Signal | Pin |\n| ------ | --- |\n| SDA    | PB7 |\n| SCL    | PB6 |\n\n### SPS30 (UART)\n\n| SPS30 | STM32 |\n| ----- | ----- |\n| TX    | PA3   |\n| RX    | PA2   |\n\n```cpp\nHardwareSerial Serial2(PA3, PA2);\n```\n\n### Geiger Counter\n\n| Signal | Pin        |\n| ------ | ---------- |\n| Pulse  | PA0 (EXTI) |\n\n---\n\n## 📦 Software Stack\n\n- PlatformIO\n- Arduino framework for STM32\n- Libraries:\n  - SHTSensor\n  - Adafruit_BMP3XX\n  - SensirionUartSps30\n\n---\n\n## ⏱ Sampling \u0026 Timing\n\n| Item          | Value   |\n| ------------- | ------- |\n| Log period    | 60 s    |\n| SPS30 warm-up | ~1.2 s  |\n| I²C clock     | 100 kHz |\n| UART timeout  | 5 s     |\n\n---\n\n## 📡 Serial Output Protocol\n\nBinary stream over USB Serial (Serial):\n\nSync word:\n0x8A\n\nPayload structure:\nfloat data[8] + uint8_t checksum\n\nData layout:\n0 Temperature (°C)  \n1 Humidity (%RH)  \n2 Pressure (hPa)  \n3 Radiation (µSv/h)  \n4 PM1.0 (µg/m³)  \n5 PM2.5 (µg/m³)  \n6 PM4.0 (µg/m³)  \n7 PM10 (µg/m³)\n\nChecksum:\nXOR of all payload bytes (float array only).\n\n---\n\n## ☢ Radiation Calculation\n\nµSv/h = CPM / 153.8\n\nNote: conversion factor depends on Geiger tube model.\n\n---\n\n## 🛠 SPS30 Reliability Strategy\n\n- Automatic retry on read failure\n- Consecutive failure detection\n- Automatic stop/start reinitialization\n- Cool-down recovery window\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftenkyuchimata%2Fweatherstation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftenkyuchimata%2Fweatherstation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftenkyuchimata%2Fweatherstation/lists"}