-
ESP8266开发之旅 基础篇① 走进ESP8266的世界
2019-06-19 13:44:33欢迎大家来到ESP8266的世界,从现在开始,笔者将带领大家慢慢揭开ESP8266神秘的面纱。 1. 简介 从笔者的角度来说,ESP8266这个词可以理解为ESP8266EX芯片(当然,后面也有可能出现了其他芯片,...基于Arduino的ESP8266开发技术全系列教程
一、基础篇
二、网络篇
- ESP8266开发之旅 网络篇① 认识一下Arduino Core For ESP8266
- ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库
- ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用
- ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用
- ESP8266开发之旅 网络篇⑤ Scan WiFi——ESP8266WiFiScan库的使用
- ESP8266开发之旅 网络篇⑥ ESP8266WiFiGeneric——基础库
- ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client
- ESP8266开发之旅 网络篇⑧ SmartConfig——一键配网
- ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用
- ESP8266开发之旅 网络篇⑩ UDP服务
- ESP8266开发之旅 网络篇⑪ WebServer——ESP8266WebServer库的使用
- ESP8266开发之旅 网络篇⑫ 域名服务——ESP8266mDNS库
- ESP8266开发之旅 网络篇⑬ SPIFFS——ESP8266 Flash文件系统
- ESP8266开发之旅 网络篇⑭ web配网
- ESP8266开发之旅 网络篇⑮ 真正的域名服务——DNSServer
- ESP8266开发之旅 网络篇⑯ 无线更新——OTA固件更新
- ESP8266开发之旅 网络篇⑰ NTP——时间服务
- ESP8266开发之旅 网络篇⑱ WebSocket——全双工通信
三、应用篇
- ESP8266开发之旅 应用篇① 局域网应用 ——炫酷RGB彩灯
- ESP8266开发之旅 应用篇② OLED显示天气屏
- ESP8266开发之旅 应用篇③ 简易版WiFi小车
- ESP8266开发之旅 应用篇④ WiFi广告机
- ESP8266开发之旅 应用篇⑤ WiFi探针
- ESP8266开发之旅 应用篇⑥ 检测周边WiFi杀手
- ESP8266开发之旅 应用篇⑦ WiFi自动考勤机
- ESP8266开发之旅 应用篇⑦ 简易版本在线获取特定省份新型冠状病毒情况
- ESP8266开发之旅 应用篇⑧Arduino版本 WiFi杀手
- ESP8266开发之旅 应用篇⑨ 小白半小时轻松接入百度天工IOT
- ESP8266开发之旅 应用篇⑩ 小白半小时轻松接入阿里云MQTT
- ESP8266开发之旅 应用篇⑪ 基于ESP8266的人流量简单统计系统
- ESP8266开发之旅 应用篇⑫ 基于ESP8266的校园图书馆学习时长排行榜(记录思路,尚未实现)
四、高级篇
- ESP8266开发之旅 进阶篇① 代码优化 —— ESP8266内存管理
- ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266配置
- ESP8266开发之旅 进阶篇③ 闲聊 ESP8266 Flash
- ESP8266开发之旅 进阶篇④ 常见问题 —— 解决困扰
- ESP8266开发之旅 进阶篇⑤ 代码规范 —— 像写文章一样优美
- ESP8266开发之旅 进阶篇⑥ ESP-specific APIs说明
- ESP8266开发之旅 进阶篇⑦ 如何尽量做到一套代码兼容esp8266和esp32
- ESP8266开发之旅 进阶篇⑧ 认识 PROGMEM on ESP8266
- ESP8266开发之旅 进阶篇⑨ 深入了解 802.11 无线协议(非常重要)
- ESP8266开发之旅 进阶篇⑩ sniffer混杂模式,监听802.11帧,黑科技基础
- ESP8266开发之旅 进阶篇⑪ 深入了解 Esp8266 Https访问
五、阿里云篇
- ESP8266开发之旅 阿里云物联网平台篇① 了解阿里云物联网平台(纯理论,了解概念即可)
- ESP8266开发之旅 阿里云物联网平台篇② MQTT.FX客户端模拟 调试 MQTT LED智能灯控制系统
- ESP8266开发之旅 阿里云物联网平台篇③ LED智能灯控制系统(MQTT客户端直连)
- ESP8266开发之旅 阿里云物联网平台篇④ LED智能灯控制系统(MQTTS客户端直连)
- ESP8266开发之旅 阿里云物联网平台篇⑤ LED智能灯控制系统(使用HTTPS认证再连接)
- ESP8266开发之旅 阿里云物联网平台篇⑥ LED智能灯控制系统 全面讲解,上手一个小项目(MQTT客户端直连 + Web配网 + WebSocket局域网通信))
六、小程序篇
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。
如果觉得有用,麻烦点赞收藏,您的支持是博主创作的动力。
欢迎大家来到ESP8266的世界,从现在开始,笔者将带领大家慢慢揭开ESP8266神秘的面纱。
1. 简介
从笔者的角度来说,ESP8266这个词可以理解为ESP8266EX芯片(当然,后面也有可能出现了其他芯片,这里首推ESP8266EX)以及依赖ESP8266EX芯片开发的系列模组的简称。
ESP8266EX是由乐鑫信息科技公司(Espressif)出品的一款应用于物联网编程的WiFi芯片。从它被设计出来,就引起了物联网开发的热潮,获得了业界同行的肯定。芯片的具体相关介绍,笔者这里就不占用章节篇幅,请读者自行查看乐鑫官网详细介绍。
ESP8266系列模组是深圳安信可(Ai-thinker)公司开发的一系列基于乐鑫ESP8266EX的超低功耗的UART-WiFi模块的模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。
从厂商角度来看,乐鑫是ESP8266的芯片厂商,安信可是依赖ESP8266生产模组,在ESP8266芯片的基础上,完善了外围器件布局和优化天线,并提供一系列开发方案的厂家。网上各种盗版模块居多,笔者推荐大家购买安信可官方正版模块。温馨提示
请注意,笔者后面章节提到的ESP8266均指ESP8266系列模组。
2. 特性
其典型特征如下:
- 802.11 b/g/n
- 内置Tensilica L106 超低功耗 32 位微型 MCU,主频支持 80 MHz 和160 MHz,支持 RTOS
- 内置10 bit高精度ADC
- 内置TCP/IP协议栈
- 内置TR 开关、balun、LNA、功率放大器和匹配网络
- 内置PLL、稳压器和电源管理组件,802.11b 模式下+20 dBm的输出功率
- A-MPDU 、 A-MSDU 的聚合和 0.4 s的保护间隔
- WiFi @ 2.4 GHz,支持 WPA/WPA2 安全模式
- 支持AT远程升级及云端OTA升级
- 支持 STA/AP/STA+AP 工作模式
- 支持 Smart Config 功能(包括 Android 和 iOS 设备)
- HSPI 、UART、I2C、I2S、IR Remote Control、PWM、GPIO
- 深度睡眠保持电流为 10 uA,关断电流小于 5 uA
- 2 ms 之内唤醒、连接并传递数据包
- 待机状态消耗功率小于1.0 mW (DTIM3)
- 工作温度范围:-40℃- 125℃
3. 系列模组
据笔者了解,目前安信可生产的ESP8266系列模组主要有:
-
ESP-01S
-
ESP-07S
-
ESP-12E
-
ESP-12F
- ESP-12S
温馨提示
1.以上5张图均引用安信可官网,如有侵权,麻烦告知。
2.模组之间的区别在哪里?
不同系列之间的差别更多的是封装工艺以及Flash闪存大小不同,具体差别情况下表1:型号 封装 flash大小 天线 可用IO ESP-01S DIP-8 8Mbit(1MB) PCB天线 2 ESP-07S SMD-16 32Mbit(4MB) IPEX 9 ESP-12E SMD-22 32Mbit(4MB) PCB天线 9 ESP-12F SMD-22 32Mbit(4MB) PCB天线 9 ESP-12S SMD-16 32Mbit(4MB) PCB天线 9 请注意,flash芯片是外接在ESP8266芯片外面,通过SPI与8266芯片通信。虽然有些系列模组flash比较大,但是不意味着全部flash空间都可以用来装载固件代码。一般来说,我们开发的业务代码不能超过1MB,剩下的flash空间可以用来做文件系统,笔者后面章节会讲解。
从性价比角度来说,目前开发最常用的就是ESP12F,迷你尺寸,IO口多,flash空间大,价格可以低于10元。具体更多的型号介绍可以参考安信可官网 。4. 使用原因
之所以采用 ESP8266 做为研发平台,主要是因为其超低成本,并且将处理器和 WiFi 芯
片精致集成在一起,具有 GPIO、PWM、I2C、1‐Wire、ADC 等功能,为开发者提供一套极具性价
比的开发平台。ESP8266 是一个完整且自成体系的 Wi‐Fi 网络解决方案,能够搭载软件应
用,也就是说可以将应用直接在 ESP8266 上运行,或通过另一个应用处理器进行业务逻辑处
理,而仅使用 ESP8266 的 Wi‐Fi 网络功能(通常做为串口透传使用,目前淘宝上销售的大部
分已经写入基于 AT 指令的串口转 wifi 固件的模块,方便直接连接原有单片机系统)。
综合来说,大众选择ESP8266的主要原因有:- 作为WiFi模块来用,价格实惠(批发价可以低于10元)。同时,从初学者角度来看,就算购买了ESP8266开发板,价格也是在20-30元左右,学习成本低。所以,前期入门学习,笔者建议初学者可以考虑购买一个ESP8266开发板,可以绕过不少弯路,达到快速学习ESP8266的目的,比如NodeMcu开发板;
- 除了作为WiFi模块来用,其自身内置了32位处理器,也可以进行二次开发。读者可以把ESP8266当做Arduino+WiFi功能来开发;
- 基本的ESP8266开发体系形成,其自身的SDK不断迭代开发、基于LUA的NodeMcu模式、基于Arduino的生态移植、论坛社区上众多的参考资料,都使得ESP8266开发速度加快;
- ESP8266有三种工作模式:Station模式、Soft-AP模式、Station兼Soft-AP模式,可以满足大部分场合开发需求;
- 对于习惯用AT指令的同学,也支持给ESP8266烧写AT固件,可以当做Uart转WiFi使用,不过这不是本书的重点,需要研究的同学可以参考笔者写的一个技术帖子(https://www.arduino.cn/thread-44963-1-1.html) 。
5. 使用场景
作为一款WiFi芯片,可以毫不夸张地说,只要需要使用无线网络环境的都可以应用它。
简单来说,就是通过WiFi控制的各类设备。比如,现在比较流行的词,物联网、智能插座、智能家居、智能家电、可穿戴电子产品、WiFi定位、WiFi探针、WiFi彩灯等等。只有你想不到的,没有你做不到的。当然,虽然目前市面上没有看到智能产品的广泛应用,但是不要慌,总有一天会实现的,而我们就是实现这个路途的奠基石。6. 总结
本章作为本书的开篇,主要带领读者走进ESP8266的世界,简单介绍了ESP8266是什么,有什么特性,为什么我们要使用它,以及它能帮助我们做什么。作为纯描述性的章节,笔者只是简单一笔带过,不希望花费读者太多时间在这上面,更希望大家形成这么一个概念即可——ESP8266是个WiFi模块,可以联网,可以基于Arduino平台开发。下面就是进入真真正正的基于Arduino平台的ESP8266开发之旅,旅途愉快,Hello Arduino ESP8266!
-
ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库
2019-06-19 13:51:42在网络篇①中,博主主要讲解了Arduino上开发ESP8266的插件库 Arduino Core For ESP8266。但是,并没有讲到关于这个模块的工作模式,所以本篇讲着重讲解ESP8266的三种工作模式: Station模式; AP模式; ...授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。
共同学习成长QQ群 622368884,不喜勿加,里面有一大群志同道合的探路人
如果觉得有用,麻烦点赞收藏,您的支持是博主创作的动力。
文章目录
在网络篇①中,博主主要讲解了Arduino上开发ESP8266的插件库 Arduino Core For ESP8266。但是,并没有讲到关于这个模块的工作模式,所以本篇讲着重讲解ESP8266的三种工作模式:
- Station模式;
- AP模式;
- AP兼Station模式;
重点来了,8266编程开发,都是基于以上三种模式中的一种模式来进行开发。所以,开发ESP8266的时候,需要首先确定工作模式。
1. ESP8266工作模式
1.1 Station模式 —— 我想连上谁
Station(STA)模式用于将ESP8266模块连接到由接入点(Access Point,理解为热点)建立的Wi-Fi网络。请查看下图:
Station模式有几个特点,以方便管理的Wi-Fi连接。- 在连接丢失的情况下,一旦WiFi再次可用,ESP8266将自动重新连接到最近使用的接入点(Access Point,理解为热点),往往这一点容易出问题(有时路由器重启了,会发现ESP8266一直连接不上路由)。
- 模块重启也会发生同样的情况。
- 因为ESP8266将最后使用的接入点认证信息(ssid账号,psw密码)保存到Flash(非易失性)存储器中。
- 如果在Arduino IDE修改代码,但代码不更改Wi-Fi工作模式或接入点认证信息(ssid账号,psw密码),则ESP8266使用保存在Flash上数据来重新连接。
1.2 AP模式(soft-AP)—— 谁想连上我
AP(Access Point)模式可以理解为Station模式的相反面,用于将ESP8266模块作为接入点建立Wi-Fi网络,供其他Station模式的模块连接进来。请查看下图:
- AP模式可以用于Station模式的模块之间交互的中转站(让所有模块处于同一个WiFi网络中);
- 在将ESP8266模块(Station模式)连接到wifi之前,一般我们是不知道当前wifi网络的ssid账号和psw密码,那么我们怎么告诉ESP8266呢?
在AP模式下,我们可以使用手机或者笔记本连接到它,然后我们就可以给ESP8266模块发送连接网络的ssid和psw。一旦完成,ESP8266自动切换到Station 模式,就可以连接到目标wifi接入点。
1.3 AP兼Station模式
该模式是以上两种模式的整合。请查看下图:
1.4 核心点
牢牢记住,WiFi有三种工作模式:Station模式、AP模式、AP兼Station模式,这样就足够了。每个ESP8266模块肯定工作于这三种模式之一,当然除非你没用WIFI功能,把它当做arduino开发版用。
2. ESP8266WiFi库
前面我们总体上介绍了ESP8266工作模式,同时我们也了解到 Arduino IDE上主要通过 Arduino Core For ESP8266这个核心库来开发ESP8266功能,并且也谈论到这个核心库其实包含了众多小核心库,包括ESP8266WiFi、ESP8266WebServer、ESP8266HTTPClient、ESP8266mDNS等等。虽然我们实际开发中并不会说全部库都会使用起来,但是至少需要形成一个意识,那就是:Arduino core for ESP8266库,在8266 sdk基础上给我们提供了很多操作方式。
其中,博主觉得最核心最重要的一个库就是ESP8266WiFi(后面我们代码中你会经常看到 #inclue<ESP8266WiFi.h>,那时你就应该知道这个库具体是用来做什么的)2.1 ESP8266WiFi库源码结构
如果你是按照博主之前说的方式去clone Arduino core for 8266的代码的话,然后把libraries目录导入到源码查看IDE(这里我推荐大家安装webstorm)的话,然后打开ESP8266WiFi那个目录,你就会发现如下代码结构:
没错,你会发现很多成双成对的h头文件和cpp源文件,有点组cp的感觉。
众多文件,先不要纠结。
在这里,博主可以先告诉你几个知识点:- 名字里面带Secure、SSL、TLS的,跟安全校验有关,俗称https(不要告诉我你没用过);
- 名字里面带Client的,跟客户端有关;
- 名字里面带Server的,跟服务端有关;
- 名字里面带8266的,你可以理解为针对ESP8266的代码封装;
- 名字里面带Scan的,跟wifi扫描有关;
- 名字里面带STA的,跟ESP8266 Station模式有关;
- 名字里面带AP的,跟ESP8266 AP模式有关;
- ESP8266WiFiType.h文件,主要是用来定义各种配置选项,比如wifi工作模式(WiFiMode),wifi睡眠模式(WiFiSleepType),wifi物理模式(WiFiPhyMode),wifi事件(WiFiEvent),wifi断开原因(WiFiDisconnectReason)等等;
- ESP8266WiFiGeneric(8266模块通用库),esp8266的sdk提供了一些功能,但在arduino wifi库中没有。包括处理程序来管理wi-fi事件,如连接,断开连接或获得ip,wi-fi模式的变化,管理模块睡眠模式的功能,以ip地址解析的hostName等;
- ESP8266WiFi库不仅仅局限于ESP8266WiFi.h和ESP8266WiFi.cpp这两个文件,只不过说它们是最核心的统一入口;
- WiFiUdp库,在ESP8266WiFi功能的基础上包装了UDP广播协议,适用于UDP通信,需要另外添加头文件;
记住这11点,基本上整个ESP8266WiFi库你就了解一半了,剩下就是看各个具体使用(引入使用一步到位 #include<ESP8266WiFi.h>,当然你也可以一个个include,so easy)。
#include<ESP8266WiFi.h>
2.2 ESP8266WiFi.h 和 ESP8266WiFi.cpp 详解
在这里,博主给读者讲解用得最多的两个文件
可以看到ESP8266WiFi类,继承了ESP8266WiFiGeneric、ESP8266WiFiSTA、ESP8266WiFiScan、ESP8266WiFiAP,同时引入了WiFiClient、WiFiServer、WiFiServerSecure、WiFiClientSecure等等,所谓集合了诸子百家的功能于一身。- ESP8266WiFiGeneric:8266模块通用库,包括处理程序来管理wi-fi事件,如连接,断开连接或获得ip,wi-fi模式的变化,管理模块睡眠模式的功能,以ip地址解析的hostName等;
- ESP8266WiFiSTA:Station模式下使用的代码功能;
- ESP8266WiFiScan:wifi扫描功能(处于Station模式);
- ESP8266WiFiAP:wifi网络接入点功能(AP热点);
- WiFiClient:tcp 客户端(发送端);
- WiFiServer:tcp 服务端(接收端);
为了让大家更加清晰了解到各个具体内容,博主也花了点时间做了一个初略的百度脑图,以供大家参考:
脑图相对来说比较大,烦请读者自行下载保存下来放大查看。本篇不详细介绍每个函数怎么用,等到后面用到的时候,博主再陆续给大家介绍一下用法。
3. 总结
这节要记住的重点是,核心库ESP8266WiFi到底有什么功能可以提供给我们使用。理解它是后续开发的基本。
-
Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。
2017-09-14 21:33:191、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。 3、 Esp8266之 利用 “软件定时器 ” 定时0.5秒闪烁点亮一盏LED。 4 、Esp8266之 ...- 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板。仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
基于C SDK的ESP8266开发技术全系列笔记
一、NONOS SDK 无操作系统开发
1、搭建开发环境,开始一个“hellow world”串口打印。
2、利用GPIO开始使用按钮点亮你的“第一盏灯”。
3、利用 "软件定时器 " 定时0.5秒闪烁点亮一盏LED。
4 、了解PWM,更为深入地用PWM控制一盏LED的亮度变化。
5 、原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。
6 、了解 SmartConfig与Airkiss一键配网,无需把wifi名字密码写在固件里。
7 、了解 softAP热点配网模式原理,仿“机智云”定义自己的热点配网模式协议。
8、你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。
9、 [小实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
10、 [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
11、8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!
12、图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏LED。
13、 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。
14、esp8266的 FreeRtos系统学习的正确姿势 ------ 环境搭建、烧录。
15、esp8266的 物联网又一股清流,8266接入阿里云平台非阿里智能的SDS服务,点亮一盏LED灯。
16、esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。
17、esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。
18、 esp8266 基于NONOS 实现 OTA 远程升级,实现无线“ 热修复 ”升级固件程序。
19、 esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。
20、 深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下彼此通讯交互数据。
21、浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。
22、 esp8266的工程如何添加第三方静态库文件以及如何自定义文件夹,聊聊那些makeFile的事。
23、 乐鑫esp8266 NONOS SDK 3.0编程使用 SPI 驱动基于Max7219芯片的八位数码管,显示日期信息。二、RTOS SDK 带操作操作系统开发
23、再来一波 esp8266 基于 freeRtos系统连接自己私有的服务器实现OTA远程升级,接触下 lwip的基本知识。。
24、 渗透学习回顾下esp8266的外置spi芯片25q系列,熟悉8266代码块在其的分布,得心应手放置图片或其他资料。
25、 深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。
26、 RTOS分析 MQTT 实现过程,实现移植 MQTT协议在 esp8266 rtos实时系统,可断线重连。
27、 跟紧脚步,用VisualStudio Code开发 esp8266 rtos SDK v3.0版本,全新的 idf 框架,节省内存模块化开发。
28、 教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。
29、 百万条消息免费之乐鑫esp8266使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接支持阿里云规则引擎。
30、 使用 IIC总线驱动 0.96寸的OLED显示屏,显示天气预报信息。
31、 当esp8266遇到 Html,该怎么内置网页控制设备,理清内置网页的实现过程,实现无需路由器手机也可以控制esp8266。
32、 细聊HmacMD5的加密方法带来的安全性,并实践在esp8266上,最大保障传输的过程的信息的安全性。
33、 如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用?
34、 乐鑫esp8266 NONOS SDK 3.0编程使用 SPI 驱动基于Max7219芯片的八位数码管,显示日期信息。
35、 乐鑫esp8266芯片借助机智云平台做一个商业化的七彩RGB灯泡可调整体方案项目,炫彩夺目高大尚。
36、 认识esp8266 Rtos 3.0 sdk 工程结构,esp8266如何向esp-idf工程靠近的,如何自定义头文件编译?
37、 你要找的基本外设功能都在这里了,包括Gpio、Pwm 和 Uart 接口使用。
38、 一篇文章带你搞掂存储技术 NVS 的认识和使用,如何利用NVS保存整型、字符串、数组以及结构体。
39、 捋一捋微信公众号配网智能设备 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 。
40、 基于乐鑫idf框架,研究出超稳定、掉线重连、解决内存泄露问题的Mqtt框架!支持esp8266和esp32!
43、esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网基础之上增加dns域名解析!
43、 我又来了,基于rtos3.0版本 SDK编程 SPI 驱动 ws2812b 七彩灯,代码全部开源奉献给你们!
43、esp8266-12模块基于rtos3.0版本扫描周围获取附近可用的 Wi-Fi 热点路由器信息,同样适合esp32。
43、整理分享那些我在项目中常用的esp8266 rtos3.0版本的常见驱动,Button按键长短按、PWM平滑调光等。
43、 内置仅1M的Esp8285,如何攻破最棘手的OTA问题,大大节省资源成本开发产品。
43、 详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印。
43、 无需外网,如何实现在本地局域网与控制端做数据交换的一些开发经验。
43、迟来的1024程序员祝福,开源分享一个驱动 ds18b20 获取温度的工程。
43、aliyun sdk 直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制。
43、esp产品量产方案初入门之 如何从外部读取 csv 文件的数据,比如从代码读取外部文件阿里云三元组。
43、体验下 Linux搭建 ESP8266_RTOS_SDK 3.0 最新环境的搭建和编译吧。
43、仅1M flash 的安信可 ESP-01S 模块,如何二次开发?如何对其 OTA 远程升级固件
43、分享在 esp8266 C SDK实现冷暖光色温平滑调节的封装,轻松集成到您的项目去。-------- 学习笔记持续更新,欢迎关注我…
很多人怎么联系我一起学习进步,下面打个小小公告:
玩转esp8266
带你飞、加群QQ
群,提高门槛,不喜的朋友勿喷勿加:434878850
esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32文章目录
- 一、认识其本质与搭建开发环境。
- 方式1,利用安信可一体化环境【新手推荐】
- 方式2,自主搭建环境【支持 rtos和nonos】:
- 二、开始我们基于 nonos 工程的第一个“Hello World”。
- 第一步:打开我们最新的NONOS的SDK下载地址:https://github.com/espressif/ESP8266_NONOS_SDK ,解压后请注意以下操作:
- 第二步:导入项目 **选择 File→Import** ,下面步骤:
- 第三步:点开C/C++分支,并选中Existing Code as Makefile Project:
- 第四步:去除C++支持,选中 Cygwin GCC,点击Browser,选中我们解压后所在的目录。点击finish。
- 第五步:此刻,成功进入到我们的主界面。
- 第六步:开始编译工程前,我们装装逼,在其的 app ->user --> user_main.c 方法修改如下,让输出为 hello world。
- 第七步:开始编译前,按照官方的说法,我们看控制台时候,直接把 Problems 栏目关掉,解释说,这个Problems 栏目报的错误不准确,只有Console 栏目下的输出为准,所以建议大家把 Problems 栏目关闭。
- 第八步:我们编译之后,看看控制台下的信息打印,说明已经成功做好固件啦。:
- 三、基于 rtos 如何打开运行一个工程。
- 四、让我们烧固件走起。
- 五、上电不跑程序,异常分析。
- 另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!
一、认识其本质与搭建开发环境。
1.1 、 市面上无线模块有哪些。
大家可知道目前的无线通信模块有哪几种? 主要有Wifi无线通讯、BlueTooth蓝牙和ZigBee,目前大多都是前二者,ZigBee现在用的很少了。据我所推断的,未来是属于物联网世界、智能家居领域,而蓝牙和zigbe局限于范围,蓝牙4.0仅仅最大支持100米,zigbee就不说了。
1.2 、wifi模块Esp8266发展。
2015年物联网处于爆发的一年,乐鑫的ESP8266WIFI 芯片成为强烈的催化剂。成功的将2014年前的40以上的WIFI成本压缩到现在的10元左右。内置WIFI前端和高性能的32位MCU,基本引爆物联网市场,几乎牵扯到电子的行业,都可以用上,比如WIFI开关 灯具 WIFI定位 电饭锅 空气净化器 等消费类小家电与大家电,都面临这一场技术革新,与新的用户体验!比如你仅仅增加10元的成本就可以把自己的产品被手机控制了。
1.3 、Esp8266特点。
-
要知道,在物联网世界里面的牛人,没有谁不认识 8266 。既然如此出色,那肯定有他存在的必然理由:
-
低功耗、高集成度的 Wi-Fi 芯片。
-
最小系统仅需 7 个元器件
-
超宽工作温度范围:-40°C 至 +125°C
-
ESP8285 : ESP8266 内封 8 Mbit Flash。
-
ESP8266EX 有三种运行模式:激活模式、睡眠模式和深度睡眠模式,能够延长电池寿命。
-
1.4 、搭建开发环境。
方式1,利用安信可一体化环境【新手推荐】
- esp8266 经过这么多年的迭代,sdk从1.0到目前的 3.3版本,也有2种C语言开发方式:裸跑 nonos 以及 实时操作系统 freeRtos 的支持,安信可公司一直在着乐鑫步伐跟着走,推出了 前1.0版本和 1.0版本;
- 其中 前1.0版本 仅仅支持 2.0版本及以下,而 1.0版本支持3.0或以上。
- 教程参考官网教程:添加链接描述
方式2,自主搭建环境【支持 rtos和nonos】:
- 环境搭建大家应该都几乎是选择
windows
的,作为一个老司机,和大家一样,我也是选择为win10
的笔记本电脑游戏本,cpu i8 ,16g内存! - 下面我就以
windows
平台为大家搭建一个可以手动同步最新编译工具链、以及可编译 非操作系统nonos工程和 操作系统Rtos工程的代码,下面是搭建环境的三件套:- esp8266最新的编译工具链下载传送门(仔细看下面的截图): https://github.com/espressif/ESP8266_RTOS_SDK
- 2019年的eclipse c++编辑器下载,请关注我的微信公众号后回复 8266环境搭建 或者群文件获取即可!
- 感谢安信可提供的 window cywin 环境,下载可在我的微信公众号后回复 8266环境搭建 或者群文件获取即可!
- 待我们的三件套下载了之后,首先第一步是解压,注意是用
WinRAR
软件以管理员身份解压,可以得到完整的文件夹,其他解压软件有可能会得到不完整的压缩包! - 下面我们先设置下cywin和编译工具链的环境变量,注意替换为您的实际路径,如下:
E:\Espressif\IDE\AiThinkerIDE_V0.5\AiThinkerIDE_V0.5\cygwin\bin\
E:\Espressif\IDE\xtensa-lx106-elf\bin\
- 下面是我们的编辑器的打开,注意
eclipes的打开必须事先自行搭建 java 环境,因为eclipse是用 java开发的 !等你可以成功打开界面如下,说明您已经完成了一大半了!
二、开始我们基于 nonos 工程的第一个“Hello World”。
第一步:打开我们最新的NONOS的SDK下载地址:https://github.com/espressif/ESP8266_NONOS_SDK ,解压后请注意以下操作:
- ①、
driver_lib
文件夹下面的Makefile
文件删除! - ②、整个
third_party
去掉,这是第三方的demo,我们很少用! - ③、把
example
文件夹下面的任意一个工程,比如smart_config
复制到主目录(逼问主目录就是下载压缩包压缩后的目录),可重命名为app
,或者不修改! - ④、以上做好了之后,可以导入IDE了!
我这里演示一个串口实验,打印 hellow world字符到我们通讯串口助手。下载后解压,注意解压后的路径千万别带中文字符,解压请直接复制到一个没有中文字符的路径的文件夹下面。否则会影响到后面的编译结果!
第二步:导入项目 选择 File→Import ,下面步骤:
第三步:点开C/C++分支,并选中Existing Code as Makefile Project:
第四步:去除C++支持,选中 Cygwin GCC,点击Browser,选中我们解压后所在的目录。点击finish。
第五步:此刻,成功进入到我们的主界面。
第六步:开始编译工程前,我们装装逼,在其的 app ->user --> user_main.c 方法修改如下,让输出为 hello world。
- 注意:从SDK1.4版本之后,已经移除了下面2个函数,我们只需要在
user_init()
里面敲写即可! esp8266
的非实时系统编程的打印函数尽量用os_printf()
,切记切记!!!
void user_init(void) { os_printf("hello world"); }
第七步:开始编译前,按照官方的说法,我们看控制台时候,直接把 Problems 栏目关掉,解释说,这个Problems 栏目报的错误不准确,只有Console 栏目下的输出为准,所以建议大家把 Problems 栏目关闭。
-
之后建议大家每次编译项目前先进行 clear project,再 build project ,这样就保证了正确的代码可以完全被编译,如果正确的代码没有clear project就直接build project ,可能会报错。
-
Build Project :编译项目 ; Clean Project:清理项目,可以清理下缓存。
第八步:我们编译之后,看看控制台下的信息打印,说明已经成功做好固件啦。:
- 第三处修改:需要在project_template的Makefile里添加指定的SDK的路径。千万忘记了结尾的”/”。否则编译还是会找不到路径,比如我的工程路径为:C:\Project8266\8266All\8266ProjectCSDN\16_ESP8266_RTOS_SDK_V1.5.0
export SDK_PATH = /cygdrive/C/Project8266/8266All/8266ProjectCSDN/16_ESP8266_RTOS_SDK_V1.5.0/ export BIN_PATH = /cygdrive/C/Project8266/8266All/8266ProjectCSDN/16_ESP8266_RTOS_SDK_V1.5.0/bin/
- 开始编译之后,便可看到console控制台输出如下,恭喜成功编译!
三、基于 rtos 如何打开运行一个工程。
- 第一处修改:此rtos工程导入和安信可的导进就是一模一样的,但是需要修改的是指定的工程编译目录 , 拿我github上的一个rtos工程,其编译目录为project_template, 所以需要修改如下:
- 第二处修改:修改编译指令,还记得我们的rtos编译时候需要选择一些选项吗?比如是user1.bin还是user2.bin。这里的话,我们需要手动的编辑此编译的指令:(下面的指令是生成可升级的user1.bin的32Mbit的8266模块,对应我们的8266-12f模块)
COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=6
-
开始编译之后,便可看到console控制台输出如下,恭喜成功编译!
bin crc: 1b65b8de
Support boot_v1.4 and +
Generate user1.4096.new.6.bin successully in BIN_PATH
boot.bin------------>0x00000
user1.4096.new.6.bin—>0x01000
!!!
四、让我们烧固件走起。
- 如果您的8266是没有最小系统的话(如下),那么需要自己搭建最小系统来烧固件进去。
看我们的最小系统搭建(强调:烧录时候,一定要让GPIO0处于低电平,即接GND):
-
让我们开始烧录:根据上面第八步的生成的bin文件,我们看见了其烧录信息:
-
eagle.flash.bin-------->0x00000
-
eagle.irom0text.bin---->0x10000
- 于是,我们就打开烧录软件,配置刚刚的路径,选择烧录地址(选择之后就是绿色的),各个参数如下:
- 下载完毕之后,我们给设备重新上电,打开串口助手,设置波特率74880:
-
上面的图是不是看见很清晰的 hellow world 呀 。
-
由于 nonos 3.0 以上步骤不可行,则具体操作请访问我的B站视频教学:https://www.bilibili.com/video/av40065898
-
后记:所有自己编译出来的工程,都是有四个文件要烧录的,其中2个是必须烧录的(防止初始化失败),这2个文件分别是 esp_init_data_default.bin 和blank.bin,烧录地址根据您的8266型号区别;
-
我们最平常用的是安信可8266-12系列的,这个是32Mbit,也就是4M flash ,所以他们的地址分别是 0x3FC000 和 0x3FE000 , 最后2个的烧录文件地址看编译之后结果而决定!也即是不一定是0x10000,有可能是0x2000 , 这个根据SDK的版本有关系。所以大家还是留心点!
-
的好多人问我这个
SPI MODE
应该怎么选择,这个其实是esp8266
芯片和flash
芯片的连接方式决定的,四根线就是QIO
,而DIO
就是六根线,至于后面还有QOUT
和DOUT
和flash
芯片有关,平时最多的是DIO
或者是QIO
了! -
最后一点,本系列博客的
NONOS SDK
都是1.4~2.2
的,在今年2018年七月左右
,更新到了3.0
版本,一些初始化代码都已经变了,大家入门的话,还是从我的GitHub
下载吧。这样较快地入门学习esp8266
;如果您的是最新的3.0
或者以上的工程,可能汇报以下错误:
user_main.c:45:2: error: #error "The flash map is not supported" #error "The flash map is not supported" ^ xt-xcc -Os -g -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -fno-builtin-printf -DICACHE_FLASH -DGLOBAL_DEBUG_ON -DSPI_FLASH_SIZE_MAP=0 -I include -I ./ -I ../include -I ../include/mqtt -I ../include/modules -I ../../include -I ../../include/eagle -I ../../driver_lib/include -o .output/eagle/debug/obj/user_main.o -c user_main.c user_main.c:45:2: error: #error "The flash map is not supported" #error "The flash map is not supported" ^ user_main.c:156:58: error: 'SYSTEM_PARTITION_OTA_SIZE' undeclared here (not in a function) { SYSTEM_PARTITION_OTA_1, 0x1000, SYSTEM_PARTITION_OTA_SIZE}, ^ user_main.c:157:39: error: 'SYSTEM_PARTITION_OTA_2_ADDR' undeclared here (not in a function) { SYSTEM_PARTITION_OTA_2, SYSTEM_PARTITION_OTA_2_ADDR, SYSTEM_PARTITION_OTA_SIZE}, ^ user_main.c:158:39: error: 'SYSTEM_PARTITION_RF_CAL_ADDR' undeclared here (not in a function) { SYSTEM_PARTITION_RF_CAL, SYSTEM_PARTITION_RF_CAL_ADDR, 0x1000}, ^ user_main.c:159:40: error: 'SYSTEM_PARTITION_PHY_DATA_ADDR' undeclared here (not in a function) { SYSTEM_PARTITION_PHY_DATA, SYSTEM_PARTITION_PHY_DATA_ADDR, 0x1000}, ^ user_main.c:160:46: error: 'SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR' undeclared here (not in a function) { SYSTEM_PARTITION_SYSTEM_PARAMETER, SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR, 0x3000}, ^
- 莫急,这是因为未定义造成的,一般地,根据我们最常用的
esp8266-12
系列的32Mbit
的模块,那么只需要在根目录的Makefile
文件的第25行
的代码修改如下,重新编译即可!!烧录地址不变!!
BOOT?=new APP?=1 SPI_SPEED?=40 SPI_MODE?=QIO SPI_SIZE_MAP?=6
五、上电不跑程序,异常分析。
ESP8266 上电时打印的 boot 模式信息代表什么?如何改变 boot 模式?
ESP8266 上电时会判断 boot strapping 管脚的状态,并决定 boot 模式。例如,ESP8266 上电时打印的 boot 模式信息如下:
ets Jan 8 2013,rst cause:1, boot mode:(3,2)
- 其中打印的 boot mode 的第一位数字(3)代表当前的 boot 模式。
- Boot 模式由 strapping 管脚的 3 位值 [GPIO15,GPIO0,GPIO2] 共同决定。如下表所示:
Strapping 管脚的 3 位值 [GPIO15,GPIO0,GPIO2] Boot 模式 7 [1,1,1] SDIO HighSpeed V2 IO 6 [1,1,0] SDIO LowSpeed V1 IO 5 [1,0,1] SDIO HighSpeed V1 IO 4 [1,0,0] SDIO LowSpeed V2 IO 3 [0,1,1] Flash Boot 2 [0,1,0] Jump Boot 1 [0,0,1] UART Boot 0 [0,0,0] Remapping 烧写失败定位
确保 boot 模式在 UART boot.将 ESP8266 拨到烧写模式,看烧写口的 log(默认 74880 查看). 正常烧写应该是
boot mode:(1,n)
, 其中n任意,第二个参数和 SDIO 相关,不用关心!看 log 乱码/无打印定位,确保 boot 模式在 Flash boot!
将 ESP8266 拨到运行模式,看 log 口的输出. 正常log应该是 boot mode:(3,n),第二个参数和 SDIO 相关,不用关心!
- 1.确保波特率正确
- 2.确保无串口占用
另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!
- 玩转
esp8266
带你飞、加群QQ
群,不喜的朋友勿喷勿加:434878850 - esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
- esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
-
ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明
2019-06-19 13:47:50笔者本书的主题是基于Arduino平台来开发ESP8266。那么从另外一个角度来看待这句话,可以理解为:把ESP8266当作一款类似于Arduino UNO型号(为什么不是Mega2560呢?可以从硬件资源方向考虑)的Arduino开发板...授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。
共同学习成长QQ群 622368884,不喜勿加,里面有一大群志同道合的探路人
如果觉得有用,麻烦点赞收藏,您的支持是博主创作的动力。
文章目录
笔者本书的主题是基于Arduino平台来开发ESP8266。那么从另外一个角度来看待这句话,可以理解为:把ESP8266当作一款类似于Arduino UNO型号(为什么不是Mega2560呢?可以从硬件资源方向考虑)的Arduino开发板,用Arduino平台的开发方式来开发项目,只不过ESP8266是在Arduino UNO的基础上加了网络功能。
本章将介绍ESP8266作为Arduino UNO开发板的一些重要开发知识点。
主要分为8个部分:
1.ESP8266 Arduino程序结构
2.计时和延时(Timing and delays)
3.NodeMcu 端口映射
4.数字IO(Digital IO)
5.中断功能
6.模拟输入(ADC)
7.模拟输出(PWM)
8.串口通信(Serial)1. Arduino程序结构
在第2章中,笔者提供了一个测试用例,让我们来回顾一下,代码如下:
/** * Demo: * 测试ESP8266 demo * 打印ESP8266模块信息 * 1.打印Arduino Core For ESP8266 版本,笔者是2.4.2版本 * 2.打印Flash的唯一性芯片id(读者可以思考一下是否可以用来做点什么唯一性参考) * 3.打印Flash实际大小 * 4.打印IDE配置的使用Flash大小 * 5.打印IDE配置的Flash连接通信的频率 * 6.打印Flash连接模式:QIO QOUT DIO DOUT,可以理解为Flash传输速率 * @author 单片机菜鸟 * @date 2018/10/22 */ void setup() { // put your setup code here, to run once: Serial.begin(115200); //使能软件看门狗的触发间隔 ESP.wdtEnable(5000); } void loop() { //喂狗 ESP.wdtFeed(); FlashMode_t ideMode = ESP.getFlashChipMode(); String coreVersion = ESP.getCoreVersion(); Serial.print(F("Arduino Core For ESP8266 Version: ")); Serial.println(coreVersion); Serial.printf("Flash real id(唯一标识符): %08X\n", ESP.getFlashChipId()); Serial.printf("Flash 实际大小: %u KBytes\n", ESP.getFlashChipRealSize()/1024); Serial.printf("IDE配置Flash大小: %u KBytes,往往小于实际大小\n", ESP.getFlashChipSize()/1024); Serial.printf("IDE配置Flash频率 : %u MHz\n", ESP.getFlashChipSpeed()/1000000); Serial.printf("Flash ide mode: %s\n\n", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" : ideMode == FM_DIO ? "DIO" : ideMode == FM_DOUT ? "DOUT" : "UNKNOWN")); delay(1000); }
去掉代码细节,会得到类似于Arduino编程的代码结构:
/** * ESP8266 Arduino程序结构 * @author 单片机菜鸟 * @date 2018/10/24 */ void setup() { // 这里开始写初始化代码,只会执行一次 } void loop() { //这里写运行代码,重复执行 }
对于习惯c语言编程的读者,以上代码又可以抽象成以下伪代码结构:
/** * ESP8266 Arduino程序伪代码结构 * @author 单片机菜鸟 * @date 2018/10/24 */ void main(){ watchdogEnable();//启动看门狗 setup();//初始化函数 while(1){ loop();//业务代码函数 } }
代码解析
1.在ESP8266 Arduino编程中,默认会开启看门狗功能,也就是对应伪代码的watchdogEnable(),意味着我们需要适当喂狗,不然会触发看门狗复位;
2.setup()方法:初始化函数,只会运行一次,所以一般情况下,我们都会在这里配置好初始化参数,比如IO口模式、串口波特率设置等等;
3.loop()方法:不断重复执行,这里编写我们的业务代码,同时要注意执行喂狗操作。2. 计时和延时(Timing and delays)
时间控制,基本上可以说存在于每一个项目代码中。目前在Arduino中跟时间控制有关的方法包括以下几个:
delay(ms)
暂停一个给定的毫秒数的时间间隔。
delayMicroseconds(us)
暂停一个给定的微秒数的时间间隔。
millis()
返回重启(reset)后所经过的毫秒数。
micros()
返回重启(reset)后所经过的微秒数温馨提示
通常,我们控制LED灯闪烁都会加上一个delay延时来达到切换亮灭时间长度。但是delay有个缺点就是:在给定的时间间隔内是不能做其他操作,这样对于一些需要响应按键操作的场景就不适用了。那么有没有什么办法既能延时又能不影响其他操作呢?当然,这就是millis()的妙用,通过获取两个时间点的毫秒数,然后计算它们的差值,差值时间间隔内是可以执行其他操作的。代码片段如下:
long debouncdDelay = 60;//延时间隔 long lastDebounceTime = 0; //最近记录的一次时间 // 判断时间间隔是否大于设定的时间间隔。 if(millis()-lastDebounceTime>debouncdDelay){ lastDebounceTime = millis(); }
3. NodeMcu 端口映射
在前面,笔者有说到,本书的实验案例是基于NodeMcu这块ESP8266开发板来进行的,其中NodeMcu的核心芯片是ESP8266-12F。要想知道ESP8266-12F给我们提供了什么功能模块,首先了解一下它有什么引脚端口以及NodeMcu与它之间的引脚端口映射关系。
3.1 ESP8266-12F
首先,认识一下ESP8266-12F的引脚定义,通常会隐藏pin6-pin11,如下图:
当然,笔者也会提供完整的引脚图以便对比,如下图:
分析引脚图,可以得出几个结论:
1.ESP8266-12F总共有22个引脚,对应了第1章选型表的SMD-22封装工艺,同时有GPIO0-GPIO16共17个通用IO口,但是得注意有些IO口还可以完成其他功能(也叫做引脚复用),诸如Serial、I2C、SPI,由相应的函数库完成;
2.ESP8266具有一个可用的单通道ADC;
3.GPIO6-GPIO11(复用引脚CS、MISO、MOSI、SCK)用于连接外部flash,对用户不可用,试图使用这些引脚作为IO将会导致程序奔溃;
4.支持SPI总线通信,对应引脚为GPIO12-GPIO15;
5.支持I2C总线,对应引脚为GPIO4-GPIO5;
6.支持串口通信Serial、Serial1,默认对应引脚GPIO1-GPIO3;3.2 NodeMcu
接下来,先了解一下NoodeMcu的实物图,如下图:
同时,读者也需要知道ESP8266-12F与NodeMcu的端口映射关系,如下图:
可以看出:
1.中间的DEVKIT部分,就是NodeMcu提供给外界的端口,对应实物图上标注的端口名称;
2.除开中间部分,其他部分基本上对应ESP8266引脚,以不同颜色块来区分不同功能;温馨提示
NodeMcu上的CLK、SD0、CMD、SD1、SD2引脚,是用于连接外接flash芯片,不应该用于连接其他模块,悬空即可,以防程序奔溃。
或许笔者会觉得看图有点复杂,所以笔者总结了下面的GPIO引脚映射表,以供参考:
NodeMCU的引脚名称 ESP8266内部GPIO引脚号 可复用功能 备注 D0 GPIO16 无 可用,只能用作GPIO读/写,不支持特殊功能 D1 GPIO5 I2C总线的SCL 可用 D2 GPIO4 I2C总线的SDA 可用 D3 GPIO0 无 不可用,烧录固件或者运行模式控制端口 D4 GPIO2 Serial1的TX Serial1没有RX D5 GPIO14 SPI总线的SCLK 可用 D6 GPIO12 SPI总线的MISO 可用 D7 GPIO13 SPI总线的MOSI、Serial的RX 可用 D8 GPIO15 SPI总线的CS、Serial的TX 可用 D9 GPIO3 Serial的RX 可用 D10 GPIO1 Serial的TX 可用 SD2 GPIO9 无 尽量不用 SD3 GPIO10 无 尽量不用 从上面表格可以看出,我们大约11个GPIO引脚可用。而11个中的2个引脚通常被保留用于RX和TX,以便进行串口通信。因此最后,只剩下8个通用I / O引脚,即D0到D8(除开D3特殊用途)。
温馨提示
请注意,D0 / GPIO16引脚只能用作GPIO读/写,不支持特殊功能。
4. 数字IO(Digital IO)
上面说到,ESP8266-12F(也可以大胆说ESP8266-12系列)最终只剩下8个通用的I/O引脚以供我们使用,即是NodeMcu上的D0-D8(除D3之外)。
Arduino中的引脚号直接与ESP8266 GPIO的引脚号对应通信。pinMode/digitalRead/digitalWrite函数不变,所以要读取GPIO2,可调用digitalRead(2)。除了D0可以设置为INPUT(输入)、OUTPUT(输出)或者INPUT_PULLDOWN(输入,默认下拉,也就是低电平),剩余的数字IO引脚可以设置为INPUT(输入)、OUTPUT(输出)或者INPUT_PULLUP(输入,默认上拉,也就是高电平)。
下面,将在NodeMcu的D1引脚上写一个LED Blink的Arduino草图:/** * LED灯闪烁实验 */ void setup() { pinMode(D1, OUTPUT); // 初始化D1引脚为输出引脚 } void loop() { digitalWrite(D1, LOW); // 亮灯 delay(1000); // 延时1s digitalWrite(D1, HIGH);// 灭灯 delay(1000); // 延时1s }
注意
某些开发板和模块,仍将使用第9和第11引脚(如果闪存芯片工作于DIO模式,与默认的QIO模式相反),它们可用于IO。
5. 中断功能
中断可以理解为在正常的运行流程中突然插入的操作,这就像你在忙于工作的时候,领导突然叫你去买个下午茶,然后你就去把下午茶买回来,再继续工作。基于ESP8266的NodeMcu的数字IO的中断功能是通过attachInterrupt,detachInterrupt函数所支持的。除了D0/GPIO16,中断可以绑定到任意GPIO的引脚上。所支持的标准中断类型有:CHANGE(改变沿,电平从低到高或者从高到低)、RISING(上升沿,电平从低到高)、FALLING(下降沿,电平从高到低)。
首先,我们来看看Arduino IDE中用于中断的函数。
1.attachInterrupt()
该功能用于在将指定引脚设置为响应中断。
函数: attachInterrupt(pin, function, mode);
参数:
pin:要设置中断编号,注意,这里不是引脚编号。
function:中断发生时运行的函数, 这个函数不带任何参数,不返回任何内容。
Interrupt type/mode:它定义中断被触发的条件方式。
CHANGE:改变沿,引脚电平从低变为高或者从高变为低时触发中断。
RISING:上升沿,引脚电平从低变为高时触发中断。
FALLING:下降沿,引脚电平从高变为低时触发中断。
返回值: 无;2.detachInterrupt()
该功能用于禁用指定GPIO引脚上的中断。
函数: detachInterrupt(pin)
参数:
pin:要禁用的中断的GPIO引脚。
返回值: 无;3.digitalPinToInterrupt()
该功能用于获取指定GPIO引脚的中断号。
函数: digitalPinToInterrupt(pin)
参数:
pin:要获取中断号的GPIO引脚。例子
将NodeMcu的D2引脚设置为上升沿中断。在D2上外接一个按键,按键通过电阻下拉到地。当发生中断的时候,我们在串口监视器上打印“Hello ESP8266”。例子代码
/** * 功能描述:ESP8266中断演示 */ void setup() { Serial.begin(115200);//设置串口波特率 attachInterrupt(digitalPinToInterrupt(D2), InterruptFunc, RISING);//设置中断号、响应函数、触发方式 } void loop() { } /** * 中断响应函数 */ ICACHE_RAM_ATTR void InterruptFunc(){ Serial.println("Hello ESP8266"); }
6. 模拟输入(ADC)
学过模拟电路或者数字电路的人都会听过ADC,它又叫做模数转换器,用于将模拟信号转换成可视化的数字形式。ESP8266具有内置的10位ADC,只有一个ADC通道,即只有一个ADC输入引脚可读取来自外部器件的模拟电压。
ESP8266上的ADC通道和芯片供电电压复用,也就是说我们可以将其设置为测量系统电压或者外部电压。6.1 测量外部电压
相关方法
analogRead(A0),用于读取施加在模块的ADC引脚上的外部电压;
输入电压范围
0 - 1.0V之间;
测量精度
由于ADC具有10位分辨率,因此会给出0-1023的值范围;
注意点
为了支持外部电压范围(0-3.3v),NodeMcu做了一个电阻分压器,如图所示:例程
编写一个读取NodeMcu的ADC引脚上的模拟电压。我们这里使用电位器在ADC引脚上提供0-3.3V的可变电压。如下图连接线:
代码如下:/** * 功能描述:ESP8266 ADC 读取外部电压 * 在串口调试器查看效果 */ void setup() { Serial.begin(115200);//配置波特率 } void loop() { Serial.print("ADC Value: "); Serial.println(analogRead(A0));//输出0-1023 对应 外部输入电压 0-1.0v //延时1s delay(1000); }
6.2 测量系统电压
相关方法
ESP.getVcc(),读取NodeMCU模块的VCC电压,单位是mV;
注意点
ADC引脚必须保持悬空;在读取VCC电源电压之前,应更改ADC模式以读取系统电压。
要ADC_MODE(mode)在#include行后面改变ADC模式。
模式是ADC_TOUT(对于外部电压),ADC_VCC(对于系统电压)。默认情况下,它读取外部电压。
例程
编写ESP8266读取系统电压,代码如下:/** * 功能描述:ESP8266 ADC 读取系统电压 * 在串口调试器查看效果 */ ADC_MODE(ADC_VCC);//设置ADC模式为读取系统电压 void setup() { Serial.begin(115200); } void loop() { Serial.print("ESP8266当前系统电压(mV): "); Serial.println(ESP.getVcc()); delay(1000); }
7. 模拟输出(PWM)
PWM(Pulse Width Modulation,脉宽调制),是在保持波的频率不变的同时改变脉宽的技术。当我们需要连续控制电压变化,实现呼吸灯或者电机转速的时候,就要用到PWM,如下图。
首先,我们来理解一下占空比。一个脉冲周期由一个ON周期(VCCC)和一个OFF周期(GND)组成。一段时间内ON周期占据脉冲周期的比例就叫做占空比。DutyCycle(percentage)=Ton/TotalPeriodX100
例如,一个10ms的脉冲保持ON 2ms,那么根据公式,占空比是20%。
注意点
脉冲频率一般都是固定的,跟占空比没有关系。
NodeMcu PWM引脚
如下图,标注PWM引脚。
基本上数字IO都可以作为PWM复用引脚,除了D0。不过需要注意的是,D3尽量不用,它内部连接ESP8266 GPIO0。
NodeMcu PWM有关Arduino函数
1.analogWrite()
该功能用于在指定的引脚上启用软件PWM。
函数: analogWrite(pin,val)
参数:
pin:要启用软件PWM的GPIO引脚。
val:数值,一般在0到PWMRANGE范围,默认PWMRANGE是1023。
返回值: 无;
注意点:
analogWrite(pin, 0)用于禁用指定引脚上的PWM。
2.analogWriteRange()
该功能用于改变PWMRANGE数值。
函数: analogWriteRange(new_range)
参数:
new_range:新的PWMRANGE数值。
返回值: 无;
注意点:
可以理解为PWM精度范围。同样的PWM频率下,默认占空数值0-123。如果你改变PWMRANGE为2047,那么占空数值就变成0-2047。精度高了一倍。
3.analogWriteFreq()
该功能用于改变PWM频率。
函数: analogWriteFreq(new_frequency)
参数:
new_frequency:新PWM频率,默认是1kHZ。
返回值: 无;
注意点:
百度上很多资料都说PWM频率范围为1-1KHz。但是通过查看源码,如下:static uint16_t analogFreq = 1000; extern void __analogWriteFreq(uint32_t freq) { if (freq < 100) { analogFreq = 100; } else if (freq > 40000) { analogFreq = 40000; } else { analogFreq = freq; } }
可以看出,Arduino For ESP8266的PWM频率范围应该是100Hz-40KHz。
PWM例程
呼吸灯,LED灯明暗连续变化。代码如下:
/** * 功能描述:ESP8266 PWM演示例程 * @author 单片机菜鸟 * @date 2018/10/25 */ #define PIN_LED D6 void setup() { // 这里开始写初始化代码,只会执行一次 pinMode(PIN_LED,OUTPUT); analogWrite(PIN_LED,0); } void loop() { //这里写运行代码,重复执行 for(int val=0;val<1024;val++){ //占空比不断增大 亮度渐亮 analogWrite(PIN_LED,val); delay(2); } for(int val=1023;val>=0;val--){ //占空比不断变小 亮度渐暗 analogWrite(PIN_LED,1023); delay(2); } }
8. 串口通信(Serial)
ESP8266的串口通信与传统的Arduino设备完全一样。除了硬件FIFO(128字节用于TX和RX)之外,硬件串口还有额外的256字节的TX和RX缓存。发送和接收全都由中断驱动。当FIFO/缓存满时,write函数会阻塞工程代码的执行,等待空闲空间。当FIFO/缓存空时,read函数也会阻塞工程代码的执行,等待串口数据进来。
NodeMcu上有两组串口,Serial和Serial1。
Serial使用UART0,默认对应引脚是GPIO1(TX)和GPIO3(RX)。在Serial.begin执行之后,调用Serial.swap()可以将Serial重新映射到GPIO15(TX)和GPIO13(RX)。再次调用Serial.swap()将Serial重新映射回GPIO1和GPIO3。不过,一般情况下,默认就好。串口映射例程
/** * 功能描述:ESP8266 Serial映射例程 * @author 单片机菜鸟 * @date 2018/10/25 */ void setup() { // 这里开始写初始化代码,只会执行一次 Serial.begin(115200); Serial.println("GPIO1(TX),GPIO3(RX)"); //调用映射方法 Serial.swap(); Serial.println("GPIO15(TX),GPIO13(RX)"); //重新映射回来 Serial.swap(); Serial.println("GPIO1(TX),GPIO3(RX)"); } void loop() { //这里写运行代码,重复执行 }
Serial1使用UART1,默认对应引脚是GPIO2(TX)。Serial1不能用于接收数据,因为它的RX引脚被用于flash芯片连接。要使用Serial1,请调用Serial.begin(baudrate)。代码如下:
/** * 功能描述:ESP8266 串口例程 * @author 单片机菜鸟 * @date 2018/10/25 */ void setup() { // 这里开始写初始化代码,只会执行一次 Serial.begin(115200); Serial.println("Hello Serial"); Serial1.begin(115200); Serial1.println("Hello Serial1"); } void loop() { //这里写运行代码,重复执行 }
如果不使用Serial1并且不映射串口,可以将UART0的TX映射到GPIO2,具体操作是:在Serial.begin()之后调用Serial.set_tx(2)或者直接调用Serial.begin(baud,config,mode,2)。
默认情况下,当调用Serial.begin后,将禁用WiFi库的诊断输出。要想再次启动调试输出,请调用Serial.setDebugOutput(true)。要将调试输出映射到Serial1时,需要调用Serial1.setDebugOutput(true)。
调用Serial.setRxBufferSize(size_t size)允许定义接收缓冲区的大小,默认值是256(缓冲区也是使用内存,意味着不能一味地去增大这个值)。
Serial和Serial1对象都支持5,6,7,8个数据位,奇数(O)、偶数(E)和无(N)奇偶校验,以及1或者2个停止位。要设置所需的模式,请调用Serial.begin(baudrate, SERIAL_8N1), Serial.begin(baudrate, SERIAL_6E2)等。
Serial和Serial1都实现了一种新方法用来获取当前的波特率设置。要获取当前的波特率,请调用Serial.baudRate(),Serial1.baudRate()。代码如下:/** * 功能描述:ESP8266 串口波特率例程 * @author 单片机菜鸟 * @date 2018/10/25 */ void setup() { // 这里开始写初始化代码,只会执行一次 // 设置当前波特率为57600 Serial.begin(57600); // 获取当前波特率 int br = Serial.baudRate(); // 将打印 "Serial is 57600 bps" Serial.printf("Serial is %d bps", br); } void loop() { //这里写运行代码,重复执行 }
Serial和Serial1都属于硬件串口(HardwareSerial)的实例,如果读者需要使用ESP8266 软件串口的功能,请参考以下库:https://github.com/plerup/espsoftwareserial。
为了检测进入Serial的未知波特率的数据,可以调用Serial.detectBaudrate(time_t timeoutMillis)。这个方法尝试在timeoutMillis ms的时间内检测波特率,检测成功返回波特率,检测失败返回0。detectBaudrate()方法在Serial.begin()被调用之前调用(因为它不需要用到接收缓冲区或者串口配置),并且它不能检测数据位位数或者停止位。这个检测过程不会去改变数据的波特率,所以可以在检测成功之后,调用Serial.begin(detectedBaudrate)。串口用处
一般来说,串口通信用在两个方面:
1.与外围串口设备传输数据,比如蓝牙模块、Arduino等等;
2.开发过程中用来调试代码,通过串口输出Debug信息了解程序运行信息。例程如下:/** * Demo1: * statin模式下,创建一个连接到可接入点(wifi热点),并且打印IP地址 * @author 单片机菜鸟 * @date 2019/09/02 */ #include <ESP8266WiFi.h> #define AP_SSID "xxxxx" //这里改成你的wifi名字 #define AP_PSW "xxxxx"//这里改成你的wifi密码 //以下三个定义为调试定义 #define DebugBegin(baud_rate) Serial.begin(baud_rate) #define DebugPrintln(message) Serial.println(message) #define DebugPrint(message) Serial.print(message) void setup(){ //设置串口波特率,以便打印信息 DebugBegin(115200); //延时2s 为了演示效果 delay(2000); DebugPrintln("Setup start"); //启动STA模式,并连接到wifi网络 WiFi.begin(AP_SSID, AP_PSW); DebugPrint(String("Connecting to ")+AP_SSID); //判断网络状态是否连接上,没连接上就延时500ms,并且打出一个点,模拟连接过程 //笔者扩展:加入网络一直都连不上 是否可以做个判断,由你们自己实现 while (WiFi.status() != WL_CONNECTED){ delay(500); DebugPrint("."); } DebugPrintln(""); DebugPrint("Connected, IP address: "); //输出station IP地址,这里的IP地址由DHCP分配 DebugPrintln(WiFi.localIP()); DebugPrintln("Setup End"); } void loop() { }
9. 总结
总体上讲,本章基础内容比较多,笔者介绍ESP8266在Arduino平台上的一些基础知识点,包括程序结构、NodeMcu端口映射、ESP8266 数字IO、PWM、ADC、串口通信等等。
本章目的很简单,就是为了告诉读者,ESP8266到底给我们提供了什么可利用硬件资源,以方便我们项目开发。 -
ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境
2019-06-19 13:47:06基于Arduino平台开发ESP8266,我们至少要分别准备好硬件和软件开发环境: 1. 硬件 ESP8266模块,或者ESP8266开发板,笔者建议初学者直接使用开发板; 2. 软件 Arduino IDE开发... -
ESP8266
2019-07-27 12:34:46ESP8266EX 的工作温度范围大,且能够保持稳定的性能,能适应各种操作环境。 2.低功耗 ESP8266EX 专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了超低功耗。ESP8266EX 具有的省电模式适用... -
ESP8266开发之旅 网络篇⑥ ESP8266WiFiGeneric——基础库
2019-06-20 08:54:15ESP8266WiFi库不仅仅局限于 ESP8266WiFi.h 和 ESP8266WiFi.cpp 这两个文件,只不过它们是最核心的统一入口。 而在这些库中,有个8266模块通用库 ESP8266WiFiGeneric库,ESP8266WiFiSTA/ESP8266WiFiAP/ESP82... -
【ESP8266】基于ESP8266的MicroPython入门笔记
2017-01-01 16:36:29本文是ESP8266运行MicroPython入门笔记,记录自己在探索MicroPython所见所思的同时,也顺便简单评估该开发方式的优缺点。 开发环境 ESP8266开发板: ESP-LAUNCHER(4 MB Flash) 操作系统:Win10 64位 ... -
51单片机通过ESP8266模块与手机进行通讯(单片机)
2018-02-08 18:29:43Step1:配置ESP8266 通过USB转TTL模块把ESP8266模块和电脑连接起来,如图 把ESP8266模块的VCC,GND,CH_PD,UTXD,URXD口分别接USB转TTL模块的3.3v,地,3.3v,RXD,TXD 连接好后,就准备用电脑用串口调试助手向ESP8266... -
Arduino IDE for ESP8266安装失败,,arduino手动安装ESP8266开发板库
2018-12-05 16:45:34打开arduino 打开file ->... 将这个链接http://arduino.esp8266.com/stable/package_esp8266com_index.json填入’Additional Boards Manager URls’中 打开tool->board->boards manage,在其... -
ESP8266_11 ESP8266的UDP广播
2019-08-29 23:58:48ESP8266_01搭建开发环境 ESP8266_02程序的编译与下载 ESP8266_03SDK与Makefile的基本用法 ESP8266_04管脚控制与软件定时器 ESP8266_05 ESP8266有几个串口? ESP8266_06硬件定时器与IO中断 ESP8266_07基于PWM的... -
ESP8266开发之旅 网络篇① 认识一下Arduino Core For ESP8266
2019-06-19 13:51:04博主的 ESP8266开发之旅 专栏主要分为三个部分: 基础篇 网络篇 应用篇 从这一篇开始,博主将会带领各位读者在基础篇的基础上进入网络的世界。在此,博主认为各位读者已经具备以下前提: ... -
ESP8266_10 ESP8266的STATION模式
2019-08-28 00:02:16ESP8266_01搭建开发环境 ESP8266_02程序的编译与下载 ESP8266_03SDK与Makefile的基本用法 ESP8266_04管脚控制与软件定时器 ESP8266_05 ESP8266有几个串口? ESP8266_06硬件定时器与IO中断 ESP8266_07基于PWM的... -
ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用
2019-06-19 13:52:21在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识。并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: Station模式,也叫站点模式; Soft-... -
ESP8266 12E视频和资料 ESP8266无线开发板 8266 SDK开发 wifi模块
2015-10-16 21:05:24该文件为百度云连接,...ESP8266 wifi模块 ESP8266无线开发板 8266 SDK开发 wifi模块 视频和资料。以及源码demo案例 和几个简单视频的案例教程 完全适合喜欢esp8266 sdk开发的同学 支持esp8266 专门的eclipse 进行开发 -
51单片机通过WIFI模块ESP8266控制LED灯
2018-06-16 18:47:40手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关。下位机由单片机、ESP8266模块和LED灯组成,上位机由Android手机APP承担。我们在APP上发送LED灯的开关控制指令,ESP8266将收到的数据发送给单片机,从而... -
ESP8266_21基于ESP8266的一键配网
2019-11-07 18:39:16ESP8266_01搭建开发环境 ESP8266_02程序的编译与下载 ESP8266_03SDK与Makefile的基本用法 ESP8266_04管脚控制与软件定时器 ESP8266_05 ESP8266有几个串口? ESP8266_06硬件定时器与IO中断 ESP8266_07基于PWM的... -
ESP8266_12 ESP8266客户端模式下的TCP通信
2019-09-04 17:47:25ESP8266_01搭建开发环境 ESP8266_02程序的编译与下载 ESP8266_03SDK与Makefile的基本用法 ESP8266_04管脚控制与软件定时器 ESP8266_05 ESP8266有几个串口? ESP8266_06硬件定时器与IO中断 ESP8266_07基于PWM的... -
【常用模块】ESP8266 WIFI串口通信模块使用详解(实例:附STM32详细代码)
2019-01-27 19:06:57ESP8266 WIFI串口通信模块应该是使用最广泛的一种WIFI模块之一了。为什么呢? 因为ESP8266模块是一款高性能的WIFI串口模块,可以不用知道太多WIFI相关知识就可以很好的上手。说白了,只是个WIFI转串口的设备,你... -
ESP8266-Websocket, 用于 ESP 8266的web socket库.zip
2019-09-18 10:40:14ESP8266-Websocket, 用于 ESP 8266的web socket库 web socket客户端和ESP-8266服务器这是一个实现 web socket客户端和运行在ESP-8266上的服务器的简单库。正在启动应该从你可以访问的任何web服务器中提供示例 ... -
ESP8266_05 ESP8266有几个串口?
2019-07-29 22:39:30ESP8266_01搭建开发环境 ESP8266_02程序的编译与下载 ESP8266_03SDK与Makefile的基本用法 ESP8266_04管脚控制与软件定时器 ESP8266_05 ESP8266有几个串口? ESP8266_06硬件定时器与IO中断 ESP8266_07基于PWM的... -
ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用
2019-06-19 13:52:57在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识。并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: Station模式,也叫站点模式; Soft-... -
基于ESP8266的“WIFI杀手”与“WIFI钓鱼”实现(链接里面含有网络安全课设报告)
2019-07-30 10:17:082 相关工具及原理介绍2.1 硬件介绍——ESP8266WIFI模块ESP8266 系列模组是安信可(Ai-thinker)公司采用乐鑫ESP8266芯片开发的一系列wifi 模组模块。其硬件图如下: 图1 ESP8266硬件图2.1.1 ESP8266WIFI模块的... -
ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266烧录配置
2019-06-20 09:00:14编译代码提示缺少ESP8266WiFi库(原因之一就是选择了非ESP8266板子编译,比如Arduino UNO); ESP8266烧录失败(原因之一就是配置了错误的烧录选项,比如目标板是NodeMcu但是选择了其他板子); ESP8266烧录成功,... -
ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用
2019-06-20 08:55:511. 前言 在前面章节的博客中,博主介绍了ESP8266WiFi库 Tcp client的用法,并模拟了Http请求。...答案肯定是有的,这就是博主本篇需要跟大家讲述的知识——ESP8266HTTPClient库。 请注意... -
使用 ESP8266Client 和 ESP8266HTTPClient 库创建Esp8266和Domoticz之间的TCP连接
2019-02-14 13:18:55ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #include <DHT.h> #define DHTTYPE DHT11 // DHT type (DHT11, DHT22) #define DHTPIN 5 // Broche du DH... -
[ESP8266开发01] esp8266编译环境搭建,最新ESP8266_RTOS_SDK (IDF Style)V3.3
2020-01-31 17:38:08linux(ubuntu)esp8266编译环境搭建。最新ESP8266_RTOS_SDK,V3.3 -
esp8266(一)esp8266和电脑在同一局域网中传输数据
2019-04-10 12:24:00esp8266怎么配置 esp8266和USB转TTL连接 esp8266简单介绍 esp8266连接路由器 esp8266通过路由器连接在同一局域网中的电脑,建立TCP连接 esp8266使用串口发送数据到电脑上的网络调试助手 esp8266使用串口通过局域网... -
ESP8266专题-ESP8266自动下载电路分析
2020-03-18 07:18:02ESP8266下载过程中
-
基于单片机的电赛风力摆系统设计
-
SpringMVC入门程序
-
Selenium3分布式与虚拟化
-
CO10 BDC 报错 “No batch input data for dynpro SAPLCOKO1 0115”
-
彻底学会正则表达式
-
saber软件仿真资料.rar
-
PBUS UI Designer.rar
-
42608设计制作零件落料拉深模具--冷冲压模具设计工作.doc
-
CH_T_6004_2016_车载移动测量技术规程_概述_.pdf
-
边缘计算论文汇总CCF A B 2018-2020(近二百篇论文)
-
大学 毕业设计 项目实训 基于HGE游戏引擎开发的一款汽车游戏.zip
-
three.js入门速成
-
GPON宽带接入设备的研究.docx
-
DNA分析软件DNASP64位
-
【2021】UI自动化测试Selenium3
-
什么是HTML5?
-
Maya Calendar POJ - 1008
-
武汉理工大学 面向对象程序设计课内实验
-
42607基于ATSC51单片机接口芯片8255A为中心器件的控制交通灯论文.doc
-
深信服桌面云开放平台(V1.2)