อยากขอคำปรึกษา PCF8591 ต่อกับ esp8266 เพื่อขยายขาอนาล็อกครับ

อยากขอคำปรึกษา PCF8591 ต่อกับ esp8266 เพื่อขยายขาอนาล็อกครับ พอดีกำลังทำโปรเจคจบ โดยใช้ Sensor 2 ตัว ใน 1 บอร์ด แต่ติดปัญหาขา Analog ไม่พอเลยซื้อตัว PCF8591 มาเพื่อขยายขาเพิ่ม แต่ติดปัญหาคือไม่แสดงค่าเลยครับ อาทิตย์หน้าเสนอแล้วด้วย ตอนนี้เครียดมากครับ เลยอยากรบกวนพี่ๆ ขอคำปรึกษาหน่อยครับ ตอนนี้เจอทางตันแล้วจริงๆ ครับ แป๊ะCode ให้เลยครับ ปล. Sensor 2 ตัวคือ เซนเซอร์วัดค่าฝุ่น และค่าความชื้นในดินครับ ขออนุญาตแปะ id line: 22052245 ครับ ขอบพระคุณเป็นอย่างสูงล่วงหน้าครับ

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#include "PM_Sensor.h"
#include <TridentTD_LineNotify.h>
#include "Wire.h"
#define PCF8591 (0x48)
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 16 //LED_BUILTIN  //4
Adafruit_SSD1306 display(OLED_RESET);
#define relay1 D2
#define relay2 D4
#define relay3 D1
#define relay4 D3
#define LINE_TOKEN "B6W46tCzFZ4ZDRT1OZp1hEya9C7ydwVGrFovHo8imHL"
#define input_sensor V5 
// Arduino pin numbers.
const int sharpLEDPin = D3;
const int sharpVoPin = A0; 

int SR = 0; // ประกาศตัวแปร SR มีค่าเท่ากับ 0
int temp = 0; // ประกาศตัวแปร temp มีค่าเท่ากับ 0
int sensorValue = 0;        // ตัวแปรค่า Analog
int outputValue = 0;        // ตัวแปรสำหรับ Map เพื่อคิด %
char auth[] = "b6U8yQyr9w82arrummwJ9n1cQY7XRxZR";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "oppo1";
char pass[] = "12345678";
BlynkTimer timer;
BLYNK_READ(V0)
{
  Blynk.virtualWrite(V0, temp); // แสดงค่า Temp ออกช่องทาง V0
}
 
void setup()
{
  // Debug console
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3c);
  Blynk.begin(auth, ssid, pass);
  pinMode(sharpLEDPin, OUTPUT);
  LINE.setToken(LINE_TOKEN);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  digitalWrite(relay3, HIGH);
  digitalWrite(relay4, HIGH);
}
int ton=0;
void loop()
{
  
  Blynk.run();
  PM_loop();
//----------------------------------------
  SR = analogRead(A0); // ให้ตัวแปล SR อ่านค่าจาก Pin A0
  temp = map(SR, 0, 1023, 0, 100); // ตัวแปล Temp คือ แปลงค่าของตัวแปร SR จาก 1023 ถึง 0 เป็น 0 ถึง 100 
  
  Serial.print("Soil Moisture = ");
  Serial.print(temp);
  Serial.println(" %");
  if (temp <= 60) {  //ตั้งค่า % ที่ต้องการจะรดน้ำต้นไม้
    digitalWrite(relay3, HIGH);
    digitalWrite(relay4, HIGH);
  }
  if (temp >=70) {
    digitalWrite(relay3, LOW);
    digitalWrite(relay4, LOW);
  }
  delay(50); 
  
//--------------------------------------------
  
  timer.run();    
}
void PM_loop(){
digitalWrite(sharpLEDPin, LOW);
delayMicroseconds(280);
int VoRaw = analogRead(sharpVoPin);
digitalWrite(sharpLEDPin, HIGH);
// Wait for remainder of the 10ms cycle = 10000 - 280 - 100 microseconds.
delayMicroseconds(280);
// Print raw voltage value (number from 0 to 1023).
#ifdef PRINT_RAW_DATA
//printValue("VoRaw", VoRaw, true);
Serial.println("");
#endif // PRINT_RAW_DATA
 
// Use averaging if needed.
float Vo = VoRaw;
#ifdef USE_AVG
VoRawTotal += VoRaw;
VoRawCount++;
if ( VoRawCount >= N ) {
Vo = 1.0 * VoRawTotal / N;
VoRawCount = 0;
VoRawTotal = 0;
} else {
return;
}
#endif // USE_AVG
 
// Compute the output voltage in Volts.
Vo = Vo / 1024.0 * 3.3;
//printFValue("Vo", Vo, "V");
 
// Convert to Dust Density in units of ug/m3.
float dV = Vo - Voc;
if ( dV < 0 ) {
dV = 0;
Voc = Vo;
}
float dustDensity = dV / K * 100.0;
send_blynk(dustDensity);
  if(ton == 0){tone(D5, 0, 50);}
  if(ton == 1){tone(D5, 1000, 50);delay(50);tone(D5, 0, 50);delay(50);}
  if(ton == 2){tone(D5, 2500, 50);delay(50);tone(D5, 0, 50);delay(50);}
}
void send_blynk(float Density){
   Blynk.virtualWrite(input_sensor,Density);
     display.clearDisplay();
     display.setTextSize(3);
    display.setTextColor(WHITE);
    display.setCursor(0,16);
    display.println(Density);
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(85,0);
    display.println("ug/m3");
    display.display();
   
   if(Density > 0.0 && Density < 26.0){ ton=0;
   Blynk.setProperty(input_sensor,"label","AQI อากาศดีมาก"); 
    Blynk.setProperty(input_sensor,"color","#50c9f4");  }
   if(Density > 25 && Density < 51.0){ ton=0;
   Blynk.setProperty(input_sensor,"label","AQI อากาศดี"); 
    Blynk.setProperty(input_sensor,"color","#78c150"); } 
   if(Density > 50 && Density < 101.0){ ton=0;
   Blynk.setProperty(input_sensor,"label","AQI อากาศปานกลาง"); 
    Blynk.setProperty(input_sensor,"color","#fff46b");   }
   if(Density > 100 && Density < 201.0){ ton=1;
   Blynk.setProperty(input_sensor,"label","AQI อากาศเริ่มมีผลกระทบต่อสุขภาพ"); 
   Blynk.setProperty(input_sensor,"color","#f89836"); 
    }
   if(Density > 200){ ton=2;
   Blynk.setProperty(input_sensor,"label","AQI อากาศมีผลกระทบต่อสุขภาพ"); 
   Blynk.setProperty(input_sensor,"color","#ec363a"); 
   }
   
  }
  void Sensor()
{
  int temp = analogRead(A0);
  if (isnan(temp)) {
    Serial.println("Failed to read from DHT sensor!");
    delay(5000);
    return;
    
  }
 if (temp<=60) {
  Serial.print("ค่าควาามชื้นในดิน : "); 
  Serial.println(temp, 1);
  LINE.notify(String(temp)); 
 }
}
แสดงความคิดเห็น
Preview
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่