验证过可实际使用的ADS1115的Python程序如下:
#已经测试成功的实例程序------20190811 1.i2c地址从默认0x48改为0x4b,2.打印输出的命令要加() #!/usr/bin/python # coding: utf-8 import RPi.GPIO as GPIO import time channel = 37 #boad编号37,bcm引脚号26 data = [] #温湿度值 j = 0 #计数器 GPIO.setmode(GPIO.BOARD) #以BOARD编码格式 import sys sys.path.append('../') from DFRobot_ADS1115 import ADS1115 ADS1115_REG_CONFIG_PGA_6_144V = 0x00 # 6.144V range = Gain 2/3 ADS1115_REG_CONFIG_PGA_4_096V = 0x02 # 4.096V range = Gain 1 ADS1115_REG_CONFIG_PGA_2_048V = 0x04 # 2.048V range = Gain 2(default) ADS1115_REG_CONFIG_PGA_1_024V = 0x06 # 1.024V range = Gain 4 ADS1115_REG_CONFIG_PGA_0_512V = 0x08 # 0.512V range = Gain 8 ADS1115_REG_CONFIG_PGA_0_256V = 0x0A # 0.256V range = Gain 16 ads1115 = ADS1115() while True : time.sleep(1) #时延一秒 GPIO.setup(channel, GPIO.OUT) GPIO.output(channel, GPIO.HIGH) #时延 GPIO.output(channel, GPIO.LOW) time.sleep(0.02) #给信号提示传感器开始工作 GPIO.output(channel, GPIO.HIGH) GPIO.setup(channel, GPIO.IN) while GPIO.input(channel) == GPIO.LOW: continue while GPIO.input(channel) == GPIO.HIGH: continue while j < 40: k = 0 while GPIO.input(channel) == GPIO.LOW: continue while GPIO.input(channel) == GPIO.HIGH: k += 1 if k > 110: break if k < 8: data.append(0) else: data.append(1) j += 1 #print ("sensor is working.") #print (data) #输出初始数据高低电平 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 temperature_point = 0 check = 0 for i in range(8): humidity += humidity_bit * 2 ** (7 -i) #转换成十进制数据 humidity_point += humidity_point_bit* 2 ** (7 - i) temperature += temperature_bit * 2** (7 - i) temperature_point += temperature_point_bit* 2 ** (7 - i) check += check_bit * 2 ** (7 - i) tmp = humidity + humidity_point +temperature + temperature_point #十进制的数据相加 #if check == tmp: #数据校验,相等则输出 # print ("temperature : ", temperature, ", humidity :" , humidity) #else: #错误输出错误信息,和校验数据 # print ("wrong") # print ("temperature : ", temperature, ", humidity :" , humidity, " check : ", check, " tmp : ", tmp) #Set the IIC address ads1115.setAddr_ADS1115(0x4b) #Sets the gain and input voltage range. ads1115.setGain(ADS1115_REG_CONFIG_PGA_6_144V) #Get the Digital Value of Analog ofselected channel adc0 = ads1115.readVoltage(0) time.sleep(0.2) adc1 = ads1115.readVoltage(1) time.sleep(0.2) adc2 = ads1115.readVoltage(2) time.sleep(0.2) adc3 = ads1115.readVoltage(3) #print ("A0:%dmV A1:%dmV A2:%dmV A3:%dmV"%(adc0['r'],adc1['r'],adc2['r'],adc3['r'])) if check == tmp: #数据校验,相等则输出 #print ("temperature : ",temperature, ", humidity : " , humidity) print ("A0:%dmV A1:%dmV A2:%dmV A3:%dmV temperature:%d*C humidity:%d "%(adc0['r'],adc1['r'],adc2['r'],adc3['r'],temperature,humidity)) else: #错误输出错误信息,和校验数据 print ("wrong") #print ("temperature : ",temperature, ", humidity : " , humidity, " check : ",check, " tmp : ", tmp) print ("A0:%dmV A1:%dmV A2:%dmV A3:%dmV temperature:%d*C humidity:%d check:%d tmp:%d*C"%(adc0['r'],adc1['r'],adc2['r'],adc3['r'],temperature,humidity,check,tmp)) GPIO.cleanup()
|