//#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); //这两个定义是DS18B20调用 DallasTemperature sensors(&oneWire); //这两个定义是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); }