ESP-WROOM-02マイコンに接続したSDメモリカード内に
WiFi、ネットワーク設定を書いたsetup.txtというファイルを
置いて、起動時に読み込んで接続することができました。
webブラウザでSD内ファイルがすべて見えてしまう問題が
ありましたが、特定のファイルだけ見えないようにすることが
出来ました。
特定ファイルを開かせない・・・を見て下さい。
追記 2020/07/26
ip address,gateway,sabnet,dnsは固定できるように
しました。必要なければスケッチのIPAdress行と
WiFi.config行の頭に//をつけてコメント行にしてください。
投稿当初
ボードマネージャバージョンの違いでWiFi接続に失敗する
現象を確認しましたが、現在は発生しません。参考に
ボードマネージャバージョン2.5.2では発生なし。
ボードマネージャバージョン2.6.2は調査中
ボードマネージャバージョン2.7.2で書き込み後最初の
動作でかなりの確率で接続失敗しました。
その後RESETすると接続できました。
作例をWeb公開している方々に感謝します。
setup.txt例とスケッチを紹介します。
SDメモリカードにsetupというフォルダを作り、下記内容を
setup.txtというファイルを作って保存します。
setup.txt例
スケッチ
スケッチ例DumpFileを改変したものです。
#include行のライブラリ名を<>で囲んで下さい。
ArduinoIDEにコピペしたらメニューの「ツール」「自動整形」
で見やすくなります。
#includeのライブラリ名を忘れずに<>で囲って下さい。
無保証自己責任でよろしくお願いします。
WiFi、ネットワーク設定を書いたsetup.txtというファイルを
置いて、起動時に読み込んで接続することができました。
webブラウザでSD内ファイルがすべて見えてしまう問題が
ありましたが、特定のファイルだけ見えないようにすることが
出来ました。
特定ファイルを開かせない・・・を見て下さい。
追記 2020/07/26
ip address,gateway,sabnet,dnsは固定できるように
しました。必要なければスケッチのIPAdress行と
WiFi.config行の頭に//をつけてコメント行にしてください。
投稿当初
ボードマネージャバージョンの違いでWiFi接続に失敗する
現象を確認しましたが、現在は発生しません。参考に
ボードマネージャバージョン2.5.2では発生なし。
ボードマネージャバージョン2.6.2は調査中
ボードマネージャバージョン2.7.2で書き込み後最初の
動作でかなりの確率で接続失敗しました。
その後RESETすると接続できました。
作例をWeb公開している方々に感謝します。
setup.txt例とスケッチを紹介します。
SDメモリカードにsetupというフォルダを作り、下記内容を
setup.txtというファイルを作って保存します。
setup.txt例
##以降はコメントとして扱われます。
#SSのあとにSSID、paのあとにpasswordを入力してください
#SS your-SSID #SSID
#pa your-password #password
#
SS ********** #SSID
pa ********** #password
#
#gw 192,168, 1, 1 #gateway
#sn 255,255,255, 0 #subnet
#dn 192,168, 1, 1 #dnS1
#ip 192,168, 1, 10 #ip address
#
gw 192,168, 1, 1 #gateway
sn 255,255,255, 0 #subnet
dn 192,168, 1, 1 #dnS1
ip 192,168, 1, 10 #ip address
スケッチ
スケッチ例DumpFileを改変したものです。
#include行のライブラリ名を<>で囲んで下さい。
#include SPI.h
#include SD.h
#include ESP8266WiFi.h
const int chipSelect = 15;
String ssid;
String password;
int gw[4], sn[4], dn[4], ip[4];
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
//while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
//}
Serial.print("Initializing SD card...");
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("setup/setup.txt",FILE_READ);//setupフォルダ内setup.txtをopen
// if the file is available, write to it:
if (dataFile) {
while (dataFile.available()) {//dataFileを1行づつ評価していく
String line = dataFile.readStringUntil('\n');//終端文字'\n'が検出されるまで読んで文字列全体をlineへ入れる
line = line.substring(0, line.indexOf('#'));//インデックス0(行頭)から(#までのインデックス数)の文字列取得
if (line.substring(0, 2) == "SS") {
ssid = line.substring(line.indexOf(' '));//スペースから行末まで
ssid.trim();//スペース等を除去
} else if (line.substring(0, 2) == "pa") {
password = line.substring(line.indexOf(' '));//スペースから行末まで
password.trim();//スペース等を除去
} else if (line.substring(0, 2) == "gw") {
String gw0 = line.substring(3, 6);
String gw1 = line.substring(7, 10);
String gw2 = line.substring(11, 14);
String gw3 = line.substring(15, 18);
gw[0] = gw0.toInt(); gw[1] = gw1.toInt(); gw[2] = gw2.toInt(); gw[3] = gw3.toInt();
} else if (line.substring(0, 2) == "sn") {
String sn0 = line.substring(3, 6);
String sn1 = line.substring(7, 10);
String sn2 = line.substring(11, 14);
String sn3 = line.substring(15, 18);
sn[0] = sn0.toInt(); sn[1] = sn1.toInt(); sn[2] = sn2.toInt(); sn[3] = sn3.toInt();
} else if (line.substring(0, 2) == "dn") {
String dn0 = line.substring(3, 6);
String dn1 = line.substring(7, 10);
String dn2 = line.substring(11, 14);
String dn3 = line.substring(15, 18);
dn[0] = dn0.toInt(); dn[1] = dn1.toInt(); dn[2] = dn2.toInt(); dn[3] = dn3.toInt();
} else if (line.substring(0, 2) == "ip") {
String ip0 = line.substring(3, 6);
String ip1 = line.substring(7, 10);
String ip2 = line.substring(11, 14);
String ip3 = line.substring(15, 18);
ip[0] = ip0.toInt(); ip[1] = ip1.toInt(); ip[2] = ip2.toInt(); ip[3] = ip3.toInt();
}
}
dataFile.close();
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening setup.txt");
}
Serial.println(), Serial.println();
Serial.print("Connecting to "), Serial.println(ssid);
IPAddress local_IP(ip[0], ip[1], ip[2], ip[3]);
IPAddress gateway(gw[0], gw[1], gw[2], gw[3]); // NTPサーバ名アクセス時必要
IPAddress subnet(sn[0], sn[1], sn[2], sn[3]);
IPAddress dns1(dn[0], dn[1], dn[2], dn[3]); // NTPサーバ名アクセス時必要
WiFi.mode(WIFI_STA);//WiFi子機モード
WiFi.config(local_IP, gateway, subnet, dns1);//ESP引数順序変更不可 NTPサーバ名アクセス時dns1要
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(""); Serial.println("WiFi connected!");
Serial.print("IP address: "); Serial.println(WiFi.localIP());
Serial.print("ESP Mac Address: "); Serial.println(WiFi.macAddress());
Serial.print("Subnet Mask: "); Serial.println(WiFi.subnetMask());
Serial.print("Gateway IP: "); Serial.println(WiFi.gatewayIP());
Serial.print("DNS: "); Serial.println(WiFi.dnsIP());
}
void loop() {
}
ArduinoIDEにコピペしたらメニューの「ツール」「自動整形」
で見やすくなります。
#includeのライブラリ名を忘れずに<>で囲って下さい。
無保証自己責任でよろしくお願いします。
※コメント投稿者のブログIDはブログ作成者のみに通知されます