初次使用 ESP8266
序言
之前玩的入门级主板 Arduino uno 虽然引脚简单,但是苦于没有无线连接模块,比如:wifi、蓝牙…这些,如果我想要制作一些远程项目这样还是挺麻烦的,所以我在想有没有这么一块板子能够满足的。
正巧之前买了个 esp-8266,上面就带这些功能,这篇文章会带你深入了解 esp8266,并且在 platformIO 上写一个连接wifi的demo。
初识 esp8266 wifi板
需要注意的是,ESP8266芯片有17个GPIO引脚(GPIO0~GPIO16)。这些引脚中的 GPIO2 是板子上的 LED 灯, GPIO6~GPIO11 被用于连接开发板的 Flash Memory。如果在实验电路中使用GPIO6~GPIO11,NodeMCU开发板将无法正常工作。(因此建议不要使用 GPIO6~GPIO11)
上传 html 文件
在项目根目录下新建一个 data 文件夹
在 data 文件夹内创建一个 index.html 文件,内容可以参考如下:
1
2
3
4
5
6
7
8
9
10
11
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>dev 的艺术空间</title>
</head>
<body>
dev 的 esp8266 测试网页
https://blog.jzxer.cn
</body>
</html>选择 build image -> upload image,如果正常进行的话就会显示为以下界面。
需要注意的一点是:如果上传闪存文件失败,试着检查一下串口通讯的频率是多少,115200 目前是个有效值.如果还不行再试试其它的串口数值。
文件系统
这一步让 esp8266 拥有访问开发板闪存中文件的能力,只需要做两步。
- 第一步:启动闪存文件系统
1 | if (LittleFS.begin()) { |
- 第二步:读取文件
1 | if (LittleFS.exists(path)) { |
注意这里我使用的是 LittleFS 库,老版本的可能会用到 FS 或者是 SPIFFS 等。逻辑是一样的。
内网穿透
既然是物联网,那么就一定需要一个能在远程操作自家设备的方式,这个时候我们就可以使用内网穿透的形式,前提满足的条件是:内网穿透服务和设备在同一个局域网下。
那么操作起来也很简单,链路大概是:ESP8266连接家中wifi -> 获取 IP -> 把 IP 内网穿透出去
1. 连上家里的wifi
1 |
|
这里就完成了一个基本的wifi连接功能,但是这种连接方式的弊端就是,每换一个wifi就要重新修改一下源码,所以最佳的办法是先 AP 再 STA 的方式联网。这个就是后话了👀,后续有机会在其它项目里再展开讲
问题汇总
1. 控制台乱码
使用的编辑器是 vscode,可能会出现乱码的情况,不要慌,先确认一下编译格式是不是 GBK,不是的话,就把这两个地方改一下。(慎重)
设置 -> 搜索 编码 > 把编码格式改为 GBK
关闭终端控制是否检测
2. 串口传输,接收端乱码
这个场景比较复杂,场景是通过 ESP8266 连接其它单片机,比如 Arduino uno。造成这个结果的原因有很多,我目前总结出了两个方案,可以都试一试。
- 如果用的是 platformIO,确保根目录下的 platformio.ini 文件里的串口频率和连接的设备是同一个频率:
1 | monitor_speed = 9600 |
- 确保串口通信接口没有接反,正确的串口通信是:设备 ARX - 设备BTX、设备A TX - 设备B RX,它是一个回路闭环。接反了也可能会产生乱码。
网上有人说和 esp8266 的供电电压有关,要用 3.7v 供电,我尝试了5v 供电是 ok的。
小结
待完善…