Nodemcu-เลี้ยงไก่-ปลูกผักกินเอง(ตอน4)

ทำไป ถามไปเรื่อง nodemcu-เลี้ยงไก่-ปลูกผักตอน 4
ผมใช้ nodemcu ที่เลี้ยงไก่ มาเสริมเรื่องปลูกผักต่อ
เนื้อหาต่อไปนี้ เป็นการฝึกและใช้งานจริง จะมีการลองผิดลองถูกมากมาย ถ้าเพื่อนมีเวลา ถ้าเห็นส่วนไหนไม่ถูก ช่วยชี้แนะด้วยครับ
ถ้าเห็นว่ามีประโยชน์ก็เอาไปต่อยอดได้เลยครับ ขอบคุณครับ
ผมได้ทำเรื่อง arduino เพื่อใช้งานจริง เริ่มต้นจากไม่รู้อะไรเลย และพยายามเรียนรู้ จนได้ความรู้เพิ่มมาบ้างแล้ว
หวังว่า จุดประกายเล็กๆให้คนที่อยากเรียนรู้เรื่องนี้ ขอบคุณครับ

image

18กย65
ผมได้มาปรับปรุง โปรเจค แรกที่สุดคือ เรื่อง รดน้ำต้นทุเรียน ตั้งแต่มค65 เรื่มในเว๊บอื่น และผมจะมาต่อในเว็บeleceasy ต่อ
พอทำโปรเจคเลี้ยงไก่ ทำให้โปรเจคนี้หยุดการดูแลไป


ต้นทุเรียน ตอนแรก2 ต้น พอไม่ได้ดูแล เหลือต้นเดียว 555
xxxxx
โปรเจตนี้ มี nodemcu8266 1 อัน ควบคุม วาล์วเปิดน้ำ 1 อัน โดยมี เซ็นเซอร์วัดความชื้นในดิน 1 ตัว เพื่อเช็คดินที่ต้นทุเรียน

xxxx
เริ่มแรก ใช้เซ็นเซอร์นี้

xxxxx
ใช้ไม่ถึง30 วัน
เซ็นเซอร์กร่อน


xxx
เลยใช้ลวดสแตนเลสแทนส่วนที่ผุกร่อน

xxx
ใช้ไป 2 เดือน ลวดสแตนเลสผุกร่อน จนขาด อีก

xxx
เปลี่ยน​อิเลกโทรด จากลวดสแตนเลส​เป็นเหล็กกล่องกัลวาไนซ์​ขนาด​4หุน​ยาว40ซม. 2เส้นตอกลงดิน ให้ห่างกัน3ซม.
ปลายบนสูงจากพื้นดิน5ซม.
จากนั้น เอาสายไฟของเดิม มาบัดกรีที่ปลายเหล็ก

xxxx
และใช้พลาสติกกาวร้อนยิงหุ้มที่บัดกรี และหุ้มท่อหดอีกชั้น

และ ผมต้องการขยาย ปลูกผักด้วย ซึ่งจะมี ระบบต่างหากคือ วาล์วรดน้ำผัก เซ็นเซอร์วัดความชื้นในดิน 1 ตัว ใช้กับnode เดียวกัน
สำหรับเซ็นเซอร์ดินตัวที่ 2สำหรับผัก นั้น ผมจะ DIY ดูว่า มันจะเวอร์กไหม
โดย IC4051 เพื่อขยาย port analog เพื่อรับค่า เซ็นเซอร์เดิมตัวแรกที่ใช้เหล็กกล่องเป็นอิเล็กโทรด วันดินปลูกทุเรียน กับ เซ็นเซอร์ตัวที่2 สำหรับตรวจดินผัก
ผมจะลองประดิษฐ์ดู โดยใช้ ไฟจาก Vin 5 Volt ต่อกับ ตัวต้านทาน 4.5 k ohm และจุ่มลงดิน เป็นขั้วที่ 1 และขั๊วที่2 จะเป็นสายไฟที่ต่อจากดิน เข้าขา analog (ผ่าน ic4051 ) แล้วดูว่า จะรับค่าได้ไหม

19กย65


code

int analogPin = A0; //ประกาศตัวแปร ให้ analogPin แทนขา analog ขาที่5
int vegetable_soil_dryness = 0;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
  vegetable_soil_dryness = analogRead(analogPin); //Value of the sensor connected Option 1 pin of Mux
   Serial.print("vegetable_soil_dryness   =   ");
     Serial.println(vegetable_soil_dryness);
   delay(5000);

}

ผล
ขณะยังไม่แตะกัน ระหว่าง A0 กับ ปลายอีกด้านของ 4.7K ohm (วงสีเหลือง)

11:05:59.116 -> vegetable_soil_dryness   =   3
11:06:04.118 -> vegetable_soil_dryness   =   7
11:06:09.119 -> vegetable_soil_dryness   =   4
11:06:14.114 -> vegetable_soil_dryness   =   4
11:06:19.111 -> vegetable_soil_dryness   =   7
11:06:24.111 -> vegetable_soil_dryness   =   9
11:06:29.141 -> vegetable_soil_dryness   =   7
11:06:34.143 -> vegetable_soil_dryness   =   7
11:06:39.145 -> vegetable_soil_dryness   =   7
11:06:44.133 -> vegetable_soil_dryness   =   6
11:06:49.138 -> vegetable_soil_dryness   =   7
11:06:54.143 -> vegetable_soil_dryness   =   8
11:06:59.114 -> vegetable_soil_dryness   =   10
11:07:04.137 -> vegetable_soil_dryness   =   9
11:07:09.112 -> vegetable_soil_dryness   =   28

ถ้าแตะกัน ผลจะได้

11:07:54.147 -> vegetable_soil_dryness   =   1024
11:07:59.142 -> vegetable_soil_dryness   =   1024
11:08:04.141 -> vegetable_soil_dryness   =   1024
11:08:09.125 -> vegetable_soil_dryness   =   1024
11:08:14.121 -> vegetable_soil_dryness   =   1024
11:08:19.117 -> vegetable_soil_dryness   =   1024
11:08:24.149 -> vegetable_soil_dryness   =   1024
11:08:29.126 -> vegetable_soil_dryness   =   1024
11:08:34.129 -> vegetable_soil_dryness   =   1024
11:08:39.131 -> vegetable_soil_dryness   =   1024
11:08:44.115 -> vegetable_soil_dryness   =   1024
11:08:49.150 -> vegetable_soil_dryness   =   1024
11:08:54.116 -> vegetable_soil_dryness   =   1024
11:08:59.153 -> vegetable_soil_dryness   =   1024
11:09:04.142 -> vegetable_soil_dryness   =   1024

ผมลองปักในดินชื้น
ผลดังนี้


11:24:49.201 -> vegetable_soil_dryness   =   7
11:24:54.215 -> vegetable_soil_dryness   =   7
11:24:59.214 -> vegetable_soil_dryness   =   8
11:25:04.208 -> vegetable_soil_dryness   =   7
11:25:09.190 -> vegetable_soil_dryness   =   8
11:25:14.218 -> vegetable_soil_dryness   =   72
11:25:19.196 -> vegetable_soil_dryness   =   19
11:25:24.186 -> vegetable_soil_dryness   =   213
11:25:29.211 -> vegetable_soil_dryness   =   365
11:25:34.188 -> vegetable_soil_dryness   =   627
11:25:39.228 -> vegetable_soil_dryness   =   285
11:25:44.223 -> vegetable_soil_dryness   =   498
11:25:49.209 -> vegetable_soil_dryness   =   472
11:25:54.202 -> vegetable_soil_dryness   =   456
11:25:59.221 -> vegetable_soil_dryness   =   525
11:26:04.200 -> vegetable_soil_dryness   =   518
11:26:09.228 -> vegetable_soil_dryness   =   560
11:26:14.213 -> vegetable_soil_dryness   =   565

จะเห็นว่า ตอนไม่แตะกัน (ก่อนปัก)ค่าที่ได้ไม่เกิน 20
พอผมปักในดินแล้ว ค่ากระโดด เป็น 500
฿฿฿฿฿

ลองปักในดินที่แห้ง ผล ไม่เกิน 15

11:38:54.280 -> vegetable_soil_dryness   =   10
11:38:59.264 -> vegetable_soil_dryness   =   8
11:39:04.263 -> vegetable_soil_dryness   =   8
11:39:09.243 -> vegetable_soil_dryness   =   6
11:39:14.266 -> vegetable_soil_dryness   =   6
11:39:19.261 -> vegetable_soil_dryness   =   8
11:39:24.274 -> vegetable_soil_dryness   =   9
11:39:29.261 -> vegetable_soil_dryness   =   13
11:39:34.285 -> vegetable_soil_dryness   =   13
11:39:39.282 -> vegetable_soil_dryness   =   13
11:39:44.253 -> vegetable_soil_dryness   =   12
11:39:49.288 -> vegetable_soil_dryness   =   9
11:39:54.281 -> vegetable_soil_dryness   =   9
11:39:59.257 -> vegetable_soil_dryness   =   9


ผมเทน้ำให้เปียก
ค่าที่ได้ขึ้น 1024 เลยครับ

11:41:44.275 -> vegetable_soil_dryness   =   7
11:41:49.268 -> vegetable_soil_dryness   =   16
11:41:54.266 -> vegetable_soil_dryness   =   1024
11:41:59.262 -> vegetable_soil_dryness   =   7
11:42:04.256 -> vegetable_soil_dryness   =   1024
11:42:09.289 -> vegetable_soil_dryness   =   1024
11:42:14.291 -> vegetable_soil_dryness   =   1024
11:42:19.284 -> vegetable_soil_dryness   =   1024
11:42:24.282 -> vegetable_soil_dryness   =   1024
11:42:29.270 -> vegetable_soil_dryness   =   1024
11:42:34.269 -> vegetable_soil_dryness   =   1024
11:42:39.302 -> vegetable_soil_dryness   =   1024

ผมลองวัด ความต่างศักย์​ ระหว่างขั้วทั้ง2 ที่จุ่มลงดิน =3.12V
วัดกระแสที่ไหลผ่านเต็มที่ แค่ 11 microAmp. ไม่ถึง 1 milliAmp ถือว่าน้อยมาก
การประยุกต์ใช้
ผมจะใช้ หล็กกัลวาไนส์ 4หุน 1 คู่ ปักดินแทน
และสามารถใช้เป็นเซ็นเซอร์ตรวจสอบระดับน้ำในถังเก็บน้ำได้ด้วย
ค่าใช้จ่ายสำหรับเซ็นเซอร์นี้ 10สตางค์ สำหรับ รีซิสเตอร์
20 - 60 บาท สำหรับเหล็กกล่อง แล้วแต่ความยาว
อายุการใช้งาน ผมคาดคะเน เซ็นเซอร์นี้ ไม่น้อยกว่า 2 ปีครับ
20กย65

kkkkkkk

21กย65


ได้ปักลงดินแล้ว
**ต้นถั่วฝักยาว

  • อายุ7วัน(นับจากเอาเมล็ดหยอดลงดิน)
    -24ชั่วโมง​ หลังจากย้ายจากที่ร่มมากลางแจ้ง

    -จากกราฟ
    เส้นสีน้ำเงิน เป็นค่าที่วัดจากดินที่โคนต้นทุเรียน​ มีค่า 169 จากเซ็นเซอร์​ที่ซื้อมาและดัดแปลงส่วนที่จุ่มลงดิน
    (0=เปียกสุดๆ,1024=แห้งสุดๆ)
    เส้นสีแดง เป็นค่าที่วัดจากดินที่โคนต้นถั่วฝัก​ยาว​ มีค่า 512 จากเซ็นเซอร์​ที่ประดิษฐ์​เอง
    (0=แห้งสุดๆ,1024=เปียกสุดๆ)
    -​จากกราฟ 2เส้น แต่แสดงผลตรงกันข้ามกัน
    รอการแก้ไขครับ จะใช้ ฟังชั่น​ map()

mmmmm
อื่นๆ


ใช้รางไข่ เพาะเมล็ดถั่วฝักยาว ตั้งในที่ร่มก่อน3วัน
mmmm

ปุ๋ยหมักทำเอง จากเศษอาหาร, เศษผัก, เศษปลา, ไก่ ที่เหลือจากทำอาหาร
มาแบ่งใส่10ถังแล้วใส่น้ำเยอะๆ ปล่อยไว้2-3วันเอาไปรดผัก,ต้นไม้ปลูกอื่นๆ
mmmmm

1 Likes

20กย.65
โค้ดที่ผมงงมาก แต่มันเวิร์กสำหรับผม
ผมทำสวิทช์ใน blynk แบบ auto และ แมนวล
V1 คือ button switch เพื่อ กำหนดว่า auto หรือ แมนวล
V2 คือ button switch เพื่อปิดเปิดวาล์ว แต่ถ้า V1 เป็น autoอยู่ เวลากด V2 ให้มันเด้งกลับ ไม่ให้ทำงานต่อได้

//ทั่วไป
//wifi
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char *ssid     = "xxxx";
const char *password = "xxxx";
int a=0;

///////////////////////////////////////////
//Blynk
#include <BlynkSimpleEsp8266.h>

char auth[]="xxxxxxxxx";
BlynkTimer timer;
#define BLYNK_PRINT Serial;
////////////////////////////////////////
WidgetLED solenoid_vegetable_led_blynk_v3(V3);
int auto_vegetable_valve_V1=0;
///////////////////////////////////////



void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
     WiFi.mode(WIFI_STA); //เชื่อมต่อ Wifi
     WiFi.begin(ssid, password);
   delay(500);
     Serial.println("\nConnecting to WiFi");
     while ((WiFi.status() != WL_CONNECTED)&&(a<10)) {
           Serial.print("*");
           a=a+1;
           delay(500);
      }
    Blynk.begin(auth, ssid, password, "oasiskit.com", 8080);  
    delay(500);
    Blynk.syncVirtual(V1);

}

/////////////////
BLYNK_WRITE(V1) //auto_vegetable_valve_V10
{//BLYNK_WRITE(V10) //Vbutton auto/manual วาล์วทุเรียน,auto_durian_valve_V6
  if (param.asInt()==1)//1=ทำงาน
  {//if (param.asInt()==1)//1=ทำงาน
    Blynk.virtualWrite(V2,"offBackColor");//งงมากๆๆ
       solenoid_vegetable_led_blynk_v3.off();
       Blynk.virtualWrite(V0,"string_close");
       auto_vegetable_valve_V1=1;
  }//if (param.asInt()==1)//1=ทำงาน
  else//if (param.asInt()==1)//1=ทำงาน
  {//else if (param.asInt()==1)//1=ทำงาน
    auto_vegetable_valve_V1=0;
  //     Blynk.syncVirtual(V0, V1, V2);
    
  }//else if (param.asInt()==1)//1=ทำงาน
  
}//BLYNK_WRITE(V10) //Vbutton auto/manual วาล์วทุเรียน,auto_durian_valve_V10
/////////////////

BLYNK_WRITE(V2) //(สวิทช์ปิด-เปิดโซลินอยด์ผัก
{//BLYNK_WRITE(V11) //(สวิทช์ปิด-เปิดโซลินอยด์ผัก
  if (auto_vegetable_valve_V1==0)
  {//if (auto_vegetable_valve_V10==0)
      if (param.asInt()==1)//1=ทำงาน
      {//if (param.asInt()==1)//1=ทำงาน
       solenoid_vegetable_led_blynk_v3.on();
       Blynk.virtualWrite(V0,"string_open");
       Blynk.setProperty(V2,"onLabel","กำลัง เปิด");
      }//if (param.asInt()==1)//1=ทำงาน
      else//if (param.asInt()==1)//1=ทำงาน
      {//else if (param.asInt()==1)//1=ทำงาน
    Blynk.virtualWrite(V2,"offBackColor");//งงมากๆๆ
       solenoid_vegetable_led_blynk_v3.off();
       Blynk.virtualWrite(V0,"string_close");
      }//else if (param.asInt()==1)//1=ทำงาน

  }//if (auto_vegetable_valve_V10==0)
  else//if (auto_vegetable_valve_V10==0)
  {//else if (auto_vegetable_valve_V10==0)
   //แจ้งในlog ว่า ตอนนี้เป็นออโต้ ให้เปลี่ยนเป็นแมนวลก่อน
   Blynk.virtualWrite(V0,"ตอนนี้เป็นออโต้ ให้เปลี่ยนเป็นแมนวลก่อน");
    Blynk.virtualWrite(V2,"offBackColor");//งงมากๆๆ
  }//else if (auto_vegetable_valve_V10==0)
}//BLYNK_WRITE(V2) //(สวิทช์ปิด-เปิดโซลินอยด์ผัก

/////////////////

/////////////////
void loop() {
     Blynk.run();
     timer.run();

}

คือคำสั่ง Blynk.virtualWrite(V2,“offBackColor”); แทนที่จะใช้ Blynk.setProperty(V2,“offBackColor”,“#FFFFFF”);

21กย65
ถ้าใช้ Blynk.setProperty(V2,“onBackColor”) จะคอมไพล์ ERROR
ถ้าBlynk.virtualWrite(V2,“onBackColor”) ไม่ ERROR แต่ Blynk LED widget ทำงานเพี้ยน
สรุป ไม่ต้องใช้ onBackColor ในขณะเปิด มันจะแสดงสีทึบ และ ข้อความ"ON"เอง
แต่ถ้า ช่วง OFF ต้องระบุ Blynk.virtualWrite(V2,“offBackColor”) มันจะให้ไม่ทึบเอง และเรียกข้อความ OFFเองด้วยครับ
ทดสอบใหม่
ผมใช้ Blynk.virtualWrite(V2,“offBackColor”); ในตำแหน่งที่ให้มันอยู่ใน mode off มันจะเรียก label มาเอง
ตำแหน่งที่ไม่มี offBackColor จะทำให้ Button นั้น ไปที่ ON ได้
ณ ตอนนี้ ใช้คำสั่ง Blynk.virtualWrite(V2,“offBackColor”); อย่างเดียวเพียงพอแล้ว

/////////////////
BLYNK_WRITE(V1) //auto_vegetable_valve_V10
{//BLYNK_WRITE(V10) //Vbutton auto/manual วาล์วทุเรียน,auto_durian_valve_V6
  if (param.asInt()==1)//1=ทำงาน
  {//if (param.asInt()==1)//1=ทำงาน
    Blynk.virtualWrite(V2,"offBackColor");//งงมากๆๆ
       solenoid_vegetable_led_blynk_v3.off();
       Blynk.virtualWrite(V0,"string_close");
       auto_vegetable_valve_V1=1;
  }//if (param.asInt()==1)//1=ทำงาน
  else//if (param.asInt()==1)//1=ทำงาน
  {//else if (param.asInt()==1)//1=ทำงาน
    auto_vegetable_valve_V1=0;
    
  }//else if (param.asInt()==1)//1=ทำงาน
  
}//BLYNK_WRITE(V10) //Vbutton auto/manual วาล์วทุเรียน,auto_durian_valve_V10
/////////////////

BLYNK_WRITE(V2) //(สวิทช์ปิด-เปิดโซลินอยด์ผัก
{//BLYNK_WRITE(V11) //(สวิทช์ปิด-เปิดโซลินอยด์ผัก
  if (auto_vegetable_valve_V1==0)
  {//if (auto_vegetable_valve_V10==0)
      if (param.asInt()==1)//1=ทำงาน
      {//if (param.asInt()==1)//1=ทำงาน
       solenoid_vegetable_led_blynk_v3.on();
       Blynk.virtualWrite(V0,"string_open");
      }//if (param.asInt()==1)//1=ทำงาน
      else//if (param.asInt()==1)//1=ทำงาน
      {//else if (param.asInt()==1)//1=ทำงาน
       Blynk.virtualWrite(V2,"offBackColor");//งงมากๆๆ
       solenoid_vegetable_led_blynk_v3.off();
//       Blynk.setProperty(V2,"offLabel","กำลัง OFF");
       Blynk.virtualWrite(V0,"string_close");
      }//else if (param.asInt()==1)//1=ทำงาน

  }//if (auto_vegetable_valve_V10==0)
  else//if (auto_vegetable_valve_V10==0)
  {//else if (auto_vegetable_valve_V10==0)
   //แจ้งในlog ว่า ตอนนี้เป็นออโต้ ให้เปลี่ยนเป็นแมนวลก่อน
   Blynk.virtualWrite(V0,"ตอนนี้เป็นออโต้ ให้เปลี่ยนเป็นแมนวลก่อน");
    Blynk.virtualWrite(V2,"offBackColor");//งงมากๆๆ
  }//else if (auto_vegetable_valve_V10==0)
}//BLYNK_WRITE(V2) //(สวิทช์ปิด-เปิดโซลินอยด์ผัก

/////////////////

/////////////////
void loop() {
     Blynk.run();
     timer.run();

22กย65
ผมได้ทำ void test1 สำหรับเปลี่ยนสี ของ offBackcolor หรือ onBackcolor ของ widget Button ได้เลย โดยใช้โค้ด
setProperty หรือ virtualWrite โดยผ่าน timer.setinterval อีกทีครับ

//ทั่วไป
//wifi
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char *ssid     = "xxxx";
const char *password = "xxxxx";
int a=0;

#define BLYNK_GREEN     "#23C48E"
    #define BLYNK_BLUE      "#04C0F8"
    #define BLYNK_YELLOW    "#ED9D00"
    #define BLYNK_RED       "#D3435C"
    #define BLYNK_DARK_BLUE "#5F7CD8"

///////////////////////////////////////////
//Blynk
#include <BlynkSimpleEsp8266.h>
char auth[]="xxx";
BlynkTimer timer;
#define BLYNK_PRINT Serial;
////////////////////////////////////////
WidgetLED solenoid_vegetable_led_blynk_v3(V3);
WidgetLED button_V2(V2);
int auto_vegetable_valve_V1=0;
///////////////////////////////////////



void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
     WiFi.mode(WIFI_STA); //เชื่อมต่อ Wifi
     WiFi.begin(ssid, password);
   delay(500);
     Serial.println("\nConnecting to WiFi");
     while ((WiFi.status() != WL_CONNECTED)&&(a<10)) {
           Serial.print("*");
           a=a+1;
           delay(500);
      }
    Blynk.begin(auth, ssid, password, "oasiskit.com", 8080);  
    delay(500);
   timer.setInterval(1000L,test1);
    
    Blynk.syncVirtual(V1);

}

/////////////////
BLYNK_WRITE(V1) //auto_vegetable_valve_V10
{//BLYNK_WRITE(V10) //Vbutton auto/manual วาล์วทุเรียน,auto_durian_valve_V6
  if (param.asInt()==1)//1=ทำงาน
  {//if (param.asInt()==1)//1=ทำงาน
    Blynk.virtualWrite(V2,"offBackColor");
       solenoid_vegetable_led_blynk_v3.off();
       Blynk.virtualWrite(V0,"string_close");
       auto_vegetable_valve_V1=1;
  }//if (param.asInt()==1)//1=ทำงาน
  else//if (param.asInt()==1)//1=ทำงาน
  {//else if (param.asInt()==1)//1=ทำงาน
    auto_vegetable_valve_V1=0;
    
  }//else if (param.asInt()==1)//1=ทำงาน
  
}//BLYNK_WRITE(V10) //Vbutton auto/manual วาล์วทุเรียน,auto_durian_valve_V10
/////////////////

BLYNK_WRITE(V2) //(สวิทช์ปิด-เปิดโซลินอยด์ผัก
{//BLYNK_WRITE(V11) //(สวิทช์ปิด-เปิดโซลินอยด์ผัก
  if (auto_vegetable_valve_V1==0)
  {//if (auto_vegetable_valve_V10==0)
      if (param.asInt()==1)//1=ทำงาน
      {//if (param.asInt()==1)//1=ทำงาน
       solenoid_vegetable_led_blynk_v3.on();
       Blynk.virtualWrite(V0,"string_open");
      }//if (param.asInt()==1)//1=ทำงาน
      else//if (param.asInt()==1)//1=ทำงาน
      {//else if (param.asInt()==1)//1=ทำงาน
       Blynk.virtualWrite(V2,"offBackColor");
       solenoid_vegetable_led_blynk_v3.off();
//       Blynk.setProperty(V2,"offLabel","กำลัง OFF");
       Blynk.virtualWrite(V0,"string_close");
      }//else if (param.asInt()==1)//1=ทำงาน

  }//if (auto_vegetable_valve_V10==0)
  else//if (auto_vegetable_valve_V10==0)
  {//else if (auto_vegetable_valve_V10==0)
   //แจ้งในlog ว่า ตอนนี้เป็นออโต้ ให้เปลี่ยนเป็นแมนวลก่อน
   Blynk.virtualWrite(V0,"ตอนนี้เป็นออโต้ ให้เปลี่ยนเป็นแมนวลก่อน");
    Blynk.virtualWrite(V2,"offBackColor");
  }//else if (auto_vegetable_valve_V10==0)
}//BLYNK_WRITE(V2) //(สวิทช์ปิด-เปิดโซลินอยด์ผัก

/////////////////
void test1()
{
       solenoid_vegetable_led_blynk_v3.on();
//       Blynk.virtualWrite(V0,"string_open");
 //      button_V2.on();
       Blynk.virtualWrite(V2,"color","#23C48E");
       Blynk.virtualWrite(V2,"onLabel","กำลัง เปิด");
       delay(5000);
       solenoid_vegetable_led_blynk_v3.off();
       Blynk.virtualWrite(V2,"color","##04C0F8");
       Blynk.virtualWrite(V2,"offLabel","กำลัง ปิด");
  //     button_V2.off();
       delay(5000);
  
}
/////////////////
void loop() {
     Blynk.run();
     timer.run();

}

ปรากฎว่า void test1 นี้ไม่สามารถเปลี่ยนสี button ได้ นอกจาก เรากดปุ่ม button ในแอพ blynk โดยตรง
ใครทำได้บ้างครับ ถ้าได้ช่วยบอกเทคนิคหน่อยครับ

1 Likes

เปลี่ยนจาก

Blynk.virtualWrite(V2,"color","#23C48E");

เป็น

Blynk.setProperty(V2,"color","#23C48E");

ครับ

ลองแล้วครับ ไม่เปลี่ยนสีครับ V2 เป็น widget button ,

ผมก็ใช้เปลี่ยนสีบ่อยนะครับดูสีด้วยว่ารองรับรึป่าว

รบกวน
ขอโค้ด ที่เปลี่ยน สี button ที่สั่งจาก void ด้วย ครับ
ผมลองแล้วไม่ได้จริงๆ
เอาแบบสั้นๆและได้จริงก็ได้ครับ
ขอบคุณครับ
ตอนนี้ ที่ผมทำได้ แค่ Blynk.virtualWrite(V2,1หรือ 0) V2 คือ button widget ,ที่สามารถสั่งจาก void ได้ โดยไม่แตะที่ปุ่ม blynk ( ไม่ใช้ Blynk_Write)