前言
最近在弄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);
}
測試結果:
有正常資料輸出。說明引腳是對的咯。
簡評
這些文檔資料還是有不少纰漏的,特此記錄一下。