0. 引言
实物效果图:
Blinker显示
主控芯片:ESP-12F
1. IIC设备地址扫描
#include <Arduino.h>
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(115200);
while (!Serial)
;
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for (address = 1; address < 127; address++)
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address < 16)
Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
}
else if (error == 4)
{
Serial.print("Unknown error at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
2. 环境光强检测
传感器:GY-302,Addr:0x23,开发板ESP8266
引脚连接:
VCC 3.3V
SCL GPIO5 D1
SDA GPIO4 D2
void BH1750_Init(int address)
{
Wire.beginTransmission(address);
Wire.write(0x10);//1lx reolution 120ms
Wire.endTransmission();
}
光照强度(单位lx)=(High Byte + Low Byte)/ 1.2
val = ((buff[0] << 8) | buff[1]) / 1.2;
#include <Arduino.h>
#include <Wire.h>
int BH1750address = 0x23; // GY-302 IIC地址
byte buff[2];
// BH1750初始化
void BH1750_Init(int address)
{
Wire.beginTransmission(address);
Wire.write(0x10); //在1 lx分辨率下开始测量,测量时间为120ms
Wire.endTransmission();
}
// 获取光强
int BH1750_Read(int address) //
{
int LUX = 0;
Wire.beginTransmission(address);
Wire.requestFrom(address, 2);
while (Wire.available()) //
{
buff[LUX] = Wire.read(); // receive one byte
LUX++;
}
Wire.endTransmission();
return LUX;
}
void setup()
{
Wire.begin();
Serial.begin(115200);
BH1750_Init(BH1750address);
delay(200);
}
void loop()
{
int LX = 0;
if (2 == BH1750_Read(BH1750address))
{
LX = ((buff[0] << 8) | buff[1]) / 1.2; //光照强度(单位lx)=(High Byte + Low Byte)/ 1.2
Serial.print(LX, DEC); //十进制
Serial.println("[lx]");
}
delay(1000);
}