前言
最近在弄NodeMCU Lua V3物联网开发板,稍微对手册图和板子上的引脚编号有点迷。
手册上的图
这上面没有明确的IIC引脚号耶。
于是去看来官方文档的解释:https://tttapa.github.io/ESP8266/Chap04%20-%20Microcontroller.html
其中在I2C部分有这么一段话:
The ESP doesn’t have a hardware TWI (Two Wire Interface), but it is implemented in software. This means that you can use pretty much any two digital pins. By default, the I²C library uses pin 4 as SDA and pin 5 as SCL. (The data sheet specifies GPIO2 as SDA and GPIO14 as SCL.) The maximum speed is approximately 450kHz.
翻译过来就是:
ESP没有硬件TWI(双线接口),但它是用软件实现的。这意味着你可以使用任意两个数字引脚。默认情况下,I²C库使用管脚4作为SDA,管脚5作为SCL。(数据表将GPIO2指定为SDA,GPIO14指定为SCL。)最大速度约为450kHz。
再往下看:
可以看到确实是GPIO4和GPIO5作为IIC接口的。结合上面的那些,他不是nodemcu上标注的D4和D5,而是GOIO04和GPIO05,就是上面丝印的D1和D2。
于是就直接拿GY-30模块来测测咯。
GY-30模块测试
接线部分:
GY-30 | ESP8266 |
VCC | 3.3V |
GND | GND |
SCL | D1 |
SDA | D2 |
测试代码:
#include <Wire.h>
#define ADDR 0b0100011 // 0x23
void setup() {
Serial.begin(9600); //设置波特率
while (!Serial) {;}
Wire.begin();
Wire.beginTransmission(ADDR);
Wire.write(0b00000001);
Wire.endTransmission();
}
void loop() {
int val = 0; //初始化光照值
Wire.beginTransmission(ADDR);
Wire.write(0b00000111);
Wire.endTransmission();
Wire.beginTransmission(ADDR);
Wire.write(0b00100000);
Wire.endTransmission();
delay(120);
/*计算光照*/
Wire.requestFrom(ADDR, 2); //每次2byte
for (val = 0; Wire.available() >= 1; ) {
char c = Wire.read();
val = (val << 8) + (c & 0xFF);
}
val = val / 1.2;
/*输出光照数值*/
Serial.print("当前光照值: ");
Serial.println(val);
delay(500);
}
测试结果:
有正常数据输出。说明引脚是对的咯。
简评
这些文档资料还是有不少纰漏的,特此记录一下。