

SSSM4ESP32-S3-TFT
Solar Scintillation Seeing Monitor for CircuitPython
- Size
- 50.8 × 22.9 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 22
- Nets
- 34
- Pads
- 95
- Tracks, vias
- 215, 28
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 13 Jan 2023
- Updated
- 20 May 2025
Overview
SSSM4ESP32-S3-TFT is an open-source printed circuit board by pyzahl, from the pyzahl/SSSM4CircuitPython repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 50.8 × 22.9 mm with 22 parts on 34 nets, routed with 215 tracks and 28 vias.
It is built around the LMC6484IM. Its parts include 5 resistors, 4 connectors, 3 capacitors, 3 diodes and 1 IC. It belongs with the ESP32 boards of this library.
Main components
1README
README.mdSSSM4CircuitPython
Solar Scintillation Seeing Monitor (SSSM) for CircuitPython
A renewed verion of a SSSM for CircuitPython on a ESP32-S2 or -S3-TFT.
Project based on hardware described here https://www.blackwaterskies.co.uk/2017/06/diy-solar-scintillation-seeing-monitor-sssm/ or originally here: https://vdocuments.mx/an-inexpensive-solar-scintillation-seeing-monitor-circuit-an-inexpensive.html
Let me copy the intro to SSSM:
A guide to building an inexpensive Solar Scintillation Seeing Monitor. The SSSM is a handy device which monitors the atmospheric seeing conditions during solar imaging. This SSSM can be built for a fraction of the cost of commercially available devices. You can use the SSSM to monitor seeing conditions through the day, or even to control your camera to capture images during the best seeing conditions.
Background: The original design for the SSSM was published by E. J. Seykora at the Department of Physics, East Carolina University.
Read also how to integrate with Firecapture: http://www.firecapture.de/ http://www.joachim-stehle.de/downloads/SSSMon/SSSMonPluginManual.pdf
Adapted schematics, connected to A0 and A1 for the ESP32-S2/S3-TFT replacing the originally used arduino.
This project is based on CircuitPython Version 8 (all required Libs included for reference) running on a Adafruit ESP32-S2/S3-TFT. The S3 is faster and better suited.
Anyhwo, the new S3 seams to have issues with WiFi. WiFi is not required here in USB-Serial mode compatible with the original Firecapture SSSM plugin and interface. Anyways planns are to use for MQTT for web based publishing, this works with the ESP32-S2-TFT, even not long term stable. Causes "Wifi-OFF" Progra mhold on the S3. TDB. May be next gen/version of Circuit Python fixes it.
Currently: CircuitPython 8.0.0-beta.6
https://circuitpython.org/board/adafruit_feather_esp32s3_tft/
Adafruit ESP32-S3 TFT Feather - 4MB Flash, 2MB PSRAM, STEMMA QT:
https://www.adafruit.com/product/5483 https://github.com/adafruit/Adafruit-ESP32-S3-TFT-Feather-PCB
Pinouts:
https://learn.adafruit.com/assets/114106
Optional support for digital LUX light sensor TSL2591: Lux and Mag reading.
Read the python code.py for details ;)
- virtual zero volt calibration (about 3.3V/2 = 0V what is apporx a reading mapped to 32768. Exact dark values can be determined in "Zero Calibration Mode". And adjusted in the code.py in the top part lines 42,43.
#### original build V0
Analog0InCenter = 32603
Analog1InCenter = 32643- Operation Modes selectable via DIP Switch in my buid on pins A2,A3,A4,A5 -- open or closed to GND.
Alternatively the modes may be set via code overide liek this:
# DIP SWITCH INFO
print ('Note: DIP ON (=GND) := False')
for pin in sorted(DipSW):
DipSW[pin].switch_to_input(pull=Pull.UP)
# override or set DIP wo dip sw in place:
#DipSW['2'].switch_to_input(pull=Pull.DOWN)
DipSW['3'].switch_to_input(pull=Pull.DOWN)DIP Switch Assignments are:
## Operation Modes
DipSW = {
'1': DigitalInOut(board.A2), ## Read/Write (DIP on := GND [==Logic False]) => recording to logfile / no recording
'2': DigitalInOut(board.A3), ## WiFi+MQTT Logging On/Off *** disabled Use I2C Sensor
'3': DigitalInOut(board.A4), ## FireCapture prints/Full report prints to console
'4': DigitalInOut(board.A5), ## Zero Calib Info ON / OFF
}
DipSWinfoClosed = { ## Logic "False" as DIP=ON is pin on GND
'1': 'Record to Logfile',
'2': 'WiFi+MQTT IoT Transmit',
'3': 'FC Print',
'4': 'Zero Offset Calibration',
}
DipSWinfoOpen = { ## Logic "True" = OPEN/OFF
'1': 'No Logging',
'2': 'No Wifi+MQTT',
'3': 'Long Status Print',
'4': 'Normal Operation',
}When hooked up to USB Serial (ttyACM0,..) terminal (CuteCom, screen,... or similar):
--- STARTUP ---
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:
<0x1b>]0;<0xf0><0x9f><0x90><0x8d>Wi-Fi: off | code.py | 8.0.0-beta.6<0x1b>\<0x1b>]0;<0xf0><0x9f><0x90><0x8d>Wi-Fi: No IP | code.py | 8.0.0-beta.6<0x1b>\Note: DIP ON (=GND) := False
Dip SW 1 Off: No Logging
Dip SW 2 Off: No Wifi+MQTT
Dip SW 3 On: FC Mode
Dip SW 4 Off: Normal Operation
I2C addresses found: ['0xb']
Battery Percent: 100.00 %
Battery Voltage: 4.18 V
WiFi OFF, no NTP auto time set.
System Start Timestamp: 2000 01 01 01:15:23
MQTT disabled.
Checking for LUX sensor TSL2591
No I2C device at address: 0x29
... none
***
Zero Cal Init: [I, R, U0, U1] 20 19 1662 1662 mV 403.4 369.5 33007.3 33012.9
Zero Offset Calibration Warning! Please check dark.
***
Actual Center: 33007 33013Wi-Fi: off | code.py | 8.0.0-beta.6
Wi-Fi: No IP | code.py | 8.0.0-beta.6
Note: DIP ON (=GND) := False
Dip SW 1 True No Logfile
Dip SW 2 False MQTT IoT Transmit
Dip SW 3 False FC Print
Dip SW 4 False WiFi
Battery Percent: 57.40 %
Battery Voltage: 3.87 V
Connecting WiFi...
Connecting to 31A138_5G
try: NTP clock sync...
try: Sync system time to NTP...
Start Timestamp: 2023 01 13 06:51:27
MQTT Client Configuration:
MQTT: Attempting to connect to 192.168.0.20::1883
Connected to MQTT Broker!
Flags: 0
RC: 0
Checking for LUX sensor TSL2591
No I2C device at address: 0x29
... none
A0: 1.01
A1: 0.27Note: DIP ON (=GND) := False
Dip SW 1 Off: No Logging
Dip SW 2 On: WiFi+MQTT IoT Transmit
Dip SW 3 On: FC Print
Dip SW 4 Off: Normal Operation
I2C addresses found: ['0xb']
Battery Percent: 1.40 %
Battery Voltage: 3.95 V
Connecting WiFi...
Connecting to 31A138_5G
Connected to 31A138_5G!
try: NTP clock sync...
try: Sync system time to NTP...
Start Timestamp: 2023 01 31 08:54:03
MQTT Client Configuration:
MQTT: Attempting to connect to 192.168.0.20::1883
Connected to MQTT Broker!
Flags: 0
RC: 0
Checking for LUX sensor TSL2591
No I2C device at address: 0x29
... none
***
Zero Cal Init: [I, R, U0, U1] -1602 -1604 40 39 mV -31814.8 -31859.6 788.2 770.0Parts
22| Qty | Value | Footprint | References |
|---|---|---|---|
| 3 | BPW34-SMD | OptoDevice:Osram_BPW34S-SMD | D1, D2, D3 |
| 2 | 10k | Resistor_SMD:R_1206_3216Metric | R3, R4 |
| 2 | Conn_01x02_Pin | Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_Vertical | J3, J4 |
| 2 | MOUNTINGHOLE2.5 | MOUNTINGHOLE_2.5_PLATED | U$31, U$32 |
| 1 | dummyfp0 | UNK_HOLE_0 | |
| 1 | dummyfp1 | UNK_HOLE_1 | |
| 1 | 0 | Resistor_SMD:R_1206_3216Metric | R5 |
| 1 | 100n | Capacitor_SMD:C_1210_3225Metric | C3 |
| 1 | 20M | Resistor_SMD:R_1206_3216Metric | R2 |
| 1 | 20p | Capacitor_SMD:C_1210_3225Metric | C1 |
| 1 | 2k | Potentiometer_SMD:Potentiometer_Bourns_3224X_Vertical | RV1 |
| 1 | 3u3 | Capacitor_SMD:C_1210_3225Metric | C2 |
| 1 | 47k | Resistor_SMD:R_1206_3216Metric | R1 |
| 1 | Conn_01x12_Socket | 1X12_ROUND_MIN | J1 |
| 1 | Conn_01x16_Socket | 1X16_ROUND_MIN | J2 |
| 1 | LMC6484 | Package_SO:SOIC-14_3.9x8.7mm_P1.27mm | U1 |
| 1 | SW_DIP_x04 | Button_Switch_SMD:SW_DIP_SPSTx04_Slide_6.7x11.72mm_W8.61mm_P2.54mm_LowProfile | SW1 |
Questions
How big is the SSSM4ESP32-S3-TFT PCB?
It measures 50.8 × 22.9 mm and has 2 copper layers, 1.6 mm thick.
What parts does the SSSM4ESP32-S3-TFT use?
22 parts, built around the LMC6484IM. 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.
Where can I download the SSSM4ESP32-S3-TFT KiCad files?
From the pyzahl/SSSM4CircuitPython repository on GitHub, at the commit this page was made from: the board is CAD/SSSM4ESP32-S3-TFT.kicad_pcb and its schematic CAD/SSSM4ESP32-S3-TFT.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the SSSM4ESP32-S3-TFT design in my own project?
Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
Similar boards
- 2 layers62.5 × 83.8 mm

- 2 layers100 × 75 mm

- 2 layers63.5 × 44.5 mm

ESP32 Wroom energy meter
mikey60/ESP32-Energy-Monitor
ESP32 Hardware and code to use the Aeon labs Home Energy Meter, model DSB09104-zwus, current clamps and housing
27 parts3 - 2 layers200 × 100 mm

ArduinoNanoDcLoad
apex-/electronicDcLoad
A simple DC Electronic Load using an Arduino Nano (0-50V/0-5A)
49 parts - 2 layers167.6 × 71.1 mm

- 2 layers68.6 × 81.3 mm

- 2 layers86.6 × 65.7 mm

YM2151 Shield
nanamitm/YM2151-Shield-ver2
YM2151 Shield hardware project for KiCad 10
49 partsCERN-OHL-W-2.0 - 2 layers80 × 53.6 mm

YM2413-Shield
nanamitm/YM2413-Shield
This is a KiCad 10 project for an Arduino Uno FM sound shield based on the YM2413.
42 parts