สวัสดีครับ ตอนนี่ผมกำลังทำโปรเจ็คเกี่ยวกับตู้คีบตุ๊กตาควบคุมผ่าน smartphone แต่ตอนนี่ติดปัญหาที่ว่าการเริ่มต้นการเชื่อมต่อใหม่ มีเวลาในการใช้ระบบควบคุม90วิ ครับ พอครบ90วโปรแกรมตัดจริง แต่พอจะเริ่มใช้หรือเริ่มเล่นใหม่ผมได้ทำการปล่อยฮอตสปอตให้กับบอร์ด บอร์ดเชื่อมต่อ แต่โปรแกรม blynk ไม่ทำการเชื่อมต่อใหม่ให้ เป็นเพราะอะไรครับ รบกวนสอบถามพี่ๆหน่อยนะครับ
Codeที่ใช้
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //ถ้าจอไม่แสดงผล ให้ลองเปลี่ยน 0x3F เป็น 0x27
int lifetime = 10;
char auth[] = "98ec6bc2cda741ecb16e37de9f886705";
char ssid[] = "wirayut";
char pass[] = "11223344";
Servo servo;
BLYNK_WRITE(V3) {
servo.write(param.asInt());
}
void setup() {
lcd.begin(); //lcd เริ่มทำงาน
lcd.setCursor(0,0); //ตั้งค่าให้อยู่ที่บรรทัดที่ 1 ตัวที่ 1 *
lcd.print("Time(second)");//แสดงข้อความในวงเล็บ
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
servo.attach(15); // 15 means D8 pin of ESP8266
}
void loop(){
if(WL_CONNECTED);{ // ตรวจสอบถ้าแอพเริ่มทำงาน
Blynk.run();//แอพblynkเริ่มการททำงาน
lifetime -= 1;//ค่าของตัวแปร ลบที่ละ1
delay(1000);
lcd.setCursor(0,1);//ตั้งค่าให้อยู่ที่บรรทัดที่ 1 ตัวที่ 1 *
lcd.print(lifetime);//แสดงค่าของตัวแปร lifetime ออกมา
}
if (lifetime <= 0){//ถ้าlifetime มีค่าน้อยกว่าหรือเท่ากับ 0
lcd.clear(); //lcd clearหน้าจอทั้งหมด
ESP.restart();//แอพหยุดการทำงาน
Blynk.run();
}
}
Qrcodeโปรแกรม
1 Likes
Remy_Martin
(Permpol Thanapunnamas)
2
90 วินาที นี้หมายถึงการจับเวลาของตู้เกมใช่ป่ะครับ พอครบก็ให้เริ่มให้ด้วยคำสั่ง restart
ใช่ครับพี่ เป็นการจับเวลาของตู้เกมผมโดยให้การทำงานว่าครบ90วิ โปรแกรมหลุด พอจะเล่นใหม่ก้แค่ปล่อยฮอตสปอตออกมาใหม่
1 Likes
Remy_Martin
(Permpol Thanapunnamas)
4
เบื้องต้นลองเพิ่มตามโค้ตนี้ก่อนครับ
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //ถ้าจอไม่แสดงผล ให้ลองเปลี่ยน 0x3F เป็น 0x27
int lifetime = 10;
char auth[] = "98ec6bc2cda741ecb16e37de9f886705";
char ssid[] = "wirayut";
char pass[] = "11223344";
Servo servo;
BLYNK_WRITE(V3) {
servo.write(param.asInt());
}
void setup() {
lcd.begin(); //lcd เริ่มทำงาน
lcd.setCursor(0,0); //ตั้งค่าให้อยู่ที่บรรทัดที่ 1 ตัวที่ 1 *
lcd.print("Time(second)");//แสดงข้อความในวงเล็บ
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
Blynk.connect(); // for a local server requiring WiFi connection
servo.attach(15); // 15 means D8 pin of ESP8266
}
void loop(){
if(WL_CONNECTED);{ // ตรวจสอบถ้าแอพเริ่มทำงาน
Blynk.run();//แอพblynkเริ่มการททำงาน
lifetime -= 1;//ค่าของตัวแปร ลบที่ละ1
delay(1000);
lcd.setCursor(0,1);//ตั้งค่าให้อยู่ที่บรรทัดที่ 1 ตัวที่ 1 *
lcd.print(lifetime);//แสดงค่าของตัวแปร lifetime ออกมา
}
if (lifetime <= 0){//ถ้าlifetime มีค่าน้อยกว่าหรือเท่ากับ 0
lcd.clear(); //lcd clearหน้าจอทั้งหมด
ESP.restart();//แอพหยุดการทำงาน
Blynk.run();
}
}
อาการเหมือนเดิมครับพี่ พอครบเวลา บอร์ดหลุด แต่ พอปล่อยฮอตสปอตให้บอร์ดใหม่ ก็ไม่เชื่อมาต่อ
1 Likes
Remy_Martin
(Permpol Thanapunnamas)
6
เดียวเย็นๆ แก้ให้ใหม่ครับ
Remy_Martin
(Permpol Thanapunnamas)
7
แคปดีบัคมันมาดูด้วยจะดีมากนะ จะได้แก้กันถูกทาง
Remy_Martin
(Permpol Thanapunnamas)
9
ตามนี้ครับ
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //ถ้าจอไม่แสดงผล ให้ลองเปลี่ยน 0x3F เป็น 0x27
int lifetime = 10;
char auth[] = "98ec6bc2cda741ecb16e37de9f886705";
char ssid[] = "wirayut";
char pass[] = "11223344";
Servo servo;
BLYNK_WRITE(V3) {
servo.write(param.asInt());
}
void setup() {
lcd.begin(); //lcd เริ่มทำงาน
lcd.setCursor(0,0); //ตั้งค่าให้อยู่ที่บรรทัดที่ 1 ตัวที่ 1 *
lcd.print("Time(second)");//แสดงข้อความในวงเล็บ
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
Blynk.connect(); // for a local server requiring WiFi connection
Serial.println("Connecting Wifi...");
if(wifiMulti.run() == WL_CONNECTED) {
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
servo.attach(15); // 15 means D8 pin of ESP8266
timer.setInterval(15000, reconnectBlynk); // check every 15 seconds if we are connected to the server
setSyncInterval(10 * 30); // Sync interval in seconds (10 minutes)
SetTimeIntervals();
}
void loop(){
if (!Blynk.connected()) {
if(Blynk.connect()) {
BLYNK_LOG("Reconnected");
} else {
BLYNK_LOG("Not reconnected");
}
}
if(WL_CONNECTED);{ // ตรวจสอบถ้าแอพเริ่มทำงาน
Blynk.run();//แอพblynkเริ่มการททำงาน
lifetime -= 1;//ค่าของตัวแปร ลบที่ละ1
delay(1000);
lcd.setCursor(0,1);//ตั้งค่าให้อยู่ที่บรรทัดที่ 1 ตัวที่ 1 *
lcd.print(lifetime);//แสดงค่าของตัวแปร lifetime ออกมา
}
if (lifetime <= 0){//ถ้าlifetime มีค่าน้อยกว่าหรือเท่ากับ 0
lcd.clear(); //lcd clearหน้าจอทั้งหมด
ESP.restart();//แอพหยุดการทำงาน
Blynk.run();
}
}
ถ้าไม่ได้ให้แคป ดีบัคตอนนั้นมาดูด้วยครับ
ด้านบนต้องประกาศไลบลารี่อะไรเพิ่มไหมครับมันขึ่นแบบนี่
1 Likes
Remy_Martin
(Permpol Thanapunnamas)
11
นี้คือสาเหตุที่มันไม่ต่อ blynk ครับ มันรีบูตคัวเองแล้วค้าง ติด wdt reset
Remy_Martin
(Permpol Thanapunnamas)
12
ลองแก้ตามนี้ครับน่าจะผ่านละ
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //ถ้าจอไม่แสดงผล ให้ลองเปลี่ยน 0x3F เป็น 0x27
int lifetime = 10;
bool lock = false;
char auth[] = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
char ssid[] = "XXXXXXX";
char pass[] = "00000000";
Servo servo;
BLYNK_WRITE(V3) {
servo.write(param.asInt());
}
void setup() {
wdt_disable();
lcd.begin(); //lcd เริ่มทำงาน
lcd.setCursor(0,0); //ตั้งค่าให้อยู่ที่บรรทัดที่ 1 ตัวที่ 1 *
lcd.print("Time(second)");//แสดงข้อความในวงเล็บ
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
servo.attach(15); // 15 means D8 pin of ESP8266
lock = false;
}
void loop(){
ESP.wdtDisable();
ESP.wdtEnable(WDTO_8S);
if(WL_CONNECTED);{ // ตรวจสอบถ้าแอพเริ่มทำงาน
Blynk.run();//แอพblynkเริ่มการททำงาน
lifetime -= 1;//ค่าของตัวแปร ลบที่ละ1
delay(1000);
lcd.setCursor(0,1);//ตั้งค่าให้อยู่ที่บรรทัดที่ 1 ตัวที่ 1 *
lcd.print(lifetime);//แสดงค่าของตัวแปร lifetime ออกมา
Serial.println(lifetime); // used for debugging
}
if (lifetime == 0){//ถ้าlifetime มีค่าน้อยกว่าหรือเท่ากับ 0
lcd.clear(); //lcd clearหน้าจอทั้งหมด
ESP.wdtFeed();
ESP.wdtDisable(); //ปิดการทำงาน
ESP.restart();//แอพหยุดการทำงาน
ESP.wdtEnable(WDTO_8S);
}
//}
}
นี้ผลลัพธ์ครับ
ตอนนี่ได้ผลดีเลยครับพี่ แต่ว่า มันติดตรงที่ว่า พอเวลาหมดปุ้ปมันนับเวลาต่อทันที่ ผมเลยจะเขียนdelay(5000)วิ ไว้ไม่ให้มันนับต่อ เพื่อเวลาไว้มห้ผมปิดฮอตสปอต
1 Likes
Remy_Martin
(Permpol Thanapunnamas)
14
จริงๆ แล้วเราไม่ควรเขียนให้มัน restart ตัวเองใหม่นะ มันตรงๆ เกินไป ควรเขียนให้มันรอปุ่ม start แทนแล้วจับเวลา พอหมดเวลาก็รอกดปุ่ม start เพื่อเริ่มอีกครั้ง ครับ

ใช้คำสั่งไหนในการรอแทนคำว่ารีสตาทอะครับ reconnect หรือเราสร้างมาอีกปุ่มเพื่อใช้ในการเปนแมนนวลให้การสตาทอะครับ
1 Likes
Remy_Martin
(Permpol Thanapunnamas)
16
เพิ่มมาอีกปุ่มเลยครับ แทนการหลอดเหรียญของตู้
พี่ครับตอนนี่ผมทำได้แล้วนะครับโดยผมไม่ได้ใช้ปุ่มเพิ่มขึ้นมา แต่ใช้การ ให้โปรแกรมdisconnectก่อน แล้วรอ5วิ esprestarใหม่ครับ พี่ว่าเวิคไหมครับ 
1 Likes
Remy_Martin
(Permpol Thanapunnamas)
18
จริงๆ ไม่ต้อง disconnect ก่อนก็ได้นะ คือหลักการไม่ควร discnnect เลย แค่ให้มันวนอยู่ใน void loop รอกด ปุ่ม start ค่อยนับ พอจบก็ออกจาก if มารอทำใหม่ครับ
ผมกลัวในเรื่องของการพรีเซนงานนะคับพี่ เผื่ออาจารย์เขาถามว่าแล้วถ้าเราไม่กดปุ่มstart โปรแกรมไม่จับเวลาก็จริง แต่โปรแกรมมันทำงานได้ตลอดอะคับ
Remy_Martin
(Permpol Thanapunnamas)
20
สมมติว่า เราเขียนโปรแกรมไว้แบบนี้
void loop{
if( SW == high ){
//Main program
}
}
ถ้าเราไม่กด sw ยังไงโปรแกรมก็จะไม่เข้าไปทำงานใน main program แน่นอนครับ