我正在做一项工作,使用 ADC mcp3008 样本传感器数据并收集它们直到 10k。然后将其发送到 influxdb。
所有这些工作应该在 1 秒内完成。这才是重点。
现在的问题是,每条数据的时间戳非常不均匀。
如你看到的:
我希望时间戳统一为0.1ms。我的意思是 influsdb 中的时间精度应该是 0.1ms。
但不幸的是,写入参数time_ precision只有's'、'ms'、'u'或'n'。
所以我能做的就是让采样过程更加统一,对吗?
我使用多处理模块来完成这项工作。这是我的原始代码:
import Adafruit_GPIO.SPI as SPI # Import Adafruit GPIO_SPI Module
import Adafruit_MCP3008 # Import Adafruit_MCP3008
import serial
import time
import datetime
from influxdb import InfluxDBClient
from multiprocessing import Process, Queue
def producer(name):
i=0
while True:
begin=time.time()
body = []
while i<10000:
val = round(mcp.read_adc(0),4) #here read the data from SPI port
current_time = datetime.datetime.utcnow()
js = {
"measurement": "Double",
"time": current_time,
"tags": {
},
"fields": {
"sensor2": val
}
}
body.append(js)
i+=1
i=0
res = client.write_points(body) #Send influxdb 10k data at once
body.clear()
end=time.time()-begin
print(end,name)
if __name__ == "__main__":
HW_SPI_PORT = 0 # Set the SPI Port. Raspi has two.
HW_SPI_DEV = 0 # Set the SPI Device
mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(HW_SPI_PORT, HW_SPI_DEV))
client = InfluxDBClient(host='XXXXX', port=8086, username='admin', password='admin', database= 'db',ssl=False, verify_ssl=False)
p1 = Process(target=producer,args=(0,))
p2 = Process(target=producer,args=(1,))
p3 = Process(target=producer,args=(2,))
p4 = Process(target=producer,args=(3,))
p5 = Process(target=producer,args=(4,))
p6 = Process(target=producer,args=(5,))
p1.start()
p2.start()
p3.start()
p4.start()
p5.start()
p6.start()
是的...我必须经过六个过程才能在平均一秒内完成..
慕桂英546537
相关分类