//ESP32_wrover_wifi-crane
//Thanks to mukujii.sakura.ne.jp/esp1.html
//Thanks to www.freenove.com
//KeyStudio 4RelayB M1,M2
//Stepper1 28BYJ-48 5VDC, Stepper2 28BYJ-48 5VDC
//M1 Tamiya No.189, M2 Tamiya No.189
#include <Wire.h>
#include <SSD1306Wire.h>
SSD1306Wire display(0x3c,21,22);
int outPorts1[]={14,27,26,25};
int outPorts2[]={15,2,4,5};
#include <WiFi.h>
const char* ssid = "";
const char* password = "";
const char html[] =
"<!DOCTYPE html><html lang='ja'><head><meta charset='UTF-8'>\
<style>input {font-size:16pt;margin:16px;width:160px;}\
div {font-size:32pt;color:blue;text-align:center;width:600px;border:medium solid black;}</style>\
<title>ESP32wrover WiFiCrane</title></head>\
<body><div><p>WiFi_Controller</p>\
<form method='get'>\
<input type='submit' name='le' value='Left' />\
<input type='submit' name='fo' value='Forward' />\
<input type='submit' name='ri' value='Right' /><br>\
<input type='submit' name='jd' value='JibDown' />\
<input type='submit' name='st' value='Stop' />\
<input type='submit' name='ju' value='JibUp' /><br> \
<input type='submit' name='lr' value='LeftRotate' />\
<input type='submit' name='ba' value='Back' />\
<input type='submit' name='rr' value='RighRotate' /><br><br>\
</form></div></body></html>";
void Forward()
{
digitalWrite(18,HIGH);
digitalWrite(19,LOW);
digitalWrite(13,HIGH);
digitalWrite(23,LOW);
}
void Back()
{
digitalWrite(18,LOW);
digitalWrite(19,HIGH);
digitalWrite(13,LOW);
digitalWrite(23,HIGH);
}
void MotorStop()
{
digitalWrite(18,LOW);
digitalWrite(19,LOW);
digitalWrite(13,LOW);
digitalWrite(23,LOW);
}
void Right()
{
digitalWrite(18,LOW);
digitalWrite(19,HIGH);
digitalWrite(13,HIGH);
digitalWrite(23,LOW);
delay(1000);
Forward();
}
void Left()
{
digitalWrite(18,HIGH);
digitalWrite(19,LOW);
digitalWrite(13,LOW);
digitalWrite(23,HIGH);
delay(1000);
Forward();
}
void JibUp()
{
moveAngle1(false, 15, 3);
delay(500);
moveAngle1(false, 0, 3);
delay(1000);
}
void JibDown()
{
moveAngle1(true, 15, 3);
delay(500);
moveAngle1(true, 0, 3);
delay(1000);
}
void RightRotate()
{
moveAngle2(true, 30, 3);
delay(500);
moveAngle2(true, 0, 3);
delay(1000);
}
void LeftRotate()
{
moveAngle2(false, 30, 3);
delay(500);
moveAngle2(false, 0, 3);
delay(1000);
}
void moveSteps1(bool dir, int steps, byte ms) {
for (unsigned long i = 0; i < steps; i++) {
moveOneStep1(dir);
delay(constrain(ms,3,20));
}
}
void moveOneStep1(bool dir) {
static byte out = 0x01;
if (dir) {
out != 0x08 ? out = out << 1 : out = 0x01;
}
else {
out != 0x01 ? out = out >> 1 : out = 0x08;
}
for (int i = 0; i < 4; i++) {
digitalWrite(outPorts1[i], (out & (0x01 << i)) ? HIGH : LOW);
}
}
void moveAround1(bool dir, int turns, byte ms){
for(int i=0;i<turns;i++)
moveSteps1(dir,32*64,ms);
}
void moveAngle1(bool dir, int angle, byte ms){
moveSteps1(dir,(angle*32*64/360),ms);
}
void moveSteps2(bool dir, int steps, byte ms) {
for (unsigned long i = 0; i < steps; i++) {
moveOneStep2(dir);
delay(constrain(ms,3,20));
}
}
void moveOneStep2(bool dir) {
static byte out = 0x01;
if (dir) {
out != 0x08 ? out = out << 1 : out = 0x01;
}
else {
out != 0x01 ? out = out >> 1 : out = 0x08;
}
for (int i = 0; i < 4; i++) {
digitalWrite(outPorts2[i], (out & (0x01 << i)) ? HIGH : LOW);
}
}
void moveAround2(bool dir, int turns, byte ms){
for(int i=0;i<turns;i++)
moveSteps2(dir,32*64,ms);
}
void moveAngle2(bool dir, int angle, byte ms){
moveSteps2(dir,(angle*32*64/360),ms);
}
WiFiServer server(80);
void setup()
{
display.init();
display.setFont(ArialMT_Plain_24);
display.drawString(0,0,"Be carefull");
display.setFont(ArialMT_Plain_24);
display.drawString(0,20,"We are");
display.setFont(ArialMT_Plain_24);
display.drawString(0,40,"working");
display.display();
for(int i=0;i<4;i++)
{
pinMode(outPorts1[i],OUTPUT);
}
for(int i=0;i<4;i++)
{
pinMode(outPorts2[i],OUTPUT);
}
pinMode(18,OUTPUT);
pinMode(19,OUTPUT);
pinMode(13,OUTPUT);
pinMode(23,OUTPUT);
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop()
{
WiFiClient client = server.available();
if (client) {
Serial.println("New Client.");
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n') {
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
client.print(html);
client.println();
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
if (currentLine.endsWith("GET /?fo")) {
Forward();
}
if (currentLine.endsWith("GET /?le")) {
Left();
}
if (currentLine.endsWith("GET /?ri")) {
Right();
}
if (currentLine.endsWith("GET /?ba")) {
Back();
}
if (currentLine.endsWith("GET /?jd")) {
JibDown();
}
if (currentLine.endsWith("GET /?ju")) {
JibUp();
}
if (currentLine.endsWith("GET /?st")) {
MotorStop();
}
if (currentLine.endsWith("GET /?lr")) {
LeftRotate();
}
if (currentLine.endsWith("GET /?rr")) {
RightRotate();
}
}
}
client.stop();
Serial.println("Client Disconnected.");
}
}