从I2C连接的ATLAS科学传感器到CSV文件的数据遗传



我对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

相关内容

  • 没有找到相关文章

最新更新