import time, board def read_data(pin_name): data = [] j = 0 time.sleep_ms(1200) N1 = board.pin(pin_name, board.GPIO.OUT) N1.value(0) time.sleep_ms(20) N1.value(1) time.sleep_us(30) N1 = board.pin(pin_name, board.GPIO.IN) T1 = time.ticks_us() while N1.value() == 0: continue while N1.value() == 1: T2 = time.ticks_us() if time.ticks_diff(T2, T1) > 200000: # raise ValueError("[MixNo]:Sensor read error") break continue while j < 40: k = 0 while N1.value() == 0: continue while N1.value() == 1: k += 1 if k > 100: break if k < 15: data.append(0) else: data.append(1) j = j + 1 del N1 humidity_bit = data[0:8] humidity_point_bit = data[8:16] temperature_bit = data[16:24] temperature_point_bit = data[24:32] check_bit = data[32:40] humidity = 0 humidity_point = 0 temperature = 0.0 temperature_point = 0 check = 0 for i in range(8): humidity += humidity_bit[i] * 2 ** (7 - i) humidity_point += humidity_point_bit[i] * 2 ** (7 - i) temperature += temperature_bit[i] * 2 ** (7 - i) temperature_point += temperature_point_bit[i] * 2 ** (7 - i) check += check_bit[i] * 2 ** (7 - i) tmp = humidity + humidity_point + temperature + temperature_point # print(humidity_point,temperature_point) if check == tmp: # print('temperature is',temperature,'-wet is',humidity,'%') return (temperature + temperature_point / 10, humidity) else: # print('Error:',humidity,humidity_point,temperature,temperature_point,check) return (None, None)