初次使用 ESP8266

初次使用 ESP8266

序言

之前玩的入门级主板 Arduino uno 虽然引脚简单,但是苦于没有无线连接模块,比如:wifi、蓝牙…这些,如果我想要制作一些远程项目这样还是挺麻烦的,所以我在想有没有这么一块板子能够满足的。

正巧之前买了个 esp-8266,上面就带这些功能,这篇文章会带你深入了解 esp8266,并且在 platformIO 上写一个连接wifi的demo。

初识 esp8266 wifi板

ESP8266 引脚详情

需要注意的是,ESP8266芯片有17个GPIO引脚(GPIO0~GPIO16)。这些引脚中的 GPIO2 是板子上的 LED 灯, GPIO6~GPIO11 被用于连接开发板的 Flash Memory。如果在实验电路中使用GPIO6~GPIO11,NodeMCU开发板将无法正常工作。(因此建议不要使用 GPIO6~GPIO11

原理介绍

上传 html 文件

上传步骤

  1. 在项目根目录下新建一个 data 文件夹

  2. 在 data 文件夹内创建一个 index.html 文件,内容可以参考如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
    <meta charset="UTF-8">
    <title>dev 的艺术空间</title>
    </head>
    <body>
    dev 的 esp8266 测试网页
    https://blog.jzxer.cn
    </body>
    </html>
  3. 选择 build image -> upload image,如果正常进行的话就会显示为以下界面。

    上传成功界面

需要注意的一点是:如果上传闪存文件失败,试着检查一下串口通讯的频率是多少,115200 目前是个有效值.如果还不行再试试其它的串口数值。

文件系统

这一步让 esp8266 拥有访问开发板闪存中文件的能力,只需要做两步。

  • 第一步:启动闪存文件系统
1
2
3
4
5
if (LittleFS.begin()) {
Serial.println("LittleFS Started.");
} else {
Serial.println("LittleFS Failed to Start.");
}
  • 第二步:读取文件
1
2
3
4
5
6
if (LittleFS.exists(path)) {               
File file = LittleFS.open(path, "r"); // 则尝试打开该文件
server.streamFile(file, contentType);// 并且将该文件返回给浏览器
file.close(); // 并且关闭文件
return true; // 返回true
}

注意这里我使用的是 LittleFS 库,老版本的可能会用到 FS 或者是 SPIFFS 等。逻辑是一样的。

内网穿透

既然是物联网,那么就一定需要一个能在远程操作自家设备的方式,这个时候我们就可以使用内网穿透的形式,前提满足的条件是:内网穿透服务和设备在同一个局域网下。

那么操作起来也很简单,链路大概是:ESP8266连接家中wifi -> 获取 IP -> 把 IP 内网穿透出去

1. 连上家里的wifi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <ESP8266WiFi.h>

// Wi-Fi 网络名称和密码
const char* ssid = "devlifestyle";
const char* password = "123456";

void setup() {
WiFi.begin(ssid, password); // 连接到Wi-Fi网络

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("WiFi connected. SSID is:");
Serial.println(WiFi.SSID()); // 通过串口监视器输出连接的WiFi名称
Serial.print("IP address: \t");
Serial.println(WiFi.localIP()); // 获取 WIFI 给的 ip 地址
}

这里就完成了一个基本的wifi连接功能,但是这种连接方式的弊端就是,每换一个wifi就要重新修改一下源码,所以最佳的办法是先 AP 再 STA 的方式联网。这个就是后话了👀,后续有机会在其它项目里再展开讲

问题汇总

1. 控制台乱码

使用的编辑器是 vscode,可能会出现乱码的情况,不要慌,先确认一下编译格式是不是 GBK,不是的话,就把这两个地方改一下。(慎重)

  1. 设置 -> 搜索 编码 > 把编码格式改为 GBK

    找到 Encoding

  2. 关闭终端控制是否检测

设置页面

2. 串口传输,接收端乱码

这个场景比较复杂,场景是通过 ESP8266 连接其它单片机,比如 Arduino uno。造成这个结果的原因有很多,我目前总结出了两个方案,可以都试一试。

  1. 如果用的是 platformIO,确保根目录下的 platformio.ini 文件里的串口频率和连接的设备是同一个频率:
1
monitor_speed = 9600
  1. 确保串口通信接口没有接反,正确的串口通信是:设备 ARX - 设备BTX、设备A TX - 设备B RX,它是一个回路闭环。接反了也可能会产生乱码。

网上有人说和 esp8266 的供电电压有关,要用 3.7v 供电,我尝试了5v 供电是 ok的。

小结

待完善…

作者

dev

发布于

2024-11-07

更新于

2025-01-08

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×