AVRを使ったマイコンボードをスマホまたはタブレットで操作する。
自分用の備忘録として記しています。また初めての記事なので書き方不備等がありかもしれませんm(_ _)m
開発環境
1.ESP32の開発環境 Arduino IDE
2.スマホアプリの開発環境 MIT App Inventor
3.マイコンアプリの開発環境 MPLAB X IDE 5.50 (ATMega2560を使用)
条件の検討
条件1:BruetoothはAndroid-OSがバージョンアップした場合等でその権限等が変わる可能性があるのでWi-Fi接続する。
条件2:Wi-Fiルーターを使用せず、端末と直接つなぎたい。
条件3:接続先のマイコンは ATmega2560を使用しており、UARTでESP32と有線接続する。
解決手段
解決方法:以下を参考に、ESP32をアクセスポイントとし、且つWi-Fiサーバーと立ち上げることにした。
参考にしたWebサイト:https://a-tomi.hatenablog.com/entry/2020/09/27/212032
問題点
AP接続の場合、端末がWi-Fi専用でない場合は機内モードにしなければならない。
端末アプリをMIT App Inventorで作成しているため、アプリのデバッグ中 ESP32のAPと接続するとアプリ更新等ができなくなる。
解決策
前問題を解決するため、条件コンパイルすることにした。
デバッグ時は #define AP_Mode
をコメントアウトすることで対応することにした。
下の行のIPアドレスは、デバッグモードの時に割り振られたIPアドレスを設定しておくと
アプリケーション側のURLを書き換えなくて済む
const IPAddress ip(192, 168, 1, 206); // *** set any addr ***
// このサンプルプログラムは、同じWiFik接続下にあるESP32ボードとPC或いはモバイル端末の間で
// モバイル端末からESP32ボードの IP アドレスにアクセスすることで、ブラウザから操作できるもの
#include <WiFi.h>
// デバッグ時はAP_Modeをコメントアウトする
// #define AP_Mode
#ifdef AP_Mode
const IPAddress ip(192, 168, 1, 206); // *** set any addr ***
const IPAddress subnet(255, 255, 255, 0);
const char ssid[] = "HOGEHOGE-00X"; // *** set any ssid ***
const char pass[] = "hoge00xpw"; // *** set any pw ***
#else
const char* ssid = "aterm-######";
const char* password = "############";
#endif
// Set web server port number to 80
WiFiServer server(80);
// Variable to store the HTTP request
String header;
// Auxiliar variables to store the current output state
String output26State = "off";
String output27State = "off";
// Assign output variables to GPIO pins
const int output26 = 26;
const int output27 = 27;
// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0;
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;
int inByte = 0;
char buffer[15];
void setup() {
Serial.begin(115200); // デバッグ用シリアルモニタ
Serial1.begin(9600,SERIAL_8N1 , 16 , 17 ); // 制御基板との通信条件
// Initialize the output variables as outputs
pinMode(output26, OUTPUT);
pinMode(output27, OUTPUT);
// Set outputs to LOW
digitalWrite(output26, LOW); // テスト用 LowでLED点灯
digitalWrite(output27, LOW);
#ifdef AP_Mode
WiFi.softAP(ssid, pass);
delay(100);
WiFi.softAPConfig(ip, ip, subnet);
IPAddress myIP = WiFi.softAPIP();
server.begin();
Serial.print("SSID= ");
Serial.println(ssid);
Serial.print("Fixed IP addr= ");
Serial.println(myIP);
Serial.println("Server starting!");
#else
// Connect to Wi-Fi network with SSID and password
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
#endif
}
今回は setup()関数のみとしました。
応用範囲等
仕事では機械等のコントロールパネルとしてスマホ、タブレットが活用できる。
遊びでは、ロボット等のコントローラーとしてスマホ、タブレットによる操作が可能になる。
色々遊べそうです^^