12
返回列表 发新帖
楼主: bjlx

[讨论] 收到的试用活动的树莓派板卡

[复制链接]
  • TA的每日心情
    开心
    2019-10-29 13:29
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-8-12 21:05:14 | 显示全部楼层
    分享到:
        树莓派开发板和实验面包板已经搭起来一个多星期了,摸索了好一阵,将采用DTH11的温湿度传感器、采用16位ADS1115芯片的模数采集模块、以及I/O口开关量的输入输出控制(输出测试-LED灯亮灭、输入测试-水银开关通断)这些电路基本上都测通了,将使用的python程序都跑了多次,发现了许多跑不通的问题,已逐一解决,现将心得和经验教训总结如下:

    IMG_20190812_184226.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-29 13:29
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-8-21 07:09:20 | 显示全部楼层
    以上是验证测试所用的整体模块安装在树莓派和面包板上的布局图,下面发一个分布测试的连接图

    分布验证测试连接图

    分布验证测试连接图
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-29 13:29
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-8-21 07:18:25 | 显示全部楼层
    经测试,数据采集模块ADS1115中实际只使用了4个插脚,将他们重新整合到一个gpio插座上的测试图如下:
    IMG_20190821_071145.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-29 13:29
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-8-21 07:24:09 | 显示全部楼层
    验证过可实际使用的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()

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-29 13:29
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-8-21 07:35:13 | 显示全部楼层
    在笔记本电脑上使用VPN调试可看到底实际运行结果是:

    vnc看到的实际运行及测试数据

    vnc看到的实际运行及测试数据
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-29 13:29
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-8-22 04:34:17 来自手机 | 显示全部楼层
    说明,以上电路及程序是将模数转换采集模块ADS1115和温湿度采集樸块DTH|11同时接入到GPIO囗上,在同一屏幕上显示,这也最接近最终目标电路和程序,基本上利用GPIO口的输入采集方式就可用它了,以后再优化,当前屏幕上显示分两部分,前面4段是ADS1115的4个输入通道采集到的模拟电压的显示,后面2段悬DTH11采集到的温湿度数据显示,ADS1115使用的是I2C通迅模式,DTH11使用的是类似SPI的单线串口通进模式,程序就是从上展示的,己调通。
        调试过程中发现很多问题,希望给后来的伙伴提醒一下:
    1:很多资料上介绍的模块对应程序是走不通的,包括我这次购买的ADS1115的这个模块所提供的对应I2c采集程序,里面有一处总是提示不对劲,后查找了很多资料,发现大家都是千篇一律的相同,不知是互相抄的呢还是彩的环境不对,总之用那个程序怎么都不行,后来查原始的国外英文版树莓派关于ADS1115的英文资料,按其介绍,调用核心的I2C通迅例程,分别调试才走通了,体会是,很多资料要实现到实用阶段,还得弄通孕原理,查看原始数据手册才可靠,碰到一个可借用的能走通的程序那真是福气了。
    2:我这次遇到的这两个网上提供的例程,都有个同样的问题,就是Python的屏幕输出命令Print,资料上介绍的实际跑起来都提示不对,后来才发现是使用的Python版本问题,python是解释型的语言,完全依赖于其版本环境,一般来说是向下兼容的,但2.×版本和3×版本上有个很大的区别就是print命令,之前的print命令后面不用加括号(),而现在的3.6,3.7版本的都要加括号()才行,我发现网上提供的这两个程序print命令的输出都是不带括号()的,而推荐的资料文章还说是运行在3.6下的,甚至今年前半年的资料上的程序都是这样,所以遇到这种情况,print的输出要带上括号()才能输出,这点要注意。
    3:这次测试,我用C语言程序也跑过,感觉各有千秋,C程序最终使用起来是一个可执行程序,比较方便,但初始的编程比较麻烦,对于现在这种更新换代和随时都有调整的这种环境来说,编写效率还是有些低,对当年还在用汇编语言编写单片机程序的我深有体会,我发现开源的Python确实比较好,尤其是有很多现成的的函数等都可调用,但是还是要以原始的开源发布例程为准,只要慢慢积累了可调用的子程序和函数后,开发达是会越来越快的,待有时间了后,对一些精品再用C来优化提高运行效率倒是不错的。

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 12:05 , Processed in 0.170608 second(s), 24 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.