無線ブログ集
メイン | 簡易ヘッドライン |
MODEL 1200FXローテーターその3 (2022/4/17 15:44:10)
ローテーターの角度表示が上手くいったので、次のステップとしてスマフォからのコントロールをやってみることにしました。
結果から言うと上手くゆきました。
スマフォでのコントロール
ESP32のUDP通信機能を使い、スマフォで使えるUDP TCP
Serverという素晴らしいアプリケーションがアンドロイド用にあります。ほかにも幾つかありましたが、他のものではエラーデータが時々発生して上手くなくこのUDP
TCP Serverアプリがとても安定したアプリでしたので採用しました。
参考にしたWebです。
今回はローテーターの角度表示のESP32DivKitCとは別のESP32DivKitCボードを使い実験しました。
上手くいったので、後で表示用のESP32に移植します。(ポートを選んで組込)表示用のESP32はTFT接続ポートも結構あり、他A/Dポートの関連で2つのポートもあります。これら以外で2つのポートを選んで組込します。
スマフォからのUDP通信で アスキーデータをESP32で受けてフマフォのCCWボタン、CWボタン、OFFボタン対応のアスキーデータをデコードして、ポートに出力するという単純な動作です。ポートにはNPNトランジスタスィッチング回路が繋がって、オープンコレクタ出力がREMOTE端子へ繋がりON/OFFSW代わりとなります。CWとCCWの2つのトランジスタのスィッチング回路で対応です。
ESP32DevKitCのスケッチです。
// ESP32_WiFiUDP
// 2022APR16
#include <WiFi.h>
#include <WiFiUdp.h>
const char ssid[] = "***************"; //ご自分のルーターのSSIDに書き換えてください
const char pass[] = "***************"; //ご自分のルーターのパスワードに書き換えてください
const int localPort = 9999; // ポート番号
const IPAddress ip(192, 168, 4, 3); // IPアドレス(ゲートウェイも兼ねる)
const IPAddress subnet(255, 255, 255, 0); // サブネットマスク
WiFiUDP udp;
const int ledccw = 4;
const int ledcw = 0;
void setup() {
Serial.begin(115200);
WiFi.softAP(ssid, pass); // SSIDとパスの設定
delay(100); // 追記:このdelayを入れないと失敗する場合がある
WiFi.softAPConfig(ip, ip, subnet); // IPアドレス、ゲートウェイ、サブネットマスクの設定
Serial.print("AP IP address: ");
IPAddress myIP = WiFi.softAPIP();
Serial.println(myIP);
Serial.println("Starting UDP");
udp.begin(localPort); // UDP通信の開始(引数はポート番号)
Serial.print("Local port: ");
Serial.println(localPort);
pinMode(ledccw,OUTPUT);
pinMode(ledcw,OUTPUT);
}
void loop() {
int j,k;
char i[64];
while(1){
if (udp.parsePacket())
{
j = udp.read(i,64);
i[j]='\0';
Serial.print(i[0]);
Serial.print("\n");
k = atoi(i);
Serial.print("k= ");
Serial.println(k);
switch(k){
case 0:
digitalWrite(ledccw,0);
digitalWrite(ledcw,0);
break;
case 1:
digitalWrite(ledccw,1);
digitalWrite(ledcw,0);
break;
case 2:
digitalWrite(ledcw,1);
digitalWrite(ledccw,0);
break;
case 3:
digitalWrite(ledccw,0);
digitalWrite(ledcw,0);
break;
case 4:
digitalWrite(ledccw,0);
digitalWrite(ledcw,0);
break;
case 5:
digitalWrite(ledccw,0);
digitalWrite(ledcw,0);
break;
default:
break;
}
}
delay(100);
}
}
// 2022APR16
#include <WiFi.h>
#include <WiFiUdp.h>
const char ssid[] = "***************"; //ご自分のルーターのSSIDに書き換えてください
const char pass[] = "***************"; //ご自分のルーターのパスワードに書き換えてください
const int localPort = 9999; // ポート番号
const IPAddress ip(192, 168, 4, 3); // IPアドレス(ゲートウェイも兼ねる)
const IPAddress subnet(255, 255, 255, 0); // サブネットマスク
WiFiUDP udp;
const int ledccw = 4;
const int ledcw = 0;
void setup() {
Serial.begin(115200);
WiFi.softAP(ssid, pass); // SSIDとパスの設定
delay(100); // 追記:このdelayを入れないと失敗する場合がある
WiFi.softAPConfig(ip, ip, subnet); // IPアドレス、ゲートウェイ、サブネットマスクの設定
Serial.print("AP IP address: ");
IPAddress myIP = WiFi.softAPIP();
Serial.println(myIP);
Serial.println("Starting UDP");
udp.begin(localPort); // UDP通信の開始(引数はポート番号)
Serial.print("Local port: ");
Serial.println(localPort);
pinMode(ledccw,OUTPUT);
pinMode(ledcw,OUTPUT);
}
void loop() {
int j,k;
char i[64];
while(1){
if (udp.parsePacket())
{
j = udp.read(i,64);
i[j]='\0';
Serial.print(i[0]);
Serial.print("\n");
k = atoi(i);
Serial.print("k= ");
Serial.println(k);
switch(k){
case 0:
digitalWrite(ledccw,0);
digitalWrite(ledcw,0);
break;
case 1:
digitalWrite(ledccw,1);
digitalWrite(ledcw,0);
break;
case 2:
digitalWrite(ledcw,1);
digitalWrite(ledccw,0);
break;
case 3:
digitalWrite(ledccw,0);
digitalWrite(ledcw,0);
break;
case 4:
digitalWrite(ledccw,0);
digitalWrite(ledcw,0);
break;
case 5:
digitalWrite(ledccw,0);
digitalWrite(ledcw,0);
break;
default:
break;
}
}
delay(100);
}
}
スマフォでの使用は0,1,2の3つです。
0:停止
1:CCW
2:CW
数値3から5までは予備ボタンスケッチで0と同じ停止です。(停止コマンドとして設定)
スマフォのアプリではNumber of buttons in use
で表示ボタンを任意に決めることが出来ます。ここで表示しない設定なのでスケッチがあっても問題はありません。
ESP32の出力ポートについてですが、そのままでの動作では同時出力もなりますので、ポート出力(CW,CCW)は排他的にしなければなりませんので、動作メイン設定以外の出力ポートはあえて強制停止としてスケッチしてあります。
簡単なリモコンができました。
これだけでも便利で当分使用出来ると思います。
先ずは実際に試してみたいと思います。
まだまだESP32の表示部への組込等、ステップアップは続きます。
つづく?
execution time : 0.020 sec