ขอความช่วยเหลือครับ ผม run code soil moisture บน esp8266 + Chirp (I2C soil moisture) ได้ค่าออกมา ดีครับแปรผันตามความชื้นที่เราทดลอง ตามรูปครับ
ค่าที่ได้
แต่ พอลอง รวม code กับ blynk new 2.0 แล้ว ไม่สามารอ่านค่าได้ครับ ทั้งที่ไช้วงจรเดิม
ค่าที่ได้ ไม่เปลี่ยนแปลงและส่งมาเร็วมาก
สำหรับ code ที่ทำงานปกติตอนยังไม่รวมกับ blynk
/*
Chirp - arduino example
Connection
Chirp pin 1 - no connection
Chirp pin 2 - Arduino VCC
Chirp pin 3 - Arduino A5
Chirp pin 4 - Arduino A4
Chirp pin 5 - Arduino pin 2
Chirp pin 6 - Arduino GND
*/
#include <Wire.h>
void writeI2CRegister8bit(int addr, int value) {
Wire.beginTransmission(addr);
Wire.write(value);
Wire.endTransmission();
}
unsigned int readI2CRegister16bit(int addr, int reg) {
Wire.beginTransmission(addr);
Wire.write(reg);
Wire.endTransmission();
delay(1100);
Wire.requestFrom(addr, 2);
unsigned int t = Wire.read() << 8;
t = t | Wire.read();
return t;
}
void setup() {
Wire.begin();
Serial.begin(9600);
pinMode(2, OUTPUT);
digitalWrite(2, LOW); //Reset the Chirp
delay(1);
digitalWrite(2, HIGH); //Go out from reset
writeI2CRegister8bit(0x20, 3); //send something on the I2C bus
delay(1000); //allow chirp to boot
}
void loop() {
Serial.print("Soil Moisture Capacitance: ");
Serial.print(readI2CRegister16bit(0x20, 0)); //read capacitance register
writeI2CRegister8bit(0x20, 3); //request light measurement
delay(2000); //this can take a while
Serial.print(" , ");
Serial.print("Light: ");
Serial.println(readI2CRegister16bit(0x20, 4)); //read light register
delay(500);
}
และ code ที่รวมกับ blynk แล้ว error
// Fill-in information from your Blynk Template here
#define BLYNK_TEMPLATE_ID "TMPLvsXDEA6l"
#define BLYNK_DEVICE_NAME "Smart Farm"
#define BLYNK_FIRMWARE_VERSION "0.6.9"
/* read data from I2C soil moiusture */
#define BLYNK_PRINT Serial
#define APP_DEBUG
#include "BlynkEdgent.h"
#include <Wire.h>
void writeI2CRegister8bit(int addr, int value) {
Wire.beginTransmission(addr);
Wire.write(value);
Wire.endTransmission();
}
unsigned int readI2CRegister16bit(int addr, int reg) {
Wire.beginTransmission(addr);
Wire.write(reg);
Wire.endTransmission();
delay(1100);
Wire.requestFrom(addr, 2);
unsigned int t = Wire.read() << 8;
t = t | Wire.read();
return t;
}
void setup()
{
Wire.begin();
Serial.begin(9600);
pinMode(2, OUTPUT);
digitalWrite(2, LOW); //Reset the Chirp
delay(1);
digitalWrite(2, HIGH); //Go out from reset
writeI2CRegister8bit(0x20, 3); //send something on the I2C bus
delay(1000); //allow chirp to boot
BlynkEdgent.begin();
}
void loop() {
Serial.print("Soil Moisture Capacitance: ");
Serial.print(readI2CRegister16bit(0x20, 0)); //read capacitance register
writeI2CRegister8bit(0x20, 3); //request light measurement
delay(2000); //this can take a while
Serial.print(" , ");
Serial.print("Light: ");
Serial.println(readI2CRegister16bit(0x20, 4)); //read light register
delay(500);
BlynkEdgent.run();
}
ผมสามารถแก้ตรงไหนได้ครับ
Remy_Martin
(Permpol Thanapunnamas)
2
1.อันดับแรกเพิ่มหรือลด delay ตรงนี้ดู เนื่องจากว่าเราเพิ่ม blynk เข้าไปทำให้ จังหวะที่ i2c มันอ่านได้จะไม่ตรงกับของเดิม
2.ไม่งั้นอาจจะต้องวนอ่านจนกว่าจะได้ค่าแล้วค่อยออกมา แต่ก็ไม่รู้ว่า Blynk จะดับไปก่อนรึป่าว
ขอบคุณครับ
ผมลอง แก้ 2000 -->9000 ตามกระทู้เก่าของ แอดมิน และ 2000–>1000 ก็ยังไม่แสดงค่าครับ
แต่มีจุดสังเกตคือถ้าผม กด ปุ่ม reset จะทำให้ LED บอร์ด sensor ติด-ดับ และ จะมีการส่งค่ามาชั่วขณะแล้วไม่นานจะกลับไปนิ่งไม่ส่งค่าอะไรเหมือนเดิม
เดี๋ยวผมส่ง วิดีโอให้ดูครับ
1 Likes
video 13 M วางไม่ได้ครับเดี๋ยวกำลังหาวิธีวางนะครับ
Remy_Martin
(Permpol Thanapunnamas)
6
ทางเลือกที่ 2 เอาโค้ตนี้ไปแทนใน void loop ()
while (readI2CRegister16bit(0x20, 0) == 4294967295) {
Serial.print(readI2CRegister16bit(0x20, 0)); //read capacitance register
writeI2CRegister8bit(0x20, 3); //request light measurement
delay(2000); //this can take a while
Serial.print(" , ");
Serial.print("Light: ");
Serial.println(readI2CRegister16bit(0x20, 4)); //read light register
}
BlynkEdgent.run();
ยังไม่ได้ครับ อาการจะเหมือนเดิม และถ้าปุ่ม reset ถูกกดจะ เหมือนกระตุ้นให้ส่งค่า แล้วก็ดับไปซะงั้น
// Fill-in information from your Blynk Template here
#define BLYNK_TEMPLATE_ID "TMPLvsXDEA6l"
#define BLYNK_DEVICE_NAME "Smart Farm"
#define BLYNK_FIRMWARE_VERSION "0.7.2"
/* read data from I2C soil moiusture */
#define BLYNK_PRINT Serial
#define APP_DEBUG
#include "BlynkEdgent.h"
#include <Wire.h>
void setup()
{
BlynkEdgent.begin();
Wire.begin();
Serial.begin(9600);
}
void writeI2CRegister8bit(int addr, int value) {
Wire.beginTransmission(addr);
Wire.write(value);
Wire.endTransmission();
}
unsigned int readI2CRegister16bit(int addr, int reg) {
Wire.beginTransmission(addr);
Wire.write(reg);
Wire.endTransmission();
delay(1100);
Wire.requestFrom(addr, 2);
unsigned int t = Wire.read() << 8;
t = t | Wire.read();
return t;
}
void loop() {
while (readI2CRegister16bit(0x20, 0) == 4294967295) {
Serial.print(readI2CRegister16bit(0x20, 0)); //read capacitance register
writeI2CRegister8bit(0x20, 3); //request light measurement
delay(2000); //this can take a while
Serial.print(" , ");
Serial.print("Light: ");
Serial.println(readI2CRegister16bit(0x20, 4)); //read light register
}
BlynkEdgent.run();
}
ค่านี้ครับ
4294967295 , Light: 4294967295
4294967295 , Light: 4294967295
4294967295 , Light: 4294967295
4294967295 , Light: 4294967295
4294967295 , Light: 4294967295
4294967295 , Light: 4294967295
4294967295 , Light: 4294967295
4294967295 , Light: 4294967295
4294967295 , Light: 4294967295
4294967295 , Light: 4294967295
4294967295 , Light: 4294967295
Sakchai
11
ลองทำ timer ไป version ก่อนหน้า แล้วครับ แต่ผลก็ยังเหมือนเดิม
// Fill-in information from your Blynk Template here
#define BLYNK_TEMPLATE_ID "TMPLvsXDEA6l"
#define BLYNK_DEVICE_NAME "Smart Farm"
#define BLYNK_FIRMWARE_VERSION "0.6.8"
/* read data from I2C soil moiusture */
#define BLYNK_PRINT Serial
#define APP_DEBUG
#include "BlynkEdgent.h"
#include <Wire.h>
BlynkTimer timer;
void writeI2CRegister8bit(int addr, int value) {
Wire.beginTransmission(addr);
Wire.write(value);
Wire.endTransmission();
}
unsigned int readI2CRegister16bit(int addr, int reg) {
Wire.beginTransmission(addr);
Wire.write(reg);
Wire.endTransmission();
delay(1100);
Wire.requestFrom(addr, 2);
unsigned int t = Wire.read() << 8;
t = t | Wire.read();
return t;
}
void myTimerEvent(){
Serial.print("Soil Moisture Capacitance: ");
Serial.print(readI2CRegister16bit(0x20, 0)); //read capacitance register
writeI2CRegister8bit(0x20, 3); //request light measurement
delay(2000); //this can take a while
Serial.print(" , ");
Serial.print("Light: ");
Serial.println(readI2CRegister16bit(0x20, 4)); //read light register
delay(500);
}
void setup()
{
Wire.begin();
BlynkEdgent.begin();
Serial.begin(9600);
pinMode(D4, OUTPUT);
digitalWrite(D4, LOW); //Reset the Chirp
delay(1100);
digitalWrite(D4, HIGH); //Go out from reset
writeI2CRegister8bit(0x20, 3); //send something on the I2C bus
delay(1000); //allow chirp to boot
timer.setInterval(10000L, myTimerEvent);
}
void loop() {
BlynkEdgent.run();
timer.run();
}
Remy_Martin
(Permpol Thanapunnamas)
12
void myTimerEvent(){
Serial.print("Soil Moisture Capacitance: ");
Serial.print(readI2CRegister16bit(0x20, 0)); //read capacitance register
writeI2CRegister8bit(0x20, 3); //request light measurement
delay(2000); //this can take a while
Serial.print(" , ");
Serial.print("Light: ");
Serial.println(readI2CRegister16bit(0x20, 4)); //read light register
delay(2000);
}
ลองดู
Sakchai
13
ตอนนี้ Blynk OTA update ไม่ได้เดี๋ยวผมมาอัพเดทให้นะครับ
Sakchai
14
ผลการรัน ครับ ยังไม่มีอะไรเปลี่ยน
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
ส่วนของโค๊ด
// Fill-in information from your Blynk Template here
#define BLYNK_TEMPLATE_ID "TMPLvsXDEA6l"
#define BLYNK_DEVICE_NAME "Smart Farm"
#define BLYNK_FIRMWARE_VERSION "0.7.3"
/* read data from I2C soil moiusture */
#define BLYNK_PRINT Serial
#define APP_DEBUG
#include "BlynkEdgent.h"
#include <Wire.h>
BlynkTimer timer;
void writeI2CRegister8bit(int addr, int value) {
Wire.beginTransmission(addr);
Wire.write(value);
Wire.endTransmission();
}
unsigned int readI2CRegister16bit(int addr, int reg) {
Wire.beginTransmission(addr);
Wire.write(reg);
Wire.endTransmission();
delay(1100);
Wire.requestFrom(addr, 2);
unsigned int t = Wire.read() << 8;
t = t | Wire.read();
return t;
}
void myTimerEvent(){
Serial.print("Soil Moisture Capacitance: ");
Serial.print(readI2CRegister16bit(0x20, 0)); //read capacitance register
writeI2CRegister8bit(0x20, 3); //request light measurement
delay(2000); //this can take a while
Serial.print(" , ");
Serial.print("Light: ");
Serial.println(readI2CRegister16bit(0x20, 4)); //read light register
delay(2000);
}
void setup()
{
Wire.begin();
BlynkEdgent.begin();
Serial.begin(9600);
pinMode(D4, OUTPUT);
digitalWrite(D4, LOW); //Reset the Chirp
delay(1100);
digitalWrite(D4, HIGH); //Go out from reset
writeI2CRegister8bit(0x20, 3); //send something on the I2C bus
delay(1000); //allow chirp to boot
timer.setInterval(10000L, myTimerEvent);
}
void loop() {
BlynkEdgent.run();
timer.run();
}
Sakchai
15
อุ๊ย แอดครับ เหมือนจะ เวริกนะครับ
เด๊๋ยวผมขอมอนิเตอรยาว
[7952] Hold the button for 10 seconds to reset configuration...
[10330] Using Dynamic IP: 192.168.176.201
[10330] CONNECTING_NET => CONNECTING_CLOUD
[10442] Current time: Fri Dec 24 11:08:06 2021
[10442] Connecting to blynk.cloud:443
[11606] Ready (ping: 11ms).
[11711] CONNECTING_CLOUD => RUNNING
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 514 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 514 , Light: 514
Soil Moisture Capacitance: 513 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 185
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 512
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 47362 , Light: 514
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 511
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture Capacitance: 4294967295 , Light: 4294967295
Soil Moisture ดCapacitance: 4294967295 , Light: 4294967295
Sakchai
17
Code ที่ แอดให้แก้ค่า delay(2000); ครับ แต่เหมือนจะต้องมีปรับปรุงเพราะเมื่อกี้ sensor จู่ๆดับ เดี๋ยวผมขอ run หลายๆรอบแล้วมาสรุปให้นะครับ /ขอบคุณแอดมากกก เลยครับ
Remy_Martin
(Permpol Thanapunnamas)
18
ที่ผมใช้จะใส่ไว้ 2 ช่วงครับไม่งั้นมันก็จะหาไม่เจอ
Remy_Martin
(Permpol Thanapunnamas)
19
ถ้าจะเอาชัวๆ เลยว่าเจอแน่ๆ อาจจะต้องใช้ millis ในการจับเวลาระหว่างช่วงที่มันหาเจอว่าห่างกันกี่ ms แล้วเอาค่ามาใส่ อันนี้ผมก็ไม่เคยลองเหมือนกัน พึ่งนึกออกสด ๆ กันเลยทีเดียว
Remy_Martin
(Permpol Thanapunnamas)
20
เคสนี้เป็นไงบ้างครับ อัพเดทกันหน่อยนะ