LabVIEW Community editionでLINXを使ってESP32をLチカ

概要

非商用の場合に無償で使えるLabVIEW Community editionが公開されましたので触ってみました。

LabVIEWを触るまえにLINXなるArduinoと連携するライブラリの存在をしり、ESP32が対応していなかったので対応させてみました。

続編

上記記事の方が新しくて正確な情報になります。

LabVIEWとは?

まだよく触っていないのでわからないです。。。

上記に詳しいセットアップ方法と説明がのっています。

グラフィカルにプログラミングが可能で、制御系のデータとってきて加工してグラフ表示などがかんたんにできるそうです。

LINXとは?

LabVIEWのアドオンで、ArduinoやRaspberry Piなどと連携させることができます。内容的にはBlynkに近く、TCPかSerialでコマンドを投げ込んで連携をしています。

正式サポートしているデバイスは以下です。

  • Arduino(UNOなど)
  • Digilent(chipKIT Max32など)
  • PJRC(Teensy3.0など)
  • Sparkfun(RedBoard)
  • Raspberry Pi
  • BeagleBone Black

むむむ、ESP32がありません。アルファバージョンとしてESP8266がありましたので、がんばって移植してみました。

ちなみにツールを触る前に移植をはじめてしまったので、ツールの使い方はよくわかりません。

LinxESP32ライブラリ

上記のライブラリを作ってみました。オリジナルからフォルダ構成を変えて一般的なArduinoライブラリっぽくしてあります。

Arduinoライブラリマネージャーに登録依頼をしましたので、そのうちライブラリマネージャーよりインストールができるようになるはずです。

現在のところ、上記のリリースページから最新のZIPファイルをダウンロードして、Arduino IDEの「ライブラリのインクルード」の中にある「.ZIP形式のライブラリのインストール」からダウンロードしたZIPファイルを選択して登録してください。

事前準備(Wi-Fi情報の書き込み)

上記にまとめてありますが、個別スケッチの中にWi-Fiアクセスポイントなどの情報を書くのは非推奨です。

#include "WiFi.h"
 
void setup() {
  WiFi.begin("SSID", "KEY");
}
 
void loop() {
}

上記のようなスケッチを一度実行すると、最後に接続したときのSSIDとパスワードを本体に保存する機能がESP32にはあります。

#include "WiFi.h"
 
void setup() {
  WiFi.begin();
}
 
void loop() {
}

保存したあとでは、上記のように引数を省略することで最後に利用した設定を利用して接続します。

サンプルスケッチ

/****************************************************************************************
**  This is example LINX firmware for use with the ESP32 device
**
**  For more information see:           www.labviewmakerhub.com/linx
**  For support visit the forums at:    www.labviewmakerhub.com/forums/linx
**
**  Written By Ken Sharp
**
**  BSD2 license.
****************************************************************************************/

//Include All Peripheral Libraries Used By LINX
#include <SPI.h>
#include <Wire.h>
#include <EEPROM.h>
#include <ESP32Servo.h>
#include <WiFi.h>

//Include Device Specific Header From Sketch>>Import Library (In This Case LinxESP32.h)
//Also Include Desired LINX Listener From Sketch>>Import Library (In This Case LinxESP32WifiListener.h)
#include <LinxESP32.h>
#include <LinxESP32WifiListener.h>

//Create A Pointer To The LINX Device Object We Instantiate In Setup()
LinxESP32* LinxDevice;

//Initialize LINX Device And Listener
void setup()
{
  //Instantiate The LINX Device
  LinxDevice = new LinxESP32();

  //The LINX Listener Is Pre Instantiated.
  //Set SSID (Network Name), Security Type, Passphrase/Key, And Call Start With Desired Device IP and Port
  //If not set, it will connect with the last connection information
  //LinxWifiConnection.SetSsid("YOUR_NETWORK_NAME");
  //LinxWifiConnection.SetSecurity(WPA2_NONE);  //NONE, WPA2_PASSPHRASE, WPA2_KEY, WEP40, WEO104
  //LinxWifiConnection.SetPassphrase("PASSPHRASE");

  //Start With Fixed Port.  When Using This Method You Cannot Update The Port Using LINX VIs
  LinxWifiConnection.Start(LinxDevice, 44300);
}

void loop()
{
  //Listen For New Packets From LabVIEW
  LinxWifiConnection.CheckForCommands();

  //Your Code Here, But It will Slow Down The Connection With LabVIEW
  delay(1);
}

Wi-Fi情報を事前保存していた場合には、スケッチ例のままで実行することが可能です。

Debugging Enabled
Network Wifi Stack :: Starting
Connecting To Wifi Network..

.: LINX WIFI SETTINNGS :.
IP Address : 192.168.1.116
Port       : 44300
SSID       : 
Security   : None
Passphrase : 

実行したときにシリアルモニタに上記のような情報が出力されれば、Wi-Fiに接続されています。

IP Addressは環境によって違うはずです。

LabVIEW側の作業

サンプルの検索

LabVIEWを起動して、Helpの中に「Find Examples」があるので選択します。

Blinkのサンプルを開く

左上のタブを「Search」に変更しLINXで検索をします。

検索結果から「LINX – Blink (Simple) (TCP).vi」を開いてください。

設定変更

TCPで通信をする場合のサンプルです。今回はM5StickCの赤色LEDをLチカしてみたいと思います。

IP AddressとPortはESP32のシリアルモニタに表示された値を設定してください。DO ChannelはPIN番号をそのまま指定します。今回はGPIO10に赤色LEDが接続されているので10を指定しています。

実行(Run)

たまに実行時にエラーがでますが、何度か実行をするとLoop Rateが200弱の数値で変わっていくと接続成功です。

ESP32のシリアルモニタにも大量のログが表示されていると思います。この状態でLED ControlのボタンをクリックするとM5StickCの赤色LEDに状態が反映すると思います。

動作原理

Windowから「Show Block Diagram」を選択すると上記の画面がでます。この画面でどのような処理をするのかを設定しているようです。左側でTCPの設定をしていて、真ん中でデジタル出力の処理。右下がストップボタンで、右側が終了処理のようです。

ここを書き換えることでデジタル出力以外の処理も可能になります。

TODO

とりあえずESP8266のライブラリをWi-Fi経由でLチカできるところまで移植しました。それ以外の機能やESP8266とESP32で機能が違うDAC出力などはまだ対応できていません。シリアル経由の接続も未検証です。

ライブラリマネージャーへの登録を優先したので、コンパイル時に警告もでる状態ですので今後徐々に手を入れる予定です。

まとめ

まだ何ができるのかよくわからないですが、ちゃんと動かせばI2Cセンサーとかのデータをかんたんにグラフ化できるはずです。M5StickCの加速度計なども取得できるようにできればいろいろ便利かな?

コメントする

メールアドレスが公開されることはありません。

管理者承認後にページに追加されます。公開されたくない相談はその旨本文に記載するかTwitterなどでDM投げてください。またスパム対策として、日本語が含まれない投稿は無視されますのでご注意ください。