Apipon_CHAIWONGNOI (Apipon CHAIWONGNOI) May 3, 2021, 6:51am #1
ผมส่งข้อมูลจาก UNO ไป ESP32 แล้วได้ค่าถูกสลับไม่ถูก เลยลองปริ้นค่า Receiver.available() มาเช็ค แล้วเห็นว่ารอบที่ถูกเมื่อมีข้อมูลส่งมาReceiver.available()จะมีค่ามากกว่า0 แต่พอเป็นรอบที่ไม่ถูกทั้งๆที่ข้อมูลยังไม่ส่งมาแต่Receiver.available() กลับมีค่ามากกว่า 0 ด้วย
ESP32 code
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
HardwareSerial Receiver(2);
#define Receiver_Txd_pin 16
#define Receiver_Rxd_pin 17
char auth[] = "auth token blynk";
char ssid[] = "wifi";
char pass[] = "password wifi";
const int Relay1 = 26;
const int RelayA = 32;
const int RelayB = 2;
const int RelayUp = 25;
const int RelayDown = 33;
int State = LOW;
int selectmode;
bool Auto = false;
WidgetLED led_A(V3), led_B(V4), led_Up(V5), led_Down(V6), led(V7), led_Pump(V8);
BLYNK_CONNECTED()
{
Blynk.syncVirtual(V13);
Blynk.syncVirtual(V28);
}
BLYNK_WRITE(V28)
{
State = param.asInt();
if (State == LOW)
{
digitalWrite(Relay1, State);
led.off();
}
else if (State == HIGH)
{
digitalWrite(Relay1, State);
led.on();
}
}
BLYNK_WRITE(V13)
{
selectmode = param.asInt();
if(selectmode==1)
{
bool Auto = true;
}
else
{
bool Auto = false;
}
}
void setup()
{
Serial.begin(115200);
pinMode(Relay1, OUTPUT);
pinMode(RelayA, OUTPUT);
pinMode(RelayB, OUTPUT);
pinMode(RelayUp, OUTPUT);
pinMode(RelayDown, OUTPUT);
Blynk.begin(auth, ssid, pass, "blynk.iot-cm.com", 8080);
Receiver.begin(115200, SERIAL_8N1, Receiver_Txd_pin, Receiver_Rxd_pin);
}
void loop()
{
Serial.print("Rece1 = ");
Serial.println(Receiver.available());
while(Receiver.available()>0 )
{
Serial.print("Rece3 = ");
Serial.println(Receiver.available());
int EC = Receiver.parseInt() ;
Serial.print("EC= ");
Serial.println(EC);
int Humidity = Receiver.parseInt();
Serial.print("Humidity= ");
Serial.println(Humidity);
int WaterSensor = Receiver.parseInt();
Serial.print("waterlevel= ");
Serial.println(WaterSensor);
int Light = Receiver.parseInt();
Serial.print("light = ");
Serial.println(Light);
float pH = Receiver.parseFloat();
Serial.print("ph= ");
Serial.println(pH);
float WaterTemp = Receiver.parseFloat();
Serial.print("waterTemp= ");
Serial.println(WaterTemp);
float AirTemp = Receiver.parseFloat();
Serial.print("AirTemp= ");
Serial.println(AirTemp);
Blynk.virtualWrite(V9, pH);
Blynk.virtualWrite(V10, EC );
Blynk.virtualWrite(V11, Humidity );
Blynk.virtualWrite(V12, Humidity );
Blynk.virtualWrite(V14, WaterTemp );
Blynk.virtualWrite(V15, WaterTemp);
Blynk.virtualWrite(V17, AirTemp);
Blynk.virtualWrite(V18, AirTemp);
Blynk.virtualWrite(V16, WaterSensor);
Blynk.virtualWrite(V23, WaterSensor);
}
delay(5000);
Blynk.run();
}
UNO code
#include "DHT.h"
#include <OneWire.h>
#include <SoftwareSerial.h>
#include "DFRobot_EC.h"
#include <EEPROM.h>
#include <DallasTemperature.h>
#include<Wire.h>
#include "TSL2561.h"
#define DHTPIN 2
#define DHTTYPE DHT11
#define POWER_PIN 7
#define SIGNAL_PIN A5
#define StartConvert 0
#define ReadTemperature 1
#define EC_PIN A1
#define ONE_WIRE_BUS 4
TSL2561 tsl(TSL2561_ADDR_FLOAT);
SoftwareSerial linkserial1(0, 1);
DFRobot_EC ec;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
const int analogInPin = A2;
int WaterSensor = 0;
int sensorPin = A0;
int sensorValue = 0;
float ad7 = 325;
float ad4 = 50;
float voltage,ecValue;
DHT dht(DHTPIN, DHTTYPE);
void Get_pH()
{
int currentValue = 0;
for (int i = 0; i < 10; i++)
{
currentValue += analogRead(sensorPin);
}
sensorValue =(currentValue / 10);
//Serial.println(sensorValue);
float m =(-2.9/(ad4-ad7));
float c = 6.86-(m*ad7);
float pH =((m*sensorValue)+c);
Serial.print("PH = ");
Serial.println(pH);
linkserial1.print(pH);
}
void Get_EC()
{
voltage = analogRead(EC_PIN)/1024.0*5000;
ecValue = ec.readEC(voltage,25);
int EC = ecValue;
Serial.print("^C EC:");
Serial.print(EC,2);
Serial.println("ms/cm");
linkserial1.print(EC);
}
void Get_WaterTemp()
{
sensors.requestTemperatures();
Serial.print("Temperature is: ");
float WaterTemp = sensors.getTempCByIndex(0);
Serial.print(WaterTemp);
Serial.println(" *C");
linkserial1.print(WaterTemp);
}
void light_TSL2561()
{
uint32_t lum = tsl.getFullLuminosity();
uint16_t ir, full0;
ir = lum >> 16;
full0 = lum & 0xFFFF;
int full = full0;
Serial.print("light: ");
Serial.println(full);
linkserial1.print(full);
}
void setup()
{
Serial.begin(115200);
dht.begin();
linkserial1.begin(4800 );
}
void loop()
{
Get_EC();
int Humidity = dht.readHumidity();
Serial.print(F(" Humidity: "));
Serial.println(Humidity);
linkserial1.print(Humidity);
Serial.print(F("C "));
int WaterSensor = analogRead(analogInPin);
Serial.print("Water level = " );
Serial.println(WaterSensor);
linkserial1.print(WaterSensor);
light_TSL2561();
Get_pH();
Get_WaterTemp();
float AirTemp = dht.readTemperature();
Serial.print(F("% Air Temperature: "));
Serial.println(AirTemp);
linkserial1.print(AirTemp);
light_TSL2561();
delay(10000);
}
ค่าที่ผิด
ค่าที่ถูก
Remy_Martin (Permpol Thanapunnamas) May 1, 2021, 4:15pm #4
GND 2 บอร์ดถึงกันไหมครับ
Apipon_CHAIWONGNOI (Apipon CHAIWONGNOI) May 1, 2021, 4:25pm #5
หมายถึงให้เชื่อม GND สองบอร์ดด้วยกันหรอครับ ไม่ได้เชื่อมครับ
Remy_Martin (Permpol Thanapunnamas) May 2, 2021, 1:52am #6
เชื่อมด้วยสิครับ
Remy_Martin (Permpol Thanapunnamas) May 2, 2021, 1:55am #7
ในระบบ มันต้องมี 3 เส้นนะ
Apipon_CHAIWONGNOI (Apipon CHAIWONGNOI) May 2, 2021, 7:33am #8
ลองเสียบ GND แล้วก็ยังเป็นเมือนเดิมครับ
Remy_Martin (Permpol Thanapunnamas) May 2, 2021, 8:01am #9
แหล่งจ่ายใช้อะไรจ่ายครับ มาจากที่เดียวกันไหม
Remy_Martin (Permpol Thanapunnamas) May 2, 2021, 8:07am #10
อันนี้เราดูตัวอย่างจากไหนครับ มีไหม อันนี้ผมว่าน่าจะเป็นปัญหาว่ามันส่งกับรับ ผิดพลาด จังหว่ะมันไม่ตรงกัน รึป่าว
KD2NYY (Thanasak) May 2, 2021, 8:13am #11
ทำไม board rate สื่อสาร ตั้งไม่เท่ากันล่ะ ??
1 Like
Remy_Martin (Permpol Thanapunnamas) May 2, 2021, 8:25am #12
โอ่วววว ใช่เลยครับพี่ ผมก็เคยเจอเคสนี้ แต่ลืมไปละ
Remy_Martin (Permpol Thanapunnamas) May 2, 2021, 8:48am #13
แชร์ ออกมาจาก DecaRoom
1 Like
Remy_Martin (Permpol Thanapunnamas) May 2, 2021, 9:41am #14
รู้สึกว่าผมจะแก้ การรับค่าไม่ตรงต่ำแหน่งโดยการเข้ารหัสก่อน แล้วค่อยให้อ่านค่า ที่ส่ง
แต่ถ้าที่ผมเคยเจอบิตเรทไม่ตรงย่านกัน ผลที่ผมเคยเจอคือการรับค่าจะช้ามาาาาาาากครับ
KD2NYY (Thanasak) May 2, 2021, 9:50am #15
เห็นถามตอนแรกว่าใช้ GND. ร่วมไหม ไม่ได้ใช้ร่วม พอต่อร่วมแล้วยัง Error อยู่ แต่ Error ไปทางไหนไม่ได้บอก
ส่วน board rate ไม่ตรงกัน ก็คุยกันไม่ค่อยรู้เรื่อง ส่ง 10 รับ 4 หรือ ตอบสนองช้า แต่ตอบแล้ว รับค่าช่วงปลายข้อมูล ก็ เอ๋อ ได้ครับ
ต้องค่อยๆแก้ ไปทีละ Error
Remy_Martin (Permpol Thanapunnamas) May 2, 2021, 10:52am #16
จริงครับ แนวทางที่ผมให้อาจจะแก้ไม่ได้ อาจจะได้อีกวิธีก็เป็นได้ นั้นก็ทำให้เรารู้ทางแก้ไขเคสแบบนี้เพิ่มมากขึ้น
Remy_Martin (Permpol Thanapunnamas) May 3, 2021, 1:04am #17
@Apipon_CHAIWONGNOI ยังไงลองทดสอบได้ผลลัพธ์อย่างไร แคป ผลนั้นมาดูด้วยนะครับ จะได้วิเคราะห์ปัญหากันได้ถูกทาง เช่น คำอธิบาย และ ตัวเลข output ที่ได้