最终效果视频硬件ESP8266模块 （这是一个系列。本文使用ESP8266 12-E NodeMCU套件作为例子）USB数据线烧录固件ESP8266可以烧录各种不同的固件，本文使用NodeMCU固件。首先下载博主编译好的NodeMCU固件，解压得到nodemcu-release-18-modules-2022-09-23-15-31-36-float.bin后面会用到。[button color="black" icon="download" url="http://blog.mangolovecarrot.net/usr/uploads/2022/09/nodemcu.zip" type=""]NodeMCU固件[/button]下载ESP8266烧录软件ESP8266Flasher，解压得到ESP8266Flasher32.exe[button color="black" icon="download" url="http://blog.mangolovecarrot.net/usr/uploads/2022/09/ESP8266Flasher32.zip" type=""]ESP8266烧录软件[/button]按住ESP8266上的Flash按钮的同时用USB线连接上电脑 （一定要按住Flash按钮不放的同时给模块上电才能进入烧录模式）运行ESP8266Flasher32.exe切换到config标签，点击第一行的齿轮图标选择固件文件切换回首页并点击按钮开始烧录，如果步骤3操作无误就能看到进度条在走了。等待进度条走完。拔下USB线并重新插上电脑。这一次不需要按住flash按钮。至此固件烧录完毕。程序文件上传工具ESPlorer和使用说明下载工具。[button color="black" icon="download" url="http://blog.mangolovecarrot.net/usr/uploads/2022/09/ESPlorer.zip" type=""]ESPlorer[/button]解压后双击ESPlorer.bat启动工具。（如果不能正常启动请先安装Java运行环境，百度Java即可）工具界面如下，看上去有点复杂，但其实大部分功能不用管。电脑连接上8266模块，工具右侧选择正确的端口以后点击Open按钮打开串口。波特率用115200。右侧窗口会显示一些启动信息，如果没有尝试点击几次右侧下方的Heap按钮。（这会向8266发送一条简单的命令，如果正常会有信息的回显）右侧FS Info：显示8266文件系统相关信息，总空间，各文件大小，剩余可用空间等。右侧Reload：刷新显示8266中的文件列表。如果以前没有上传过应该是空的。右侧下方一排预定义命令按钮，可查询关于芯片的基本信息，右侧的Reset是复位。左侧下方Upload：上传文件（程序文件），上传以后会出现在右侧文件列表中。硬件连接本文的示例程序直接使用板载的LED灯（GPIO2低电平点亮），所以你不需要做任何硬件连接。附：这个模块的引脚图如下，供参考。关于ESP8266引脚的详细说明请参见博主的另一篇文章程序NodeMCU这个固件使用Lua脚本语言写程序。而NodeMCU固件里提供了很多常用的库函数。编程的基本思想就是调用库函数实现你需要的功能。NodeMCU是一个开源的系统，库也是开源的，种类和数量非常多，但由于硬件Flash的size制约，不可能一次将所有的库有包含进来。所以应该挑选你需要的库，自己编译固件。博主编译的固件里包含了以下库：adc, color_utils, enduser_setup, file, gpio, http, net, node, ow, pixbuf, pwm, spi, tmr, uart, websocket, wifi, ws2812, ws2812_effects本文主要会用到gpio，tmr，wifi这3个库。快速上手下载博主准备好的程序文件[button color="black" icon="download" url="http://blog.mangolovecarrot.net/usr/uploads/2022/09/esp8266_led.zip" type=""]程序文件[/button]解压缩得到 init.lua / index.html / httpServer.lua 这3个文件用文本编辑器（最好不要用记事本）打开init.lua，修改最上面的wifi名和密码，改成你家里的WiFi，保存。 用ESPlorer上传上面的3个文件到8266，上传顺序无所谓。上传以后会出现在右侧列表中。点工具里的Reset按钮或重新给模块上电重启模块即可自动连上wifi并启动服务检视工具右侧信息栏显示8266获取到的IP地址（或者通过路由器后台查看）用手机浏览器（电脑也可以）打开 http://上面获取到的IP地址 ，即可看到远程控制页面。（比如，我这里获取到的IP地址是 192.168.0.11，那么网址就应该是 http://192.168.0.11 ）现在你可以通过这个页面控制LED灯的开/关了。程序说明本文不是Lua语言的教程，只对关键部分做一些说明。系统在上电后会自动查找名为init.lua的文件，如果存在则自动运行这个脚本。也就是说init.lua就是NodeMCU的入口程序。关于Lua语言请参考这里。NodeMCU包含的所有官方库的一览表以及说明文档在这里。连接wifi使用wifi库，上电后首先设置好ssid和密码后进入工作站模式（另一种叫AP模式，用8266本身创建一个热点，本文不讨论）上电以后使用tmr库定期尝试获取IP，一直到获取IP成功为止。一旦获取到了IP表示连接wifi成功，于是启动HTTP服务（调用httpServer.lua这个脚本）。Http服务配置主要是定义下面这些内容接收http请求的入口（也就是网址中域名后面的路径部分）接收到请求后的处理处理完成后设置http的应答内容比如，本文范例程序中定义了3个http请求的入口： on / off / status，分别用来 开灯 / 关灯 / 获取当前状态。下面以开灯的http请求为例，第2行中的 /on 就是一个入口的名字，实际访问是就用域名加上/on 即可。该行的其他内容是固定写法，照抄即可。第4行是接收到 /on 这个http请求后要做的事情，这里是调用gpio库函数将LED引脚拉低，也就是亮灯。第7行是设置http应答的类型，默认是html/text也就是网页文本，这是最常见的用于浏览网页的http应答类型。本例使用json类型，告诉浏览器要以json的格式来解析这次的应答内容。（json是一种在前后端传递数据时被广泛使用的一种纯文本的数据结构，具体本文不细说了）第10行是发送具体的应答内容，这里发送的就是json数据格式，包含两个属性值。-- 定义开灯用的url httpServer:use('/on', function(req, res) -- 亮灯 gpio.write(LED, gpio.LOW) -- http应答类型（json） res:type('application/json') -- 发送http应答 res:send('{"ret":"OK", "msg":"已开灯"}') end)远程控制用的网页http服务默认会调用index.html这个文件作为网站的首页（也就是 http://ESP8266的IP地址 ）。我制作的这个网页可以显示当前点灯状态，以及 开 / 关灯。打开这个网页时，会自动访问 http://.../status 获取当前点灯状态。当灯处于关闭状态时，会显示 开灯 按钮，点击按钮会访问 http://.../on （开灯），并重新获取状态。当灯处于打开状态时，会显示 关灯 按钮，点击按钮会访问 http://.../off （关灯），并重新获取状态。为了美观准备了不同的背景图片以显示开关灯的状态。本文不是网页制作的教程，有关网页制作相关可以参考这里。手机访问控制页面家里局域网访问浏览器打开 http://ESP8266的IP地址 即可，也可以直接访问 http://ESP8266的IP地址/on 或 http://ESP8266的IP地址/off 来控制LED使用域名，内网穿透实现随处访问这个不是一句两句说得清，是另一个网络技术话题了，本文略过。小结虽然本文只是远程控制了一颗LED，但只要掌握了这个方法，完全可以实现更复杂的IOT应用。下一篇，我将在本文的基础上演示如何利用iPhone手机的Siri助手进行语音控制。（本文完）
ESP8266 系列引脚分配说明，你应该使用哪些 GPIO 引脚？
本文转载，翻译自这篇文章。本文包含 ESP8266 GPIO 的指南，引脚图，功能以及如何使用它们。ESP8266 12-E 芯片带有 17 个 GPIO 引脚。并不是所有的 ESP8266 开发板都暴露了所有的 GPIO，有些 GPIO 是不推荐使用的，还有一些有非常特殊的功能。通过本指南，您将了解如何正确使用 ESP8266 GPIO，并通过为您的项目使用最合适的引脚来避免数小时的挫败感。ESP8266 12-E 芯片引脚下图说明了 ESP8266 12-E 芯片的引脚排列。如果您在项目中使用 ESP8266 裸芯片，请使用此图。[scode type="blue"]注意：并非所有 GPIO 都可以在所有开发板中访问，但无论您使用哪种开发板，每个特定 GPIO 都以相同的方式工作。[/scode]目前，带有 ESP8266 芯片的开发板种类繁多，在可访问 GPIO 的数量、尺寸、外形等方面有所不同……使用最广泛的 ESP8266 板是ESP-01、ESP8266-12E NodeMCU Kit和Wemos D1 Mini。有关这些板的比较，您可以阅读本指南：ESP8266 Wi-Fi 开发板比较。ESP8266-01 引脚排列如果您使用的是 ESP8266-01 板，您可以使用以下 GPIO 图作为参考。ESP8266 12-E NodeMCU 套件ESP8266 12-E NodeMCU 套件引脚图如下所示。WeMos D1 Mini 引脚分配下图显示了 WeMos D1 Mini 引脚排列。下载带有 ESP8266 引脚图的 PDF文档[button color="info" icon="" url="/usr/uploads/2022/09/1357414328.pdf" type=""]下载ESP8266引脚图PDF[/button]ESP8266 外设ESP8266 外设包括：17 个 GPIOSPII2C（在软件上实现）与 DMA 的 I2S 接口UART10 位 ADC最佳使用引脚——ESP8266关于 ESP8266 需要注意的一件重要事情是 GPIO 编号与板上丝印上的标签不匹配。例如，D0 对应 GPIO16，D1 对应 GPIO5。下表显示了丝印上的标签与GPIO编号的对应关系，以及在您的项目中最好使用哪些管脚，需要注意哪些管脚。绿色：可以放心使用。黄色：可以使用，但需要额外注意，因为它们可能在启动时出现意外行为。红色：不建议用作输入或输出。IO编号：使用NodeMCU的gpio库函数时的IO参数。比如GPIO2输出高电平：gpio.write(4, gpio.HIGH)连接到闪存芯片的 GPIOGPIO6 到 GPIO11 通常连接到 ESP8266 板上的 flash 芯片。因此，不建议使用这些引脚。上电引导期间使用的引脚如果某些引脚被拉低或拉高，则可以防止 ESP8266 启动。以下列表显示了上电引导时以下引脚的状态：GPIO16： 高电平GPIO0： 高电平，如果拉低则启动失败GPIO2： 高电平，如果拉低则启动失败GPIO15： 低电平，如果拉高，则启动失败GPIO3： 高电平GPIO1： 高电平，如果拉低则启动失败GPIO10： 高电平GPIO9： 高电平引导时引脚为高电平当 ESP8266 启动时，某些引脚会输出 3.3V 信号。如果您将继电器或其他外围设备连接到这些 GPIO可能会出现问题。以下 GPIO 在启动时输出 HIGH 信号：GPIO16GPIO3GPIO1GPIO10GPIO9此外，除 GPIO5 和 GPIO4 外，其他 GPIO 可以在启动时输出低电平，如果这些 GPIO 连接到三极管或继电器，则可能会出现问题。你可以阅读这篇（英文）确认每个 GPIO 在启动时的状态和行为的文章。[scode type="green"]如果要操作继电器，GPIO4 和 GPIO5 是最安全的 GPIO。[/scode]模拟输入ESP8266 仅支持一个 GPIO 中的模拟信号的输入。该 GPIO 称为ADC0，通常在丝印上标记为A0。如果你使用的是 ESP8266 裸片，ADC0 引脚的最大输入电压为 0 到 1V。如果你使用的是 ESP8266 12-E NodeMCU 套件等开发板，则电压输入范围为 0 至 3.3V，因为这些板包含3.3V的稳压芯片。您可以通过以下指南了解如何使用 ESP8266 进行模数转换（英文）：ESP8266 ADC – 使用 Arduino IDE、MicroPython 和 Lua 读取模拟值板载 LED大多数 ESP8266 开发板都内置了 LED。该 LED 通常连接到 GPIO2。LED 使用高电平将其关闭，用低电平将其打开。RST 引脚当 RST 引脚拉低时，ESP8266 复位。这与按下板载 RESET 按钮相同。GPIO0当 GPIO0 被拉低时，它将 ESP8266 设置为引导加载程序模式。这与按下板载 FLASH/BOOT 按钮相同。GPIO16GPIO16 可用于将 ESP8266 从深度睡眠中唤醒。要将 ESP8266 从深度睡眠中唤醒，GPIO16 应连接到 RST 引脚。了解如何将 ESP8266 置于深度睡眠模式：ESP8266 深度睡眠与 Arduino IDE（英文）ESP8266 深度睡眠与 MicroPython（英文）I2CESP8266 没有硬件 I2C 引脚，但可以用软件实现。因此，您可以将任何 GPIO 用作 I2C。通常，以下 GPIO 用作 I2C 引脚：GPIO5：SCLGPIO4：SDASPIESP8266 中用作 SPI 的引脚有：GPIO12：味噌GPIO13：MOSIGPIO14：SCLKGPIO15：CSPWM 引脚ESP8266 允许在所有 I/O 引脚中使用软件 PWM：GPIO0 到 GPIO15。ESP8266 上的 PWM 信号具有 10 位分辨率。了解如何使用 ESP8266 PWM 引脚：ESP8266 PWM 与 Arduino IDE（英文）ESP8266 PWM 与 MicroPython（英文）中断引脚ESP8266 支持任何 GPIO 中的中断，但 GPIO16 除外。带有 Arduino IDE 的 ESP8266 中断和定时器（英文）总结希望本指南对你了解 ESP8266 GPIO 能有所帮助。如果你对如何正确使用 ESP8266 GPIO 有一些想法，欢迎评论。
使用esp01和ds18b20制作无线温度采集器（整理中）
成品别着急，那根红线后面会说明。1-功能概要用ESP01作为主控，大部分时间处于休眠状态，定时唤醒连上wifi并通过ds18b20取得温度数据，取到温度数据以后上传到服务器。另外提供一个网页，提供图表的方式查看服务器上保存的温度数据。2-最终效果点下面的链接，查看实时数据采集结果3-硬件说明3.1-ESP01无线WIFI模块本文中，我们作为主控的芯片。这个芯片是esp8266系列的一款，淘宝上的价格是十元人民币左右。3.2-ds18b20DS18B20是常用的温度传感器，淘宝上的价格是4到5块钱人民币。，外观引脚4-搞定ESP014.1-认识引脚GND和VCC就不多说了。GPIO2和GPIO0是标准的输入输出引脚。RXD和TXD，有单片机基础的一定知道这是用于串口通信的两个引脚。CHPD是模块使能引脚，高电平时模块才工作。RST是复位引脚，下降沿复位。4.2-NodeMCU又是啥操控esp01有很多种方法，比如用官方默认系统支持的AT指令，使用这种方法，需要用外部的单片机给这个模块发送AT指令让模块按指令工作，关于AT指令我们这里就不展开了。我们这里要用的方法是另一种：给这个esp01模块装上一个第三方的系统，然后在这个系统里面写程序。第三方的系统也有好几种，其中的一种就叫NodeMCU。有兴趣可以百度一下NodeMCU，去他们的官网看一看。简单来说，NodeMCU把系统的很多底层功能包装起来了，你要做的就是调用系统提供的各种函数来完成工作。语言lua，是一种脚本语言，就算没学过，只要有编程基础，上手应该很快。4.3-烧录NodeMCU既然决定要用NodeMCU，那么我们要做的第一件事就是把NodeMCU这个系统烧录到ESP01里，替换掉原来的系统。这个过程叫做烧录。烧录需要用到串口通信，所以你必须要有一个USB转串口的模块，相信从51玩过来的朋友一定有这东西。没有的话在淘宝上买一个也很便宜，几块钱到十几块钱都有吧。有了烧录器，我们还需要一个东西叫rom，也就是，烧到ESP01里用的系统文件。下面我们就从如何获取rom开始说起。（未完待续，）4.3.1-在线编译固件4.3.2-下载烧录软件4.3.3-烧录固件4.4-写程序4.5-上传程序5-搞定服务器6-深度休眠7-图表可视化
乘着物联网的东风，中国的安信可（AI-Thinker）推出的ESP8266系列可是火了一把。所谓物美价廉，花很少的钱就能让你的老爷车51单片机系统插上无线的翅膀，真的是带你zb带你飞。。。其实不仅仅是51，AVR/STM甚至Arduino系列都能鸡犬升天。说了这么多废话，这篇文章不是教程，只是记录一下上手esp01时掉过的坑以及怎么爬出来的。。。一定要进入flash模式！！一定要进入flash模式！！一定要进入flash模式！！不然无法烧录。进入方法 GPIO0下拉CH_PD上拉 的状态下reset，重新上电就行。■ ■ ■ 重要！！！！ ■ ■ ■ESP01 烧录这个模块的时候，我最初直接用USB转串口模块直接供电，最后烧录是成功了但是无限重启，各种奇怪的现象 最后，用两节5号电池单独给模块供电（一定要跟USB串口模块共地，否则串口不能工作）后解决了。 原因是电脑USB口驱动电流太小，实测ESP01上电电流达到200ma，直接把电源电压拉低到1.几伏特。模块当然无法工作。 事后仔细查看了我用的USB转串口模块上使用的稳压芯片662K，这个芯片最高输出电流只有200ma，ESP01启动时需要200到300mA的峰值电流,根本带不动。 以后再购买USB转串口模块的时候可以注意一下输出电流的参数，大一点比较方便。 后来又自己用输出电流800ma的LM1117T来供电，没有问题了。（注意尽量避免面包板跟杜邦线多次转接，会影响正常启动的） 总结，电源很重要。奇怪的问题大多跟电源有关。 Flasher的设置■DIO■波特率选115200（注意，这里选的波特率并不是烧录完成以后的系统的默认波特率，只是烧录时使用的波特率而已，大一点就快一点）■Flash大小可以用下面的esptool工具查看，同样需要先进入flash模式（GPIO0下拉CH_PD上拉） esptool.py -p COM5 flash_id ※为了安装这个tool，需要先安装python27以上，然后再python里安装依赖包 setuptools / pyserial ，最后才能安装esptool成功。 安装顺序: 1 - python27 装完以后吧python安装目录以及python/script目录一起加入环境变量path 2 - 进入文件夹 ./pythonLib/ ``` python ez_setup.py install (必须,安装pyserial用） python get-pip.py install (非必须，只是为了方便以后用pip安装python库) ``` 3 - 进入文件夹 ./pyserial-3.2.1/ ``` python setup.py install ``` 4 - 进入文件夹 ./esptool-master/ ``` python setup.py install ``` 运行时需要进入安装的目录。 常用命令 （COM5根据实际情况修改） 擦除flash : ``` esptool.py -p COM5 erase_flash ``` 查看芯片信息 : ``` esptool.py -p COM5 flash_id ``` 详细命令: [详细命令](https://github.com/espressif/esptool "详细命令") ■esp_init_data_default.bin 烧录文件的烧录地址需要用到flash大小的信息。（这个data可以不烧录） https://nodemcu.readthedocs.io/en/master/en/flash/ SDK Init Data 0x7c000 for 512 kB, modules like most ESP-01, -03, -07 etc. 0xfc000 for 1 MB, modules like ESP8285, PSF-A85, some ESP-01, -03 etc. 0x1fc000 for 2 MB 0x3fc000 for 4 MB, modules like ESP-12E, NodeMCU devkit 1.0, WeMos D1 mini 0x7fc000 for 8 MB 0xffc000 for 16 MB, modules like WeMos D1 mini pro See "4.1 Non-FOTA Flash Map" and "6.3 RF Initialization Configuration" of the ESP8266 Getting Started Guide for details on init■烧录完成后，去掉GPIO0的下拉，重新上电.第一次上电可能会看到 Formatting file system. Please wait... 这种消息反复出现，不要以为又失败了无限重启，这是正常的，反复几次以后就进入NodeMCU系统了。