Python driver for the Lake Shore Model 350 Temperature Controller, communicating over TCP/IP.
Developed for laboratory cryogenic instrumentation work (heterodyne receiver testing, cryostat monitoring), where reliable remote control and data acquisition from Python is needed for integration into larger acquisition/control systems.
- Read temperature (K) from any input channel (A-D)
- Read/write full input channel configuration (sensor type, curve, filter, name, temperature limit)
- Copy configuration between channels
- Heater/control loop support (setpoint, heater range, PID, output mode, ramp, heater output/status)
- Example scripts: live monitor with selectable channels and optional CSV logging + plotting, interactive test menu, channel config editor
git clone https://github.com/PatrickADz/lakeshore350-python.git
cd lakeshore350-python
pip install -e .
# optional, only needed for the plotting example
pip install -e ".[plot]"from lakeshore350 import LakeShore350
with LakeShore350("192.168.1.100") as ls:
print(ls.get_idn())
print(ls.read_temperature_K("A"))
print(ls.get_input_config("A"))The examples/ folder contains ready-to-run scripts. Configuration for all of
them is resolved as: CLI argument > config.ini > built-in default — set
config.ini up once for your routine lab setup, then override anything ad
hoc from the command line.
cd examples
cp ../config.example.ini config.ini
# edit config.ini: set your instrument's real IP, preferred unit, channel names, etc.Live monitor (CSV log + optional live plot):
python live_monitor.py # uses config.ini
python live_monitor.py --ip 192.168.1.50 --no-plot # override IP, headless
python live_monitor.py --channels A,B --unit C # override channels/unit
python live_monitor.py --no-save # monitor live, don't write CSV
python live_monitor.py --help # see all optionsCSV logging is on by default (--no-save to disable) and independent from
plotting (--plot/--no-plot) - so you can log headlessly, plot without
saving, or both.
Interactive test menu (quick bench checks - ID, single/all channel reads, input config, control loop status):
python interactive_menu.pyCopy channel configuration:
python copy_channel_config.py A D
python copy_channel_config.py A D --ip 192.168.1.50Interactively view/edit a channel configuration:
python configure_channel.py A
python configure_channel.py # prompts for the channelShows the current sensor type, range, curve, filter, name and temperature limit, lets you pick which fields to change and shows valid options for each, then asks for confirmation before applying.
config.iniis gitignored — onlyconfig.example.iniis tracked, so your real instrument IP never ends up in version control.
Tests use a mocked socket, so no physical instrument is required:
pip install -e .
python tests/test_driver.pylakeshore350-python/
├── src/lakeshore350/ # the driver (importable package)
│ ├── driver.py
│ └── exceptions.py
├── examples/ # runnable example scripts
│ ├── labconfig.py # config.ini + argparse merging helper
│ ├── live_monitor.py
│ ├── interactive_menu.py
│ ├── copy_channel_config.py
│ └── configure_channel.py
├── tests/
│ └── test_driver.py
├── config.example.ini
├── CHANGELOG.md
└── pyproject.toml
- Tested against firmware used at CePIA for cryostat and receiver temperature monitoring.
- Not affiliated with or endorsed by Lake Shore Cryotronics, Inc. "LakeShore" and "Model 350" are used here only to describe compatibility.
MIT — see LICENSE.