2022年8月21日日曜日

ESP32 wrover WiFi crane


 










//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.");

   }

}

0 件のコメント:

コメントを投稿