2つサーボを動かそうとすると、ESP32側も工夫しなければいけませんよね。とりあえず一つのサンプルとして以下に例を挙げます。
BluetoothSerial SerialBT;
Servo servo_s; // サーボ変数1つ目
Servo servo_e; // サーボ変数2つ目
char receivedChar;
String inData;
const int SERVO_S = 12; // サーボモーターピン1つ目
const int SERVO_E = 13; // サーボモーターピン2つ目。適宜自分の環境に合わせます
String angle[2]; //角度格納用の配列
int split(String data, char delimiter, String *dst){//dataの文字列からdelimiterで分けてdstの配列に格納する関数
int index = 0;
int arraySize = (sizeof(data)/sizeof((data)[0]));
int datalength = data.length();
dst[0]="";dst[1]="";
for (int i = 0; i < datalength; i++) {
char tmp = data.charAt(i);
if ( tmp == delimiter ) {
index++;
if ( index > (arraySize - 1)) return -1;
}
else dst[index] += tmp;
}
return (index + 1);//データ数をリターン
}
void setup() {
SerialBT.begin("double_servo");
servo_s.attach(SERVO_S); // サーボモーターの制御ピン設定
servo_e.attach(SERVO_E); // サーボモーターの制御ピン設定
Serial.begin(115200);
}
void loop() {
while (SerialBT.available() ) {
receivedChar =(char)SerialBT.read();
inData += receivedChar;
if (receivedChar == '\n'){
Serial.print(inData);
int index = split(inData, ',', angle);
Serial.print(angle[0]);
Serial.print(',');
Serial.println(angle[1]);
if(angle[0]=="s"){
servo_s.write(angle[1].toInt());
}else if(angle[0]=="e"){
servo_e.write(angle[1].toInt());
}
delay(20);
inData = "";
}
}
}
送信する側は
ser.write(str.encode("s,"+str(int(angle_s))+"\n"))
ser.write(str.encode("e,"+str(int(angle_e))+"\n"))
のように文字列を追加した数字を送ります。