ESP8266 12E motershield

Gebasseerd op de L293D chip, motor driver. Per moter 4,5 t/m 36 Volt 1,2 Amp aansturing mogelijk. Klinkt leuk 36V maar lijkt me niet raadzaam omdat er vermoedelijk veel warmte vrij komt.
De dipswitcht naast de resetknop geeft de mogelijkheid om de ESP8266 te voeden met de spanning voor de motoren. Wil je dat niet dan moet je de dipswitch verbinden tussen NC en Vin. Je moet dan een exstra voeding hebben voor de Esp8266.
Alle pinnen worden netjes op het board getoond. D9 en D10 als RX en TX.
Dan nogmaals en daaronder 3.3V en Gnd
AD en AO en GND
EN en Gnd en RST
Reset
Vin Vm NC

De datasheet afbeelding geeft netjes alle namen van de print en hun functie aan.
Voltage controle voor de ESP8266 tussen de 4,5 en 9 V. Is dus de regelaar van de ESP8266, op het shield zit geen spanning regelaar.
Die L293D heeft een paar mogelijkheden, je kan een PWM signaal aanleveren en per moter de richting bepalen. Je kan ook die PWM hardware matig hoog houden en de (PB) PWM signalen per moter richting geven. Een andere mogelijkheid is de PB kanalen per moter inverteren aan elkaar en de PWM aansturen. Met andere woorden het is handig als ik weet hoe een en ander aangesloten is. Ondanks heel veel zoeken op het internet, vond ik geen schema maar wel een data sheet.
Ik vond:
D1 snelheid en D3 richting zijn de aansturingen voor moter 1
D2 snelheid en D4 richting zijn de aansturingen voor moter 2
Met de bovenstaande tekst wordt D3 gebruikt en dat lukt slecht want D3 wordt bij de ESP8266 intern gebruikt.
Bij instructables.com lees ik dat die D1 t/m D4 voor de Arduino bedoeld is (vreemd als het shield voor de ESP8266 bedoeld is) en je:
voor moter A GPIO 1 (D10) en GPIO 3 (D9)
voor moter B GPIO 2 (D4) en GPIO 4 (D2)
moet gebruiken bij de nodeMcu. Gewoon + op de ene en - op de ander of andersom als je van rijrichting wil veranderen.
En uiteindelijk vind ik de datasheet en die komt met:
GPIO5 = D1 moter A PWM snelheid
GPIO4 = D2 moter B PWM snelheid
GPIO0 = D3 moter A richting
GPIO2 = D4 moter B richting
GPIO0 (D3) wordt ook gebruikt om de bios te flashen. Het blijkt dat dit geen problemen geeft.
Blijft er over voor een I2C:
Wire.begin(D5,D6)

Pin 5 en pin 4 van de L293D zijn gescheiden door een inverter. Stuurt de ESP D3, een 1 dan draait motor 1 de enekant op en bij een nul de andere kant. ESP D1 bepaalt de snelheid via pin 3 van de L293.
Pin 15 en pin 10 van de L293D zijn ook gescheiden door een inverter. Stuurt de ESP D4, een 1 dan draait motor 1 de enekant op en bij een nul de andere kant. ESP D2 bepaalt de snelheid via pin 6 van de L293.

Gebruik je 2 onafhankelijke voedingen voor de motoren en de aansturing dan moet je de verbindingsbrug(jumper) tussen VM en Vin verwijderen.
Er zit een power switch op.

De esp8266 van mijn mijn rupsbot ga ik voeden met een powerpack is ca 4,7V. Mijn motoren met 4x een AA = 6V.


Bij het aansluiten even goed kijken dat de radioantene kant aan de goede kant van het shield zit. Dan kloppen de pinnen.
Okee, nu ik de hardware weet kan ik beginnen met de software voor de ESP866.


/* Rupscontroller
* Ontwerp P.Hogenstijn
* http://www.eenander.eu/9ESP8266Motorshield.php
*/
#include <Wire.h>
#include <ESP8266WiFi.h>
#define motorAS 5 // PWM A
#define motorAR 0 // links 0= vooruit /1 = achteruit
#define motorBS 4 // PWM B
#define motorBR 2 // rechts 0= vooruit /1 = achteruit6245
#define motorSN 500 // motor snelheid

String opdracht;

WiFiServer server(80);
const char WiFiAPPSK[] = "rupscontroller"; // wifi wachtwoord


//-----------------------------------------
void setup() {
Serial.begin(115200); // USB serialmonitor
server.begin();
setupWiFi();
pinMode(motorAS, OUTPUT);
pinMode(motorAR, OUTPUT);
pinMode(motorBS, OUTPUT);
pinMode(motorBR, OUTPUT);
digitalWrite(16,0);digitalWrite(motorAS,0);digitalWrite(motorAR,0);digitalWrite(motorBS,0);digitalWrite(motorBR,0); // all stop
Serial.println(" Rupsvoertuig bediening");
Serial.println(" Versie 1.1");
Serial.println(" WiFi rupsvoertuig controller webpagina http://192.168.4.1");
Serial.println(" 9 knops versie met terug koppeling");
Serial.println(" Voor ESP8266 motorshield.");
Serial.println(" Web based.");
Serial.println(" Ontwerp P.Hogenstijn");

}
//--------------------------------------------
void loop()
{
WiFiClient client = server.available();
if (!client)
{
return;
}
// als er een webpagina bezoeker is:
client.flush();
// maak een website
String s = "HTTP/1.1 200 OK\r\n";
s += "Content-Type: text/html\r\n\r\n";
s += "<!DOCTYPE HTML>\r\n\r\n";
s += "<head>";
s += "<title>ESP accespoint";
s += "<meta http-equiv='refresh' content='7' url='http://192.168.4.1'/>";
s += "</head>";
s += "<body bgcolor=#000000>";
s += "<svg height='1000' width='1050'>";
s += " <g>";

// onderwagen

s += "<a href='VOOR'><rect x='150' y='50' width='150' height='50' style='fill:rgb(255,255,0);stroke-width:2;stroke:rgb(255,255,255)'/></a>";

s += "<a href='LVOOR'><rect x='100' y='150' width='100' height='50' style='fill:rgb(255,255,0);stroke-width:2;stroke:rgb(255,255,255)'/></a>";
s += "<a href='RVOOR'><rect x='250' y='150' width='100' height='50' style='fill:rgb(255,255,0);stroke-width:2;stroke:rgb(255,255,255)'/></a>";

s += "<a href='LPLAATS'><rect x='50' y='250' width='75' height='50' style='fill:rgb(255,255,0);stroke-width:2;stroke:rgb(255,255,255)'/></a>";
s += "<a href='STOP'><rect x='150' y='250' width='150' height='50' style='fill:rgb(255,255,0);stroke-width:2;stroke:rgb(255,255,255)'/></a>";
s += "<a href='RPLAATS'><rect x='325' y='250' width='75' height='50' style='fill:rgb(255,255,0);stroke-width:2;stroke:rgb(255,255,255)'/></a>";

s += "<a href='LACHTER'><rect x='100' y='350' width='100' height='50' style='fill:rgb(255,255,0);stroke-width:2;stroke:rgb(255,255,255)'/></a>";
s += "<a href='RACHTER'><rect x='250' y='350' width='100' height='50' style='fill:rgb(255,255,0);stroke-width:2;stroke:rgb(255,255,255)'/></a>";

s += "<a href='ACHTER'><rect x='150' y='450' width='150' height='50' style='fill:rgb(255,255,0);stroke-width:2;stroke:rgb(255,255,255)'/></a>";


// text bij knoppen
s += "<text x='225' y='75' fill='black' >⇑</text>";
s += "<text x='150' y='175' fill='black' >⇐</text>";
s += "<text x='300' y='175' fill='black' >⇒</text>";
s += "<text x='100' y='275' fill='black' >⇓⇑</text>";
s += "<text x='225' y='275' fill='black' >STOP </text>";
s += "<text x='350' y='275' fill='black' >⇑⇓</text>";
s += "<text x='150' y='375' fill='black' >⇐</text>";
s += "<text x='300' y='375' fill='black' >⇒</text>";
s += "<text x='225' y='475' fill='black' >⇓</text>";


// lees terugkoppeling en voer dat uit
String req = client.readStringUntil('\r');
Serial.print(" Verzoek= ");
Serial.print(req);
opdracht = (req.substring(5, 8));
Serial.print(" opdracht= ");
Serial.println(opdracht);

// max snelheid is 1024
s +="<text x='150' y='550' fill='black' >-------------</text>";
if (opdracht=="VOO"){analogWrite(motorAS,motorSN);digitalWrite(motorAR,0);analogWrite(motorBS,motorSN);digitalWrite(motorBR,0);s +="<text x='150' y='550' fill='white' >vooruit</text>";}

if (opdracht=="LVO"){analogWrite(motorAS,0);digitalWrite(motorAR,0);analogWrite(motorBS,motorSN);digitalWrite(motorBR,0);s +="<text x='150' y='550' fill='white' >linksvooruit</text>";}
if (opdracht=="RVO"){analogWrite(motorAS,motorSN);digitalWrite(motorAR,0);analogWrite(motorBS,0);digitalWrite(motorBR,0);s +="<text x='150' y='550' fill='white' >rechtsvooruit</text>";}

if (opdracht=="LPL"){analogWrite(motorAS,motorSN);digitalWrite(motorAR,0);analogWrite(motorBS,motorSN);digitalWrite(motorBR,1);s +="<text x='150' y='550' fill='white' >spot linksom</text>";}
if (opdracht=="STO"){analogWrite(motorAS,0);digitalWrite(motorAR,0);analogWrite(motorBS,0);digitalWrite(motorBR,0);s +="<text x='150' y='550' fill='white' >stop</text>";}
if (opdracht=="RPL"){analogWrite(motorAS,motorSN);digitalWrite(motorAR,1);analogWrite(motorBS,motorSN);digitalWrite(motorBR,0);s +="<text x='150' y='550' fill='white' >spot rechtsom</text>";}

if (opdracht=="LAC"){analogWrite(motorAS,0);digitalWrite(motorAR,0);analogWrite(motorBS,motorSN);digitalWrite(motorBR,1);s +="<text x='150' y='550' fill='white' >linksachteruit</text>";}
if (opdracht=="RAC"){analogWrite(motorAS,motorSN);digitalWrite(motorAR,1);analogWrite(motorBS,0);digitalWrite(motorBR,0);s +="<text x='150' y='550' fill='white' >rechtsachteruituit</text>";}

if (opdracht=="ACH"){analogWrite(motorAS,motorSN);digitalWrite(motorAR,1);analogWrite(motorBS,motorSN);digitalWrite(motorBR,1);s +="<text x='150' y='550' fill='white' >achteruit</text>";}

opdracht="";
// toon de website
client.print(s);
delay(1);
}
//==============================================================
void leesdata()
{
// kijk of er een verbinding is
WiFiClient client = server.available();
if (!client)
{
return;
}
// lees de eerste regel van de opdracht
String req = client.readStringUntil('\r');
Serial.print("Verzoek= ");
Serial.print(req);
opdracht = (req.substring(5, 8));
Serial.print(" opdracht= ");
Serial.println(opdracht);
client.flush();
}
//==============================================================
void setupWiFi()
{
WiFi.mode(WIFI_AP);
Serial.println("setup WiFi");
//Om een unieke naam te maken komen er 2 cijfers van het mac adres bij de naam
uint8_t mac[WL_MAC_ADDR_LENGTH];
WiFi.softAPmacAddress(mac);
Serial.print("Zoek naar http://192.168.4.1 ");
String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
macID.toUpperCase();
String AP_NameString = "rupsvoertuig_controller" + macID;
Serial.print("ESP8266MotorShield");
Serial.println(macID);
Serial.print(" ww=");
Serial.println(WiFiAPPSK);
Serial.println("");
char AP_NameChar[AP_NameString.length() + 1];
memset(AP_NameChar, 0, AP_NameString.length() + 1);

for (int i=0; i<AP_NameString.length(); i++)
AP_NameChar[i] = AP_NameString.charAt(i);

WiFi.softAP(AP_NameChar, WiFiAPPSK);
}

De ESP8266 bied nu een scherm aan met 9 knoppen waarmee het motorshield bestuurd kan worden. De laatste opdracht wordt onder getoond. Er kan maar 1 opdracht tegelijk uitgevoerd worden.

bronnen:
smartarduino
https://www.tindie.com
https://www.gitbook.com
http://www.instructables.com
http://www.instructables.com smart car
arduino.esp8266.com
esp8266.com
iot-playground.com
cdn.hackaday.io - datasheet
roboindia.com

ESP8266/NodeMCU WiFi RC Car


t.co
twitter.com/ESP8266