远地点USB传感器和Linux

远地点USB传感器可以直接连接到计算机(Windows或macOS X)上,以便使用included software.Apogee currently does not have software for our sensors with Linux systems; however, while we do not design custom programs, we can offer a set of commands, sample code, and comments from the developer of ApogeeConnect that should help provide a good foundation for getting your own program started using Apogee USB sensors (SP-420型,SQ-420,SQ-520型等)。此信息复制如下:

命令

传输的字节

退换商品

获取电压 55 21 5 [cmd + four byte floating point number]
读取校准 83 21

9[cmd+四字节浮点乘法器+四字节浮点偏移]

设置校准 84 XX XX XX YY YY YY YY 21(X=4字节浮点乘法器,Y=4字节浮点偏移) 9[同上]
读取序列号 87 21

5 [cmd + four byte floating point number]

GET_LOGGING_INTERVAL 21层

9[cmd+logging interval+sample interval]所有浮点

获取\u日志\u计数 f3 21层

5 [cmd + number of entries] four byte integer

获取\u日志\u条目 f2 XX XX XX XX 21(X=4字节长的整数)

5 [cmd + four byte floating point number]

SET_LOGGING_INTERVAL f0 XX XX XX YY YY YY YY 21(X=4字节浮点记录间隔,Y=4字节浮点采样间隔

8[cmd+接收的日志间隔+3个虚拟字节]

删除\u记录的\u数据 f4 21层 4[cmd+3虚拟字节]

有许多关于如何将十六进制数转换成浮点数的在线资源。这里有一个链接,上面有其他使用c的程序员的一些建议#https://protect-eu.mimecast.com/s/pokJCZzGOF7xBKtNSk8F?域=url9639。waterbearenergy.com.

来自远地点USB传感器的响应总是以little endian格式发送,这意味着先发送最低有效字节。

下面是一个超级基本的python类,类似于ApogeeConnect软件中使用的类。在代码中,您可以看到如何读取校准数据以及如何使用它将电压转换为可用数据的示例。这段代码是为量子传感器编写的,但对日射强度计和UV-USB传感器的工作方式相同。ApogeeConnect的开发人员发现python非常容易与这些传感器一起使用。如果使用python,如果还没有Pyserial库,则需要安装它。这段代码旨在使用python2.7在Windows上工作。对于其他操作系统和/或python3,可能需要进行一些修改。

*Please note: This code was thrown together without testing, so it may or may not need some debugging.

from serial import Serial

从时间导入睡眠

导入结构

获取\u VOLT='\x55!'

读取校准='\x83!'

设置\u CALIBRATION='\x84%s%s!'

读取\u SERIAL \u NUM='\x87!'

GET\u LOGGING\u COUNT='\xf3!'

GET\u LOGGED\u ENTRY='\xf2%s!'

删除\u记录的\u数据='\xf4!'

类(对象):

定义初始化(self):

“”“初始化类变量,并尝试连接到设备”“”

自量子=无

自补偿= 0.0

自身倍增器= 0.0

self.connect\到\设备()

def连接到设备(自身):

"""This function creates a Serial connection with the defined comport

and attempts to read the calibration values"""

端口= ' COM1 ' #你得check your device manager and put the actual com port here

自量子=串行(端口,115200,超时=0.5)

try:

self.quantum.write(READ_CALIBRATION)

乘数=self.quantum.read读取(5)[1:]

偏移量=self.quantum.read读取(4)

自身倍增器= 结构解包('

自补偿= 结构解包('

except (IOError, struct.Error), data:

print data

自量子=无

def get\ U微摩尔(自身):

“”“此功能将电压转换为微摩尔”“”

电压=自测电压()

如果电压==9999:

#如果你想的话,你可以在这里提出一些例外

返回

#下一行将伏特转换成微摩尔

微摩尔=(电压-自补偿) * 自身倍增器* 1000

如果微摩尔<0:

micromoles = 0

返回微孔

def read\ U电压(自身):

“”“此函数在1秒内平均5个读数,并返回

结果是

如果自量子==无:

try:

self.connect\到\设备()

除了IOError:

#如果需要的话,你可以在这里提出一些例外

返回

# store the responses to average

响应列表=[]

#更改为给定时间段内多个或少个样本的平均值

number_to_average = 5

#更改以缩短或延长每次测量的持续时间

# be sure to leave as floating point to avoid truncation

秒数=1.0

对于范围内的i(数字到平均值):

try:

self.quantum.write文件(获得电压)

响应=self.quantum.read读取(5)[1:]

除IOError外,数据:

print data

#知道出了问题的虚幻价值。可能会引起

#这里也有例外

返回9999

else:

如果没有响应:

持续

#如果响应不是4字节长,则此行将引发

#例外

电压=结构解包('

回应_列表.append(电压)

睡眠(秒数/平均数)

如果响应列表:

返回sum(response\u list)/len(response\u list)

返回0.0

**Please note: Apogee does not provide technical support for custom programs.