ตัวส่ง//////////
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const char* ssid = "smr1";
const char* password = "555555555";
const char* host = "192.168.4.1";
WiFiClient client;
const int buttonPins[4] = {D1, D2, D3, D4}; // ปุ่มควบคุม
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected!");
for(int i=0;i<4;i++){
pinMode(buttonPins[i], INPUT_PULLUP);
}
}
void loop() {
String command = "stop";
if(digitalRead(D1)==LOW) command = "forward";
else if(digitalRead(D2)==LOW) command = "backward";
else if(digitalRead(D3)==LOW) command = "left";
else if(digitalRead(D4)==LOW) command = "right";
else command = "stop";
if(WiFi.status()==WL_CONNECTED){
HTTPClient http;
String url = String("http://") + host + "/control?cmd=" + command;
http.begin(client, url);
int code = http.GET();
if(code>0) Serial.println("Sent: "+command);
else Serial.println("Error sending");
http.end();
}
delay(50);
}
ตัวรับ////////////
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
ESP8266WebServer server(80);
const int motorPins[4] = {D5, D6, D7, D8}; // Motor1F, Motor1B, Motor2F, Motor2B
unsigned long lastCommandTime = 0;
const unsigned long TIMEOUT = 1000; // 1 วินาที
void stopMotors() {
for(int i=0;i<4;i++) digitalWrite(motorPins[i], LOW);
}
void setup() {
Serial.begin(115200);
for(int i=0;i<4;i++){
pinMode(motorPins[i], OUTPUT);
digitalWrite(motorPins[i], LOW);
}
WiFi.softAP("smr1", "555555555");
Serial.println("WiFi AP started!");
server.on("/control", [](){
String cmd = server.hasArg("cmd") ? server.arg("cmd") : "stop";
Serial.println("Command: "+cmd);
lastCommandTime = millis(); // อัปเดตเวลาที่ได้รับคำสั่งล่าสุด
stopMotors(); // ปิดมอเตอร์ก่อน
if(cmd=="forward"){
digitalWrite(D5,HIGH); // Motor1 forward
digitalWrite(D7,HIGH); // Motor2 forward
} else if(cmd=="backward"){
digitalWrite(D6,HIGH); // Motor1 backward
digitalWrite(D8,HIGH); // Motor2 backward
} else if(cmd=="left"){
digitalWrite(D6,HIGH); // Motor1 backward
digitalWrite(D7,HIGH); // Motor2 forward
} else if(cmd=="right"){
digitalWrite(D5,HIGH); // Motor1 forward
digitalWrite(D8,HIGH); // Motor2 backward
}
server.send(200,"text/plain","OK");
});
server.begin();
}
void loop() {
server.handleClient();
// ถ้าเกิน TIMEOUT ปิดมอเตอร์
if(millis() - lastCommandTime > TIMEOUT){
stopMotors();
}
}