Wifi controlled robot that uses ESP8266 wifi chip.

Dependencies:   Motordriver Servo mbed-dev mbed-rtos

Fork of ESP8266_wifi_robot by Kairi Kozuma

Revision:
0:df754b773321
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ESP8266.cpp	Sat Oct 29 15:35:26 2016 +0000
@@ -0,0 +1,99 @@
+#include "ESP8266.h"
+
+
+ESP8266::ESP8266(PinName tx, PinName rx, PinName reset, char * SSID, char * password) :
+    _esp(tx, rx), _reset(reset) {
+    strcpy(_ssid, SSID);
+    strcpy(_pwd, password);        
+}
+ 
+//  Setup for ESP8266
+void ESP8266::setup() {
+    
+    /* Set wifi mode */
+    send("wifi.setmode(wifi.STATION)\r\n");
+    
+    /* Set SSID and password */
+    strcpy(_snd, "wifi.sta.config(\"");
+    strcat(_snd, _ssid);
+    strcat(_snd, "\",\"");
+    strcat(_snd, _pwd);
+    strcat(_snd, "\")\r\n");
+    send();
+    
+    wait(7);
+
+    /* Set up HTTP server */
+    send("srv=net.createServer(net.TCP)\r\n");
+    send("srv:listen(80,function(conn)\r\n");
+    send("conn:on(\"receive\",function(conn,payload)\r\n");
+    send("print(payload:match(\"Z%u\"))\r\n");
+    send("conn:send(\"<!DOCTYPE html>\")\r\n");
+    send("conn:send(\"<html>\")\r\n");
+    send("conn:send(\"<h1>Control Robot</h1>\")\r\n");
+    send("conn:send('<form action=\"\" method=\"POST\">\r\n')");
+    send("conn:send('<input type=\"submit\" name=\"ZF\" value=\"Forward\">\r\n')");
+    send("conn:send('<input type=\"submit\" name=\"ZB\" value=\"Back\">\r\n')");
+    send("conn:send('<input type=\"submit\" name=\"ZL\" value=\"Left\">\r\n')");
+    send("conn:send('<input type=\"submit\" name=\"ZR\" value=\"Right\">\r\n')");
+    send("conn:send('<input type=\"submit\" name=\"ZS\" value=\"Servo Left\">\r\n')");
+    send("conn:send('<input type=\"submit\" name=\"ZP\" value=\"Servo Right\">\r\n')");
+    send("conn:send('</form>\r\n')");
+    send("conn:send(\"</html>\")\r\n"); 
+    send("end)\r\n");
+    send("conn:on(\"sent\",function(conn) conn:close() end)\r\n");
+    send("end)\r\n");
+    wait(10);
+}
+ 
+void ESP8266::send()
+{
+    _esp.printf("%s", _snd);
+    Thread::wait(500);
+}
+
+void ESP8266::send(char * command) {
+    _esp.printf("%s", command);
+    Thread::wait(500);
+}
+
+void ESP8266::reset() {
+    _reset = 0;
+    wait(1); /* Not RTOS friendly */
+    _reset = 1;
+}
+
+void ESP8266::baud(int baudrate) {
+    char buffer[32];
+    sprintf(buffer, "AT+CIOBAUD=%d\r\n", baudrate);
+    send(buffer);
+    
+    _esp.baud(baudrate);
+}
+
+void ESP8266::getIP() {
+    send("\r\nprint(wifi.sta.getip())\r\n");  
+}
+
+void ESP8266::getMAC() {
+    send("\r\nprint(wifi.sta.getmac())\r\n");  
+}
+
+int ESP8266::putc(int c) {
+    return _esp.putc(c);
+}
+
+int ESP8266::getc() {
+    return _esp.getc();
+} 
+    
+int ESP8266::readable() {
+    return _esp.readable();
+}
+int ESP8266::writeable() {
+    return _esp.writeable();
+}
+
+void ESP8266::attach(Callback< void()> func, SerialBase::IrqType type) {
+    _esp.attach(func, type);
+}