前回作ったプログラムはWiFiルータ経由でサーバとして機能するように出来ているので、1:1で直接携帯と通信する事は出来ない。そこを何とか出来ないかと調べてみた。そのようなサーバを構築するにはESP32がアクセスポイント(AP)として機能する必要があるとともにDHCPなど必要な機能を追加する必要がある。
何か良い例は無いかと探していたら「勝手な電子マン」さんのBlog「ESP32のアクセスポイント (つまりスタンドアローンWiFi-LAN)」を見つけた。
このBlogのsetup()部分を参考に、loop()は部分は前回のサーバプログラムを踏襲してプログラムを組んでみたら。ほとんど修正無く動いた。
使い方は、
- 先ずこのプログラムを書き込んだESP32を起動しサーバを立ち上げる。
- 次に携帯のWiFiの設定を開き、このプログラムで設定したSSID(ESP32-AP)に接続する(このときプログラム中で設定したパスワードが必要)。
- 携帯のブラウザを開きサーバのIPアドレスに接続すると前回と同じ画面が表示される。
このとき携帯に割り振られるIPアドレスはサーバのIPアドレス+1だった。
とりあえず動いたので、setup()までのソースコードを紹介する。loop()部分は前回と同じなので省略した。
/********************************************************
* Original: Independent Access-Point - ESP32 simple example
* Initial version V.00 Sept.26 2020
* https://a-tomi.hatenablog.com/entry/2020/09/27/212032
* by Akira Tominaga
* Modified by MYcrosLip
********************************************************/
#include "WiFi.h"
const char ssid[] = "ESP32-AP"; // *** set any ssid ***
const char pass[] = "11223344"; // *** set any pw ***
const IPAddress ip(192, 168, 11, 1); // *** set any addr ***
const IPAddress subnet(255, 255, 255, 0);
WiFiServer server(80);
String header;
gpio_num_t LED = GPIO_NUM_5;
String output5State = "off";
const int output5 = 5;
unsigned long currentTime = millis();
unsigned long previousTime = 0;
const long timeoutTime = 2000;
void setup() {
Serial.begin(115200);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
delay(100);
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!");
}

0 件のコメント:
コメントを投稿