TouchOSCでArduino NANO ESP32を操作する
1. 概要
TouchOSCのスライダーを操作してArduino NANO ESP32のLEDのRGBを操作してみます。
ArduinoOSCがとても便利です。
2. 環境
Arduino NANO ESP32
Arduino IDE 2.3.6
ArduinoOSC 0.6.0
TouchOSC Mk1 1.9.12.19 (有料アプリ)
3. 事前準備
Boards ManagerでArduino ESP32 Boardsをインストールする。
Manage LibrariesでArudino OSCをインストールする。
スマートフォンとArduinoは同じWiFiに接続する。
4. Arduino NANO ESP32を子機(STAモード)として扱う場合
この場合は、Arduino NANO ESP32とスマホを同じWiFiに接続します。
4.1 Arduino側のプログラム
以下のArduinoOSCのサンプルプログラムをベースに使わない部分を削除してLEDの部分を追記しました。
LEDのピン名についてはこちらを参考にしました。
#include <ArduinoOSCWiFi.h>
// WiFi stuff
const char* ssid = "Buffalo-G-0000";
const char* pwd = "c4wsdbs4g83xt";
const IPAddress ip(192, 168, 11, 201);
const IPAddress gateway(192, 168, 1, 1);
const IPAddress subnet(255, 255, 255, 0);
// for ArduinoOSC
const int recv_port = 54321;
void setup() {
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
Serial.begin(115200);
delay(2000);
WiFi.disconnect(true); // disable wifi
delay(1000);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pwd);
WiFi.config(ip, gateway, subnet);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.print("WiFi connected, IP = ");
Serial.println(WiFi.localIP());
OscWiFi.subscribe(recv_port, "/1/fader1",
[](const OscMessage& m) {
int r = m.arg<float>(0) * 255;
Serial.println( r );
analogWrite(LED_RED, 255 - r);
});
OscWiFi.subscribe(recv_port, "/1/fader2",
[](const OscMessage& m) {
int g = m.arg<float>(0) * 255;
Serial.println( g );
analogWrite(LED_GREEN, 255 - g);
});
OscWiFi.subscribe(recv_port, "/1/fader3",
[](const OscMessage& m) {
int b = m.arg<float>(0) * 255;
Serial.println( b );
analogWrite(LED_BLUE, 255 - b);
});
}
void loop() {
OscWiFi.update();
}
4.2 TouchOSCの設定
起動時に設定画面が開くと思うので、そこでConnectionsの中の1番上のOSCの項目をタップして以下の設定を行います。

TouchOSCのHostはArudino側で設定した192.168.11.201にします。
Port(outgoing)もArduino側で設定した54321にします。

設定を終えたら右上のDoneを押すとスライダの画面が表示されます。
(再度設定画面に移動するには右上の丸を押します。)
スライダを操作するとLEDのRGBが変化します。

5. Arduino NANO ESP32を親機(APモード)として扱う場合。
この場合はスマホはArduino NANO ESP32に接続します。
5.1 Arduino側のプログラム
#include <WiFi.h>
#include <ArduinoOSCWiFi.h>
// WiFi Access Point settings
const char* ap_ssid = "NanoESP32_AP";
const char* ap_password = "12345678";
const IPAddress ap_ip(192, 168, 4, 1);
const IPAddress ap_gateway(192, 168, 4, 1);
const IPAddress ap_subnet(255, 255, 255, 0);
// for ArduinoOSC
const int recv_port = 54321;
void setup() {
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
Serial.begin(115200);
delay(2000);
WiFi.disconnect(true); // disable wifi
delay(1000);
WiFi.mode(WIFI_AP);
WiFi.softAP(ap_ssid, ap_password);
WiFi.softAPConfig(ap_ip, ap_gateway, ap_subnet);
Serial.print("WiFi Access Point started, SSID = ");
Serial.println(ap_ssid);
Serial.print("AP IP = ");
Serial.println(WiFi.softAPIP());
OscWiFi.subscribe(recv_port, "/1/fader1",
[](const OscMessage& m) {
int r = m.arg<float>(0) * 255;
Serial.println( r );
analogWrite(LED_RED, 255 - r);
});
OscWiFi.subscribe(recv_port, "/1/fader2",
[](const OscMessage& m) {
int g = m.arg<float>(0) * 255;
Serial.println( g );
analogWrite(LED_GREEN, 255 - g);
});
OscWiFi.subscribe(recv_port, "/1/fader3",
[](const OscMessage& m) {
int b = m.arg<float>(0) * 255;
Serial.println( b );
analogWrite(LED_BLUE, 255 - b);
});
}
void loop() {
OscWiFi.update();
}
5.2 TouchOSCの設定
まずスマホのWiFi設定でNanoESP32に接続します。
この場合のパスワードはプログラム上で設定した12345678です。
その後TouchOSCのIPアドレスをプログラム上で設定した192.168.4.1に変更します。
後の操作は4.2と同じです。
Discussion