我对Python是相对较新的,并且整体编程。我逐渐掌握了这一点,但是在我的最新项目之一方面,我一直感到困惑。我有一组Atlas科学的Ezo电路,其中带有相应的传感器,直达我的Raspberry Pi 3.我可以很好地运行I2C脚本,并且大部分代码对我来说很有意义。但是,我想从传感器中获取数据,并在CSV文件中使用时间戳将其记录下来,以定时的间隔进行数据点。我不太确定如何从传感器中获取数据并将其放入CSV中。在Python中制作CSV非常简单,并且在填充数据中也很简单,但是我似乎不知道如何使进入CSV的数据与当一个人运行轮询功能时在终端中显示的数据相同。附件是Atlas网站的I2C示例代码。我对它进行了更多的注释,以帮助我更好地理解它。
我已经尝试理解轮询功能,但是对self.file_write和self.file_read方法感到困惑。我确实相信它们在这种情况下会被使用,但我通常对实施感到困惑。在下面,您将找到由Atlas Scientific
撰写的Python脚本(i2c.py(的链接https://github.com/atlasscientific/raspberry-pi-sample-code/blob/master/i2c.py
我猜是通过"轮询功能"猜测您是指代码的这一部分:
# continuous polling command automatically polls the board
elif user_cmd.upper().startswith("POLL"):
delaytime = float(string.split(user_cmd, ',')[1])
# check for polling time being too short, change it to the minimum timeout if too short
if delaytime < AtlasI2C.long_timeout:
print("Polling time is shorter than timeout, setting polling time to %0.2f" % AtlasI2C.long_timeout)
delaytime = AtlasI2C.long_timeout
# get the information of the board you're polling
info = string.split(device.query("I"), ",")[1]
print("Polling %s sensor every %0.2f seconds, press ctrl-c to stop polling" % (info, delaytime))
try:
while True:
print(device.query("R"))
time.sleep(delaytime - AtlasI2C.long_timeout)
except KeyboardInterrupt: # catches the ctrl-c command, which breaks the loop above
print("Continuous polling stopped")
如果是这种情况,则如果看起来您可以回收大部分代码以供您使用。您可以使用device.query(" r"(在控制台中看到的字符串,而不是打印它,而是抓住返回值并将其写入CSV。
我认为您应该将方法添加到Atlasi2c类中,该类将将数据写入文件
只是在atlasi2c init ((下键入此方法:
def update_file(self, new_data):
with open(self.csv_file, 'a') as data_file:
try:
data = "{}n".format(str(new_data))
data_file.write(data)
except Exception as e:
print(e)
添加到有关CSV文件名称:
的Atlasi2c Init语句self.csv_file = <my_filename>.csv # replace my_filename with ur name
然后在第51行(char_list = list(Map(lambda X:chr(ord(x(&amp; 〜0x80((,list(响应[1:](((下添加此行:
(self.update_file(''.join(char_list))
希望它对您有帮助。
欢呼,Fenrir