Open Source DIY

SarmaLink freeware allows not only to do videmonitoring with local USB and WiFi cameras, but also to perform temperature monitoring. To do that you can make your own USB thermometer following the instruction bellow.

SarmaLink compatible thermometers do not require any driver installation. Windows and Linux recognizes them as USB human interface device or HID and provide necessary API functions. The hardware is derived from a very nice DIY project with schematics and source at radiokot site and based on V-USB Driver from Objective Development. The original package provides host computer code in Delphi 7. Below you can find simple source for C# (.NET 2.0 on windows systems) and C/C++ for Linux (tested on Ubuntu 11). These can be used to integrate USB thermometers in a larger sensor network or your own software. You may need to adjust the ManufacturerString and ProductString to meet the PID, VID licensing conditions of Objective Development. Also unique SerialNumberString can be used to identify the sensor if you have multiple devices connected to the same computer.
C# source was written in Microsoft Visual C# 2008 express edition
Tested on XP 32bit and probably works in W7 and Vista or even W2k with .NET installed
And binary windows executable can be downloaded here
It produces result similar to this (with two USB thermometers connected)

=========================== FOUND HID DEVICE ===========================
MemberIndex = 0
ProductID = 36
VendorID = 1008
ProductString = "HP Basic USB Keyboard"
ManufacturerString = "CHICONY"
SerialNumberString = "?"
=========================== FOUND HID DEVICE ===========================
MemberIndex = 1
ProductID = 49242
VendorID = 1133
ProductString = "USB Optical Mouse"
ManufacturerString = "Logitech"
SerialNumberString = "?"
=========================== FOUND HID DEVICE ===========================
MemberIndex = 2
ProductID = 1503
VendorID = 5824
ProductString = "HCDTER02"
ManufacturerString = ""
SerialNumberString = "tr00220"
t = 30.875
=========================== FOUND HID DEVICE ===========================
MemberIndex = 3
ProductID = 1503
VendorID = 5824
ProductString = "HCDTER02"
ManufacturerString = ""
SerialNumberString = "tr00237"
t = 25.4375

On Linux systems the same can be achieved using HIDAPI library from Signal 11.
Here is a modified archive with changes in hidtest/hidtest.cpp file to send commands to the thermometer hidapi_HCDTER02.tgz.
Note the differences in report byte array indexing.
In C# program
report[1] = 21;
HID.HidD_SetFeature(HidDeviceObject, report, REPORT_LEN);
in Hidapi the same is done by
buf[0] = 21;
res =  hid_send_feature_report(handle, buf,  REPORT_LEN);

The Linux version has been tested on Ubuntu 11 server but probably can be ported to less costly systems such as OpenWRT on WR703N.


An improved version uses single USB interface to multiple 1-wire thermometers.
The circuit is similar to existing thermometer projects, e.g. ds1820tousb except that the ATtiny85 processor is run at full 5V and the USB signal levels are adjusted by extra diodes.

The source can be downloaded here

MCU directory contains the micro controller source code and compiles with WinAVR 20100110
CS directory contains host computer source code for Windows and compiles with MS Visual C# 2008 express

MCU build instructions:
cd MCU\ot
del *.o *.hex *.elf *.map *.lss

Programming instructions:
    burn fuses
Stk500.exe -cUSB -I250k -dATTINY85 -EFF -fDFDE
    write HEX
Stk500.exe -cUSB -I250k -dATTINY85 -ifcdcmega.hex -pf -vf -e

Stk500 can be found in AvrStudio 4 and can be used together with AVRISP mkII

Assembled modules can be ordered in the eShop section.

Simply connect the DS18B20  with two wires as shown in picture below.

We have tested up tp 10 probes in parallel.

Note that the sensors are not hotswappable. USB must be disconnected when adding new devices.