提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Moku:Go初上手
  • 二、Python API的使用
  • 总结

前言

Moku:Go是Liquid Instruments公司为新理工科人才培养提供的完善工程实验教学解决方案,满足从强化基础教学到自主创新人才培养的课程体系。 Moku:Go集成8个仪器功能并提供选配可编程电源,取代笨重、繁琐的传统台式测量设备。学生可以将全套实验室装入书包,无论身在何处随时随地都可以学习。 Moku:Go可以通过自带Wi-Fi热点连接操控,集成了可靠,具有电气保护的信号接口,USB-C用作电源接口以及高速数据传输,以及6种可选颜色。Windows和Mac端的操作软件提供易用且直观的图形用户界面,还可以通过API与课程集成。 Moku:Go硬件以软件设计充分考虑了用户需求,确保学生获得完整、连贯的四年学习及课外实践体验。

本篇文章将从Moku:Go M1的基础使用入手,见识见识未来电子信息专业学生是如何进行实验的。

一、Moku:Go初上手

LI官网网址:http://www.li.market/,在“获取平台详情”选项中可以找到各类文档、Moku软件和各类API的使用方式。
将Moku:Go磁吸式电源插上电后,经过短暂的等待,黄灯变为绿灯,即代表它已经正式开启。然后就可以通过配套的数据线、或是用WIFI直接连接(硬件背后有该Moku:Go的编号和WIFI密码)的方式第一次连接Moku:Go。在设置界面可以修改设备名、修改密码,连接外界WIFI并手动分配IP地址等等,此后就可以通过寝室WIFI去访问它了,并且也有了远程控制(不需要去连设备本身的WIFI)的可能性。

时至今日,Moku:Go M1已经能够提供诸如示波器、频谱分析仪等11种仪器、功能以及自身具有的两通道可编程电源。不得不说的是它的界面相比于传统设备确实新颖了很多。

上图是PID控制器界面,支持两通道输入输出,对应Moku:Go M1的两通道模拟输入和输出。可同时进行两路PID调控,但由于仅支持两路输入,所以两路PID调控在这里的作用更多的是进行对比。(一般两路输入分别是当前量和目的量,通过PID控制让当前量趋于目的量,或是两者之差趋于零)
Moku:Go的界面简单易懂,并且输入输出口都是和常规的实验设备一样的,还是很好上手的。

二、Python API的使用

先来网址:https://apis.liquidinstruments.com/starting-python.html
大致就是说要求python3.5以上,pip install moku然后moku download就好了。
在当前你可能会下载版本2.4的API,而Moku:Go硬件可能只到2.2,所以某些函数可能会出现库里有,用不了。库里已经删了,你也用不了的情况出现。笔者当前没有试过去下旧版本的库,大部分还是能用的,小部分对照着官网文档和函数描述改一改就可以了。
大致使用方式:

$: python
>>> from moku.instruments import Oscilloscope
>>> osc = Oscilloscope('192.168.123.45')
>>> data = osc.get_data()
>>> print(data['ch1'], data['ch2'], data['time'])

通过get_data函数就获得了近时间内Moku:Go采集到的数据了,是包含两通道输出数值、对应时间的python字典形式。
调用get_data函数本身需要消耗不少时间,大概为0.3S左右。这与它数据读取的机制有关,当前不能确定的说法是:Python API读取Moku:Go数据是通过访问其开启的http服务实现的(因为某次不经意的报错告知http出现问题)。Moku:Go并没有建立更快速、持续的连接,所以目前不能通过Python API完成远程数据的实时读取。
通过这样的现象,笔者也猜测:Python API、Matlab API等方式,都只是对某一种方式的套壳,就比如是http的方式。只不过是调换了编程方式,本质过程没有改变,这也比较符合“接口”这一词。

对于设备的初始化函数:

osc = Oscilloscope('192.168.10.200',force_connect=False)

默认参数force_connect=False会让你在大部分情况下是连不上Moku:Go的(报错,当前API正有用户在使用),因为之前的用户没有接触占用(特别是使用Python API时),根据官方文档来说,要使用下面这句话,但大多时候似乎也是没用的。

osc.relinquish_ownership()

这里也就得提一嘴,Multi-Instruments功能还没有上线,说人话就是现在你还不能一边使用示波器、一边使用频谱分析仪。当你电脑软件在线时,你也不能通过Python API直接使用(不强制连接),否则会将电脑端踢下线。所以既要使用Python API,又要查看波形就得用Python相关的库去绘制。这里给出一个使用pyqtgraph绘图的小demo。

import pyqtgraph as pg
from moku.instruments import PIDController
import timename = "Input2"pid = PIDController('192.168.10.200', force_connect=True)# 获取pid数据的定时回调函数
def get_pid_data():time1 = time.time()info = pid.get_data()time2 = time.time()print("耗时:", time2 - time1)x = info['time']y = info['ch1']# print(x[int(len(x) / 2)])# print(y[int(len(x) / 2)])plot.setData(x, y, pen='g')if __name__ == '__main__':pid.set_monitor(1, name)pid.set_control_matrix(1, input_gain1=1, input_gain2=-1)pid.set_control_matrix(1, input_gain1=0, input_gain2=1)# pyqt's初始化# 创建窗口app = pg.mkQApp()  # 建立appwin = pg.GraphicsWindow()  # 建立窗口win.setWindowTitle(u'pyqtgraph 实时波形显示工具')win.resize(800, 500)  # 小窗口大小# 创建图表historyLength = 100  # 横坐标长度p = win.addPlot()  # 把图p加入到窗口中p.showGrid(x=True, y=True)  # 把X和Y的表格打开p.setRange(yRange=[-5, 5], padding=0)p.setLabel(axis='left', text='电压')  # 靠左p.setLabel(axis='bottom', text='时间')p.setTitle('PID')  # 表格的名字plot = p.plot()timer = pg.QtCore.QTimer()timer.timeout.connect(get_pid_data)  # 定时刷新数据显示timer.start(50)  # 多少ms调用一次app.exec_()

或者使用python中matlab绘图库。下述代码是从官方PID控制器例程中改过来的,保留了部分注释。(笔者自己写是不会有注释的哈哈)

# moku example: PID Controller Plotting Example
#
# This script demonstrates how to configure both PID Controllers
# in the PID Controller instrument. Configuration on the Channel 1
# PID is done by specifying frequency response characteristics,
# while Channel 2 specifies the gain characteristics.
#
# The output response of each PID Controller channel is plotted
# in real-time.
#
# (c) 2021 Liquid Instruments Pty. Ltd.
#
import matplotlib.pyplot as plt
from moku.instruments import PIDController# Connect to your Moku by its ip address using PIDController('192.168.###.###')
# or by its serial number using PIDController(serial=123)
i = PIDController('192.168.10.200', force_connect=False)try:# Configures the control matrix:# Channel 1: input 1 gain = 1 dB, input 2 gain = 0 dB# Channel 2: input 2 gain = 0 dB, input 2 gain = 1 dBi.set_control_matrix(channel=1, input_gain1=1, input_gain2=0)i.set_control_matrix(channel=2, input_gain1=0, input_gain2=1)# Configure the Channel 1 PID Controller using frequency response# characteristics#   P = -10dB# I Crossover = 100Hz#   D Crossover = 10kHz#   I Saturation = 10dB#   D Saturation = 10dB#   Double-I = OFF# Note that gains must be converted from dB firsti.set_by_frequency(channel=1, prop_gain=-10, int_crossover=1e2,diff_crossover=1e4, int_saturation=10,diff_saturation=10)# Configure the Channel 2 PID Controller using gain characteristics#   Overall Gain = 6dB#   I Gain       = 20dBi.set_by_gain(channel=2, overall_gain=6.0, prop_gain=20)# Set the probes to monitor Output 1 and Output 2i.set_monitor(1, 'Output1')i.set_monitor(2, 'Output2')# Set the timebasei.set_timebase(-1e-3, 1e-3) # +- 1msec#i.set_trigger(type='Edge', source='Input1', level=0)# Enable the output channels of the PID controlleri.enable_output(1, True, True)i.enable_output(2, True, True)# Get initial data frame to set up plotting parameters. This can be done# once if we know that the axes aren't going to change (otherwise we'd do# this in the loop)data = i.get_data()# Set up the plotting parametersplt.ion()plt.show()plt.grid(b=True)plt.ylim([-1, 1])plt.xlim([data['time'][0], data['time'][-1]])line1, = plt.plot([])line2, = plt.plot([])# Configure labels for axesax = plt.gca()# This loops continuously updates the plot with new datawhile True:# Get new datadata = i.get_data()# Update the plotline1.set_ydata(data['ch1'])line2.set_ydata(data['ch2'])line1.set_xdata(data['time'])line2.set_xdata(data['time'])plt.pause(0.001)except Exception as e:print(f'Exception occurred: {e}')
finally:# Close the connection to the Moku device# This ensures network resources and released correctlyi.relinquish_ownership()

记得把IP地址改成你自己手动或是DHCP分配的就好了。在设置界面就能看到Moku:Go当前的IP。

总结

虽然Moku:Go当前不是非常的全面,特别是不能多仪器并行是非常大的一个槽点,但“片上仪器”这种思想还是非常值得肯定的。对于学生来讲,使用灵活好用的界面、编程控制仪器等等都是很不错的体验,就看未来它会如何继续发展了。

LI雨骤Moku:Go M1初步体验相关推荐

  1. mysql connector api_mysql connector c++ 1.1 API初步体验

    mysql connector c++ 1.1 API初步体验 1,常用的头文件 #include #include #include #include #include #include 2,创建连 ...

  2. 初步体验数据驱动之美---TreeView

    1.前言 继上一篇<WPF应用基础篇---TreeView>的发布之后,有部分朋问我关于里面一些基础应用的问题,可能是我写得不够详细,所以在这里,我想再次那文章中的案例来谈谈初步体验数据驱 ...

  3. Docker Compose 简介、安装、初步体验

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  4. 一枚程序猿的MacBook M1使用体验

    前言 2020年11月11日双十一上午,苹果发布了M1芯片的新款Mac,其最大的变化就是将处理器从Intel换成了苹果自研的ARM芯片M1. 上一次苹果更换Mac芯片要追溯到2006年,14年前,苹果 ...

  5. 一枚程序猿的MacBook M1详细体验报告

    前言 2020年11月11日双十一上午,苹果发布了M1芯片的新款Mac,其最大的变化就是将处理器从Intel换成了苹果自研的ARM芯片M1. 上一次苹果更换Mac芯片要追溯到2006年,14年前,苹果 ...

  6. 我的 MacBook M1 使用体验

    点击上方"五分钟学算法",选择"星标"公众号 重磅干货,第一时间送达 前言 2020年11月11日双十一上午,苹果发布了M1芯片的新款Mac,其最大的变化就是将 ...

  7. 百度无线音乐盒刷打印服务器,百度 M-100 无线音乐盒 初步体验+简单拆解

    百度 M-100 无线音乐盒 初步体验+简单拆解 2014-01-23 13:26:55 18点赞 26收藏 15评论 前段时间京东上面这个盒子做活动,虽然手头蓝牙音箱啥子的也有几个,不过受到这个盒子 ...

  8. 浅谈升级到 MacBook Air M1的体验

    从定制顶配 MacBook Pro 15.4 升级到了丐中丐配置的 MacBook AIr M1,手边有这两台设备可以直观的对比,本文谈谈这次升级及实际体验和所发现的趣事. 升级前后的机型 在购买这台 ...

  9. ShardingSphere UI 初步体验

    简介 在上两篇文章中,尝试了ShardingSphere JDBC和Proxy的相关功能,本篇进行探索ShardingSphere的UI组件部分 示例运行 这个应该是一个管理配置之类的东西,国际惯例, ...

最新文章

  1. 汇博工业机器人码垛机怎么写_一文带您理解码垛机器人,原来它这么简单!
  2. Kubernetes — MACVLAN CNI
  3. 【安全工具】浅谈编写Java代码审计工具
  4. SAP销售发票同步产生会计凭证的两种做法
  5. vmware克隆Centos6.4虚拟机网卡无法启动问题
  6. LeetCode 226. 翻转二叉树(DFS BFS)
  7. 综评:5个方面看刚刚发布的Kubernetes 1.12
  8. elementUI 下拉框隐藏时触发相关事件(下拉框下拉显示时不触发)
  9. 经典面试题之赋值操作
  10. 快捷笔记应用Side Notes Mac
  11. Oracle Alert sid log 位置问题
  12. 基于EEG信号的睡眠分期算法记录2-一种新的全自动随机森林睡眠分期算法(英)
  13. JAVA实现字体扩大代码_[Java教程]jQuery实现设置字体大小代码实例
  14. Linux 下安装交叉编译工具链
  15. Lambert漫反射模型
  16. 关于Mariadb数据库 配置
  17. HBU-NNDL 实验四 线性分类
  18. 腾讯云IM集成(so easy)
  19. binlog实时同步
  20. java接口方式调用海康大华摄像机预览。

热门文章

  1. 诸葛io的技术架构图_大数据平台的技术演化之路 诸葛io平台设计实例
  2. T48566 【zzy】yyy点餐
  3. 北海450值得入手吗?附带(越野萝莉)照片
  4. 普通人如何从0到1,成为百万粉自媒体大V?
  5. 5G赋能行业:丢掉“传统”外衣,向“智”造加速
  6. 基于贝叶斯生存分析的《冰与火之歌》人物死亡率分析
  7. 视频直播应用的竞争分析
  8. 设置电子围栏 高德地图_地理围栏-API文档-开发指南-Web服务 API | 高德地图API
  9. RISC-V 开源模拟器环境构建
  10. 最全最细的零知识 (ZK) 证明解读