- PlatformIO project for Meshnology ESP32 LoRa V3 - DS18B20 dual sensor support for tank verification - OLED display for local temperature visibility - HTTP POST to ZNET Web API - WiFiManager for easy WiFi configuration - Offline buffering when network unavailable Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.0 KiB
4.0 KiB
ZNET Temperature Sensor - ESP32 LoRa Gateway
Project Overview
ESP32-based temperature monitoring system for e-coat paint tanks. Reads DS18B20 waterproof temperature probes immersed in the paint tank and sends data to ZNET Web for real-time monitoring and ML feature collection.
Hardware
| Component | Model | Purpose |
|---|---|---|
| MCU | Meshnology ESP32 LoRa V3 | Main controller with WiFi, LoRa, OLED |
| Temp Sensor | DS18B20 (x2) | Waterproof stainless steel probes in paint tank |
| Display | Built-in 0.96" OLED | Local temperature display for operators |
| Radio | Built-in SX1262 | LoRa 915MHz for future remote sensors |
Quick Start
Build & Upload
# Install PlatformIO CLI
pip install platformio
# Build
cd ~/Nextcloud/Dev/znet-temp-sensor
pio run
# Upload to ESP32 (connect via USB)
pio run --target upload
# Monitor serial output
pio device monitor
Configure WiFi
- Power on the ESP32
- Connect to WiFi network:
ZNET-TempSensor(password:znettemp123) - Browser opens captive portal - enter your WiFi credentials
- Device connects and starts posting to ZNET Web
Configure API Endpoint
Edit include/config.h:
#define ZNET_API_URL "http://192.168.1.100:8000/api/v1/sensors/readings"
Wiring
DS18B20 Connection (1-Wire bus, both sensors on same pin)
ESP32 GPIO7 ─────┬───────────── DS18B20 #1 DATA (yellow)
│
└───────────── DS18B20 #2 DATA (yellow)
ESP32 3.3V ──────┬───────────── DS18B20 #1 VCC (red)
│
└───────────── DS18B20 #2 VCC (red)
ESP32 GND ───────┬───────────── DS18B20 #1 GND (black)
│
└───────────── DS18B20 #2 GND (black)
4.7kΩ pullup resistor between DATA and VCC
GPIO Pinout (Heltec V3 / Meshnology)
| Function | GPIO |
|---|---|
| OneWire Data | 7 |
| OLED SDA | 17 |
| OLED SCL | 18 |
| OLED RST | 21 |
| LoRa SCK | 9 |
| LoRa MISO | 11 |
| LoRa MOSI | 10 |
| LoRa SS | 8 |
| LoRa RST | 12 |
| LoRa DIO1 | 14 |
| LoRa BUSY | 13 |
Configuration
All configuration in include/config.h:
| Setting | Default | Description |
|---|---|---|
ZNET_API_URL |
- | ZNET Web API endpoint |
DEVICE_ID |
tank_gateway_1 |
Unique device identifier |
TEMP_READ_INTERVAL_MS |
30000 | Reading interval (30 sec) |
TEMP_MIN_VALID_F |
32.0 | Minimum valid temperature |
TEMP_MAX_VALID_F |
150.0 | Maximum valid temperature |
API Integration
POST /api/v1/sensors/readings
{
"device_id": "tank_gateway_1",
"device_name": "E-Coat Tank Gateway",
"readings": [
{
"sensor_id": "tank_primary",
"temperature_f": 85.5,
"is_valid": true
},
{
"sensor_id": "tank_secondary",
"temperature_f": 85.3,
"is_valid": true
}
]
}
Response
{
"success": true,
"readings_stored": 2,
"alerts_generated": 0
}
Features
Implemented
- Dual DS18B20 sensor reading with validation
- OLED display showing current temperature
- WiFiManager for easy WiFi setup
- HTTP POST to ZNET Web API
- Offline buffering when network unavailable
- Automatic sensor discovery (1-Wire)
Future (Phase 3)
- LoRa receive for remote sensor nodes
- Battery-powered remote node firmware
- Sensor agreement monitoring
- Flash storage for offline buffer persistence
Related Projects
- ZNET Web:
~/Nextcloud/Dev/znet-web- Backend receives temperature data - Baserow: Table for lab temperature logs (to be created)
Git Repository
- Remote: https://git.ecoat.us/leehughes/znet-temp-sensor.git
- Main branch:
main
Change Log
| Date | Version | Change |
|---|---|---|
| 2026-01-24 | 1.0.0 | Initial implementation |