ESP32でLINX for LabVIEW入門 その1 環境構築とLチカ

概要

非商用の場合に無償で使えるLabVIEW Community editionと、そこに最初から入ってるArduino連携用のプラグインLINXを使って、ESP32を触ってみたいと思います。

LabVIEW Community editionとは?

グラフィカルプログラミングで、データ処理や制御を行うことができるツールです。

日本語での製品ページは上記かな?

最低でも年間67,600円かかるものが、非商用の場合に無償で使えるエディションが公開されました。

上記からアカウントを作る必要がありますがダウンロードして、インストールすることで比較的かんたんに使うことが可能です。

LINXとは?

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

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

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

ESP32がないので、ベータ版のESP8266から移植してみました。

必要機材

  • Windowsパソコン
  • ESP32

Windows7以降で、32ビットでも64ビットでも動かすことができます。LANやWi-FiもしくはBluetoothを搭載しているものが必要です。

ESP32はどのボードでもよいと思います。私はM5StickCを利用しています。

waves ESP32 ESPDuino-32 (ESP-WROOM-32)
waves
ESPDuino-32 開発ボード ESP-32 WiFi Bluetooth 4.2 モジュール

ただ制御でいろいろなピンを使おうとおもったら、端子の使いやすい普通のESP32や、Arduino UNOと同じ形のボードなどの方が使い勝手がいいはずです。

セットアップ

LabVIEW Community edition

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

また、この記事の最後に資料として、無料で公開している電子書籍を紹介しています。そちらにも丁寧に紹介されています。基本的な使い方の勉強はこの電子書籍が一番適していそうです。

LINX

LabVIEW Community editionと一緒にセットアップされますので、特別作業は必要ありません。

ESP32

Arduino Coreなどの開発環境を構築する必要があります。

Arduino IDE

上記からWindows appではなく、Windows Installerをセットアップするのをおすすめします。Windows appバージョンは、いろいろ権限が厳しいのでうまくうごかないことがあります。

ボードマネージャーよりESP32追加

  • https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/boards_manager.md

上記のページに書いてあるStable releaseのURLを、Arduino IDEの設定から「追加のボードマネージャーのURL」に追加します。そのあとにボードマネージャーからESP32を追加します。

LinxESP32ライブラリ追加

ライブラリマネージャーよりLinxESP32を追加します。

頻繁にバージョンアップしているので、なるべく最新版にしてください。また、本ブログで紹介していない機能は未検証ですので、たぶん動かないです。ブログの紹介と共にライブラリの調整をすすめています。

LinxESP32の仕組み

LINXはArduinoなどのボードとシリアルやTCPを使って通信を行い、ボードの情報をLabVIEWで扱えるようにする橋渡しをするツールです。

LinxESP32はESP32側で動かすファームウエアで、パソコンで動いているLINX for LabVIEWと連携をするためのものです。

ESP32で使える通信はWi-FiとBluetoothSerialになります。一応通常のUSBシリアルでも動くと思いますが、有線で動かすのであればArduino UNOなどを使ったほうが安定していると思います。

Wi-Fiの場合

比較的高速で通信を行うことができます。Wi-Fiアクセスポイントが別途必要で、パソコンと同じネットワークに接続する必要があります。

ESP32の場合には最後に接続したWi-Fiアクセスポイントの情報を覚えていますので、接続済みのボードであればサンプルのスケッチを動かすだけで接続することができます。

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

上記のようなコードを動かすか、サンプルのコードでSSIDとKEYを指定して接続してください。

Wi-Fiアクセスポイント保存済みの場合

スケッチ例の中にある「LinxESP32」->「ESP32_Wifi」のままESP32に転送することで動くはずです。

Wi-Fiアクセスポイント未設定の場合

スケッチ例の中にある「LinxESP32」->「ESP32_Wifi」を開き、Wi-Fiアクセスポイントの情報を編集してからESP32に転送します。

  LinxWifiConnection.SetSsid("SSID");
  LinxWifiConnection.SetSecurity(WPA2_PASSPHRASE);
  LinxWifiConnection.SetPassphrase("KEY");

この3行を書き換えます。おすすめは事前に保存しておく方式で、ソースコードの中に保存するのはおすすめしません。

接続状況の確認

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

シリアルモニタを開きながら、ESP32にスケッチを転送してください。もしくはESP32を再起動すると再度接続状況が表示されます。

SSIDなどをスケッチで指定した場合には、上記の画面にKEYも含めて表示されるので注意してください。必要な情報はIPアドレスとポート番号になります。

LabVIEWの準備

LabVIEWを起動して、Helpの中にある「Find Examples」を開きます。

LINXを検索するか、Directory Structureを選び、MakerHub -> LINXの中にある「LINX – Blink (Simple) (TCP)」を選んでください。TCPと付いているサンプルがWi-Fiで接続できるものです。現在これしか無いようです。

LinxESP32ライブラリのexamplesの中にも何個か今後サンプルを準備したいと思っています。

上記が動かしている画面です。LinxESP32のIPアドレスとポート番号を入力し、DO(デジタル出力)のチェンネル番号はLEDに接続しているGPIO番号を指定します。私はM5StickCを使ったのでGPIO10を指定しています。

Runで動かすことができます。エラーがでることがありますが、何度か実行すると接続に成功します。

普通のESP32はLEDを内蔵していないと思いますので、別途外に抵抗経由でLEDを接続してためしてみてください。

右側のLED Controlというボタンをクリックすることで、ESP32のLEDが操作できたはずです。

BluetoothSerialの場合

Wi-Fiアクセスポイントがない場合や、既存のシリアル接続でのサンプルを動かす場合にはBluetoothSerialが便利です。

ESP32側の準備

スケッチ例の中にある「LinxESP32」->「BluetoothSerial」を開き、そのままESP32に転送してください。

Windows側の準備

ESP32でBluetoothSerialを動かしていると、WindowsからBluetoothデバイスとして認識することができるようになります。

Bluetoothデバイスの追加を選ぶと、上記のようにLinxESP32のあとにMacアドレスが表示されているデバイスがあるはずです。

追加されると、Windowsにシリアルポートが追加されるはずです。動きがおかしかった場合にはBluetoothのデバイスを削除してから、再度追加してみてください。

その後Wi-Fiと同じようにサンプルを検索しTCPと書いていない方の「LINX – Blink (Simple)」を開きます。

BluetoothSerialで追加されたシリアルポートを指定し、LEDの接続されているGPIOを指定します。

Wi-Fi接続とBluetoothSerial接続の差

基本的には同じ機能が使えます。速度はWi-Fiの方が倍以上早いですが、BluetoothSerialでもある程度の処理はできると思います。

ただし、サンプルはTCPは一個しかありませんので、圧倒的にシリアルを使ったほうが試しやすいです。一台だけ動かすのであればBluetoothSerialは便利ですが、複数台接続する場合にはWi-Fiを使ってTCPで接続したほうが管理が楽だと思います。

LINXとLibVIEWの仕組み

LibVIEWには設定や出力を表示するFront Panelの他に、実際の処理を設定するBlock Diagramがあり、Windowのメニューから表示することができます。

Wi-Fiの場合

シリアルの場合

どちらも、真ん中の処理はおんなじで、左側にあるI/OがTCPかシリアルか違うだけです。違うインターフェースでもLINXとLibVIEWが同じ処理で動くようにしてくれています。

しかしながら、TCPとシリアルでは設定する項目が違うので、シリアルのサンプルをTCPで動かす場合には、ちょっと変更しないと動かすことができません。

資料

LabVIEW Community Editionでプログラミングを楽しもう

日本LabVIEWユーザー会 有志による完全無料の電子書籍です。まず先に目を通すのはこの本だと思います。PDFとLabVIEWで動くAiファイルが含まれています。若干文字が小さい気がしますが、非常にありがたい資料です。

ラズパイ×ArduinoでI/O! LabVIEWコンピュータ・プログラム集

最近発売されたばかりのこの本を購入してみましたが、LabVIEWを使っている人向けにLINXを解説している書籍でした。データを取得しながらCSVに出力したり、タイマーを使って一定間隔でデータを集計する方法などを学ぶことができます。

しかしながらLabVIEW自体の解説はありませんので、LabVIEW初心者にはおすすめしません。

この本以外にも購入してみたかったのですが、Amazonで品切れなのでまずは最初に紹介した電子書籍を勉強したいと思います。

まとめ

LabVIEWをまだよく理解していないですが、似たようなツールを作りたいと思っていたので、一通りの機能がLinxESP32で動くのを確認するまでは手を入れていきたいと思っています。

続編

コメント

  1. 大橋康司 より:

    最近M5StickCの使い方を勉強させていただいていましたが、LabVIEW Community Editionの記事まであるとは思っていませんでした。
    LabVIEW Community Editionの電子書籍の制作メンバーです。紹介いただきありがとうございます。
    素晴らしい内容の記事でWiFiでのBlinkが簡単にできて驚いています。
    さらなるライブラリの調整を期待しております。

    • たなかまさゆき より:

      すてきな電子書籍を公開ありがとうございます!

      通常のGPIO系は安定して動くようになっていますが、I2CとかSPIとかは本家LINXでもあまりサンプルAiがないので動作検証に苦戦しています。
      あとはカスタムコマンド周りももう少しかんたんに使えるようにしたいのですが、手がだせていません。

      そして、既存Aiを流用するとWi-FiよりBluetoothSerialの方が動作検証がかんたんですね