Some time ago, we told you that you could use our .NET Proxy library with MATLAB. We decided to dig a little deeper into the subject to see if we could make this MATLAB support official. While doing so, we realized that we could do even better by creating native MATLAB classes. So today, we present you our brand new Yoctopuce Toolbox for MATLAB, in Beta version.
This new library implements a set of MATLAB classes enabling you to use Yoctopuce sensors and actuators. It includes a dynamic library written in C++ to take care of low level communications with the modules without requiring extra device drivers. This integration technique has the advantage of compatibility with UNIX architectures, contrarily to .NET which is Windows-centric. It is even compatible with most Simulink use-cases.
The library is directly available on our web site as a MATLAB Toolbox which you can install in one click. If you only want to have a look at how it is built, you can also load a zip file or go see the source code on GitHug.
All the classes are assembled in a YoctoProxyAPI package. To simplify the code below, we import all the classes of the package, but it is obviously not compulsory:
All the general functions of the library are gathered in the YAPIProxy class in the shape of static methods. The first method that you must call, RegisterHub(), is used to indicate where the Yoctopuce modules are located. The library can use modules connected through the network or directly connected by USB.
0×0 empty char array
If we had wanted to use modules connected via a YoctoHub-Wireless-n for example, we would have replaced the 'usb' string with an IP address such as '192.168.1.100'. Let's now see how to list all the detected modules:
ans = 2×1 cell
This function returns a list of hardware identifiers, corresponding to each module that was found. In a similar way, we can list all the temperature sensors, whatever their type or their distribution on physical modules, in the case of modules with several inputs:
ans = 2×1 cell
Driving command modules
The Yoctopuce library provides distinct classes enabling you to drive the outputs of command modules through properties. For example, with the YRelayProxy class, you can drive relay outputs, and with the YCurrentLoopOutputProxy class you can drive outputs in 4-20mA current loop. Here is a first example of use:
pump.State = 'State_B';
If you have given a logical name to the output, for example with the VirtualHub, you can also find the relay through its name:
In this second example, rather than commuting the relay in a definitive manner, we requested it to switch to the B state for a 2000ms duration only.
You can easily consult the interesting properties of the interface objects:
YoctoProxyAPI.YRelayProxy with properties:
Show all properties
Using sensor type modules
To use sensors, the principle is very similar: you look for the wanted function through its hardware name or the logical name that you have previously assigned to it, then you can read its value in the CurrentValue property. The measuring unit is available in the Unit property. If you display the object, you can find other useful properties of the sensor, such as here in the case of a Yocto-Thermocouple:
YoctoProxyAPI.YTemperatureProxy with properties:
Show all properties
measure = sprintf("%f %s", tc.CurrentValue, tc.Unit)
measure = "27.620000 °C"
You can note that the description of the object includes not only the measured temperature, but also the kind of thermocouple which has been configured.
Short example in one block
Here is a short example of a control process:
light = YLightSensorProxy.FindLightSensor('diningRoom');
lightControl = YRelayProxy.FindRelay('lightSwitch');
redButton = YAnButtonProxy.FindAnButton('redButton');
if light.CurrentValue < 30
% turn on the light
lightControl.State = 'State_B';
% Frees all the resources
A few comments on the code:
- As you can see, most of the interaction with the Yoctopuce modules is performed through the properties, which makes reading the code easier.
- Moreover, we guaranty that access to properties is almost instantaneous, as the properties are refreshed in a background task through an independent process. It's the specificity of our "Proxy" libraries.
- The call to FreeAPI at the end frees the USB port and disconnect the MATLAB objects from the Yoctopuce modules.
All the classes are defined in MATLAB language, but they delegate a large amount of the work to the C++ Proxy library, provided as a dynamic library. The toolbox distribution includes the dynamic library binaries for Windows, and Linux in 32/64 bits, and for MacOS in 64 bits, which should enable you to use it on all these platforms (we haven't tested MacOS yet). The source code of the dynamic library is available.
What is not yet available in this Beta version
Examples for each Yoctopuce module
All the Yoctopuce libraries include an example of use for each module. The MATLAB library won't make exception, you're entitled to a Live Script for each module when the library is officially available. In the mean time, you'll have to make do with the examples in this file. Online help in MATLAB should however enable you to find what you need during the Beta-test period.
We haven't yet generated the reference file detailing the use of each class. However, you already have the online help in MATLAB. If you want explanations on the properties and the list of classes, you can meanwhile read the documentation of the ".NET Proxy" library which is based on the same structure.
Use of the data logger
Yoctopuce sensors are able to record measures on their embedded flash memory. We have planned to allow easy access to it as Time Tables, but this isn't yet available. The only problem with Time Tables is that they appeared only in MATLAB 2016b. If possible, we will therefore provide an interface based on Time Series as well.
Use with Simulink
We have decided to implement our library classes as MATLAB System Objects. This should enable you to use them directly in Simulink with System Blocks, but we will come back to this topic later when we will have made more headway in this matter.
And what next?
We are going to finalize the development in the coming weeks. Don't hesitate to contact us to provide us with your feedback by mail at firstname.lastname@example.org so that this library best suits your needs!