0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ESP32のWi-Fi接続でAPとWiFiServer同時に使用する。

Last updated at Posted at 2023-03-23

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()関数のみとしました。

応用範囲等

仕事では機械等のコントロールパネルとしてスマホ、タブレットが活用できる。
遊びでは、ロボット等のコントローラーとしてスマホ、タブレットによる操作が可能になる。
色々遊べそうです^^

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?