Options for custom connecting a temperature sensor with a USB 2.0
No, you don't need a proprietary library for bitbanging onewire. The following code is from an application for AVR µCs I did some years ago. If you used another µC family, you may have to implement the special Onewire/iButton crc functions yourself.

You don't need much more to communicate with an onewire slave chip. The OwReadROM() function is the only one I needed for my application but you can easily write functions for triggering a temperature conversion and reading the result based on that.

For the USB part, either use V-USB as I did (USB1.1 low-speed only) or an  USB-enabled µC.

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;     /* for _delay_ms() */
#include &lt;util/crc16.h&gt;     /* for _crc_ibutton_update() */

/*
 *  Onewire host functions.
 */
static inline void owClear(void) {
    DDRB  |= (1 &lt;&lt; PB0);
    PORTB &amp;= ~(1 &lt;&lt; PB0);
}

static inline void owSet(void) {
    PORTB |= (1 &lt;&lt; PB0);
    DDRB  &amp;= ~(1 &lt;&lt; PB0);
}

static inline uchar owGet(void) {
    return ((PINB &amp; (1 &lt;&lt; PB0)) == 0);
}


/* Onewire idle load function. */
void owIdleLoad(void) {
    /* Release OW line from master. */
    owSet();

    /* Wait 20ms to allow slaves load their power capacitor. */
    _delay_ms(20);
}


/* Onewire transfer reset */
uchar owReset(void) {
    uchar sample;

    /* Reset all slaves. */
    owClear();
    _delay_ms(0.7);

    /* Release OW line from master. */
    owSet();
    _delay_ms(0.04);

    /* Check presence pulse from slave(s). */
    sample = owGet();

    /* Wait until slaves release OW line, max. 240µs. */
    _delay_ms(0.24);

    /* Return whether some device was present on onewire. */
    return sample;
}


/* Read a single bit from onewire. */
static uchar owReadBit(void) {
    uchar sample;

    /* Send bit marker. */
    owClear();
    _delay_us(1);
    owSet();
    _delay_us(10);

    /* Check if a slave keeps pulled the OW line low. */
    sample = owGet();

    /* Wait until slaves release OW line, max. 120µs. */
    _delay_us(120);

    /* Return bit from slave. */
    return (sample?0:0x80);
}


/* Read a byte from onewire. */
uchar owReadByte(void) {
  uchar data;

    data=owReadBit();
    data&gt;&gt;=1;
    data|=owReadBit();
    data&gt;&gt;=1;
    data|=owReadBit();
    data&gt;&gt;=1;
    data|=owReadBit();
    data&gt;&gt;=1;
    data|=owReadBit();
    data&gt;&gt;=1;
    data|=owReadBit();
    data&gt;&gt;=1;
    data|=owReadBit();
    data&gt;&gt;=1;
    data|=owReadBit();

  return data;
}


/* Write a bit to onewire. */
static void owWriteBit(uchar bit) {
    /* Start bit marker. */
    owClear();
    _delay_us(1);

    /* If bit should be 1, immediately release OW line. */
    if (bit &amp; 0x01) {
        /* Release OW line. */
        owSet();

        /* Wait 60µs. */
        _delay_us(60);
    } else {    
        /* Wait 60µs. */
        _delay_us(60);

        /* Release OW line. */
        owSet();
    }   
}


/* Write a byte to onewire. */
void owWriteByte(uchar data) {
    owWriteBit(data);
    data&gt;&gt;=1;
    owWriteBit(data);
    data&gt;&gt;=1;
    owWriteBit(data);
    data&gt;&gt;=1;
    owWriteBit(data);
    data&gt;&gt;=1;
    owWriteBit(data);
    data&gt;&gt;=1;
    owWriteBit(data);
    data&gt;&gt;=1;
    owWriteBit(data);
    data&gt;&gt;=1;
    owWriteBit(data);
}


/* Read ROM onewire command. */
uchar owReadROM(void) {
    uchar i, crc;

    /* Onewire reset. */
    if (owReset() == 0) {
        /* No slave present. Fail. */
        return 0;
    }

    /* Read ROM for DS2400 and DS2401. Other slaves will ignore this command. */
    //owWriteByte(0x0f);
    owWriteByte(0x33);

    /* Read 8 bytes answer from OW slave. */
    crc = 0;
    for (i = 0; i &lt; 8; i++) {
        iButtonBuffer[i] = owReadByte();
        crc = _crc_ibutton_update(crc,iButtonBuffer[i]);
    }

    /* Remember the iButton ID is valid. */
    iButtonBufferValid = (crc == 0);

    /* Success if crc is 0. */
    return iButtonBufferValid;
}