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

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

直接上代码:

#include <ESP8266WiFi.h>
#include <FS.h>   //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:

}

程序调试串口输出:

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

文件内容:

创建的热点图片:

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

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

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

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

#include <ESP8266WiFi.h>
#include <FS.h>   //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);加此延时以确保串口输出完整

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

armcsdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值