Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从ADS1115 Python向MySQL插入数据_Php_Python_Mysql_Raspberry Pi2_Adc - Fatal编程技术网

Php 从ADS1115 Python向MySQL插入数据

Php 从ADS1115 Python向MySQL插入数据,php,python,mysql,raspberry-pi2,adc,Php,Python,Mysql,Raspberry Pi2,Adc,使用ADC ADS1115从raspberry pi中的加速计传感器提取数据时出现问题 我使用这段代码将数据插入mysql # Author: Tony DiCola # License: Public Domain # Import the ADS1x15 module. import Adafruit_ADS1x15 import MySQLdb import time import datetime # Create an ADS1115 ADC (16-bit) instance. ad

使用ADC ADS1115从raspberry pi中的加速计传感器提取数据时出现问题

我使用这段代码将数据插入mysql

# Author: Tony DiCola
# License: Public Domain
# Import the ADS1x15 module.
import Adafruit_ADS1x15
import MySQLdb
import time
import datetime
# Create an ADS1115 ADC (16-bit) instance.
adc = Adafruit_ADS1x15.ADS1115()
# Or create an ADS1015 ADC (12-bit) instance.
#adc = Adafruit_ADS1x15.ADS1015()

# Note you can change the I2C address from its default (0x48), and/or the I2C
# bus by passing in these optional parameters:
#adc = Adafruit_ADS1x15.ADS1015(address=0x49, busnum=1)

# Choose a gain of 1 for reading voltages from 0 to 4.09V.
# Or pick a different gain to change the range of voltages that are read:
#  - 2/3 = +/-6.144V
#  -   1 = +/-4.096V
#  -   2 = +/-2.048V
#  -   4 = +/-1.024V
#  -   8 = +/-0.512V
#  -  16 = +/-0.256V
# See table 3 in the ADS1015/ADS1115 datasheet for more info on gain.
GAIN = 1

time_sensor = time.time()
# Main loop.
x = [1]*4
y = [2]*4
z = [3]*4   
for i in range(4):
    x[i] = adc.start_adc(i, gain=GAIN)
    y[i] = adc.start_adc(i, gain=GAIN)
    z[i] = adc.start_adc(i, gain=GAIN)
# Read the specified ADC channel using the previously set gain value.
# Once continuous ADC conversions are started you can call get_last_result() to
db = MySQLdb.connect("localhost", "root", "raspberry", "sensor_log")
curs=db.cursor()

while True:
    try:
        curs.execute("""INSERT INTO table_sensor_log(time, koordinatx, koordinaty, koordinatz) 
        values(%s,%s,%s,%s)""",(time_sensor,x[i],y[i],z[i]))
        db.commit()
    except:
        print "Error"
        db.rollback()
    time.sleep(1)
db.close()
问题是,当我运行该脚本时,接收到的数据被复制,该脚本只从加速计传感器的第一个数据中获取数据,然后重复插入

这就是我得到的

+-------+------------+------------+------------+------------+
| id    | time       | koordinatX | koordinatY | koordinatZ |
+-------+------------+------------+------------+------------+
| 24743 | 1472624612 |      15443 |      20351 |      20454 |
| 24744 | 1472624612 |      15443 |      20351 |      20454 |
| 24745 | 1472624612 |      15443 |      20351 |      20454 |
| 24746 | 1472624612 |      15443 |      20351 |      20454 |
| 24747 | 1472624612 |      15443 |      20351 |      20454 |
| 24748 | 1472624612 |      15443 |      20351 |      20454 |
+-------+------------+------------+------------+------------+

我需要传感器的真实数据,如果我使用print,数据将正确显示,但当我将其插入mysql时,数据将是这样的。

将光标初始化移动到循环内

while True:
    try:
        curs=db.cursor()
        curs.execute("""INSERT INTO table_sensor_log(time, koordinatx, koordinaty, koordinatz) 
        values(%s,%s,%s,%s)""",(time_sensor,x[i],y[i],z[i]))
        db.commit()
        curs.close()
    except:
        print "Error"
        db.rollback()
    time.sleep(1)

ads1115只有一个模拟读卡器,您可以看到4个模拟引脚,但都通过多路复用器连接一个模拟读卡器, 所以,当您试图读取引脚0到引脚1的多路复用器单元需要时间进行转换。对于一点点你们必须延迟,可能是10微秒。
您可以在数据表ads1115上看到,在连续模式下读取860。连续模式意味着只需读取一个pin。如果在ads1115上读取4针,则必须等待

能否在curs.execute(..)之前添加printf并检查结果?结果是重复的,但当我尝试使用命令python script.py手动运行脚本时,mysql上的值不同,而不是重复的。我尝试使用watch命令和crontab每秒自动运行脚本,但这会减慢服务器的速度@sr3z