从WaveForms SDK发送数据到ThingSpeak.com
概述
由MathWorks创建的ThingSpeak是一个收集、查看和分析云数据的在线平台。本指南通过将你的WaveForms SDK兼容的Digilent测试和测量设备捕获的数据发送到ThingSpeak所需的步骤,并以两个可选的例子结束。
一个示例使用PMOD MIC3捕获声音,然后,从测量中,使用的测试和测量设备计算噪声水平。在相应的东西吞噬通道上,噪声水平测量以四种不同的方式可视化。另一个例子使用模拟发现板和阻抗分析器来测量不同电子元件的电阻,电抗和电容,然后将数据发布在意见通道上。
有关如何在Linux模式下运行Analog Discovery Pro的噪声级测量示例的详细说明,请选中以下指南:库存
注意:波形可以通过以下方式安装配置ThingSpeak频道
去thingseak.com.然后注册或者注册。 当向ThingSpeak频道上传数据时,它将在不同的图上逐字段显示。要修改这些默认图形,或向通道添加其他数据可视化方法,您可以使用可视化或小部件预设,您可以修改默认图形的MATLAB代码,或者您可以编写自己的代码来可视化数据。 要查看ThingSpeak通道在项目中的使用情况,您可以尝试本指南中提供的示例,也可以创建自己的示例。 在此示例中,PMOD MIC3麦克风模块将与数字测试和测量装置一起使用,以测量噪声水平。PMOD在SPI接口上通信,将连接到测试和测量设备的数字I / O线,如下所示:SS到DIO线0(DIO 24在数字发现上),味噌DIO 1(DIO 25在数字发现)和SCK到DIO 2(DIO 26在数字发现上)。对PMOD的电源也由使用的测试和测量装置提供,因此VCCPmod的引脚应该连接到设备的正极电源(数字发现上的VIO),两个设备的接地端连接在一起,如图右侧所示。 完整的源代码可以从这里下载:使用Pmod MIC3与Arduino Uno. 在脚本开始时,导入必要的模块,然后定义ThingSpeak通道的地址。要进入你自己的频道,请使用你自己的频道API输入地址。 这里还定义了用于与Pmod通信的DIO行,以及控制通信和数据处理的全局变量。在从WaveForms SDK中调用任何函数之前,有必要先加载动态库。 对于重复的任务,如重置和关闭使用的仪器,显示错误消息和读取SPI上的数据,使用用户定义的函数。某些关键字和中断处理程序也必须在使用它们之前定义。 在使用测试测量设备之前,需要将其连接到主机上。为了安全连接它,应该避免设备被其他软件使用,或由于其他原因而无法使用的情况。 为了开始与连接的Pmod通信,它必须通电。在支持该特性的设备中,电源的输出电压应该设置为3.3V,因为这是Pmod的推荐工作电压。然而,根据其数据表,5V的电源电压不应损坏pmod。 麦克风通电后,需要对SPI接口进行初始化。设置完通信参数后,执行虚拟读操作,以开始驱动串行时钟。 测量是连续进行的,直到按下Ctrl+C。测量结果平均,然后转换为DB(该转换只是真实噪声水平的近似值)。 转换的结果被推到截止口通道。如果出现通信错误,或者进程中断,则使用使用的仪器,并且程序完成。 指示器可以从通道中添加私人/公共视图,添加可视化那添加小部件那MATLAB分析,或MATLAB可视化纽扣。 可以绘制测量的噪声水平,或者在仪表小部件上显示。也可以显示测量值的直方图,以及虚拟领导,表示危险的噪声水平。在数据处理中使用的一个重要MATLAB功能是thingSpeakRead (). 在这个例子中,将使用阻抗分析仪和模拟发现板来测量不同电子元件的电阻、电抗和电容。在本指南中阻抗分析仪的模拟发现将用于模拟发现2。如果您计划使用Analog Discovery Studio或Analog Discovery 2而不使用阻抗分析仪,请检查本指南中的连接图:
在使用测试测量设备之前,需要将其连接到主机上。为了安全连接它,如果设备被其他软件使用,或者由于其他原因无法使用,应该向用户发出信号。 初始化阻抗分析仪,具有1MΩ(阻抗分析器板的参考电阻)的参考电阻,并丢弃一个测量以强制启动新的。 测量是连续进行的,直到按下Ctrl+C。测量结果上传到给定的ThingSpeak频道。如果出现通信错误,或进程中断,所使用的仪器停止,程序结束。 既然数据可以在测试和测量设备之间传输,并且可以根据需要修改脚本。 有关Waveforms SDK的更多信息,请参阅其测试和测量勤勉论坛的部分。硬件
软件
例子
硬件设置
软件
进口模块”“”“进口sys这个模块提供了访问解释器使用或维护的一些对象以及与解释器进行强交互的函数的权限进口时间#此模块提供了各种功能来操纵时间值从ctypes进口*# Python中的C数据类型进口信号#此模块提供使用信号处理程序的机制进口请求#请求HTTP库# ----------------------------------------------------------------------------------------------------------"""与ThingSpeak沟通的变量"""url=“https://api.thingspeak.com/update?api_key=E ************** 7”# ----------------------------------------------------------------------------------------------------------连接和SPI的变量#定义通信频率,单位为Hzspi_frequency=1E6.#引脚用于芯片选择(diom24 on Digital Discovery)spi_CS=0.#引脚用于主进从出(dio25在数字发现)spi_miso.=1#引脚用于串行时钟(DIO 26在数字发现上)spi_SCK=2#平均样本平均=1000# ----------------------------------------------------------------------------------------------------------"""加载波形SDK"""如果sys.平台.startswith(“赢”的): dwf=cdll。LoadLibrary(“dwf.dll”的)在Windows上#elsys.平台.startswith(“达尔文”的): dwf=cdll。LoadLibrary(“/图书馆/框架/ dwf.framework / dwf”的)#在macOS别的: dwf=cdll。LoadLibrary(“libdwf.so”的)在Linux上#
“”“函数重置所有乐器,关闭设备并quit”“defclose_device.(征=0.那框架=0.的):符号=框架#假框架=征#假打印(“设备断开连接\ n“的)DWF。FDwfDigitalSpiReset(HDWF.的)DWF。fdwfditigitaloutreset.(HDWF.的)DWF。FDWFDIGITIALINRESET.(HDWF.的)DWF。FDwfAnalogIOEnableSet(HDWF.那c_int(错误的的)的)DWF。fdwfdeviceClose.(HDWF.的)sys.出口(的)# ----------------------------------------------------------------------------------------------------------"""函数显示上次的错误信息"""defdisplay_error(err_msg=“没有错误”的):如果err_msg==“没有错误”:err_msg.=create_string_buffer(512.的)DWF。FDwfGetLastErrorMsg(err_msg的)err_msg=str(err_msg。价值的)[2:-1]如果err_msg==“:err_msg.=“未知错误”打印(“错误: ”+ err_msg +“\ n“的)返回err_msg# ----------------------------------------------------------------------------------------------------------"""函数读取spi数据"""defspi_read(的): lsb=c_int(的)最高有效位=c_int(的)DWF。FDwfDigitalSpiSelect(HDWF.那spi_CS那低的)#激活时间.睡觉(措施的)#毫秒spi_command=c_int(0.的)DWF。FDwfDigitalSpiWriteRead(HDWF.那spi_mode那c_int(8.的)那byref(spi_command的)那c_int(1的)那byref(lsb的)那c_int(1的)的)#读取1字节DWF。FDwfDigitalSpiWriteRead(HDWF.那spi_mode那c_int(8.的)那byref(spi_command的)那c_int(1的)那byref(最高有效位的)那c_int(1的)的)#读取1字节时间.睡觉(措施的)#毫秒DWF。FDwfDigitalSpiSelect(HDWF.那spi_CS那高的)#禁用返回lsb。价值|(MSB。价值<<8.的)# ----------------------------------------------------------------------------------------------------------“”“键盘中断处理程序和关键字”“信号.信号(信号.sigint.那close_device.的)高=c_int(1的)低=c_int(0.的)dwfdigitaloutidlezet.=c_int(3.的)
"""打开连接的T&M设备"""device_count=c_int(的)DWF。FDwfEnum(c_int(0.的)那byref(device_count的)的)#计算设备如果device_count。价值==0.:#如果没有连接设备,则终止程序display_error(“未检测到连接的设备”的)sys.出口(的)为了device_index.在范围(device_count。价值的):#获取设备的名称device_name=create_string_buffer(64的)DWF。FDwfEnumDeviceName(device_index.那device_name的)#连接设备HDWF.=c_int(的)DWF。fdwfdeviceopen.(device_index.那byref(HDWF.的)的)#检查是否成功如果HDWF。价值!=0.:打破如果HDWF。价值==0.:#如果设备不能被连接,终止程序display_error(的)sys.出口(的)#显示消息device_name=str(device_name。价值的)[2:-1]打印(device_name +“连接\ n“的)
“”“启动电源”“”如果device_name==“数字发现”或device_name==“模拟发现Pro 3450”或device_name==“模拟发现Pro 3250”:DWF。FDwfAnalogIOChannelNodeSet(HDWF.那c_int(0.的)那c_int(0.的)那c_double(3.3的)的)数字电压设置为3.3Veldevice_name==“模拟发现2”或device_name==“模拟发现工作室”:DWF。FDwfAnalogIOChannelNodeSet(HDWF.那c_int(0.的)那c_int(0.的)那c_double(真正的的)的)#启用正电源DWF。FDwfAnalogIOChannelNodeSet(HDWF.那c_int(0.的)那c_int(1的)那c_double(3.3的)的)#设置电压为3.3Veldevice_name==“模拟发现”:DWF。FDwfAnalogIOChannelNodeSet(HDWF.那0.那0.那1的)#启用正电源别的: display_error(“无法启动电源。设备不兼容。”的)close_device.(的)DWF。FDwfAnalogIOEnableSet(HDWF.那c_int(真正的的)的)#主启用打印(“电源开始\ n“的)时间.睡觉(5.的)#秒# ----------------------------------------------------------------------------------------------------------初始化spi通信"""DWF。FDwfDigitalSpiFrequencySet(HDWF.那c_double(spi_frequency的)的)#设置时钟频率DWF。fdwfditalspiclockset.(HDWF.那spi_SCK的)# SCK销DWF。FDwfDigitalSpiDataSet(HDWF.那c_int(1的)那spi_miso.的)#mico pin.DWF。fdwfditalspiidleeset.(HDWF.那c_int(1的)那dwfdigitaloutidlezet.的)#idle状态spi_mode=c_int(1的)#莫西人/味噌模式DWF。FDwfDigitalSpiModeSet(HDWF.那c_int(0.的)的)# CPOL=0 CPHA=0模式DWF。FDwfDigitalSpiOrderSet(HDWF.那c_int(1的)的)# MSB第一DWF。FDwfDigitalSpiSelect(HDWF.那spi_CS那高的)# CS销#dummy读取开始驾驶频道,时钟和数据DWF。fdwfditalspireadone.(HDWF.那c_int(1的)那c_int(0.的)那c_int(0.的)的)打印(“SPI接口初始化\ n“的)时间.睡觉(1的)#秒
测量并发送数据到ThingSpeak打印(“测量和上传数据。按ctrl+c停止…\ n“的)而真正的:试一试:#接收初始数据水平=0.#平均数据为了指数在范围(平均的):水平+=(spi_read(的)/10的)/平均#计算噪音水平D b=729.0532027级*0.4239354122+ \战俘(水平那2的)*0.8875384813*1的军医- \战俘(水平那3.的)*0.6195715088*1 e-8#发送数据并检查错误send_state.=请求。得到(URL +“&field1 =”+str(D b的)的)如果send_state。status_code.!=200: display_error(“无法用ThingSpeak交流”的)close_device.(的)除了KeyboardInterrupt:#退出,如果按Ctrl+C打破# ----------------------------------------------------------------------------------------------------------复位并关闭设备"""close_device.(的)
结果
硬件设置
软件
版本=create_string_buffer(16的)DWF。fdwfgetversion.(版本的)打印(“DWF版本:”+str(的版本。价值的)的)HDWF.=c_int(的)szerr=create_string_buffer(512.的)打印(“开放第一设备”的)DWF。fdwfdeviceopen.(c_int(-1的)那byref(HDWF.的)的)如果HDWF。价值==hdwfnone。价值:DWF。FDwfGetLastErrorMsg(szerr的)打印(str(szerr。价值的)的)打印("打开设备失败"的)辞职(的)
sts=c_byte.(的)频率=1E3参考=1E6.电容=c_double(的)电阻=c_double(的)电抗=c_double(的)打印(“参考:“+str(参考的)+“欧姆频率:”+str(frequnecy /1E3的)+“赫兹”的)DWF。FDwfAnalogImpedanceReset(HDWF.的)# 0 = W1-C1-DUT-C2-R-GND, 1 = W1-C1-R-C2-DUT-GND, 8 = AD IA适配器DWF。fdwfanalogimpedancemodeset.(HDWF.那c_int(8.的)的)DWF。FDWFANALOGIMPENCHEREFERCESET.(HDWF.那c_double(参考的)的)参考电阻值,以欧姆为单位DWF。FDwfAnalogImpedanceFrequencySet(HDWF.那c_double(频率的)的)频率(赫兹)DWF。FDwfAnalogImpedanceAmplitudeSet(HDWF.那c_double(1的)的)DWF。FDwfAnalogImpedanceConfigure(HDWF.那c_int(1的)的)#开始时间.睡觉(1的)#忽略上次捕获,强制一个新的DWF。FDwfAnalogImpedanceStatus(HDWF.那没有一个的)
打印(“按Ctrl+C停止…”的)试一试:为了一世在范围(1000的):时间.睡觉(60的)#秒如果DWF。FDwfAnalogImpedanceStatus(HDWF.那byref(sts的)的)==0.:DWF。FDwfGetLastErrorMsg(szerr的)打印(str(szerr。价值的)的)辞职(的)如果圣。价值!=2:打印(“没有完成测量”的)继续DWF。fdwfanalogimpedanceStatusmeasure(HDWF.那DwfAnalogImpedanceResistance那byref(电阻的)的)DWF。fdwfanalogimpedanceStatusmeasure(HDWF.那DwfAnalogImpedanceReactance那byref(电抗的)的)DWF。fdwfanalogimpedanceStatusmeasure(HDWF.那DwfAnalogImpedanceSeriesCapactance那byref(电容的)的)打印(str(一世的)+“抵抗:“+str(反抗。价值的)+“欧姆电荷:”+str(电抗。价值/1E6.的)+“莫姆电容:”+str(电容。价值*1 e12汽油的)+“pF”的)R.=请求。得到(URL +“&field1 =”+str(反抗。价值的)+“&field2 =”+str(电抗。价值/1E6.的)+“&field3 =”+str(电容。价值*1 e12汽油的)的)如果r。status_code.!=200:打印(R.的)打破除了KeyboardInterrupt:# Ctrl + C经过DWF。FDwfAnalogImpedanceConfigure(HDWF.那c_int(0.的)的)# 停止DWF。fdwfdeviceClose.(HDWF.的)
结果
下一步