天天看點

ESP8266開發闆 使用IIC引腳,使用GY-30光照強度子產品前言手冊上的圖GY-30子產品測試簡評

前言

最近在弄NodeMCU Lua V3物聯網開發闆,稍微對手冊圖和闆子上的引腳編号有點迷。

手冊上的圖

ESP8266開發闆 使用IIC引腳,使用GY-30光照強度子產品前言手冊上的圖GY-30子產品測試簡評

這上面沒有明确的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。

再往下看:

ESP8266開發闆 使用IIC引腳,使用GY-30光照強度子產品前言手冊上的圖GY-30子產品測試簡評

可以看到确實是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);
}
           

測試結果:

ESP8266開發闆 使用IIC引腳,使用GY-30光照強度子產品前言手冊上的圖GY-30子產品測試簡評

有正常資料輸出。說明引腳是對的咯。

簡評

這些文檔資料還是有不少纰漏的,特此記錄一下。

繼續閱讀