Compare commits

...
Author SHA1 Message Date
Ricardo (XenGi) Band
ffe390c782
init 2026-08-28 22:19:26 +02:00
Ricardo (XenGi) Band
b93f0e0063
init 2026-08-28 20:57:46 +02:00
15 changed files with 52424 additions and 7 deletions

196
.gitignore vendored
View file

@ -1,8 +1,192 @@
# ---> esp-idf Containerfile
# gitignore template for esp-idf, the official development framework for ESP32 models.json
# https://github.com/espressif/esp-idf
build/ # Created by https://www.toptal.com/developers/gitignore/api/windows,linux,macos,direnv,vim,clion+all
sdkconfig # Edit at https://www.toptal.com/developers/gitignore?templates=windows,linux,macos,direnv,vim,clion+all
sdkconfig.old
### CLion+all ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### CLion+all Patch ###
# Ignore everything but code style settings and run configurations
# that are supposed to be shared within teams.
.idea/*
!.idea/codeStyles
!.idea/runConfigurations
### direnv ###
.direnv
.envrc
### Linux ###
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### macOS Patch ###
# iCloud generated files
*.icloud
### Vim ###
# Swap
[._]*.s[a-v][a-z]
!*.svg # comment out if you don't need vector files
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Session
Session.vim
Sessionx.vim
# Temporary
.netrwhist
# Auto-generated tag files
tags
# Persistent undo
[._]*.un~
### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# End of https://www.toptal.com/developers/gitignore/api/windows,linux,macos,direnv,vim,clion+all

View file

@ -1,3 +1,14 @@
# temphummon # temphummon
Matter over Thread Temperature and humidity monitor Temperature and humidity monitor using Matter over Thread.
Based on the ESP32-H2 and Waveshare Segment E-Paper display.
## BOM
| Product | Price | Wiki |
| ------- | ----- | ---- |
| [ESP32-H2 Zero](https://www.waveshare.com/esp32-h2-zero.htm?sku=32261) | 3.01 € | [wiki](https://docs.waveshare.com/ESP32-H2-Zero) |
| [1.9inch Segment E-Paper Module](https://www.waveshare.com/product/displays/e-paper/1.9inch-segment-e-paper-module.htm) | 9.47 € | [wiki](https://www.waveshare.com/wiki/1.9inch_Segment_e-Paper_Module_Manual) |
Matter over Thread Temperature and humidity monitor

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

BIN
datasheets/IST7134.pdf Normal file

Binary file not shown.

Binary file not shown.

18
firmware/.gitignore vendored Normal file
View file

@ -0,0 +1,18 @@
.pytest_cache/
__pycache__/
# esp-idf built binaries
build/
build_*_*/
sdkconfig
# idf-ci build run output
build_summary_*.xml
app_info_*.txt
size_info_*.txt
# pytest-embedded log folder
pytest_embedded_log/
# idf-component-manager output
dependencies.lock

6
firmware/CMakeLists.txt Normal file
View file

@ -0,0 +1,6 @@
# The following five lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.22)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(temphummon)

View file

@ -0,0 +1,2 @@
idf_component_register(SRCS "temphummon.c"
INCLUDE_DIRS ".")

View file

@ -0,0 +1,6 @@
#include <stdio.h>
void app_main(void)
{
}

149
flake.nix Normal file
View file

@ -0,0 +1,149 @@
{
description = "ESP32 development tools";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
flake-utils.url = "github:numtide/flake-utils";
nixpkgs-esp-dev = {
#url = "github:mirrexagon/nixpkgs-esp-dev";
url = "github:dvdvgt/nixpkgs-esp-dev/update-v6.0.1";
inputs = {
nixpkgs.follows = "nixpkgs";
flake-utils.follows = "flake-utils";
};
};
};
outputs =
{
self,
nixpkgs,
flake-utils,
nixpkgs-esp-dev,
}:
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ (import "${nixpkgs-esp-dev}/overlay.nix") ];
config.permittedInsecurePackages = [
"python3.13-ecdsa-0.19.1"
];
};
autoSerialPort = pkgs.writeShellScriptBin "esp-port" ''
set -euo pipefail
# Try common ESP USB serial patterns
# TODO: reduce to Waveshare ESP32-S3 detection
PORT=$(
for p in /dev/serial/by-id/*; do
case "$p" in
*CP210*|*ch340*|*USB*|*ESP*) echo "$p"; break ;;
esac
done
)
if [ -z "$PORT" ]; then
echo "No ESP serial device found in /dev/serial/by-id"
echo "Fallback: listing /dev/ttyUSB* /dev/ttyACM*"
ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null || true
exit 1
fi
echo "$PORT"
'';
esp-idf = pkgs.esp-idf-full.override {
rev = "v6.0.1";
sha256 = "sha256-4KJa686qc+u7XkF/GS2o53l1SpwP2EmdqAn/qmlL1yU=";
};
in
{
apps = {
run-agent = {
type = "app";
program = "${pkgs.writeShellScript "run-agent" ''
podman run -it --rm -v ./:/src -v ./models.json:/root/.pi/agent/models.json --device=/dev/ttyACM0 pidev:latest
''}";
};
build-agent = {
type = "app";
program = "${pkgs.writeShellScript "build-agent" ''
podman build -t pidev:latest -f Containerfile --no-cache .
''}";
};
menuconfig = {
type = "app";
meta.description = "⚙️ Open ESP-IDF configuration menu (sdkconfig)";
program = "${pkgs.writeShellScriptBin "idf-menuconfig" ''
${esp-idf}/tools/idf.py menuconfig
''}/bin/idf-menuconfig";
};
build = {
type = "app";
meta.description = "🧱 Build ESP32 firmware using ESP-IDF";
program = "${pkgs.writeShellScriptBin "idf-build" ''
${esp-idf}/tools/idf.py build
''}/bin/idf-build";
};
flash = {
type = "app";
meta.description = "⚡ Flash firmware to ESP32-S3 over auto-detected serial port";
program = "${pkgs.writeShellScriptBin "idf-flash" ''
set -euo pipefail
PORT=$(${autoSerialPort}/bin/esp-port)
echo "Flashing on: $PORT"
${esp-idf}/tools/idf.py -p "$PORT" flash
''}/bin/idf-flash";
};
monitor = {
type = "app";
meta.description = "📡 Open serial monitor for ESP32 logs";
program = "${pkgs.writeShellScriptBin "idf-monitor" ''
set -euo pipefail
PORT=$(${autoSerialPort}/bin/esp-port)
echo "Monitoring: $PORT"
${esp-idf}/tools/idf.py -p "$PORT" monitor
''}/bin/idf-monitor";
};
clean = {
type = "app";
meta.description = "🧹 Clean ESP-IDF build directory";
program = "${pkgs.writeShellScriptBin "idf-clean" ''
${esp-idf}/tools/idf.py clean
''}/bin/idf-clean";
};
full = {
type = "app";
meta.description = "🚀 Full pipeline: build → flash → monitor";
program = "${pkgs.writeShellScriptBin "idf-full" ''
set -euo pipefail
PORT=$(${autoSerialPort}/bin/esp-port)
echo "🧱 Building..."
${esp-idf}/tools/idf.py build
echo "⚡ Flashing on $PORT..."
${esp-idf}/tools/idf.py -p "$PORT" flash
echo "📡 Starting monitor..."
${esp-idf}/tools/idf.py -p "$PORT" monitor
''}/bin/idf-full";
};
};
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
esp-idf
git
minicom
usbutils
gawk
coreutils
cmake
ninja
];
};
}
);
}