Kairi Kozuma / ESP8266_wifi_robot

Dependencies:   Motordriver Servo mbed-dev mbed-rtos

Fork of ESP8266_wifi_robot by Kairi Kozuma

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ESP8266.cpp Source File

ESP8266.cpp

00001 #include "ESP8266.h"
00002 
00003 
00004 ESP8266::ESP8266(PinName tx, PinName rx, PinName reset, char * SSID, char * password) :
00005     _esp(tx, rx), _reset(reset) {
00006     strcpy(_ssid, SSID);
00007     strcpy(_pwd, password);        
00008 }
00009  
00010 //  Setup for ESP8266
00011 void ESP8266::setup() {
00012     
00013     /* Set wifi mode */
00014     send("wifi.setmode(wifi.STATION)\r\n");
00015     
00016     /* Set SSID and password */
00017     strcpy(_snd, "wifi.sta.config(\"");
00018     strcat(_snd, _ssid);
00019     strcat(_snd, "\",\"");
00020     strcat(_snd, _pwd);
00021     strcat(_snd, "\")\r\n");
00022     send();
00023     
00024     wait(7);
00025 
00026     /* Set up HTTP server */
00027     send("srv=net.createServer(net.TCP)\r\n");
00028     send("srv:listen(80,function(conn)\r\n");
00029     send("conn:on(\"receive\",function(conn,payload)\r\n");
00030     send("print(payload:match(\"Z%u\"))\r\n");
00031     send("conn:send(\"<!DOCTYPE html>\")\r\n");
00032     send("conn:send(\"<html>\")\r\n");
00033     send("conn:send(\"<h1>Control Robot</h1>\")\r\n");
00034     send("conn:send('<form action=\"\" method=\"POST\">\r\n')");
00035     send("conn:send('<input type=\"submit\" name=\"ZF\" value=\"Forward\">\r\n')");
00036     send("conn:send('<input type=\"submit\" name=\"ZB\" value=\"Back\">\r\n')");
00037     send("conn:send('<input type=\"submit\" name=\"ZL\" value=\"Left\">\r\n')");
00038     send("conn:send('<input type=\"submit\" name=\"ZR\" value=\"Right\">\r\n')");
00039     send("conn:send('<input type=\"submit\" name=\"ZS\" value=\"Servo Left\">\r\n')");
00040     send("conn:send('<input type=\"submit\" name=\"ZP\" value=\"Servo Right\">\r\n')");
00041     send("conn:send('</form>\r\n')");
00042     send("conn:send(\"</html>\")\r\n"); 
00043     send("end)\r\n");
00044     send("conn:on(\"sent\",function(conn) conn:close() end)\r\n");
00045     send("end)\r\n");
00046     wait(10);
00047 }
00048  
00049 void ESP8266::send()
00050 {
00051     _esp.printf("%s", _snd);
00052     Thread::wait(500);
00053 }
00054 
00055 void ESP8266::send(char * command) {
00056     _esp.printf("%s", command);
00057     Thread::wait(500);
00058 }
00059 
00060 void ESP8266::reset() {
00061     _reset = 0;
00062     wait(1); /* Not RTOS friendly */
00063     _reset = 1;
00064 }
00065 
00066 void ESP8266::baud(int baudrate) {
00067     char buffer[32];
00068     sprintf(buffer, "AT+CIOBAUD=%d\r\n", baudrate);
00069     send(buffer);
00070     
00071     _esp.baud(baudrate);
00072 }
00073 
00074 void ESP8266::getIP() {
00075     send("\r\nprint(wifi.sta.getip())\r\n");  
00076 }
00077 
00078 void ESP8266::getMAC() {
00079     send("\r\nprint(wifi.sta.getmac())\r\n");  
00080 }
00081 
00082 int ESP8266::putc(int c) {
00083     return _esp.putc(c);
00084 }
00085 
00086 int ESP8266::getc() {
00087     return _esp.getc();
00088 } 
00089     
00090 int ESP8266::readable() {
00091     return _esp.readable();
00092 }
00093 int ESP8266::writeable() {
00094     return _esp.writeable();
00095 }
00096 
00097 void ESP8266::attach(Callback< void()> func, SerialBase::IrqType type) {
00098     _esp.attach(func, type);
00099 }