diff --git a/modules/__pycache__/hdc1000.cpython-34.pyc b/modules/__pycache__/hdc1000.cpython-34.pyc new file mode 100644 index 0000000..57da013 Binary files /dev/null and b/modules/__pycache__/hdc1000.cpython-34.pyc differ diff --git a/modules/hdc1000.py b/modules/hdc1000.py index 8900345..0885c61 100644 --- a/modules/hdc1000.py +++ b/modules/hdc1000.py @@ -3,10 +3,7 @@ import time from pprint import pprint -try: - import smbus2 as smbus -except ImportError: - import smbus +import i2c I2CADDR = 0x40 @@ -14,7 +11,7 @@ TEMP_REG = 0x00 HUMID_REG = 0x01 CONFIG_REG = 0x02 -CONFIG_RST = (1 << 15) +CONFIG_RESET = (1 << 15) CONFIG_HEAT = (1 << 13) CONFIG_MODE_SINGLE = 0 CONFIG_MODE_BOTH = (1 << 12) @@ -31,74 +28,55 @@ SERIAL3 = 0xFD MANUFID = 0xFE DEVICEID = 0xFF -try: - bus = smbus.SMBus(1) -except: - print("No I2C bus found.") +bus = i2c.IIC(I2CADDR, 1) -def reset(): +def reset(extra = 0): config = ( - CONFIG_RST | - CONFIG_MODE_BOTH | + CONFIG_RESET | + CONFIG_MODE_SINGLE | CONFIG_TRES_14 | - CONFIG_HRES_14 + CONFIG_HRES_14 | + extra ) - bus.write_word_data(I2CADDR, CONFIG_REG, config) + bus.i2c([CONFIG_REG, config >> 8], 0) -def readSensors(): - bus.write_byte(I2CADDR, TEMP_REG) +def temperature(): + # Request temperature measurement + bus.i2c([TEMP_REG], 0) - time.sleep(0.05) + time.sleep(0.2) - temp = bus.read_byte(I2CADDR) - temp << 8 - temp |= bus.read_byte(I2CADDR) + data = bus.read(2) + temp = (data[0] << 8) | data[1] + #print(hex(temp)) + return (temp / 65536.0) * 165.0 - 40 - hum = bus.read_byte(I2CADDR) - hum << 8 - hum |= bus.read_byte(I2CADDR) +def humidity(): + # Request humidity measurement + bus.i2c([HUMID_REG], 0) - print(hex(temp)) - print(hex(hum)) + time.sleep(0.2) - #float temp = (read32(HDC1000_TEMP, 20) >> 16); - #temp /= 65536; - #temp *= 165; - #temp -= 40; - - #float hum = (read32(HDC1000_TEMP, 20) & 0xFFFF); - #hum /= 65536; - #hum *= 100; - - #return hum; + data = bus.read(2) + hum = (data[0] << 8) | data[1] + #print(hex(hum)) + return (hum / 65536.0) * 100.0 def drySensor(): - origconfig = bus.read_word_data(I2CADDR, CONFIG_REG) - newconfig = ( - CONFIG_RST | - CONFIG_HEAT | - CONFIG_MODE_BOTH | - CONFIG_TRES_14 | - CONFIG_HRES_14 - ) + # Turn on the heater + reset(CONFIG_HEAT) - bus.write_word_data(I2CADDR, CONFIG_REG, newconfig) + # Take 1000 reading as fast as possible + # (the heater is only activated when performing a reading) + for x in range(10000): + try: + temperature() + time.sleep(0.1) + except: pass - sleep(0.1) - - # Take 1000 readings - for x in range(0, 1000): - triggerMeasurements() - sleep(0.1) - - sleep(0.1) - - origconfig |= CONFIG_RST; - bus.write_word_data(I2CADDR, CONFIG_REG, origconfig) + # Turn off the heater + reset() def init(): reset() - manuf = bus.read_word_data(I2CADDR, MANUFID) - dev = bus.read_word_data(I2CADDR, DEVICEID) - print("Manufacturer:", manuf, "Device:", dev) diff --git a/modules/i2c.py b/modules/i2c.py new file mode 100644 index 0000000..b1cc295 --- /dev/null +++ b/modules/i2c.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +# Contributed by Raju and updated by Jim +# +# Use: +# import i2c +# device = i2c.IIC(,) +# example +# dev = i2c.IIC(0x32,1) +# dev.i2c([10,1,0,1],1) # sends bytes 10,1,0,1 and returns 1 byte +# dev.close() +# +import io +import fcntl + +# i2c.py +# 2016-03-14 +# Public Domain + +I2C_SLAVE=0x0703 + +# Based on 'notSMB' for an easier way to access the i2c bus using just one +# function. The main difference between this and notSMB is that the bus +# here will be dedicated to 1 device address +class IIC: + def __init__(self, device, bus): + + self.fr = io.open("/dev/i2c-"+str(bus), "rb", buffering=0) + self.fw = io.open("/dev/i2c-"+str(bus), "wb", buffering=0) + + # set device address + + fcntl.ioctl(self.fr, I2C_SLAVE, device) + fcntl.ioctl(self.fw, I2C_SLAVE, device) + + def write(self, data): + if type(data) is list: + data = bytes(data) + self.fw.write(data) + + def read(self, count): + s = '' + l = [] + s = self.fr.read(count) + return s + #if len(s) != 0: + # for n in s: + # l.append(rd(n)) + # return l + + + def close(self): + self.fw.close() + self.fr.close() + + def i2c(self,listin,nout): + self.write(bytearray(listin)) + rv = 0 + if nout != 0: + rv = self.read(nout) + return rv + diff --git a/modules/testhdc1000.py b/modules/testhdc1000.py new file mode 100644 index 0000000..9746117 --- /dev/null +++ b/modules/testhdc1000.py @@ -0,0 +1,57 @@ +#stributed with a free-will license. +# Use it any way you want, profit or free, provided it fits in the licenses of its associated works. +# HDC1000 +# This code is designed to work with the HDC1000_I2CS I2C Mini Module available from ControlEverything.com. +# https://www.controleverything.com/content/Temperature?sku=HDC1000_I2CS#tabs-0-product_tabset-2 + +import smbus +import time + +# Get I2C bus +bus = smbus.SMBus(1) + +# HDC1000 address, 0x40(64) +# Select configuration register, 0x02(02) +# 0x30(48) Temperature, Humidity enabled, Resolultion = 14-bits, Heater on +bus.write_byte_data(0x40, 0x02, 0x30) + +# HDC1000 address, 0x40(64) +# Send temp measurement command, 0x00(00) +bus.write_byte(0x40, 0x00) + +time.sleep(0.5) + +# HDC1000 address, 0x40(64) +# Read data back, 2 bytes +# temp MSB, temp LSB +data0 = bus.read_byte(0x40) +data1 = bus.read_byte(0x40) + +# Convert the data +temp = (data0 * 256) + data1 +print(hex(temp)) +cTemp = (temp / 65536.0) * 165.0 - 40 +fTemp = cTemp * 1.8 + 32 + +# HDC1000 address, 0x40(64) +# Send humidity measurement command, 0x01(01) +bus.write_byte(0x40, 0x01) + +time.sleep(0.5) + +# HDC1000 address, 0x40(64) +# Read data back, 2 bytes +# humidity MSB, humidity LSB +data0 = bus.read_byte(0x40) +data1 = bus.read_byte(0x40) + +# Convert the data +humidity = (data0 * 256) + data1 +print(hex(humidity)) +humidity = (humidity / 65536.0) * 100.0 + +# Output data to screen +print "Relative Humidity : %.2f %%" %humidity +print "Temperature in Celsius : %.2f C" %cTemp +print "Temperature in Fahrenheit : %.2f F" %fTemp + diff --git a/testprograms/camera/oneshot b/testprograms/camera/oneshot new file mode 100755 index 0000000..e0d3fd2 --- /dev/null +++ b/testprograms/camera/oneshot @@ -0,0 +1,11 @@ +#!/usr/bin/python3 +from picamera import PiCamera +from time import sleep + +camera = PiCamera() + +camera.start_preview() +sleep(5) +camera.capture('/home/pi/camera/pics/image.jpg') +camera.stop_preview() + diff --git a/testprograms/camera/preview b/testprograms/camera/preview new file mode 100755 index 0000000..103e318 --- /dev/null +++ b/testprograms/camera/preview @@ -0,0 +1,11 @@ +#!/usr/bin/python3 + +from picamera import PiCamera +from time import sleep + +camera = PiCamera() + +camera.start_preview() +sleep(10) +camera.stop_preview() +