MosquittoをブローカーサーバーとしてM5 StackとMatlab間で通信する
受け渡すデータはJSON形式にする(Matlabのjsondecode()関数を使うと便利)
Mac上でMosquittoを使ってMQTTのブローカーサーバをたてる
$ mosquitto
M5stackからは3軸の加速度データをJSONでダンプし、MQTTで/accトピックにPublishする。
このMATLABライブラリを使う
www.mathworks.com
matlabコード
サーバ側
clear; close all; myMQTT=mqtt('tcp://127.0.0.1'); mySub = subscribe(myMQTT,'acc', 'Callback','computeAcc');
コールバック関数(メインの処理を行うルーチン)
function computeAcc(~,json) json = strrep(json,"'",'"') json = eraseBetween(json,1,1) json = eraseBetween(json,strlength(json),strlength(json)) data = jsondecode(json); data end
注意点として、JSONのデコードが厄介だった。
M5stackからやってくるJSONは、キー文字列('ax'とか)がシングルクォーテーションで囲われている。
"{'ay': 0.026, 'az': 1.052, 'ax': -0.004}"
一方で、Matlabのjsondecode()は文字列キーがダブルクォーテーションでないといけない。
したがって以下のような文字列操作が必要だった(キー文字列のシングルクォーテーションをstrrep()でダブルクォーテーションに変更し、波括弧の前後にある不要なダブルクォーテーションをeraseBetween()で削除する)
json = strrep(json,"'",'"') json = eraseBetween(json,1,1) json = eraseBetween(json,strlength(json),strlength(json))