主要内容
芯片介绍
开发环境
编程举例
芯片介绍
什么是NodeMCU?
NodeMCU,是一个开源的物联网平台。 它使用Lua脚本语言编程。该平台基于eLua 开源项目,底层使用ESP8266 sdk 0.9.5版本。该平台使用了很多开源项目, 例如 lua-cjson, spiffs. NodeMCU包含了可以运行在 esp8266 Wi-Fi SoC芯片之上的固件,以及基于ESP-12模组的硬件。
我组项目主要使用上海乐鑫ESP8266的CH340版本的NodeMCU(ESP-12F)。详细参数如下:
核心模组:ESP8266
MCU:Xtensa L106
RAM:50K
Flash:512K
D1~D10:10 GPIO, 每个都能配置为 PWM, I2C, 1-wire
串口配置:CH340驱动。(使用VMware时在主机中安装驱动之后,将设备连接到VMware中,虚拟机——可移动设备))
认识NodeMCU的数字引脚:
注意传感器(外接元件)的允许工作电压,必须和引脚匹配。
其中有几个引脚需要特别处理:
(GPI02)D4引脚:启动时不能为低电平。(当和其他串口连接起来后,可能导致启动时低电平,所以必须再次调试,列出问题列表综合解决)。
(GPI105)D8引脚:运行时一直保持低电平状态。不可用该引脚来读取开关状态或I2C通讯。
(GPI00)D3引脚:运行时一直保持高电平状态。否则,ESP8266进入程序上传工作模式无法正常工作。最好的操作便是无需操作,因为NodeMCU内置电路可以确保该引脚在工作时连接高电平而在上传程序时连接低电平。
注意引脚电压电流限制:
NodeMCU引脚的输入输出电压限制是3.3V。
向引脚施加3.6V以上的电压就有可能对芯片电路造成损坏。
这些引脚的最大输出电流的12mA。
同时也不能接入太弱的电压,否则会造成传感器读取失败。
上拉电阻/下拉电阻参数:
-
GPIO 0-15引脚都配有内置上拉电阻。
-
GPIO16引脚配有内置下拉电阻。
GPIO(general porpose intput output):通用引脚输入输出端口,通过GPIO引脚与外部设备连接起来,实现外部通信、控制和数据采集。上图的紫色标记即为NodeMCU的GPIO引脚(16个)。
首先讨论下拉电阻,也就是GPIO16:
分析下拉电阻的电路图,由一个信号输入端、两个固定电阻、一个按键式开关、一个5V电源组成。GND表示接地。
在按钮(S2)没有按下的时候,输入端只和地线联通。此时输入端电压在零点位。
在按钮按下的时候,5V的电平传递到等压点位置上去,分流到输入端口(R1
在此过程中考虑不稳定性:由于各种现实情况的微扰(静电、感应),所以实际上零电位传递的电压可能更高。
然后讨论上拉电阻,也就是GPIO 0-15,上拉电阻电路由一个输入端口、两个固定电阻、一个按键式开关、一个5V电源组成,但由于电路连接方式不同,它和上拉电阻还是有很大的区别。
未按下按钮时,5V电压直接传递到输入端;
若按钮按下,那么由于分流,输入端口将变为零电位。
所以可以说下拉电阻和上拉电阻的作用刚好相反,它们都是控制输入端口的电位的电路。
模拟输入 A0
回看原来引脚图最左上角的橙色标记引脚,它是一个仅有模拟信号输入的端口,且这种模拟信号只能是电压,允许电压0-1V(并不能去换算成其他物理量下单位,例如电流),对应输出0-1024。
通讯-串行通讯
获取外部设备信息必须有通讯方式,通讯方式一般分为两种,即串行通讯和并行通讯。
此处先讨论NodeMCU提供的串行通讯方式。NodeMCU向我们提供了两组串行通讯的端口(出口)。看图,GPIO8(U1RXD)对应GPIO2(U1TXD),RX(U0RXD)对应TX(U0TXD)。
串行通讯必须交叉接线,举个栗子,R需要接到T上,T则需要接到R上,不能R接R,T接T。
串行通讯端口直接和设备联通收发数据,所以,这两组端口在下载的时候是不允许被占用的,否则会导致下载程序失败。当然,也可以USB下载完程序之后,RX、TX串口进行通讯。
注意,GPIO8引脚用于开发板的Flash寄存器的控制,所以它只能发送数据,相当于RX功能作废,拥有的是TX功能。换句话说,它是单向传输的。所以说GPIO2和GPIO8的传输功能不全,RX和TX那组才是完整的。
那么假设我做项目的时候,串行端口不够怎么办?如上所述,下载程序的时候我不能占用RX/TX端口吧,但我又不想等它下完了又一次把外设线重新接上这两个端口,实际开发中细节调试很多,接来接去很麻烦。而且,真正涉及到工厂设备的时候这种情况将变得更加复杂。但我又不能连另一组,因为是摆设……
所以,NodeMCU为我们提供了软串口的解决方案。支持软串口的硬件中,我们选择任意两个端口就可以实现串口通讯。这一部分内容将在之后的课程讲解。