基于(arduino)Nodemcu 通过读取文件建立AP热点

一般ESP8266建立AP接入点是通过程序中设定,只适合DIY的作品,为了更大的灵活性可以通过SPIFFS 文件系统预设置WIFI AP接入点参数。

直接上代码:

#include 
#include    //Include File System Headers

void setup() {
  File myFile;
  String file_str;//从文件读取的数据转成String类型
  String m_ssid, m_sn;//从文件数据中提取的WIFI热点名称和密码
  int firOfColon, secOfColon;//第一个冒号的位置,第二个冒号的位置
  
  Serial.begin(115200);
  Serial.println();
  if (!SPIFFS.begin()) {
    Serial.println("Start SPIFFS Failed!please check Arduino Download Config.");
    return;
  }
  Serial.println("File System Initialized");
  myFile = SPIFFS.open("/sn.txt", "r");//文件名前的反斜杠不能少
  if (myFile) {
    Serial.println("Reading sn.txt...");
    while (myFile.available()) {
      //读取文件输出
      file_str += (char)myFile.read(); //循环读取文件转换成String类型
     //Serial.write(myFile.read());//循环文件输出到串口
     }
    Serial.println(file_str);//串口输出已转换成String类型的文件内容
    firOfColon = file_str.indexOf(':');//从字符串开始位置查找":"位置
    secOfColon = file_str.lastIndexOf(':');//从字符串尾部查找":"位置
    Serial.print("firOfColon=");
    Serial.println(firOfColon);
    Serial.print("secOfColon=");
    Serial.println(secOfColon);
    m_ssid = file_str.substring(firOfColon + 1,'\r');
    m_ssid.trim();//自动清除字符串中最前面和最后面的空白数据。不做清除字符串会包含有'\n'
    m_sn = file_str.substring(secOfColon + 1);
    m_sn.trim();//保险起见,自动清除字符串中最前面和最后面的空白数据。
    Serial.print("m_ssid=");
    Serial.println(m_ssid);
    Serial.print("m_sn=");
    Serial.println(m_sn);
    myFile.close();
  } else {
    Serial.println("Open File Failed.");
  }
    //Initialize File System
    WiFi.softAP(m_ssid, m_sn);
    IPAddress IP = WiFi.softAPIP();
    Serial.print("AP IP address: ");
    Serial.println(IP);
}

void loop() {
  // put your main code here, to run repeatedly:

}

程序调试串口输出:

基于(arduino)Nodemcu 通过读取文件建立AP热点_第1张图片

配套文件是在data文件夹里的sn.txt

基于(arduino)Nodemcu 通过读取文件建立AP热点_第2张图片

文件内容:

基于(arduino)Nodemcu 通过读取文件建立AP热点_第3张图片

创建的热点图片:

基于(arduino)Nodemcu 通过读取文件建立AP热点_第4张图片

手机可以正常显示nodemcu建立的热点中文名字,但电脑的无线 显示是乱码,不知道为何。知道的朋友请留言。

注:在Notepad++中可以设置txt文本编码为GBK,这样WIN7系统无线网络名称可以显示正常,安卓手机也可以显示正常,但arduino串口监视器就显示异常.

若编码设置为UTF-8则WIN7显示不正常,但安卓手机和arduino串口监视器就显示正常

文章 最上面的代码有问题,如果热点名称是英文就会出现偏差,现更改代码:

#include 
#include    //Include File System Headers

void setup() {
  File myFile;
  String file_str;//从文件读取的数据转成String类型
  String m_ssid, m_sn;//从文件数据中提取的WIFI热点名称和密码
  int firOfColon, secOfColon;//第一个冒号的位置,第二个冒号的位置
  int posOfCr;//回车符的位置
  Serial.begin(115200);
  Serial.println();
  if (!SPIFFS.begin()) {
    Serial.println("Start SPIFFS Failed!please check Arduino Download Config.");
    return;
  }
  Serial.println("File System Initialized");
  myFile = SPIFFS.open("/sn.txt", "r");//文件名前的反斜杠不能少
  if (myFile) {
    Serial.println("Reading sn.txt...");
    while (myFile.available()) {
      //读取文件输出
      file_str += (char)myFile.read(); //循环读取文件转换成String类型
      //Serial.write(myFile.read());//循环文件输出到串口
    }
    myFile.close();
    Serial.println(file_str);//串口输出已转换成String类型的文件内容
    firOfColon = file_str.indexOf(':');//从字符串开始位置查找":"位置
    secOfColon = file_str.lastIndexOf(':');//从字符串尾部查找":"位置
    Serial.print("firOfColon=");
    Serial.println(firOfColon);
    Serial.print("secOfColon=");
    Serial.println(secOfColon);
    posOfCr = file_str.indexOf('\r');
    Serial.print("posOfCr位置=");
    Serial.println(posOfCr);
    m_ssid = file_str.substring(firOfColon + 1, posOfCr);
    m_ssid.trim();//自动清除字符串中最前面和最后面的空白数据。不做清除字符串会包含有'\n'
    m_sn = file_str.substring(secOfColon + 1);
    m_sn.trim();//保险起见,自动清除字符串中最前面和最后面的空白数据。
    delay(10);//加此延时以确保串口输出完整
    Serial.print("m_ssid=");
    Serial.println(m_ssid);
    Serial.print("m_ssid长度=");
    Serial.println(m_ssid.length());
    Serial.print("m_sn=");
    Serial.println(m_sn);
    Serial.print("m_sn长度=");
    Serial.println(m_sn.length());

  } else {
    Serial.println("Open File Failed.");
  }
  //Initialize File System
  WiFi.softAP(m_ssid, m_sn);
  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);
}

void loop() {
  // put your main code here, to run repeatedly:

}

增加了第9、32、33、34行,修改m_ssid = file_str.substring(firOfColon + 1,posOfCr);

增加了delay(10);加此延时以确保串口输出完整

 

基于(arduino)Nodemcu 通过读取文件建立AP热点_第5张图片

你可能感兴趣的:(Arduino,Nodemcu)