//#include "cn.c" //串口打印汉字调用文件
#include <Wire.h> //I2C温湿度传感器调用文件件
#include <OneWire.h> //这两个头文件是DS18B20调用
#include <DallasTemperature.h> //这两个头文件是DS18B20调用
#define Addr_SHT30_1 0x44 // SHT30 IIC 7位地址为0x44
#define Addr_SHT30_2 0x45 // SHT30 IIC 7位地址为0x45
#define SDA_PIN 2 //I2C温湿度传感器数据传输脚�
#define SCL_PIN 3 //I2C温湿度传感器时序传输脚
#define ONE_WIRE_BUS 7 // DS18B20 DQ接引脚D7(GPIO1)
int analogPin = 4; // PWM- - -电位器调节脚电压输入脚,接引脚D4(GPIO10)
int val = 0;
OneWire oneWire(ONE_WIRE_BUS); //这2个定义是DS18B20调用
DallasTemperature sensors(&oneWire); //这2个定义是DS18B20调用
void setup()
{
//- - - - - - - - - - - - - - -I2C Temp & humi sensor
Wire.begin(); //初始化IIC(作为主设备)
pinMode(9,OUTPUT); //PWM输出脚
sensors.begin(); // DS18B20 DS18B20初始化
Serial.begin(9600); //初始化串行通信,设置波特率=9600
delay(300); //延时以求稳定(删了也没事)�
}
void loop()
{
unsigned int data1[6]; //存储获取到的六个数据
unsigned int data2[6]; //存储获取到的六个数据
Wire.beginTransmission(Addr_SHT30_1);
Wire.write(0x2C); //发送测量命令 0x2C06,但是因为IIC一次只能发一个8位数据,所以得发两次
Wire.write(0x06); //发送测量命令 0x2C06,但是因为IIC一次只能发一个8位数据,所以得发两次
Wire.endTransmission();
delay(500); //等待500ms是等待SHT30器件测量数据,实际上这个时间可以很短
Wire.requestFrom(Addr_SHT30_1, 6); //请求获取6字节的数据,然后会存到8266的内存里
if (Wire.available() == 6) //读取6字节的数据,这六个字节分别为:温度8位高数据,温度8位低数据,温度8位CRC校验数据,湿度8位高数据,湿度8位低数据,湿度8位CRC校验数据
{
data1[0] = Wire.read();
data1[1] = Wire.read();
data1[2] = Wire.read();
data1[3] = Wire.read();
data1[4] = Wire.read();
data1[5] = Wire.read();
}
float cTemp1 = ((((data1[0] * 256.0) + data1[1]) * 175) / 65535.0) - 45;
float humidity1 = ((((data1[3] * 256.0) + data1[4]) * 100) / 65535.0);
delay(500);
Wire.beginTransmission(Addr_SHT30_2);
Wire.write(0x2C);
Wire.write(0x06);
Wire.endTransmission();
delay(500);
Wire.requestFrom(Addr_SHT30_2, 6);
if (Wire.available() == 6)
{
data2[0] = Wire.read();
data2[1] = Wire.read();
data2[2] = Wire.read();
data2[3] = Wire.read();
data2[4] = Wire.read();
data2[5] = Wire.read();
}
float cTemp2 = ((((data2[0] * 256.0) + data2[1]) * 175) / 65535.0) - 45;
float humidity2 = ((((data2[3] * 256.0) + data2[4]) * 100) / 65535.0);
Serial.print("sensor1--humidity:");
Serial.print(humidity1);
Serial.print("%RH ");
Serial.print("Temperatur");
Serial.print(cTemp1);
Serial.println("C");
Serial.print("sensor2--humidity:");
Serial.print(humidity2);
Serial.print("%RH ");
Serial.print("Temperatur:");
Serial.print(cTemp2);
Serial.println("C");
val = analogRead(analogPin);
Serial.print("V = "); // PWM- - -电位器调节脚电压打印
Serial.println(val*0.0047); // PWM- - -电位器调节脚电压打印
analogWrite(9,val / 4); // PWM输出
sensors.requestTemperatures(); // 发送命令获取温度
Serial.print("ds18b20 Temperature: ");
Serial.print(sensors.getTempCByIndex(0));
Serial.println(" C");
delay(500);
}
基于LattePanda板,实现DH18B20 \SH30\PWM输出
最新推荐文章于 2024-09-27 00:19:28 发布